Ústav informatiky Akademie věd České republiky Matematicko-fyzikální fakulta Karlova Univerzita Jak najít softwarové chyby (včas) Formální verifikace programů Jiří Adámek
2 Zajímavé softwarové chyby (1) 23. září 1999: sonda Mars Climate Orbiter (NASA) ztracena při vstupu do atmosféry Marsu Důvodem byla softwarová chyba Jedna část programového vybavení pro řízení letu používala metrické jednotky (kg, km), zatímco druhá používala jednotky anglické (libry, míle) Z tohoto důvodu sonda sestoupila na nižší orbitu než měla a bylo s ní ztraceno spojení Ztráty: milionů dolarů (spolu se sondou Mars Polar Lander)
3 Zajímavé softwarové chyby (2) 21. září 1997: během vojenského cvičení se americká vojenská loď Yorktown z neznámých důvodů zastavila a skoro 3 hodiny zůstala nečinně stát na širém moři Důvodem byla opět softwarová chyba Operátor omylem zadal do počítače jako jeden z údajů nulu Dělení nulou způsobilo tzv. výjimku, která nebyla odpovídajícím způsobem ošetřena Výjimka byla propagována na všech 27 počítačů propojených do sítě Jeden z nich způsobil vypnutí lodních motorů
4 Jak vznikají softwarové chyby? int main(int argc, char **argv) { int i; double result; int err_position; char *s; print_test("", NULL, &err_position); print_test("", &result, NULL); for (i = 0; i < sizeof(tests)/sizeof(char*); i++) { print_test(tests[i], &result, &err_position); } return 0; } Spustitelný kód Kompilátor Jiný spustitelný kód Uživatel Chyba v programu Chyba v komunikaci Chyba v kompilátoru Chyba uživatele
5 Co dělat se softwarovými chybami? Produkovat méně softwarových chyb Používání bezpečnějších programovacích jazyků a platforem Snažit se chyby včas najít Testování Nenalezne všechny chyby Není vždy možné pro safety-critical systems Formální verifikace
6 Co jsou formální verifikace? Metody, které nám umožňují formálně (tj. na základě matematického důkazu) ověřit, že v programu nejsou chyby V ideálním případě jsou úplné Dají se využít i pro safety-critical systems Zvláště důležité jsou verifikace automatické Konstrukce verifikačních softwarových nástrojů
7 Jaké dílčí problémy je třeba vyřešit? (1) Chování programu i chyby je třeba formálně popsat Popsali jsme všechny možné chyby? Co s chybami ve formálních popisech?
8 receive process send wait received sent Property (CTL): AG (received => AF sent) State transition system:
9 „Klasický“ verifikační nástroj Vytvoření modelu (manuální) Program Vlastnosti Model Výsledky “Klasický” přístup
10 Verifikační nástroj ProgramVlastnosti Výsledky „Přímý“ přístup:
11 Jaké dílčí problémy je třeba vyřešit? (2) Co když je formální popis příliš velký? Rafinované algoritmy a datové struktury, redukce, heuristiky, … Možno až stavů Hrubá výpočetní síla Co když je formální popis nekonečně velký? Poznámka o teorii vyčíslitelnosti
12 Co všechno již umíme formálně verifikovat? Hardware Algoritmy řízení Safety critical systems Komunikační protokoly a distribuované algoritmy Některé části jader OSS Ovladače zařízení Kryptografické protokoly
13 Zajímavé verifikační nástroje SPIN Bell Labs Java PathFinder NASA
14 Funguje to? Experimental Evaluation of Verification and Validation Tools on Martian Rover Software. G. Brat, D. Drusinsky, D. Giannakopoulou, A. Goldberg, K. Havelund, M. Lowry, C. Pasareanu, A. Venet, R. Washington and W. Visser. Formal Methods in Systems Design Journal. Volume 25, Number 2-3, September SLAM and Static Driver Verifier: Technology Transfer of Formal Methods inside Microsoft. Thomas Ball, Byron Cook, Vladimir Levin and Sriram K. Rajamani. MSR-TR Invited talk/paper for Integrated Formal Methods ftp://ftp.research.microsoft.com/pub/tr/tr pdf
15 Chcete vědět víc? Přednáška (MFF UK): Behavior Models and Verification (SWI101)