A lefedettségi metrikákat nemcsak a tesztkészlet kiértékelésére lehet használni, hanem arra is, hogy a forráskód alapján olyan teszteseteket származtassuk, amik magas lefedettséget érnek el. Az ilyen technikák hasznos kiegészítői lehetnek a fejlesztői és tesztelői eszköztárnak. Az előadás bemutatja a forráskód alapú tesztbemenet-generáló módszereket és egy konkrét .NET-es egységteszt-generáló megoldás, a Microsoft Pex eszközével kapcsolatos tapasztalatokat.
1 of 13
Download to read offline
More Related Content
Egységtesztek automatikus generálása forráskódból
1. Budapesti Műszaki és Gazdaságtudományi Egyetem
Mé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
2. 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)
3. 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;
else
return (a+b) / 2;
}
1
2
3
4
a b utasítás
0 * 1, 2
a!=0 b > a 3
a!=0 b < a 4
a == 0
a: 0
b: 0
T
b > a
F
a: 1
b: 2
T
a: 2
b: 1
F
4. 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
5. 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
6. 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ú
Symbolic
PathFinder
- 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…
10. 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ák
o Konklúzió: Komplex szoftverekben
is használható
CMS rendszer
o Post-mortem tesztelés
o 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
11. Pex for fun / Code Hunt
11
http://pexforfun.com
http://codehunt.com
12. 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 Concolic
Testing Tools and Their Limitations, 2011
13. Ö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