Rozszerzone sprawdzanie statyczne

Rozszerzone sprawdzanie statyczne ( ESC ) to zbiorcza nazwa w informatyce dla szeregu technik statycznego sprawdzania poprawności różnych ograniczeń programu. ESC można traktować jako rozszerzoną formę sprawdzania typu . Podobnie jak w przypadku sprawdzania typu, ESC jest wykonywane automatycznie w czasie kompilacji (tj. bez interwencji człowieka). To odróżnia ją od bardziej ogólnych podejść do formalnej weryfikacji oprogramowania, które zazwyczaj opierają się na dowodach generowanych przez ludzi. Ponadto przedkłada praktyczność nad solidność, ponieważ ma na celu radykalne zmniejszenie liczby fałszywych trafień (przeszacowanych błędów, które nie są prawdziwymi błędami, to znaczy nadmiernej ścisłości ESC) kosztem wprowadzenia niektórych fałszywych negatywów (rzeczywisty błąd niedoszacowania ESC, ale które nie wymagają uwagi programisty lub nie są celem ESC). ESC może zidentyfikować zakres błędów, które są obecnie poza zakresem sprawdzania typu, w tym dzielenie przez zero , tablica poza granicami , przepełnienie liczb całkowitych i dereferencje zerowe .

Techniki stosowane w rozszerzonym sprawdzaniu statycznym pochodzą z różnych dziedzin informatyki, w tym statycznej analizy programów , symulacji symbolicznych , sprawdzania modeli , interpretacji abstrakcyjnej , rozwiązywania testów SAT oraz automatycznego dowodzenia twierdzeń i sprawdzania typów . Rozszerzone sprawdzanie statyczne jest generalnie wykonywane tylko na poziomie wewnątrz procedury, a nie między procedurami, w celu skalowania do dużych programów. Ponadto rozszerzone sprawdzanie statyczne ma na celu zgłaszanie błędów poprzez wykorzystanie specyfikacji dostarczonych przez użytkownika w postaci wstępnych i końcowych , niezmienników pętli i niezmienników klas .

Rozszerzone sprawdzanie statyczne zazwyczaj działa poprzez propagowanie najsilniejszych warunków końcowych (odpowiednio najsłabszych warunków wstępnych ) wewnątrz procedury za pomocą metody rozpoczynającej się od warunku wstępnego (odpowiednio warunku końcowego). W każdym punkcie tego procesu generowany jest warunek pośredni, który obejmuje to, co jest znane w tym punkcie programu. Jest to połączone z niezbędnymi warunkami instrukcji programu w tym punkcie, aby utworzyć warunek weryfikacyjny . Przykładem tego jest stwierdzenie obejmujące dzielenie, którego warunkiem koniecznym jest, aby dzielnik był różny od zera. Warunek weryfikacji wynikający z tego skutecznie stwierdza: biorąc pod uwagę warunek pośredni w tym momencie, musi z tego wynikać, że dzielnik jest niezerowy . Aby metoda przeszła rozszerzone sprawdzanie statyczne (lub „nie można znaleźć więcej błędów”), wszystkie warunki weryfikacji muszą być fałszywe (a więc poprawne za pomocą wykluczonej trzeciej ). Zazwyczaj do spełnienia warunków weryfikacji używana jest jakaś forma automatycznego dowodzenia twierdzeń.

Rozszerzone sprawdzanie statyczne było pionierem w ESC/Modula-3, a później w ESC/Java . Jego korzenie wywodzą się z prostszych technik sprawdzania statycznego, takich jak debugowanie statyczne lub Lint (oprogramowanie) i FindBugs . Wiele innych języków przyjęło ESC, w tym Spec# i SPARKada oraz VHDL VSPEC. Jednak obecnie nie ma powszechnie używanego języka programowania oprogramowania, który zapewnia rozszerzone sprawdzanie statyczne w podstawowym środowisku programistycznym.

Zobacz też

Dalsza lektura