Várady Gergely 2003.június.19.

18
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.

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 Presentation

Transcript of Várady Gergely 2003.június.19.

Page 1: Várady Gergely 2003.június.19.

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.

Page 2: 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

Page 3: Várady Gergely 2003.június.19.

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ő

Page 4: Várady Gergely 2003.június.19.

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

Page 5: Várady Gergely 2003.június.19.

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

Page 6: Várady Gergely 2003.június.19.

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ó

Page 7: Várady Gergely 2003.június.19.

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

Page 8: Várady Gergely 2003.június.19.

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

Page 9: Várady Gergely 2003.június.19.

9

Statikus programellenőrzés

• Statikus programellenőrzés absztrakt interpretációval

Page 10: Várady Gergely 2003.június.19.

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).

Page 11: Várady Gergely 2003.június.19.

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

Page 12: Várady Gergely 2003.június.19.

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) ).

Page 13: Várady Gergely 2003.június.19.

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,)

Page 14: Várady Gergely 2003.június.19.

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

Page 15: Várady Gergely 2003.június.19.

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)).

Page 16: Várady Gergely 2003.június.19.

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

!

Page 17: Várady Gergely 2003.június.19.

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

Page 18: Várady Gergely 2003.június.19.

18

JövőképUML modell

Programkód

Alacsony-szintű kód

Automatikuskódgenerálás

Parser

Parser

Statikusverifikáció