SlideShare a Scribd company logo
1 of 13
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

Viewers also liked

Balanced Diversity A Portfolio Approach to Organisational Change (2012)
Balanced Diversity A Portfolio Approach to Organisational Change (2012)Balanced Diversity A Portfolio Approach to Organisational Change (2012)
Balanced Diversity A Portfolio Approach to Organisational Change (2012)Karen Ferris
 
PhD Thesis Defense - Enhancing Software Quality and Quality of Experience thr...
PhD Thesis Defense - Enhancing Software Quality and Quality of Experience thr...PhD Thesis Defense - Enhancing Software Quality and Quality of Experience thr...
PhD Thesis Defense - Enhancing Software Quality and Quality of Experience thr...Pedro Luis Mateo Navarro
 
Emil Pulido on Quantitative Research: Inferential Statistics
Emil Pulido on Quantitative Research: Inferential StatisticsEmil Pulido on Quantitative Research: Inferential Statistics
Emil Pulido on Quantitative Research: Inferential StatisticsEmilEJP
 
T Test For Two Independent Samples
T Test For Two Independent SamplesT Test For Two Independent Samples
T Test For Two Independent Samplesshoffma5
 
Reporting an independent sample t test
Reporting an independent sample t testReporting an independent sample t test
Reporting an independent sample t testKen Plummer
 
Reporting a single linear regression in apa
Reporting a single linear regression in apaReporting a single linear regression in apa
Reporting a single linear regression in apaKen Plummer
 

Viewers also liked (9)

Engagement in Teaching Though Teaching Presence: 2016
Engagement in Teaching Though Teaching Presence: 2016Engagement in Teaching Though Teaching Presence: 2016
Engagement in Teaching Though Teaching Presence: 2016
 
PhD Public Presentation
PhD Public PresentationPhD Public Presentation
PhD Public Presentation
 
Reflections on the Trial of the "L'Aquila Seven"
Reflections on the Trial of the "L'Aquila Seven"Reflections on the Trial of the "L'Aquila Seven"
Reflections on the Trial of the "L'Aquila Seven"
 
Balanced Diversity A Portfolio Approach to Organisational Change (2012)
Balanced Diversity A Portfolio Approach to Organisational Change (2012)Balanced Diversity A Portfolio Approach to Organisational Change (2012)
Balanced Diversity A Portfolio Approach to Organisational Change (2012)
 
PhD Thesis Defense - Enhancing Software Quality and Quality of Experience thr...
PhD Thesis Defense - Enhancing Software Quality and Quality of Experience thr...PhD Thesis Defense - Enhancing Software Quality and Quality of Experience thr...
PhD Thesis Defense - Enhancing Software Quality and Quality of Experience thr...
 
Emil Pulido on Quantitative Research: Inferential Statistics
Emil Pulido on Quantitative Research: Inferential StatisticsEmil Pulido on Quantitative Research: Inferential Statistics
Emil Pulido on Quantitative Research: Inferential Statistics
 
T Test For Two Independent Samples
T Test For Two Independent SamplesT Test For Two Independent Samples
T Test For Two Independent Samples
 
Reporting an independent sample t test
Reporting an independent sample t testReporting an independent sample t test
Reporting an independent sample t test
 
Reporting a single linear regression in apa
Reporting a single linear regression in apaReporting a single linear regression in apa
Reporting a single linear regression in apa
 

Similar to Egységtesztek automatikus generálása forráskódból

Tesztgenerálás a gyakorlatban - Az IntelliTest és ami mögötte van
Tesztgenerálás a gyakorlatban - Az IntelliTest és ami mögötte vanTesztgenerálás a gyakorlatban - Az IntelliTest és ami mögötte van
Tesztgenerálás a gyakorlatban - Az IntelliTest és ami mögötte vanDávid Honfi
 
Modell alapú tesztelés: célok és lehetőségek
Modell alapú tesztelés: célok és lehetőségekModell alapú tesztelés: célok és lehetőségek
Modell alapú tesztelés: célok és lehetőségekZoltan Micskei
 
20111130 oa gtest
20111130 oa gtest20111130 oa gtest
20111130 oa gtestczras
 
Szoftver tesztelés - Gyakorlati jó-ha-tudod
Szoftver tesztelés - Gyakorlati jó-ha-tudodSzoftver tesztelés - Gyakorlati jó-ha-tudod
Szoftver tesztelés - Gyakorlati jó-ha-tudodRichard Oliver Legendi
 
Forráskódtárak gráfalapú statikus analízise
Forráskódtárak gráfalapú statikus analíziseForráskódtárak gráfalapú statikus analízise
Forráskódtárak gráfalapú statikus analíziseDániel Stein
 
Előadás2
Előadás2Előadás2
Előadás2egyetem
 

Similar to Egységtesztek automatikus generálása forráskódból (6)

Tesztgenerálás a gyakorlatban - Az IntelliTest és ami mögötte van
Tesztgenerálás a gyakorlatban - Az IntelliTest és ami mögötte vanTesztgenerálás a gyakorlatban - Az IntelliTest és ami mögötte van
Tesztgenerálás a gyakorlatban - Az IntelliTest és ami mögötte van
 
Modell alapú tesztelés: célok és lehetőségek
Modell alapú tesztelés: célok és lehetőségekModell alapú tesztelés: célok és lehetőségek
Modell alapú tesztelés: célok és lehetőségek
 
20111130 oa gtest
20111130 oa gtest20111130 oa gtest
20111130 oa gtest
 
Szoftver tesztelés - Gyakorlati jó-ha-tudod
Szoftver tesztelés - Gyakorlati jó-ha-tudodSzoftver tesztelés - Gyakorlati jó-ha-tudod
Szoftver tesztelés - Gyakorlati jó-ha-tudod
 
Forráskódtárak gráfalapú statikus analízise
Forráskódtárak gráfalapú statikus analíziseForráskódtárak gráfalapú statikus analízise
Forráskódtárak gráfalapú statikus analízise
 
Előadás2
Előadás2Előadás2
Előadás2
 

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