PHPStan to narzędzie, które umożliwia automatyczną statyczną analizę kodu żródłowego. Narzędzie jest bardzo proste w instalacji i konfiguracji: wystarczy wybrać katalog aplikacji, który chcemy przeanalizować, wskazać poziom analizy kodu jaka ma zostać wykonana i po chwili dostajemy szczegółowy raport dotyczące potencjalnych błędów w naszym kodzie.
Jeśli do tej pory jeszcze nie korzystasz ze statycznej analizy kodu w swioch projektach to jest to najlepszy moment i narzędzie od którego powinieneś zacząć.
Czym jest statyczna analiza kodu?
Statyczna analiza kodu to badanie kodu pod kątem błędów składniowych, standardów kodowania i innych typowych błędów (w zależności od konfiguracji) bez uruchamiania adekwatniego kodu. W przypadku PHP jest to o tyle przydane, iż nie dysponujemy kompilatorem kodu żródłowego i błędy w kodzie, który nie jest odpowiednio pokryty testami automatycznymi są bardzo trudne do wykrycia – w skrajnych przypadkach wykrywają / zgłaszają je dopiero użytkownicy końcowi.
Dobierz odpowiedni poziom analizy do swojego projektu
W zależności od typu projektu jaki chcemy analizować, powinniśmy na początku dobrać odpowiedni „poziom” analizy kodu. Im wyższy level tym większą liczbę błędów PHPStan będzie nam raportował. W tej sytuacji dobrze jest zacząć od domyślnego poziomu: 0 i doprowadzić kod do porządku. W kolejnych krokach możemy zwiększać poziom analizy kodu. Ciekawym rozwiązaniem jest możliwość konfiguracji uruchamiania PHPStan jako pre commit hook, dzięki temu analiza będzie uruchamiana automatycznie przed każdym commitem i nie pozwoli na wysłanie zmian, które zawierają błędy. PHPStan sprawdza się również swiętnie jako element CI (ang. Continuous Integration).
PHPStan vs testy jednostkowe
Statycznej analizy kodu nie możemy i nie powinniśmy traktować jako zamiennika dla testów jednostkowych. Tego typu analiza kodu pomaga wykryć błędy na wczesym etapie programowania i pozwala utrzymać odpowiednią jakość bo choćby dobrze pokryty testami kod może zawierać błędy. Każda nowo powstała linia kodu generuje potencjalne bugi, stad dodatkowa pomoc w postaci szybkiej analizy bez koniecznie wykonywania kodu jest tak istotna. Co więcej PHPStan będzie również bardzo przydatny w sytuacji kodu, których nie posiada żadnych testów, ale takich sytuacji należy się zdecydowanie wystrzegać.
Jako ciekawostkę dodam, iż PHPStan dodatkowo oferuje możliwość skonfigurowania przydatnych rozszerzeń dla lepszej analizy testów jednotkowych z PHPUnit, Doctrine2, Symfony czy Laravel.
Projekt jest bardzo intensywnie rozwijany. Najnowsza wersja wymaga conajmniej PHP 7.1 ale dostępne są również wcześniejse wersje, które wspierają np PHP 7.0. Zachęcam do szerszego zapoznania się z tym narzędziem. Oficjalne repozytorium projektu: https://github.com/phpstan/phpstan.