Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live." ― John Woods
A Code Quality olyan bűvös kulcsszavakon alapul, mint az olvashatóság, az érthetőség, a kiszámíthatóság, a karbantarthatóság, az optimalizáció, a kompatibilitás és a biztonság. A kódolás során fontos odafigyelnünk, hogy az mások számára is egyszerűen megérthető, könnyen bővíthető és alakítható legyen, mindezt a működőképesség elvesztése nélkül.
Ez több, mint puszta kód szépségverseny, hiszen számos gyakorlati haszonnal számolhatunk, ha olyan kódokat állítunk elő, amelyet nem csak mi vagyunk képesek kezelni. A továbbiakban pár hasznos eszközt mutatunk be nektek, amiket mi is előszeretettel használunk fejlesztéseink során.
A kötelezők - amik nélkül a projektünk komoly bajban lenne
PHPLint
A PHPLint a default PHP interpretert használja fájlok szintaktikai ellenőrzésére. Ezt is személyre szabhatjuk egy külön config fájl segítségével. Manapság már elég sok jó IDE van, amik képesek szintaktikai hibákat jelezni, ennek ellenére nem árt, ha egy ilyen tool-t pluszban bekötünk, így még kisebb eséllyel hibázhatunk.
Laravel Blade Linter
A Laravel Blade Linter egy Blade template syntax ellenőrző, amely a template engine által generált PHP fájlokban futtatja le a PHP szintaxis ellenőrzőt. Ismét kevesebb esélyt hagyunk a hibáknak.
Local PHP Security Checker
A Local PHP Security Checker egy fejlesztők által fenntartott adatbázis alapján ellenőrzi, hogy a használt PHP composer dependency-k biztonsága sérülékeny-e. Ezért fontos, hogy az általunk használt lib-ek mindig frissek legyenek.
A nagyágyúk - hogy elérd a lehetetlent, a tökéletes kódot
CodeSniffer
Az első kiemelendő tool a CodeSniffer, amely az előre definiált kódminőség betartatásáért felel. Coding standard dokumentáció alapján működik, amely tartalmazza azokat a szabályokat, amiket az adott projekten dolgozó fejlesztőknek be kell tartaniuk. Dolgozhatunk előre meghatározott szabály halmazokkal, de ha szeretnénk még inkább a projektre szabni, akkor lehetőségünk van saját rule set készítésére.
Az eszköz két scriptet biztosít számunkra. Mindkettő esetében config file segítségével tudjuk kijelölni, hogy a projektünk melyik részét ellenőrizzék. A phpcs a megadott rule set alapján kiadja, hogy pontosan hol történtek a szabályszegések, a phpcbf segítségével pedig ezeknek a 80-90%-át automatikusan ki tudjuk javítani. Arra azonban figyelnünk kell, hogy a komplexebb hibákat nem tudja javítani, ezeket manuálisan kell megtennünk.
PHPStan
A PHPStan egy static analysis tool, amely anélkül analizálja a kódunkat, hogy azt futtatnunk kellene. Alapértelmezett config fájlja a phpstan.neon, ahol ellenőrzési szinteket állíthatunk be, és különböző mélységű vizsgálatokat végezhetünk el a kódon.
Érdekessége, hogy egy baseline fájlt tudunk generálni a visszatérő hibákból, amelyeket a további futásoknál már figyelmen kívül hagy a tool. Így akár egy régebbi nagy projektbe is rögtön be lehet kötni, anélkül, hogy minden egyes hibát kilistáznánk, és foglalkozhatunk az újonnan felbukkanó bug-okkal.
PHPUnit
A PHPUnit tesztek írására és futtatására használható, config file-ja phpunit.xml. A teszteket kategorizálhatjuk különböző testsuite-okba, de az alapvető cél a kódolásnál, hogy mindig minden tesztünk lefusson. Képes code coverage riportok generálására, amelyek megmutatják, kódunk hány százaléka teszt lefedett. Ennek használatához debugger tool szükséges.
A PHPUnit egyik legnagyobb haszna, hogy biztosítja, a kódunk úgy fusson, ahogy azt mi leprogramoztuk. Ezáltal megkönnyíti a kód refaktorálását is, és egy-egy részhez bátrabban tudunk hozzányúlni.
Így használd őket
A Local PHP Security Checker egy command line tool, amit külön szedhetünk le. A többi tool mindegyike felrakható local vagy global composer dependency-ként egyaránt, ezáltal a fejlesztők is futtathatják a saját fejlesztői példányaikon.
Ajánljuk, hogy az általatok használt verziókövető (legyen az GitHub, GitLab vagy Bitbucket) CI/CD workflow-jába is kössétek be.
Az egyes tool-ok hivatalos oldalait mindenhol linkeltük, így ha mélyebben belevetnétek magatokat, ne habozzatok utána olvasni!