KARIKATÚRÁK híres emberekről Hardy Laurel thema Automatikus 00:44 = 044 sec.
Egységtesztek automatikus generálása forráskódból
-
Upload
zoltan-micskei -
Category
Technology
-
view
277 -
download
1
description
Transcript of Egységtesztek automatikus generálása forráskódból
Budapesti Műszaki és Gazdaságtudományi EgyetemMéréstechnika és Információs Rendszerek Tanszék
Egységtesztek automatikus generálása forráskódból
Honfi Dávid, dr. Micskei Zoltán
BME MIT
Teszt & Tea 2014
Előadás fókusza
2
Modul A
Modul B
Modul C
Modul D
Egység (unit) tesztelés
int fun1(int a, int b){if (a == 0){printf(ERROR_MSG);return -1;
}
if (b > a){return b*a + 5;
} else {return (a+b) / 2;
}}
Struktúra alapú tesztelés
(kód ismert)
Tesztek tervezése forráskód alapján
3
int fun1(int a, int b){if (a == 0){
printf(ERROR_MSG);return -1;
}if (b > a)
return b*a + 5;elsereturn (a+b) / 2;
}
12
3
4
a b utasítás
0 * 1, 2
a!=0 b > a 3
a!=0 b < a 4
a == 0
a: 0b: 0
T
b > a
F
a: 1b: 2
T
a: 2b: 1
F
Mi az ami kimaradt?
Ez még nem teszt, mert nincs elvárt kimenet
Mit lehet észrevenni:
o Alap, általános hibák (pl. nem várt kivétel)
o Kódban lévő assert() hívások megsértése
o Eltérés meglévő kimenettől
• Regressziós teszt: korábbi változatok (pl. Java 1.5 vs. 1.6)
• Más implementációk összehasonlítása (coreutils vs. busybux)
4
Tesztgenerálás automatizálása
Technika automatizálható
o '70-es évek óta módszerek
o Pl. szimbolikus végrehajtás
o DE: számítási igény, kihívások
Kezd alkalmazhatóvá válni
o Konkrét és szimbolikus végrehajtás vegyítése
o Fejlett kényszermegoldók (SMT solver)
o …
5
Eszközök
Név Platform Bemenet Megjegyzés
KLEE Linux C (LLVM bitcode) Nyílt forrású
PEX Windows .NET assembly VS Power Tool
SAGE Windows x86 bináris MS internal, security
Jalangi - JavaScript Nyílt forrású
SymbolicPathFinder
- Java Nyílt forrású, NASA
6
További (jobbára nem fejlesztett) eszközök: CATG, CREST, CUTE, Euclide, EXE, jCUTE, jFuzz, LCT, Palus, PET…
Pex
Pex bemutatása
Parametrikus tesztek egységtesztek halmaza
Izolációs keretrendszere: Moles
Használati esetei
8
FelfedezésParaméteres
tesztek
Kibővített paraméteres
tesztek
DEMO
Kód felfedezése (exploration)
Parametrikus tesztek létrehozása
Izoláció Moles segítségével
Tesztbemenetek generálása
Lefedettség, felderíthető hibák
Pex demo
9
Esettanulmányok és tapasztalatok
Modellező eszköz (PDN2) o Átlagosan 99%-os blokklefedettség
(IL kód)o Kivételek, elérhetetlen
kód, funkcionális hibáko Konklúzió: Komplex szoftverekben
is használható
CMS rendszero Post-mortem teszteléso Ismerni kell a kódot
• Elő- és utófeltételek• Mockok
o Konklúzió: Iteratív jellegű eszközhasználat
10
371
100
20
10
0 50 100 150 200 250 300 350 400
Valódi hibát felfedő Elküldve fejlesztőknek
Hibás teszteset Teszteset összesen
Pex for fun / Code Hunt
11
http://pexforfun.com
http://codehunt.com
Mennyire használhatók ezek a módszerek?
SF100 benchmark
o 100 projekt SourceForge-ról (Java nyelvűek)
o EvouSuite 48%-os elágazás lefedettséget ér el
• De nagy a szórás!
ABB cég kísérlete
o CREST és KLEE eszközök
o Kb. 60%-os elágazás lefedettséget érnek el
• De sok esettel nem boldogulnak!
G. Fraser and A. Arcuri, “Sound Empirical Evidence in Software Testing,” ICSE 2013
X. Qu, B. Robinson: A Case Study of ConcolicTesting Tools and Their Limitations, 2011
Összefoglalás
Tesztbemenetek generálása kódból
o Ígéretes technikák
o (Prototípus) eszközök
Tapasztalatok
o Betanulást igényel a használatuk
o Sokszor elakadnak még, de találnak hibát
13