150 likes | 266 Views
Jak najít softwarové chyby (včas) Formální verifikace programů. Ji ří Adámek. 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
E N D
Jak najít softwarové chyby (včas)Formální verifikace programů Jiří Adámek
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: 327.6 milionů dolarů (spolu se sondou Mars Polar Lander)
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ů
Uživatel 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 Chyba v programu Chyba v kompilátoru Chyba v komunikaci Jiný spustitelný kód Chyba uživatele
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
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ů
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?
State transition system: receive received wait wait process sent send Property (CTL): AG (received => AF sent)
“Klasický” přístup Program Model Vytvoření modelu (manuální) Vlastnosti „Klasický“ verifikační nástroj Výsledky
„Přímý“ přístup: Program Vlastnosti Verifikační nástroj Výsledky
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ž 10600 stavů • Hrubá výpočetní síla • Co když je formální popis nekonečně velký? • Poznámka o teorii vyčíslitelnosti
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
Zajímavé verifikační nástroje • SPIN • Bell Labs • http://spinroot.com/spin/whatispin.html • Java PathFinder • NASA • http://ti.arc.nasa.gov/projects/jpf/
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 2004. http://ase.arc.nasa.gov/visser/fmsdjournal.pdf • SLAM and Static Driver Verifier: Technology Transfer of Formal Methods inside Microsoft. Thomas Ball, Byron Cook, Vladimir Levin and Sriram K. Rajamani. MSR-TR-2004-8. Invited talk/paper for Integrated Formal Methods 2004. ftp://ftp.research.microsoft.com/pub/tr/tr-2004-08.pdf
Chcete vědět víc? • Přednáška (MFF UK): Behavior Models and Verification (SWI101) • http://dsrg.mff.cuni.cz/~adamek/fm/