Ohjelmien automaattisen verifioinnin reunamailla Antti Siirtola Tietotekniikan laitos, Perustieteiden korkeakoulu, Aalto-yliopisto, antti.siirtola@aalto.fi Suomalainen Tiedeakatemia, Nuorten akatemiaklubi, 19. toukokuuta 2014
Sisältö Taustaa Formaali verifiointi Ohjelmien mallintaminen Parametroidun verifioinnin menetelmiä Yhteenveto Sisältö 2/29
Taustaa Taustaa 3/29
Minusta 2000 assistentti matematiikan jaos Oulu 2001 2002 tkt laitos 2003 DI, tt 2004 2005 2006 tutkijakoulutettava Infotech Oulu 2007 2008 2009 2010 FT, tkt tkt laitos 2011 tutkijatohtori 2012 Aalto 2013 tt laitos 2014 yliopistonlehtori tkt laitos Oulu Taustaa 4/29
Tietojenkäsittelytiede ohjelmointikielet käyttöjärjestelmät tekoäly ohjelmistotekniikka tietokonegrafiikka tietoturva tieteellinen laskenta tietoverkot rinnakkaiset ja hajautetut järjestelmät tietokannat käyttöliittymät käytettävyys ohjelmistoliiketoiminta tietojärjestelmät tietojenkäsittelyteoria Taustaa 5/29
Tietojenkäsittelyteoria algoritmit ja tietorakenteet matemaattinen logiikka automaattiteoria formaalit kielet laskettavuus laskennallinen vaativuus laskennallinen geometria laskennallinen algebra informaatioteoria kryptografia tyyppiteoria ohjelmien semantiikka ohjelmien verifiointi kvanttilaskenta Taustaa 6/29
Formaali verifiointi Verifointiongelma/kysymys Toimiiko ohjelma vaatimustensa mukaisesti? Taustaa 7/29
Formaali verifiointi Verifointiongelma/kysymys Toimiiko ohjelma vaatimustensa mukaisesti? Fakta (Turing 1936) Verifiointiongelma (kaikkein yleisimmässä muodossaan) on ratkeamaton. Taustaa 7/29
Formaali verifiointi Verifointiongelma/kysymys Toimiiko ohjelma vaatimustensa mukaisesti? Fakta (Turing 1936) Verifiointiongelma (kaikkein yleisimmässä muodossaan) on ratkeamaton. Ratkaisemiseen vaikuttaa se millaisia ohjelmia ja vaatimuksia tarkastellaan ja mitä oikeellisuus tarkoittaa? Taustaa 7/29
Formaali verifiointi Formaali verifiointi 8/29
Miksi verifiointia tarvitaan? I Lähes kaikissa tietokoneohjelmissa on virheitä I Virheet kriittisissä järjestelmissä voivat olla kohtalokkaita Formaali verifiointi 9/29
Miksi verifiointia tarvitaan? I Lähes kaikissa tietokoneohjelmissa on virheitä I Virheet kriittisissä järjestelmissä voivat olla kohtalokkaita 1987 Sädehoitoon tarkoitetun Therac-25-laitteen ohjelmistossa oli virhe, jonka vuoksi laite saattoi antaa jopa 100-kertaisen säteilyannoksen (bugin hinta: 6 ihmishenkeä) Formaali verifiointi 9/29
Miksi verifiointia tarvitaan? I Lähes kaikissa tietokoneohjelmissa on virheitä I Virheet kriittisissä järjestelmissä voivat olla kohtalokkaita 1987 1996 Sädehoitoon tarkoitetun Therac-25-laitteen ohjelmistossa oli virhe, jonka vuoksi laite saattoi antaa jopa 100-kertaisen säteilyannoksen (bugin hinta: 6 ihmishenkeä) Ariane 5 -raketin ensilaukaisu epäonnistui ohjelmistovirheen takia (bugin hinta: $1 000 000 000). Formaali verifiointi 9/29
Miksi verifiointia tarvitaan? I Lähes kaikissa tietokoneohjelmissa on virheitä I Virheet kriittisissä järjestelmissä voivat olla kohtalokkaita 1987 1996 2014 Sädehoitoon tarkoitetun Therac-25-laitteen ohjelmistossa oli virhe, jonka vuoksi laite saattoi antaa jopa 100-kertaisen säteilyannoksen (bugin hinta: 6 ihmishenkeä) Ariane 5 -raketin ensilaukaisu epäonnistui ohjelmistovirheen takia (bugin hinta: $1 000 000 000). Heartbleed-haavoittuvuus yleisesti käytetyssä autentikointi/salausohjelmistossa altisti käyttäjätunnusten ja salasanojen vuotamisen verkkoon kahden vuoden ajan useista merkittävistä verkkopalveluista. Formaali verifiointi 9/29
Ohjelmistotestaus Perinteinen tapa analysoida ohjelmaa suhteessa vaatimuksiin. Ohjelmaa suoritetaan testitapauksissa kuvatulla tavalla tai tarkastetaan toimiiko se odotetusti. Formaali verifiointi 10/29
Ohjelmistotestaus Perinteinen tapa analysoida ohjelmaa suhteessa vaatimuksiin. Ohjelmaa suoritetaan testitapauksissa kuvatulla tavalla tai tarkastetaan toimiiko se odotetusti. Ohjelmaa voi testata vasta kun se on olemassa. Testaamalla voi löytää virheitä muttei todistaa ohjelmaa oikeaksi. Formaali verifiointi 10/29
Rinnakkaiset ja hajautetut järjestelmät Koostuvat kahdesta tai useammasta rinnakkain etenevästä ja keskenään kommunikoivasta prosesseista. Formaali verifiointi 11/29
Rinnakkaiset ja hajautetut järjestelmät Koostuvat kahdesta tai useammasta rinnakkain etenevästä ja keskenään kommunikoivasta prosesseista. Epädeterministisiä -> testaaminen on hankalaa virheiden löytäminen on hankalaa virheiden toistaminen on hankalaa Formaali verifiointi 11/29
Rinnakkaiset ja hajautetut järjestelmät Koostuvat kahdesta tai useammasta rinnakkain etenevästä ja keskenään kommunikoivasta prosesseista. Epädeterministisiä -> testaaminen on hankalaa virheiden löytäminen on hankalaa virheiden toistaminen on hankalaa Merkittävä osa uusista sovelluksista on rinnakkaisia ja/tai hajautettuja. Formaali verifiointi 11/29
Rinnakkaiset ja hajautetut järjestelmät Koostuvat kahdesta tai useammasta rinnakkain etenevästä ja keskenään kommunikoivasta prosesseista. Epädeterministisiä -> testaaminen on hankalaa virheiden löytäminen on hankalaa virheiden toistaminen on hankalaa Merkittävä osa uusista sovelluksista on rinnakkaisia ja/tai hajautettuja. Tyypillisiä rinnakkaisuusvirheitä Lukkiutumat Nälkiintyminen Ei-toivotulla tavalla lomittuvat suoritukset Formaali verifiointi 11/29
Verifiointiprosessi Epäformaalit vaatimukset Ohjelman kuvaus Formaalit vaatimukset Ohjelman malli Verifiointityökalu Ei virhettä Virhe Virhe mallissa -> tarkenna mallia Virhe ohjelmassa -> muuta ohjelmaa Formaali verifiointi 12/29
Verifioinnin edut (Rinnakkaisuuus)virheiden etsiminen on tehokkaampaa Virheitä voidaan todeta jo suunnitteluvaiheessa Ohjelma(n malli) voidaan todistaa tietyssä mielessä virheettömäksi Formaali verifiointi 13/29
Verifioinnin rajoitteet Automaattinen verifiointi on laskennallisesti raskasta ja yleisesti ottaen mahdotonta Ohjelman mallintaminen ja vaatimusten formalisointi vaatii aikaa ja asiantuntemusta Verifiointityökalujen integrointi kehitysympäristöön on haastavaa Työkalujen raportoimien virheiden analysointi voi vaatia asiantuntemusta Formaali verifiointi 14/29
Ohjelmien mallintaminen Ohjelmien mallintaminen 15/29
Äärellistilaiset mallit Verifiointiongelma käytännössä ratkeava Ohjelmien luonteva mallintaminen hankalaa Ohjelmien mallintaminen 16/29
Äärellistilaiset mallit Verifiointiongelma käytännössä ratkeava Ohjelmien luonteva mallintaminen hankalaa int i = 0; while(true) i++; Ohjelmien mallintaminen 16/29
Äärellistilaiset mallit Verifiointiongelma käytännössä ratkeava Ohjelmien luonteva mallintaminen hankalaa int i = 0; while(true) i++; i = 0 i = 1 i + + i + + i = 2 i + + Ohjelmien mallintaminen 16/29
Ääretöntilaiset mallit Usein luonteva abstraktio ohjelmien kuvaamiseen Verifiointiongelma ratkeava vain harvoissa tapauksissa Joskus liian abstrakti väline ohjelmien kuvaamiseen Ohjelmien mallintaminen 17/29
Ääretöntilaiset mallit Usein luonteva abstraktio ohjelmien kuvaamiseen Verifiointiongelma ratkeava vain harvoissa tapauksissa Joskus liian abstrakti väline ohjelmien kuvaamiseen LinkedList<Object> l; while(true) l.add(new Object()); Ohjelmien mallintaminen 17/29
Ääretöntilaiset mallit Usein luonteva abstraktio ohjelmien kuvaamiseen Verifiointiongelma ratkeava vain harvoissa tapauksissa Joskus liian abstrakti väline ohjelmien kuvaamiseen LinkedList<Object> l; while(true) l.add(new Object()); l.add(o 1 ) o 1 l.add(o 2 ) o 1, o 2 l.add(o 3 ) l.add(o n) X Ohjelmien mallintaminen 17/29
Parametroidut mallit Ohjelmissa on luonnollisia parametreja, toistuvien komponenttien määrä, tietotyyppien koko, järjestelmän rakenne, joita ei voi kiinnittää mihinkään tiettyyn arvoon Ohjelmien mallintaminen 18/29
Parametroidut mallit Ohjelmissa on luonnollisia parametreja, toistuvien komponenttien määrä, tietotyyppien koko, järjestelmän rakenne, joita ei voi kiinnittää mihinkään tiettyyn arvoon Ohjelmat voidaan luontevasti mallintaa parametroituina äärellistilaisina järjestelminä tai äärettömänä äärellistilaisten järjestelmien perheenä. Ohjelmien mallintaminen 18/29
Esimerkki parametroidusta järjestelmästä Ohjelma O(n) = P 1 P n R n rinnakkaista prosessia, joilla on yksi jaettu resurssi. O(n) on parametroitu järjestelmä, jossa n {1, 2,...}. {O(1), O(2),...} on vastaava ääretön järjestelmäperhe. Ohjelmien mallintaminen 19/29
Esimerkki parametroidusta järjestelmästä Ohjelma O(n) = P 1 P n R n rinnakkaista prosessia, joilla on yksi jaettu resurssi. O(n) on parametroitu järjestelmä, jossa n {1, 2,...}. {O(1), O(2),...} on vastaava ääretön järjestelmäperhe. Vaatimus V (n) mitkään kaksi prosessia eivät saa päästä käsiksi jaettuun resurssiin samanaikaisesti. Ohjelmien mallintaminen 19/29
Esimerkki parametroidusta järjestelmästä Ohjelma O(n) = P 1 P n R n rinnakkaista prosessia, joilla on yksi jaettu resurssi. O(n) on parametroitu järjestelmä, jossa n {1, 2,...}. {O(1), O(2),...} on vastaava ääretön järjestelmäperhe. Vaatimus V (n) mitkään kaksi prosessia eivät saa päästä käsiksi jaettuun resurssiin samanaikaisesti. Parametroitu verifiointiongelma/kysymys Toimiiko ohjelma O(n) vaatimuksen V (n) mukaisesti, merk. O(n) V (n), kaikilla parametrin n = 1, 2,... arvoilla? Ohjelmien mallintaminen 19/29
Esimerkki parametroidusta järjestelmästä Ohjelma O(n) = P 1 P n R n rinnakkaista prosessia, joilla on yksi jaettu resurssi. O(n) on parametroitu järjestelmä, jossa n {1, 2,...}. {O(1), O(2),...} on vastaava ääretön järjestelmäperhe. Vaatimus V (n) mitkään kaksi prosessia eivät saa päästä käsiksi jaettuun resurssiin samanaikaisesti. Parametroitu verifiointiongelma/kysymys Toimiiko ohjelma O(n) vaatimuksen V (n) mukaisesti, merk. O(n) V (n), kaikilla parametrin n = 1, 2,... arvoilla? Lause (Apt & Kozen 1986) Ongelma on yleisesti ratkeamaton. Ohjelmien mallintaminen 19/29
Parametroidun verifioinnin menetelmiä Parametroidun verifioinnin menetelmiä 20/29
Induktio Toimii parhaiten parametroiduille järjestelmille O(n) = P 1 P n, jossa n identtistä komponenttia P i := P muodostaa ketjun/renkaan ja vaatimus on parametrista riippumaton eli V (n) := V. Parametroidun verifioinnin menetelmiä 21/29
Induktio Toimii parhaiten parametroiduille järjestelmille O(n) = P 1 P n, jossa n identtistä komponenttia P i := P muodostaa ketjun/renkaan ja vaatimus on parametrista riippumaton eli V (n) := V. Induktioperiaate 1. Keksi (invariantti)prosessi I. Parametroidun verifioinnin menetelmiä 21/29
Induktio Toimii parhaiten parametroiduille järjestelmille O(n) = P 1 P n, jossa n identtistä komponenttia P i := P muodostaa ketjun/renkaan ja vaatimus on parametrista riippumaton eli V (n) := V. Induktioperiaate 1. Keksi (invariantti)prosessi I. 2. Osoita (verifiointityökalua käyttäen), että P 1 I. Parametroidun verifioinnin menetelmiä 21/29
Induktio Toimii parhaiten parametroiduille järjestelmille O(n) = P 1 P n, jossa n identtistä komponenttia P i := P muodostaa ketjun/renkaan ja vaatimus on parametrista riippumaton eli V (n) := V. Induktioperiaate 1. Keksi (invariantti)prosessi I. 2. Osoita (verifiointityökalua käyttäen), että P 1 I. 3. Osoita (verifiointityökalua käyttäen), että I P I. Parametroidun verifioinnin menetelmiä 21/29
Induktio Toimii parhaiten parametroiduille järjestelmille O(n) = P 1 P n, jossa n identtistä komponenttia P i := P muodostaa ketjun/renkaan ja vaatimus on parametrista riippumaton eli V (n) := V. Induktioperiaate 1. Keksi (invariantti)prosessi I. 2. Osoita (verifiointityökalua käyttäen), että P 1 I. 3. Osoita (verifiointityökalua käyttäen), että I P I. 4. Osoita (verifiointityökalua käyttäen), että I V. Parametroidun verifioinnin menetelmiä 21/29
Induktio Toimii parhaiten parametroiduille järjestelmille O(n) = P 1 P n, jossa n identtistä komponenttia P i := P muodostaa ketjun/renkaan ja vaatimus on parametrista riippumaton eli V (n) := V. Induktioperiaate 1. Keksi (invariantti)prosessi I. 2. Osoita (verifiointityökalua käyttäen), että P 1 I. 3. Osoita (verifiointityökalua käyttäen), että I P I. 4. Osoita (verifiointityökalua käyttäen), että I V. 5. Tästä seuraa, että O(n) V kaikilla n = 1, 2,.... Parametroidun verifioinnin menetelmiä 21/29
Induktio Menetelmä toimii perusverifiointityökalujen kanssa. Toimii vain tietyn tyyppisille järjestelmille. Invarianttiprosessin keksiminen voi olla hankalaa. Invarianttiprosessia ei aina ole olemassa. Parametroidun verifioinnin menetelmiä 22/29
Induktio Menetelmä toimii perusverifiointityökalujen kanssa. Toimii vain tietyn tyyppisille järjestelmille. Invarianttiprosessin keksiminen voi olla hankalaa. Invarianttiprosessia ei aina ole olemassa. Tuloksia Kurshan & McMillan 1989, 1995 Wolper & Lovinfosse 1990 Valmari & Tienari 1991 Valmari & Kokkarinen 1998 Creese 2001 Parametroidun verifioinnin menetelmiä 22/29
Abstrahointi/ääretöntilaiset mallit Toimii parhaiten parametroiduille järjestelmille O(n) = P 1 P n, jossa n identtistä komponenttia P i := P ovat kaikki yhteyksissä toisiinsa (suoraan tai välillisesti) ja vaatimus on parametrista riippumaton eli V (n) := V. Parametroidun verifioinnin menetelmiä 23/29
Abstrahointi/ääretöntilaiset mallit Toimii parhaiten parametroiduille järjestelmille O(n) = P 1 P n, jossa n identtistä komponenttia P i := P ovat kaikki yhteyksissä toisiinsa (suoraan tai välillisesti) ja vaatimus on parametrista riippumaton eli V (n) := V. Idea 1. Kuvaa parametroitu järjestelmä (ääretön järjestelmäperhe) yhdeksi ääretöntilaiseksi järjestelmäksi J. Kuvauksen tulee olla sellainen, että O(n) J kaikilla n = 1, 2,.... Parametroidun verifioinnin menetelmiä 23/29
Abstrahointi/ääretöntilaiset mallit Toimii parhaiten parametroiduille järjestelmille O(n) = P 1 P n, jossa n identtistä komponenttia P i := P ovat kaikki yhteyksissä toisiinsa (suoraan tai välillisesti) ja vaatimus on parametrista riippumaton eli V (n) := V. Idea 1. Kuvaa parametroitu järjestelmä (ääretön järjestelmäperhe) yhdeksi ääretöntilaiseksi järjestelmäksi J. Kuvauksen tulee olla sellainen, että O(n) J kaikilla n = 1, 2,.... 2. Osoita (verifiointityökalua käyttäen), että J V. Parametroidun verifioinnin menetelmiä 23/29
Abstrahointi/ääretöntilaiset mallit Toimii parhaiten parametroiduille järjestelmille O(n) = P 1 P n, jossa n identtistä komponenttia P i := P ovat kaikki yhteyksissä toisiinsa (suoraan tai välillisesti) ja vaatimus on parametrista riippumaton eli V (n) := V. Idea 1. Kuvaa parametroitu järjestelmä (ääretön järjestelmäperhe) yhdeksi ääretöntilaiseksi järjestelmäksi J. Kuvauksen tulee olla sellainen, että O(n) J kaikilla n = 1, 2,.... 2. Osoita (verifiointityökalua käyttäen), että J V. 3. Tästä seuraa, että O(n) V kaikilla n = 1, 2,.... Parametroidun verifioinnin menetelmiä 23/29
Abstrahointi/ääretöntilaiset mallit Koko prosessi on yleensä automatisoitavissa. Toimii vain tietyn tyyppisille järjestelmille. Abstrahointityökalut/ääretöntilaisten järjestelmien verifiointityökalut eivät ole yhtä kehittyneitä kuin äärellistilaisten järjestelmien verifiointityökalut. Parametroidun verifioinnin menetelmiä 24/29
Abstrahointi/ääretöntilaiset mallit Koko prosessi on yleensä automatisoitavissa. Toimii vain tietyn tyyppisille järjestelmille. Abstrahointityökalut/ääretöntilaisten järjestelmien verifiointityökalut eivät ole yhtä kehittyneitä kuin äärellistilaisten järjestelmien verifiointityökalut. Tuloksia Lubachevsky 1984 German & Sistla 1992 Delzanno, Raskin, Van Begin 2002 Lahiri & Bryant 2004 Wachter & Westphal 2007 Ghilardi & Ranise 2010 Parametroidun verifioinnin menetelmiä 24/29
Parametrien raja-arvot Idea 1. Määritä parametrille n sellainen raja-arvo k, että O(n) V (n) kaikilla n = 1, 2,..., k, jos ja vain jos O(n) V (n) kaikilla n = 1, 2,.... Parametroidun verifioinnin menetelmiä 25/29
Parametrien raja-arvot Idea 1. Määritä parametrille n sellainen raja-arvo k, että O(n) V (n) kaikilla n = 1, 2,..., k, jos ja vain jos O(n) V (n) kaikilla n = 1, 2,.... 2. Osoita (verifiointyökalua käyttäen), että O(n) V (n) kaikilla n = 1, 2,..., k. Parametroidun verifioinnin menetelmiä 25/29
Parametrien raja-arvot Idea 1. Määritä parametrille n sellainen raja-arvo k, että O(n) V (n) kaikilla n = 1, 2,..., k, jos ja vain jos O(n) V (n) kaikilla n = 1, 2,.... 2. Osoita (verifiointyökalua käyttäen), että O(n) V (n) kaikilla n = 1, 2,..., k. 3. Tästä seuraa, että O(n) V (n) kaikilla n = 1, 2,.... Parametroidun verifioinnin menetelmiä 25/29
Parametrien raja-arvot Idea 1. Määritä parametrille n sellainen raja-arvo k, että O(n) V (n) kaikilla n = 1, 2,..., k, jos ja vain jos O(n) V (n) kaikilla n = 1, 2,.... 2. Osoita (verifiointyökalua käyttäen), että O(n) V (n) kaikilla n = 1, 2,..., k. 3. Tästä seuraa, että O(n) V (n) kaikilla n = 1, 2,.... Menetelmä toimii perusverifiointityökalujen kanssa. Raja-arvo on aina olemassa. Raja-arvon keksiminen voi olla hankalaa. Raja-arvotulokset pätevät vain tietyntyyppisille järjestelmille. Parametroidun verifioinnin menetelmiä 25/29
Raja-arvotuloksia Tietotyyppien koolle Wolper 1986 Lazić 1999 Parametroidun verifioinnin menetelmiä 26/29
Raja-arvotuloksia Tietotyyppien koolle Wolper 1986 Lazić 1999 Prosessien määrälle Emerson & Kahlon 2000, 2002, 2004 Emerson & Namjoshi 2003 Bouajjani, Habermehl & Vojnar 2008 Yang & Li 2010 Parametroidun verifioinnin menetelmiä 26/29
Raja-arvotuloksia Tietotyyppien koolle Wolper 1986 Lazić 1999 Prosessien määrälle Emerson & Kahlon 2000, 2002, 2004 Emerson & Namjoshi 2003 Bouajjani, Habermehl & Vojnar 2008 Yang & Li 2010 Prosessien määrälle + parametroitu järjestelmän rakenne Clarke, Talupur, Touili & Veith 2004 Siirtola & Kortelainen 2009 Parametroidun verifioinnin menetelmiä 26/29
Raja-arvotuloksia Tietotyyppien koolle Wolper 1986 Lazić 1999 Prosessien määrälle Emerson & Kahlon 2000, 2002, 2004 Emerson & Namjoshi 2003 Bouajjani, Habermehl & Vojnar 2008 Yang & Li 2010 Prosessien määrälle + parametroitu järjestelmän rakenne Clarke, Talupur, Touili & Veith 2004 Siirtola & Kortelainen 2009 Tietotyyppien koolle + prosessien määrälle Siirtola & Heljanko 2013 Parametroidun verifioinnin menetelmiä 26/29
Yhteenveto Yhteenveto 27/29
Yhteenveto Ohjelmat voidaan mallintaa luontevasti parametroituina järjestelminä. Parametroidun verifioinnin menetelmien kehittäminen on teoreettisesti haastavaa, koska ongelma on yleisesti ratkeamaton. Parametroitu verifiointi on käytännössä tärkeää erityisesti rinnakkaisten ja hajautettujen järjestelmien sekä kriittisten järjestelmien toiminnan tarkan analysoinnin kannalta. Yhteenveto 28/29
Kiitos! Kysymyksiä? Yhteenveto 29/29