![]() |
![]() |
![]()
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: 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%. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 9.10.2025 - 08:02 |