Az előadás vázlata A SPIN modellellenőrző rendszer Németh L. Zoltán (zlnemeth@inf.u-szeged.hu) A modellellenőrzés jelentőssége, alapjai A SPIN használata A PROMELA nyelv szintaktikája, szemantikája (példák) Helyességi kritériumok megfogalmazása (LTL logika) A TIMELINE editor Kompex modellezési példák SZTE, Informatikai Tanszékcsoport 2004/2005 I. félév 2004.09.14 SPIN 1 1 2004.09.14 SPIN 1 2 Motivációk ICT(Information and Communication Thechnology) rendszerek mindennapjainkban Internet beágyazott rendszerek (embedded systems) Egyre nő az igény az ICT rendszerek megbízhatóságára (,,Ha a Microsoft autókat gyártana ) Ugyanakkor a rendszerek komplexitása, elképesztően gyorsan nő Ma már intuitív eszközökkel komplex rendszerek nem tervezhetők/készíthetők => a formális módszerek térhódítása mind a tervezésben mind az ellenőrzésben Arine 5 rakéta (1996) Sajnos indítás után 36 másodpercel felrobbant egy 64 bites lebegőpontos sebesség-adat 16 bites egésszé való hibás konvertálása miatt A Terrac-25 radioterápiás készülék balesetei(1985-87) A varsói légiszerencsétlenség (1993) Mars Pathfinder (1997) 2004.09.14 SPIN 1 3 2004.09.14 SPIN 1 4
Ellellenőrzés Egy (szoftver) rendszer helyes, ha megfelel a vele szemben tervezéskor támasztott elvárásoknak. Ebben mindenki egyetért, de hogyan lehet ezt ellenőrizni? Szoftver ellenőrzési techikák: Tesztelés Peer reviewing (társak általi ellenőrzés) Formális módszerek Tesztelés Minden szoftvertervezési projekt része A költségek 30-50%-át fordítják rá!!! Tesztgenerálás és futtatás (félig) automatikusan Az összehasonlítást általában ember végzi A tesztelés általában nem képes ezt miden esetet kimerítően bizonyítani. Csak általános, tipikus szituációkat vizsgál. Nehéz megmondani, hogy mikor érdemes abbahagyni,,a program tesztelés csak a hibák kimutatására használható, de sohasem azok hiányának igazolására. (Dijkstra) 2004.09.14 SPIN 1 5 2004.09.14 SPIN 1 6 Peer Reviewing Szoftverfejlesztők (ideális esetben nem a készítők!) elemzik a kódot, annak végrehajtása nélkül Annak ellenére, hogy manuális módszer meglehetősen hatékony: A hibák 31-93%-át (átlagban 60%-át) lehet így felefedezni Szoftverfejlesztési projektek közel 80%-ban alkalmazzák De a nehezen észrevehető hibák sokszor továbbra is megmaradnak Konkurens rendszerek este Egyidejű (konkurens) rendszerekre tervezése és ellenőrzése különösen nehéz!!! az folyamatok végrehajtási sorrendje nemdeterminisztikus legalább is nem megfigyelhető / kontrollálható Pl. a folyamatok ütemezés egyidejűleg egy nagy hálózat különböző egymástól távoli processzorain törtéhet. tesztelésnél a javításhoz a hibát reprodukálni kell tudni! 2004.09.14 SPIN 1 7 2004.09.14 SPIN 1 8
Konkurencia mindenütt Áruházban a vevők (áruk, pénztárak) Telefonközpont mi van, ha ketten egyszerre hívják egymást? Közlekedés (elsőbbségadás) jobbkézszabály körforgalom táblák, lámpák Bejárat 2 udvarias vagy 2 törtető ember találkozása Formális módszerek ellenőrzésre Formális módszer,,alkalmazott matematika ICT rendszerek modellezésére és elemzésére A rendszer helyességét matematikai szigorral bizonyítják A fejlesztés korai fázisában alkalmazhatók, már a tervezéskor Modell alalpú módszerek modell alapú szimuláció modellellenőrzés modell alapú tesztelés Deduktív módszerek theorem proovers proof checkers 2004.09.14 SPIN 1 9 2004.09.14 SPIN 1 10 Modellellenőrzés Adott a rendszer (program) egy véges állapotú modelljét készítjük el: (M) Egy logikai tulajdonság (p) írja le a specifikációt (a kívánt viselkedést) A modellellenőrzés egy olyan automatikus módszer, mely szisztematikusan ellenőrzi, hogy e tulajdonság fennáll-e a rendszerben. Ha a tulajdonság nem teljesül, akkor a modellellenőrző egy ellenpéldát ad, ami alapján a hiba javítható A modellelenőrzés alkalmazásai verifikáció: bizonyítsuk be, hogy a tervezés alatt álló rendszer M modellje teljesíti a követelményekben megfogalmazott p tulajdonságo(ka)t hibakutatás (debugging): keressünk hibákat az M rendszermodellben Persze a p tulajdonságnak helyesen kell leírni a specifikációt. A specifikációtól elvárás, hogy - zárt (minden esetre kiterjedő) és - ellentmondásmentes legyen 2004.09.14 SPIN 1 11 2004.09.14 SPIN 1 12
Alkalmazási területek Modellellenőrzés a rendszerfejlesztésben Biztonságkritikus rendszerek: orvosi berendezések repülésirányítás katonaság Missziókritikus rendszerek: űrkutatás Adatvédelmi rendszerek: bank rendszerek orvosi nyilvátartás De sokszor ipari alkalmazásoknál is kifizetődő - processor gyártás (Pl. Intel Pentium FDIV Bug) - szórakozatató elektronika - autóelektronika stb. 2004.09.14 SPIN 1 13 2004.09.14 SPIN 1 14 Klasszikus modellellenőrzés Modern modellellenőrzés Középpontban: absztrakció (szándékos információvesztés) az állapottérrobbanást elkerülendő Ebben a kurzusban: csak a klasszikus megközelítés lesz De a Spin támogatja a C programokból automatikus modellextrahálást is 2004.09.14 SPIN 1 15 2004.09.14 SPIN 1 16
Miért pont a SPIN? modern modellellenőrző eszköz (egyidejű) szoftver fejlesztésre specializált új elméleti eredmények hatékony implementációjára épül ingyenes jól dokumentált folyamatosan fejlesztett több mint 2000 felhasználó, számuk gyorsan bővül könnyen kezelhető grafikus interfész: XSPIN elismert: ACM Software System Award 2004.09.14 SPIN 1 17 2004.09.14 SPIN 1 18 Az Xspin dióhéjban Az Xspin szolgáltatásai: Promela modellek szerkesztése (+ szintaxisellenőrzés) szimulációja véletlen (random) interaktív irányított (guided) verifikációja kimerítő (exhaustive) bitstate hashing mód (nem garantál 100%-os bizonyítást) További szolgáltatások bármely processz automatájának felrajzolása LTL formula szerkesztő Súgó (verifikációs és szimulációs támpontok) SPIN - Bevezetés SPIN (= Simple Promela Interpreter) konkurens rendszerek, különösen kommunikációs protokollok logikai konzisztenciáját ellenőrző eszköz modellezési nyelve: Promela Promela (= Protocol/Process Meta Language) konkurens processzek dinamikus létrehozása kommunikáció csatornákon keresztül: szinkron (azaz randevú), vagy aszinkron (azaz bufferelt). szintaxisában a C programozási nyelvre hasonlít specifikációs nyelv véges állapotú rendszerek modellezésére 2004.09.14 SPIN 1 19 2004.09.14 SPIN 1 20
Egy példa A Pathfinder 1997, Július 4-én landolt a Marson Egy kis terepjárót bocsátott útjára Elképesztő fizikai és mechanikai problémákat kellett leküzdeni A vezérlőprogram hibája miatt néha előre nem látható pillanatokban megszakadt a kapcsolat a Földdel 2004.09.14 SPIN 1 21 A hibás programrész Két egyidőben futó (konkurens) folyamat: A: a gyűjtött adatok memóriába való továbbítását végzi B: a memóriában lévő adatokat a Földre küldi Két egyszerű szabály: Kölcsönös kizárás: a memóriához egyszerre csak az egyik folyamat férhet hozzá megvalósítása egy mutex lock (lakat) változó segítségével Prioritási szabály: a B folyamatnak mindig elsőbbsége van az A folyamattal szemben, azaz A csak akkor futhat, ha B munka nélküli (idle) állapotban van 2004.09.14 SPIN 1 22 A folyamatok működése tétlen unlock fut vár lock 2004.09.14 SPIN 1 23 A SPIN Model mtype = { free, busy, idle, waiting, running }; show mtype h_state = idle; show mtype l_state = idle; show mtype mutex = free; active proctype high() /* can run at any time */ { end: do :: h_state = waiting; atomic { mutex == free -> mutex = busy }; h_state = running; /* critical section - consume data */ atomic { h_state = idle; mutex = free } od } 2004.09.14 SPIN 1 24
A SPIN Model II. active proctype low() provided (h_state == idle) /* scheduling rule */ { end: do :: l_state = waiting; atomic { mutex == free -> mutex = busy}; l_state = running; } /* critical section - produce data */ atomic { l_state = idle; mutex = free } od $ spin a pathfinder $ gcc o pan pan.c $./pan Ellenőzése: hint: this search is more efficient if pan.c is compiled -DSAFETY pan: invalid end state (at depth 4) pan: wrote pathfinder.trail (Spin Version 4.1.2 -- 21 February 2004) Warning: Search not completed + Partial Order Reduction. 2004.09.14 SPIN 1 25 2004.09.14 SPIN 1 26 Full statespace search for: never claim - (none specified) assertion violations + acceptance cycles - (not selected) invalid end states + State-vector 20 byte, depth reached 4, errors: 1 5 states, stored 1 states, matched 6 transitions (= stored+matched) 0 atomic steps hash conflicts: 0 (resolved) (max size 2^18 states) 2004.09.14 SPIN 1 27 A hiba felderítése: $ spin t p pathfinder 1: proc 1 (low) line 40 "pathfinder" (state 1) [l_state = waiting] 2: proc 1 (low) line 41 "pathfinder" (state 2) [((mutex==free))] 2: proc 1 (low) line 41 "pathfinder" (state 3) [mutex = busy] 3: proc 1 (low) line 42 "pathfinder" (state 5) [l_state = running] 4: proc 0 (high) line 27 "pathfinder" (state 1) [h_state = waiting] 5: proc 0 (high) line 28 "pathfinder" (state 2) [((mutex==free))] transition failed spin: trail ends after 5 steps #processes: 2 h_state = waiting l_state = running mutex = busy 5: proc 1 (low) line 46 "pathfinder" (state 8) 5: proc 0 (high) line 28 "pathfinder" (state 2) 2 processes created 2004.09.14 SPIN 1 28