Narzędzia do statycznej analizy kodu PHP
W czasie przeglądu kodu zgłaszanego w pull requestach badamy różne rzeczy, interesuje nas czy kod wykonuje to co powinien, czy jest zgodny z przyjętymi standardami kodowania, nazewnictwem, czy klasy są odpowiednio zaprojektowane i otestowane. Duża część tych zadań polega na sprawdzeniu kodu względem dobrze opisanych reguł (styl kodowania, nazewnictwa, formatowania kodu itd). Zamiast robić to samemu można użyć narzędzi, które szybciej i lepiej wykonają zadanie za nas – zostawiając nam bardziej “miękkie” zadania (których nie umiemy jeszcze sprawdzić automatycznie).
Przykładowe narzędzia
- PHPLOC Bardzo szybkie narzędzie do najprostszej analizy kodu, wylicza kilkadziesiąt metryk pozwalających na ogólne wyrobienie sobie zdania o rozmiarze kodu, jego złożoności, struktury i powiązań między poszczególnymi modułami.
- PHP Mess Detector Wykrywa miejsca w kodzie które grożą problemami w przyszłości. Obsługuje wiele różnych reguł względem których będzie analizować kod z których przygotowano gotowe zestawy takie jak “czysty kod”, “rozmiar kodu”, “projektowanie kodu”, “nazewnictwo”, “nieużywany kod”. PhpStorm ma przygotowane wsparcie do tego narzędzia i może cały czas informować o problematycznych liniach kodu.
- PHP Copy/Paste Detector Jak sama nazwa wskazuje to program do wykrywania kodu wykorzystującego wzorzec CopyPaste’a. Można mu wskazać ile lini musi się zgadzać by uznać kod za skopiowany (np. by nie krzyczał na gettery/settery) czy też próbował wykrywać skopiowany kod w którym zmieniono nazwy zmiennych.
- PHP_CodeSniffer Analizuje kod i zgłasza wszelkie odstępstwa od zdefiniowanego stylu kodowania. Można korzystać z gotowych reguł (np PSR2, Zend, PSR1), łatwo integruje się z PhpStorm i na bieżąco zgłasza znalezione problemy. W pakiecie dostaje się też program phpcbf który potrafi przeformatować kod by był zgodny z wybranym standardem.
Zastosowania
- Automatyczna ocena zmian w kodzie Wpięcie narzędzi do używanego systemu ciągłej integracji pozwala na uzyskanie informacji o zgodności kodu z narzuconymi standardami jeszcze przed rozpoczęciem przeglądu kodu. Patrząc na trend metryk od razu widać czy kod został poprawiony czy wręcz przeciwnie (pamiętajmy o zasadzie skautów). Dzięki temu w czasie przeglądu kodu nie marnujemy czasu na weryfikację zgodności ze standardami kodowania tylko koncentrujemy się na jakości kodu.
- Szybka, wstępna analiza otrzymanego projektu Kiedy dostajemy nowy kod, dzięki narzędziom możemy szybko ocenić jak się będzie z nim pracowało – informacja że mamy dużo klas o niskim poziomie powiązania z licznymi metodami o małej ilości linii i niskiej złożoności cyklomatycznej daje nadzieję że poprzedni programiści wiedzieli co robią i dostaliśmy kod w miarę łatwy w utrzymaniu i rozwijaniu w przyszłości. Od razu mamy też informację o wrażliwych miejscach w których mogą się czaić niespodziewane problemy.
Następnym razem opiszę wraz z podaniem przykładów najnowsze narzędzia dostępne na rynku do analizy statycznej w PHP – phan.