Naredna: FaktorijelGore: Uvod
Prethodna: Algoritmi, pseudokod i dijagrami toka Sadržaj
Formalna verifikacija se ne
zasniva na testiranju i eksperimentima, već na matematičkim dokazima.
Korektnost programa je dokaziva ako se u okviru nekog formalnog deduktivnog sistema
može izvesti matematički dokaz da program zadovoljava zadatu specifikaciju.
Postoje tri dominantna pristupa formalnoj verifikaciji
programa:
-
metoda induktivne invarijante
-
metoda funkcionalne semantike
-
metoda eksplicitne semantike
Prva metoda je daleko najzastupljenija
i do sada je dala najbolje rezultate, pa ćemo se u nastavku baviti samo njom.
Ova metoda verifikacije programa se često nazova Flojd-Horov (Floyd-Hoare)
metoda induktivnih tvrđenja i ima svoje korene u klasičnim radovima Goldstajna
(Goldstine) i Fon Nojmana (von Neumann).
Za ispitivanje ispravnosti programa posebnu pažnju potrebno je posvetiti petljama jer se kroz njih može proći različit broj puta u različitim izvršavanjima programa.
Definicija 1. Svojstvo koje važi svaki put kada se ispituje da li je zadovoljen uslov ulaska u petlju naziva se invarijanta petlje.
Svaka petlja ima puno invarijanti. Tako je, na primer, x*0=0 invarijanta svake petlje. Međutim, korisna invarijanta je samo ona koja vodi ka pauslovu kada uslov za ulazak u petlju nije ispunjen.
Kako odrediti korisnu invarijantu petlje? Invarijantu petlje je moguće na osnovu nekoliko test primera naslutiti a zatim ju je potrebno formalno dokazati. Drugi način je formalno izvođenje unvarijante. Jedan od načina izvođenja invarijante je uvođenje brojača u petlju što je i urađeno u primeru Hardverdsko celobrojno deljenje.
Formalna verifikacija programa metodom induktivne invarijante zasniva se na dokazu da se iz preduslova može uspostaviti invarijanta pre prvog ulaska u petlju, zatim da svaki put kada se ulazi u petlju važi dati uslov i, na kraju, da pri prestanku važenja uslova ulaska u petlju on vodi ka ostvarivanju pauslova programa.
Dokaz ispravnosti programa metodom induktivne invarijante se, dakle, sastoji iz tri koraka:
- Uspostavljanje invarijante
- Održavanje invarijante
- Ostvarivanje željenog pauslova
Na kraju, da bi se dokazala totalna korektnost programa, treba dokazati i da se program zaustavlja.
Formalni dokazi su interesantni jer mogu da se generišu automatski uz pomoć računara ili barem interaktivno u saradnji čoveka sa računarom. U oba slučaja, formalni dokaz može da se proveri automatski, dok provera neformalnog dokaza nije laka. Takođe, kada se program i njegov dokaz istovremeno razvijaju, programer bolje razume sam program i proces programiranja uopšte. Programeri su zainteresovani za formalne dokaze jer metodologija dokaza utiče na razmatranje preciznosti, konzistentnosti i kompletnsoti specifikacije, na jasnoću implementcije i konzistentnost implementacije i specifikacije. Zahvaljujući tome dobija se pouzdaniji softver, čak i onda kada se formalni dokaz ne izvede eksplicitno.
Za neki program može se dokazati tvrđenje "program
kao rezultat vraća faktorijel ulazne vrednosti”. U nekim slučajevima može
se dokazati tvrđenje ,,program ima prosečno vreme izvršavanja
0.5 sekundi”. Tvrđenja ,,prosečno vreme između dva pada
programa je najmanje 8 sati sa verovatnoćom 95%” i ,,prosečno
vreme izvršavanja programa je dobro” ne mogu se formalno dokazati.
Raketa Ariana 5 je
eksplodirala 4. juna 1996. godine,
samo 40 sekundi nakon lansiranja u orbitu. Do nesreće
je došlo zbog greške u softveru.
Ta greška koštala je više od pola milijarde dolara, a nastala je usled
nepažljivog korišćenja specifikacije pisane za prethodni projekat rakete
kao i izostanka verifikacije za novu generaciju. Više o ovome može se pročitati u
zvaničnom izveštaju.
Naredna: FaktorijelGore: Uvod Prethodna: Algoritmi, pseudokod i dijagrami toka Sadržaj