Tesztgenerálás a gyakorlatban Az IntelliTest és ami mögötte van 9. Enterprise Developer Meetup Tesztgenerálás a gyakorlatban Az IntelliTest és ami mögötte van Honfi Dávid honfi@mit.bme.hu
Az előadás fókusza modul B modul A modul C service Egységtesztelés (unit testing) modul B modul A modul C service Struktúra alapú tesztelés (kód ismert)
Forráskód alapú teszttervezés public int M1(int a, int b) { if(a == 0) { Console.WriteLine(ERROR_MSG); return -1; } if(b > a) return b*a+5; else return (a+b)/2; Fedjük le az összes utasítást! a==0 a!=0 && b>a a!=0 && b<=a a==0 a!=0 && b>a a!=0 & b<=a a 2 1 b
teszteset = bemenet + elvárt kimenet Mi az, ami kimaradt? teszteset = bemenet + elvárt kimenet Mi az, amit észre lehet venni? Alap, általános hibák (pl. nem várt kivételek) Ellenőrzések megsértése (pl. assertionök) Eltérés már meglévő kimenettől Regressziós teszt: korábbi változatok összevetése Más implementációk összehasonlítása
Kód alapú tesztgenerálás automatizálása Jól láthatóan automatizálható (kódbejárás) ’70-es évek óta módszerek (pl. szimbolikus végrehajtás) DE: számítási igények + egyéb kihívások Napjainkban válik alkalmazhatóvá Újabb és újabb módszerek Meglévő technikák vegyítése Fejlett számítási algoritmusok …
Eszközök .NET Java JavaScript: Jalangi C: KLEE (Cloud9) Microsoft IntelliTest (a.k.a. Pex) Microsoft SAGE Java NASA Symbolic PathFinder CATG … JavaScript: Jalangi C: KLEE (Cloud9)
Microsoft Research IntelliTest
Microsoft IntelliTest Egység-tesztelés Struktúra alapú teszt Szimbolikus végrehajtás Parametrikus egységtesztek modul A Tesztbemenetek, tesztesetek Pex
Az IntelliTest alapvető használata DEMO 1. Az IntelliTest alapvető használata
Konkrét bemeneti értékek A Pex engine részletei Szimbolikus végrehajtás Végrehajtás Forráskód a,b a:=2; b:=3 Konkrét bemeneti értékek Szimbolikus változók a!=0 && b>a Kényszer-megoldó Kényszerek
Az IntelliTest használata komplex esetekben DEMO 2. Az IntelliTest használata komplex esetekben
Services (UserServices) DEMO 2. architektúra Felhasználót hozunk létre BLL (UserManager) DAL (DBExecutor) Services (UserServices) Még nem implementált Cloudban futó
Tesztgenerálás vizualizációja DEMO 3. Tesztgenerálás vizualizációja
Mit várhatunk a hasonló eszközöktől? Kiértékeléshez megfelelő „experiment” kell SF100 benchmark: 100 projekt SourceForge-ról 50% körüli elágazás lefedettség Nagy szórás Saját tapasztalatok Modellező eszköz: 99% blokklefedettség, jól alkalmazható CMS rendszer: Komplex rendszerekhez iteratív használat Használhatósági kiértékelés? Ipari méretű problémákra hogyan használható? Mérnökök hogyan alkalmazzák? Demóból mit hagytam ki?
IntelliTest Összefoglalás Struktúra alapú tesztelés automatizálható Sok eszköz létezik, különböző hatékonysággal Microsoft IntelliTest Parametrizált egységteszt Szimbolikus végrehajtás Több használati eset Bemenetek generálása Tesztgenerálás Használhatóságuk kiértékelése nehéz kérdés IntelliTest