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

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

description

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.

Transcript of Egységtesztek automatikus generálása forráskódból

Page 1: 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

Page 2: Egységtesztek automatikus generálása forráskódból

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)

Page 3: Egységtesztek automatikus generálása forráskódból

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

Page 4: Egységtesztek automatikus generálása forráskódból

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

Page 5: Egységtesztek automatikus generálása forráskódból

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

Page 6: Egységtesztek automatikus generálása forráskódból

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…

Page 7: Egységtesztek automatikus generálása forráskódból

Pex

Page 8: Egységtesztek automatikus generálása forráskódból

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

Page 9: Egységtesztek automatikus generálása forráskódból

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

Page 10: Egységtesztek automatikus generálása forráskódból

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

Page 11: Egységtesztek automatikus generálása forráskódból

Pex for fun / Code Hunt

11

http://pexforfun.com

http://codehunt.com

Page 12: Egységtesztek automatikus generálása forráskódból

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

Page 13: Egységtesztek automatikus generálása forráskódból

Ö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