![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 21.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam wszystkich
Szukałem ostatnio jakiegoś narzędzia do statycznej analizy kodu, w szczególności zależy mi na detekcji kilku "konstrukcji" które w 99% wypadków są wynikiem błędu np: * $$zmienna * $obj->$pole * $obj = new Object(), ale Object.php nie był zainkludowany * ostrzerzenie o użyciu lokalnej zmiennej, która nie została zainicjowana Znalazłem takie narzędzie: http://pear.php.net/manual/en/package.php....codesniffer.php. Problem w tym, że przynajmniej w podstawowej wersji, sprawdza zgodność ze standardami kodowania typu, czy każda funkcja poprzedzona jest dokiem. Dla mnie to trochę za mało. Prawdopodobnie część z rzeczy o które mi chodzi da się załatwić pisząc wtyczkę do tego narzędzia, ale może istnieje coś z czym będzie mniej problemów. Czy ktoś słyszał albo miał styczność z takim narzędziem? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Możesz mieć poważny problem ze znalezieniem takiego narzędzia bo:
1. Pierwsze dwa punkty są w pełni poprawnym kodem PHP. 2. Poprawność dwóch ostatnich da się sprawdzić dopiero w czasie wykonywania: A wszystkie tego typu narzędzia dadzą Ci informacje o błędzie jedynie w przypadku, gdy są one tego pewne. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 21.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Wiem, że 1,2 są poprawne tak samo jak konstrukcja
ale można sobie wyobrazic narzędzie które stwierdzi, że otwierająca klamerka nie powinna byc w nowej linii i wyrzuci warninga. Tak samo mogło by ostrzegac przed $$var. Kwestia przyjęcia standardów. Jeżeli chodzi o detekcje klasy to przyjmując założenie, że wszystkie użyte include będą odwoływały się do statycznych ścieżek, jesteś w stanie stwierdzic, czy dana klasa będzie zadeklarowana, czy nie. Mając skrypt podążasz za includami i przy każdym wystąpieniu new [nazwa klasy]() sprawdzasz, czy taka klasa była wcześniej zadeklarowana. Analogicznie można by wykrywac użycie niezainicjowanej zmiennej. Problem z testowaniem przez wykonywanie jest taki, że często podczas wykonywania skryptu nie przechodzisz przez cały kod. W takim wypadku może się okazac, że coś nie działa w nieoczekiwanym momencie. Jedyną skuteczną metodą radzenia sobie z tym są testy jednostkowe, ale wiadomo, że nie zawsze się je pisze i nie zawsze pokrycie jest 100%. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Niczego nie dam sobie za to uciąć, ale raczej nie istnienie nic gotowego co by spełniało Twoje oczekiwania. Potrzebujesz wykryć "brzydkie praktyki", a PHP-owskie narzędzia nadal mają problem z wykrywaniem błędów. (IMG:style_emoticons/default/wink.gif)
1. Część problemów mógłby chyba rozwiązać tokenizer PHP, który wykrywa takie rzeczy jak zmienne zmiennych czy dynamiczne odwoływanie się do nazwy właściwości (przypadki #1 i #2). 2. Jednak tak na prawdę testy jednostkowe to tutaj najłatwiejsze i najstabilniejsze rozwiązanie. Zresztą takie błędy raczej skutkować będą fatal errorami, więc szybko da się je wyłapać ([nie]stety). |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 21.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
A jednak coś znalazłem:
http://www.sonarsource.org/ z wtyczką do PHP http://docs.codehaus.org/display/SONAR/PHP+Plugin Nie spełnia to w prawdzie wszystkich moich oczekiwań, ale część tak. W każdym razie polecam |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 16:11 |