ݺߣ

ݺߣShare a Scribd company logo
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
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;
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
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ú
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…
Pex
Pex bemutatása
 Parametrikus tesztek  egységtesztek halmaza
 Izolációs keretrendszere: Moles
 Használati esetei
8
Felfedezés
Paramé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á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
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 Concolic
Testing 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

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…
  • 7. Pex
  • 8. Pex bemutatása  Parametrikus tesztek  egységtesztek halmaza  Izolációs keretrendszere: Moles  Használati esetei 8 Felfedezés Paraméteres tesztek Kibővített paraméteres tesztek
  • 9. 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
  • 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