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.

Upload: ulf

Post on 19-Mar-2016

51 views

Category:

Documents


1 download

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

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ó