Analiza statyczna to proces analizy oprogramowania bez jego wykonywania. Jest to bardzo dobre i zalecane, ale musisz o tym pamiętać
- różne narzędzia analizy statycznej różnie rozumieją badany kod, stąd mogą sygnalizować (lub nie sygnalizować) różne problemy. Jedno narzędzie może dać czysty raport, a drugie może narzekać na milion rzeczy.
- narzędzie dynamiczne (aby wymienić przykład, pomyśl o valgrind) może znaleźć wiele innych problemów, kosztem poważnego obciążenia zasobów (czas, zużycie pamięci). Wynika to z faktu, że zazwyczaj używasz oprzyrządowanej wersji oprogramowania. Zauważ, że będąc w pewien sposób instrumentowanym (zamień swój malloc na malloc debugujący), nie jest on dokładnie identyczny z twoim oprogramowaniem (jak widać z czasów wykonania)
Oba te podejścia cierpią na brak kontekstu: nie wiedzą, co ma osiągnąć sw.
Przegląd kodu jest wykonywany przez innego programistę, który podobno go zna i może sprawdzić
- jeśli kod jest poprawny
- jeśli oprogramowanie jest poprawne semantycznie.
Jest znacznie droższy i ma różny stopień powtarzalności, ale jest świetną pomocą.
Jak zawsze nie ma jednej srebrnej kuli, która naprawiłaby wszystkie błędy i uniknęła wszystkich problemów. Zaleca się stosowanie - o ile to możliwe, biorąc pod uwagę miejsce, kod, czas, trzy formy kontroli (statyczne, dynamiczne, więcej oczu (i mózgów) faktycznie spoglądających na kod).
ps: Muszę zauważyć, że zwykle o wiele lepiej jest zastosować narzędzia od zera. Konwersja starszego systemu jest znacznie mniej przyjemnym doświadczeniem z powodu fałszywych wyników pozytywnych. Jeśli zaczniesz od zera i zawsze dążysz do utrzymania narzędzia do analizy w czystości, prawdopodobnie unikniesz wielu problemów.
pps: jeśli chodzi o narzędzia, zależy to od języka. W świecie C i C ++ możesz zacząć od samego Visual Studio, które zawiera wbudowane narzędzie do analizy statycznej. Stosunkowo kompletną listę można znaleźć na Wikipedii.
ppps: Analiza statyczna jest bardziej odpowiednia dla języków statycznych, takich jak C lub C ++. Pythonowi może być naprawdę trudno powiedzieć, czy nazwa odnosząca się do listy w pewnym momencie będzie odnosić się do listy dla reszty programu, ze względu na jego właściwości dynamiczne. Nie oznacza to, że nic nie da się zrobić, jak pokazuje JIT, jak pokazuje PyPy .