várady gergely 2003.június.19
DESCRIPTION
Statikus Programellenőrzés Absztrakt Interpretáció Nagyhatékonyságú Logikai Programozási technikák segítségével. Várady Gergely 2003.június.19. Tartalom. Szoftver verifikáció, formális módszerek Absztrakt Interpretáció (AI) AI és a logikai programozás (XSB) Absztrakt interpreterek XSB-ben - PowerPoint PPT PresentationTRANSCRIPT
Statikus Programellenőrzés
Absztrakt Interpretáció Nagyhatékonyságú Logikai
Programozási technikák segítségével
Várady Gergely
2003.június.19.
2
Tartalom• Szoftver verifikáció, formális
módszerek• Absztrakt Interpretáció (AI)• AI és a logikai programozás (XSB)• Absztrakt interpreterek XSB-ben• AI kényszer-kielégítéssel (CLP)
– Program verifikációs példa
3
Bevezetés• Hatalmas növekedés
– HW SW– Nagy programrendszerek– Több 1000 fős fejlesztői és karbantartó
csapatok• Programok jelentős szerepe az élet
rengeteg területén
• Szoftver megbízhatósági probléma fontossága nő
4
Szoftver Verifikáció• Verifikáció: a specifikációnak való
megfelelés (helyesség) ellenőrzése
• „Kézzel” ellenőrizhetetlen programok
• Számítógéppel segített ellenőrzés kell
5
Tesztelés• Program szimulálása sok különböző
környezetben (debug-olás)• Egyes végrehajtási utak
ellenőrzése, de nem összes!+Valóságos rendszert ellenőrzi (nem
modellt)– Csak kimutat hibákat, nem
bizonyítja hiányukat
6
Formális módszerek• Program helyességének formális
bizonyítása• Matematikai alapok: logika, automata-
vagy gráfelmélet• Formális specifikáció: precíz,
ellentmondásmentes• Program helyesség (általánosan)
algoritmikusan eldönthetetlen probléma • Egyszerűsített program (modell) kimerítő
vizsgálata absztrakció
7
Absztrakt Interpretáció• Absztrakt értékek
és függvények• Vezérlési szerkezet
(végrehajtási utak) absztrakciója
• (Absztrakt) program végrehajtható
• Absztrakció információ veszteség „igen–nem–eldönthetetlen” jellegű válaszok
8
Absztrakciók• Tartomány absztrakció,
pl.:– Intervallum– Kongruencia
• Függvény absztrakció
• Vezérlés absztrakciója:– Fixpont szemantika
f fixpontja S, ha f (S) = S
9
Statikus programellenőrzés
• Statikus programellenőrzés absztrakt interpretációval
10
XSB Prolog• Logikai programozási nyelv (Prolog)• Absztrakt tartomány eldönthetetlen
feltételek (pl.: if) nemdeterminizmus• Terminálási problémák (while)• Fejlett rezolúciós stratégia (táblázás)
a(1,1).a(2,1).
tca(X,Y) :- a(X,Y).tca(X,Y) :- a(X,Z), tca(Z,Y).
11
Absztrakt Interpretáció XSB-vel
• Egyszerű procedurális nyelv interpretálása- Egész és valós változók- Egyszerű aritmetikai műveletek (+, -, *)- Logikai operátorok (<, =, >)- Vezérlési struktúrák (if, while)- Egymásba ágyazott eljárások
• Interpreter keret (evalStmt, evalExp)• Absztrakt interpreter: adott
absztrakt megfelelő (változók, műveletek, vezérlés)
• Fixpontok számítása automatikusan
12
Intervallum absztrakcióValós interpreter Intervallum absztrakcióevalExp(int(V),_,V). evalExp(int(V),_,V-V).
evalExp(op(+,E1,E2),Stack,V):- evalExp(E1,Stack,V1), evalExp(E2,Stack,V2), V is V1 + V2.
evalExp(op(+,E1,E2),Stack,Min-Max):- evalExp(E1,Stack,Min1-Max1), evalExp(E2,Stack,Min2-Max2), interval_add(Min1,Min2,Min), interval_add(Max1,Max2,Max).
evalStmt(if(Bool,Then,Else), Stack0,Stack):- evalExp(Bool,Stack0,BVal), (Bval =\= 0 -> evalStmts(Then,Stack0,Stack) ; evalStmts(Else,Stack0,Stack) ).
evalStmt(if(Bool,Then,Else), Stack0,Stack):- evalExp(Bool,Stack0,BMin-BMax), ( BMax =:= 1, evalStmt(constraint(Bool,true), Stack0,Stack01), evalStmts(Then,Stack01,Stack) ; BMin =:= 0, evalStmt(constraint(Bool,false), Stack0,Stack01), evalStmts(Else,Stack01,Stack) ).
13
Futási példa (intervallum)while j < 0 j := j + 1
• Példaprogram:• Inicializálás: j [-20,)
Prolog XSB (táblázással)| ?- test(interval, [[(j,-20-sup)]],Stack).initial : [[],[(j,-20-sup)]]Stack = [[(j,0-sup)]];j:=j+1 -> [[],[(j,-19-0)]]Stack = [[(j,0-0)]];
j:=j+1 -> [[],[(j,-1-0)]]Stack = [[(j,0-0)]];j:=j+1 -> [[],[(j,0-0)]]Stack = [[(j,0-0)]];no
| ?- test(interval, [[(j,-20-sup)]],Stack).initial : [[],[(j ,-20-sup)]]Stack = [[(j ,0-0)]];Stack = [[(j ,0-sup)]];no
j [0,)
14
Kényszer-kielégítés – CLP• Változók• Kényszerek (pl.: X < 3Y + 4Z)• Megoldás (kényszerek kielégítése)
– Numerikus (CSP)– Szimbolikus (Constraint Solving)
• Constraint Logic Programming (CLP)– Prolog + kényszer-kielégítés– Különböző tartományokon
• Igazságértékek: clp(B)• Racionális / valós számok: clp(Q),clp(R)• Véges tartományok: clp(FD)
– clpr könyvtár XSB
15
Továbbfejlesztett Interpreter
Aritmetikai kifejezések
evalExp(op(+,E1,E2),Stack,V) :- evalExp(E1,Stack,V1), evalExp(E2,Stack,V2), { V = V1 + V2 }.
Logikai kifejezések
evalExp(op(=<,E1,E2),Stack,V) :-evalExp(E1,Stack,V1),evalExp(E2,Stack,V2), (entailed(V1 =< V2) -> V=1 ;true), (entailed(V1 > V2) -> V=0 ;true).
Vezérlési szerkezet
evalStmt(if(Bool,Then,Else),Stack0,Stack) :- evalExp(Bool,Stack0,BVal), ( { Bval=1 }, evalStmt(constraint(Bool,true), Stack0,Stack01), evalStmts(Then,Stack01,Stack) ; { BVal=0 }, evalStmt(constraint(Bool,false), Stack0,Stack01), evalStmts(Else,Stack01,Stack)).
16
Program verifikációs példa
• Példaprogram pszeudokódja
• Futási eredmények
proc bubble_sort(a[1..n] of real) for f := n to 2 do
for i := 12 to n-1 do if a[i] > a[i+1] then dummy = a[i]; a[i] = a[i+1]; a[i+1] = dummy;fi od od end
Helyes program Hibás program| ?- bubble_sort([A, B, C], [D, E, F]), {D=<E,E=<F}.yes
| ?- bubble_sort([A, B, C], [D, E, F]), {D=<E,E=<F}.yes
| ?- bubble_sort([A, B, C], [D, E, F]), {D>E}.no| ?- bubble_sort([A, B, C], [D, E, F]), {E>F}.no
| ?- bubble_sort([A, B, C], [D, E, F]), {D>E}.yes
!
17
Összefoglalás• Absztrakt interpretáció: program
dinamikus jellemzőinek statikus vizsgálata• Absztrakció állapottér bejárható, de
információvesztés részleges döntés• Megvalósítás:
Prolog
táblázás
clp(R)
nemdeterminizmus
fixpontszámítás
szimbolikus számítások
XSB
• Alkalmazás program verifikációra
18
JövőképUML modell
Programkód
Alacsony-szintű kód
Automatikuskódgenerálás
Parser
Parser
Statikusverifikáció