Szoftver modul/unit tesztelés



Hasonló dokumentumok
Specifikáció alapú teszttervezési módszerek

Specifikáció alapú teszttervezési módszerek

Struktúra alapú teszttervezési módszerek

Struktúra alapú teszttervezési módszerek

Teszttervezés. Majzik István, Micskei Zoltán. Integrációs és ellenőrzési technikák (VIMIA04) Méréstechnika és Információs Rendszerek Tanszék

Teszttervezés. Majzik István, Micskei Zoltán. Integrációs és ellenőrzési technikák (VIMIA04) Méréstechnika és Információs Rendszerek Tanszék

Szoftverminőségbiztosítás

Szoftverminőségbiztosítás

Automatikus tesztgenerálás modell ellenőrző segítségével

A modellellenőrzés érdekes alkalmazása: Tesztgenerálás modellellenőrzővel

A modellellenőrzés érdekes alkalmazása: Tesztgenerálás modellellenőrzővel

Modell alapú tesztelés mobil környezetben

MŰSZAKI TESZTTERVEZÉSI TECHNIKÁK STRUKTÚRA ALAPÚ, VAGY FEHÉRDOBOZ TECHNIKÁK TAPASZTALAT ALAPÚ TECHNIKÁK

Megoldások a mintavizsga kérdések a VIMIAC04 tárgy ellenőrzési technikák részéhez kapcsolódóan (2017. május)

SZOFTVER-MINŐSÉGBIZTOSÍTÁS SZOFTVER-TESZTELÉSI MÓDSZEREK. Széchenyi István Egyetem. Alapfogalmak

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

Kompetens szoftvertesztelés a gyakorlatban II. zárthelyi dolgozat

Szoftver karbantartási lépések ellenőrzése

Szoftverminőségbiztosítás

Modell alapú tesztelés: célok és lehetőségek

Algoritmizálás, adatmodellezés tanítása 6. előadás

Modellek ellenőrzése és tesztelése

Java programozási nyelv

MŰSZAKI TESZTTERVEZÉSI TECHNIKÁK A TESZT FEJLESZTÉSI FOLYAMATA A TESZTTERVEZÉSI TECHNIKÁK KATEGÓRIÁI

Szoftver értékelés és karbantartás

Szoftver-mérés. Szoftver metrikák. Szoftver mérés

Szoftver karbantartás

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

Miskolci Egyetem Alkalmazott Informatikai Intézeti Tanszék A minőségbiztosítás informatikája. Készítette: Urbán Norbert

A szoftver tesztelés alapjai

Algoritmusok helyességének bizonyítása. A Floyd-módszer

Korlátos modellellenőrzés. dr. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Modell alapú tesztelés

Unit Teszt. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Unit Teszt / 22

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

Mesterséges intelligencia alapú regressziós tesztelés

Szoftver tesztelés a gyakorlatban 2

Verifikáció és validáció Általános bevezető

Java II. I A Java programozási nyelv alapelemei

A fejlesztési szabványok szerepe a szoftverellenőrzésben

Az UPPAAL egyes modellezési lehetőségeinek összefoglalása. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Kiterjesztések sek szemantikája

Részletes szoftver tervek ellenőrzése

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Dinamikus modellek szerkezete, SDG modellek

Programozási nyelvek II. JAVA

Kifejezések. Kozsik Tamás. December 11, 2016

R3-COP. Resilient Reasoning Robotic Co-operating Systems. Autonóm rendszerek tesztelése egy EU-s projektben

OO rendszerek jellemzői

Java II. I A Java programozási nyelv alapelemei

Szoftverminőségbiztosítás

Szoftver-modellellenőrzés absztrakciós módszerekkel

1. Jelölje meg az összes igaz állítást a következők közül!

5. gyakorlat Modellek ellenőrzése és tesztelése Megoldások

Fordítás Kódoptimalizálás

Szoftverminőségbiztosítás

Programozási alapismeretek 1. előadás

A Feldspar fordító, illetve Feldspar programok tesztelése

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

8.3. AZ ASIC TESZTELÉSE

Programtervezés. Dr. Iványi Péter

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

Digitális technika (VIMIAA02) Laboratórium 3

... S n. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak.

Bevezetés az informatikába

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

Modell alapú tesztelés

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

S01-9 Szoftverfejlesztés minőségi aspektusai

Rendszermodellezés. Modellellenőrzés. Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1

Programozás alapjai (ANSI C)

1. Melyik szabvány foglalkozik dokumentumok tulajdonságainak megfogalmazásával? a. RDFS b. FOAF c. Dublin Core d. DBPedia

Digitális technika (VIMIAA02) Laboratórium 3

Modell alapú tesztelés

Elérhetőségi analízis Petri hálók dinamikus tulajdonságai

Modellellenőrzés. dr. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Robusztusság tesztelés

Szoftvertervezés és -fejlesztés I.

Tesztelési szintek Tesztautomatizálás

TESZTMENEDZSMENT TESZTELŐ SZERVEZET TESZTTERVEZÉS ÉS BECSLÉS

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Programozási nyelvek (ADA)

C programozási nyelv

Dr. Schuster György február / 32

MŰSZAKI TESZTTERVEZÉSI TECHNIKÁK TESZTELÉSI TECHNIKÁK KIVÁLASZTÁSA

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

INFORMATIKAI ALAPISMERETEK

Szoftverminőségbiztosítás

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

Programozás I. 1. előadás: Algoritmusok alapjai. Sergyán Szabolcs

Szoftverminőségbiztosítás

Temporális logikák és modell ellenırzés

Élő webes alkalmazások rendszerfelügyelete cím- és tartalomteszteléssel

Algoritmizálás, adatmodellezés 1. előadás

Mérés és modellezés 1

Szkriptnyelvek. 1. UNIX shell

Átírás:

Szoftver modul/unit tesztelés Majzik István Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék http://www.mit.bme.hu/ 1 Szoftvermodul tesztelés Szoftvermodultesztelés Szoftvermodultervezési specifikáció Szoftver minőségbiztosítási terv Összesítő jelentés itt Szoftvermoduligazolójelentés Szoftvermodultesztjelentés Szoftvermodultesztspecifikáció 2

Szabványok (EN 50128) előírásai Software design and implementation: Functional/black box testing (D3): 3 Szabványok (EN 50128) előírásai Performance testing (D6): 4

Szabványok (EN 50128) előírásai Funkcionális és fekete doboz tesztelés (HR) Határtérték elemzés (HR) Ekvivalencia osztályok és bemeneti adatfelosztás (HR) Ok-okozati diagramok Folyamatszimuláció Prototípus készítés / animáció Teljesítmény-tesztelés Lavina / stressz tesztelés (SIL 1 R -> SIL 3 HR) Válaszidő- és memóriakikötések (HR) Teljesítmény követelmények (HR) Interfész-tesztelés (HR) Adatrögzítés és elemzés (HR) Strukturált alapú tesztelés (SIL1 R -> SIL3 HR) 5 Tesztelés: Szoftvermodul tesztelési célok A program olyan futtatása, hogy a hibák kiderüljenek Kimerítő tesztelés: Minden lehetséges futást kipróbál Gyakorlatban nem kivitelezhető Mottók: Dijkstra: A tesztelés csak hibák jelenlétét, és nem hibamentességet tud kimutatni. Hoare: A tesztelés egy induktív bizonyítás része: Ha a program jól működik egy adott teszt adatra, akkor várhatóan hasonló adatokra is jól működik. 6

Teszttervezés módszerei I. Specifikáció alapú tesztelés A rendszer mint fekete doboz adott M1 Csak a külső viselkedés (funkció) ismert, a belső felépítés (pl. forráskód) nem m1() m2() m3() Tesztelés alapja: specifikált funkciók léte; extra funkciók hiánya II. Struktúra alapú tesztelés A rendszer mint üvegdoboz adott A belső struktúra is ismert Tesztelés alapja a belső működés: programgráf bejárása A2 M1 A1 A4 A3 8 I. Specifikáció alapú tesztelési módszerek Cél: A funkcionális specifikációra építve, reprezentatív adatok keresése az egyes funkciók teszteléséhez. Módszerek: 1. Ekvivalencia particionálás 2. Határérték-analízis 3. Ok-hatás analízis / Döntési táblák 4. Kombinatorikus módszerek 5. Véges automata alapú 6. Használati eset tesztelés 9

1. Ekvivalencia particionálás Bemenet és kimenet ekvivalencia osztályai: Adatok, amelyek várhatóan ugyanazt a hibát fedik le (ugyanazt a programrészt járják be) Cél: Egy-egy ekvivalencia osztályból egy-egy teszt adat (az adott bemenethez illetve kimenet alapján); a többi adat esetén a helyesség induktívan következik Meghatározás heurisztikus folyamat: Egyező funkcionalitást indító adatok, hasonló eredmények Érvényes és érvénytelen adatok Bemenet értelmezését ismerni kell Tesztelő tudásán múlik a módszer hatékonysága 10 Példa: Gyenge és erős ekvivalencia osztályok Tesztek meghatározása több bemenet esetén: Érvényes ekvivalencia osztályok: egy teszt minél több osztályt fedjen le Érvénytelen ekvivalencia osztályok: először minden érvénytelen osztályhoz külön teszt legyen (egymás hatását ne oltsák ki), majd több osztály kombinációja x2 x2 Gyenge ill. Erős normál ekvivalencia osztályok x1 x1 Dimenziónként nem függetlenül alakítható partíciók: Erős osztályok 11

Példa: NextDate program ekvivalencia osztályok Bemenet Érvényes Érvénytelen Hónap Nap Év V1: 30 napos hónap V2: 31 napos hónap V3: február V4: 1-30 V5: 1-31 V6: 1-28 V7: 1-29 V8: 1582-9999 V9: nem szökőév V10: szökőév V11: század nem szökőév V12: század szökőév I1: >= 13 I2: <= 0 I3: nem szám I4: üres I5: >= 32 I6: <= 0 I7: nem szám I8: üres I9: <=1581 I10: >= 9999 I11: nem szám I12: üres Speciális V13: 1752.09.03-1752.09.13. I13: 1582.10.5-1582.10.14. Forrás: How we test software at Microsoft, Microsoft Press, ISBN 0735624259, 2008. 12 2. Határérték-analízis Az adattartományok határait vizsgálja Egy-egy ekvivalencia osztály határaira koncentrál Bemeneti és kimeneti tartományokra is Alsó és felső határokra Tipikus megtalált hibák Hibás relációs operátorok Hibák a ciklusok be- és kilépési feltételeinél Hibák az adatstruktúrák méreténél Tipikus adatok: Egy határérték 3 tesztet jelent, egy tartomány 5-7 tesztet jelent h1 h2. 13

3. Ok-hatás analízis A bemenetek és kimenetek kapcsolatának vizsgálata (ha ez egyszerűen leírható) Ok: egy-egy bemeneti ekvivalencia osztály Hatás: egy-egy kimeneti ekvivalencia osztály Ezekből logikai változókat képzünk Boole-gráf: Okok és hatások összekapcsolása ÉS, VAGY kapcsolatok Meg nem engedett kombinációk Tesztelési cél: A gráf szisztematikus végigjárása Logikai hálózat igazságtáblázatának lefedése Egy oszlop egy tesztnek felel meg 14 Bemenetek: Példa: Ok-hatás leírása Kimenetek: Tulajdonos ID Adminisztrátor ID 1 2 OR A AND B Érvénytelen ID Hozzáférés Jogosultsági kód 3 C Elégtelen jog Bemenetek Kimenetek T1 T2 T3 1 0 1 0 2 1 0 0 3 1 1 1 A 0 0 1 B 1 1 0 C 0 0 0 15

4. Kombinatorikus módszerek Paraméterek kombinációja Paraméterek kombinációja okozza a legtöbb hibát Ritka kombinációk veszélyesek lehetnek Ad hoc, best guess Intuíció, követelmények, tipikus hibák alapján Minden választás (each choice) Minden lehetőség szerepeljen egyszer (alapkészlet) N-szeres tesztelés (n-wise testing) Tetszőlegesen választott n darab paraméter minden lehetséges kombinációjának lefedése a tesztelési cél Speciális eset (n=2): Páronkénti tesztelés Eszközök: Pl. http://www.pairwise.org 16 Példa: Pair-wise tesztelés Adottak a következő konfigurációs lehetőségek: OS: Windows, Linux CPU: Intel, AMD, Protocol: IPv4, IPv6 Kombinációk száma? Páronkénti tesztelést megvalósító tesztkészlet? Lehetséges megoldás: 1: Windows, Intel, IPv4 2: Windows, AMD, IPv6 3: Linux, Intel, IPv6 4: Linux, AMD, IPv4 17

Példa: N-wise testing hatékonysága Ad-hoc és páronként szisztematikus tesztelés összehasonlítása (10 projektre) A hibák jelentős része 2 paraméter kapcsolatán múlik (de alkalmazástól függően lehet még elég sok hiba, ami 3 vagy több paraméter speciális kombinációja esetén deríthető ki) Forrás: R. Kuhn et al. Combinatorial Software Testing, IEEE Computer, 42:8, 2009 18 5. Véges automata alapú tesztelés Specifikáció egy véges automatával adott Tipikus tesztelési célok: Minden állapot, minden átmenet, nem megengedett átmenetek tesztelése, stb. Problémák: Milyen állapotban van a rendszer? Végállapot / kezdőállapot Módszerek Automatikus tesztgenerálás (ld. később) W, Wp módszerek 19

6. Használati eset tesztelés Tesztek származtathatók a használati esetekből Tesztesetek: Fő ág ( happy path, mainstream ) Ellenőrzés: utófeltételek vizsgálata Alternatív lefutások: mindegyikhez külön teszteset Előfeltételek (nem)teljesülése Tipikusan integrációs és elfogadási tesztek része 20 Módszerek együttes alkalmazása Alap módszerek tipikus sorrendje: 1. Ekvivalencia particionálás 2. Határérték-analízis 3. Ok-hatás analízis, vagy kombinatorikus, vagy véges automata alapú Kiegészítés: Véletlen tesztek Véletlen teszt adatok generálása Kis számítási teljesítményt igényel, gyors Hibafedése nem garantálható Teszt eredmény kiértékelése: Válasz számítása, szimulálása Csak elfogadhatósági vizsgálat (durva hibák kiszűrése) 21

Teszttervezés módszerei I. Specifikáció alapú tesztelés A rendszer mint fekete doboz adott M1 Csak a külső viselkedés (funkció) ismert, a belső felépítés (pl. forráskód) nem m1() m2() m3() Tesztelés alapja: specifikált funkciók léte; extra funkciók hiánya II. Struktúra alapú tesztelés A rendszer mint üvegdoboz adott A belső struktúra is ismert Tesztelés alapja a belső működés: programgráf bejárása A2 M1 A1 A4 A3 22 A belső struktúra Jól kezelhető struktúra: Modell alapján: pl. aktivitás diagram, állapottérkép diagram S A1 S e0 / a0 A2 e1 / a2 S1 e1 / a1 e2[ g ] / a1 S2 S3 A4 A3 e1 / a2 e2 e2[ g1 ] / a2 A5 E S4 23

A belső struktúra Jól kezelhető struktúra: Modell alapján: pl. aktivitás diagram, állapottérkép diagram Forráskód alapján: vezérlési gráf (programgráf) Forráskód: a: for (i=0; i<max; i++) { b: if (i==a) { c: n=n-i; } else { d: m=n-i; } e: printf( %d\n,n); } f: printf( Ready. ) Vezérlési gráf: a Utasítás b c Ág d Út e f Feltétel 24 Tesztminőségi mértékszámok A tesztelés hatékonyságának számszerű jellemzése: A tesztelhető elemek mekkora részét teszteltük, pl. 1. Utasítások Utasítás fedettség 2. Döntési ágak Döntési ág fedettség 3. Feltételek Feltétel fedettség 4. Végrehajtási utak Út fedettség Ez nem a hibafedés! Szabványok előírása lehet (DO-178B, MSZ EN 50128,...) 100% utasítás fedettség általában alapkövetelmény 25

Mértékszámok (kritériumok) áttekintése Vezérlési folyam alapú kritériumok Utasítás lefedettség Döntési ág lefedettség Feltétel lefedettségek Útvonal lefedettség Adatfolyam alapú kritériumok Definiálás használat fedettségek Definíciómentes útvonalak fedettsége Módszerek kombinációja 26 Utasítás (statement) Blokk (block) Alapfogalmak Utasítások egybefüggő sorozata, amik között nincs elágazás vagy függvényhívás Feltétel (condition) Egyszerű vizsgálat, amiben nincs logikai (Boole) operátor Döntés (decision) Egy ág bejárásának eldöntéséhez tartozó, nulla vagy több logikai operátorral összekötött feltételből álló kifejezés Út (path) Utasítások sorozata, tipikusan a modul be és kilépési pontja között 27

1. Utasítás lefedettség (Statement coverage) Definíció: Tesztelés során végrehajtott utasítások száma Összes utasítás száma Utasítások kihagyási feltételeit nem veszi figyelembe! A1 k=0 A2 [a>0] k=1 [a<=0] A4 A3 m=1/k A5 Utasítás fedettség: 80% Utasítás fedettség: 100% 28 2. Döntés lefedettség (Decision coverage) Definíció: Tesztelés során végrehajtott döntési ágak száma Összes lehetséges döntési ág száma Nem vesz figyelembe minden feltétel-kombinációt! A2 A2 [safe(c) safe(b)] A4 A3 A4 A3 Döntési ág fedettség: 50% Döntési ág fedettség: 100% 29

3. Feltétel lefedettség (Condition coverage) Generikus fedettségi mérték feltétel fedettségekhez: Feltételek tesztelt kombinációinak száma Feltételek megcélzott kombinációinak száma Definíció (milyen kombinációkat célzunk meg): Minden feltétel legyen igaznak és hamisnak is beállítva a tesztelés során Nem feltétlenül eredményez 100% döntés lefedettséget! Példa 100%-os feltétel lefedettséghez: 1. safe(c) = true, safe(b) = false 2. safe(c) = false, safe(b) = true [safe(c) safe(b)] A4 A2 A3 Más definíció: Minden feltételt igaznak és hamisnak is kiértékelünk Ez nem ugyanaz mint a fenti, a lusta kiértékelés miatt 30 4. Feltétel/döntés lefedettség Condition/Decision Coverage (C/DC) Definíció: Minden feltétel felveszi az összes lehetséges kimenetét legalább egyszer, és minden döntés felveszi az összes lehetséges kimenetét egyszer 100%-os C/DC lefedettséghez: 1. safe(c) = true, safe(b) = true 2. safe(c) = false, safe(b) = false [safe(c) safe(b)] A4 A2 A3 Nem vizsgálja meg, hogy a feltételnek tényleg van-e hatása a döntés eredményére! 31

5. Módosított feltétel/döntés lefedettség Modified Condition/Decision Coverage (MC/DC) Definíció: Minden feltétel felveszi az összes lehetséges kimenetét legalább egyszer, és minden döntés felveszi az összes lehetséges kimenetét egyszer, és minden feltétel a többitől függetlenül befolyásolja a hozzá tartozó döntés kimenetelét 100%-os MC/DC lefedettséghez: A2 1. safe(c) = true, safe(b) = false 2. safe(c) = false, safe(b) = true [safe(c) safe(b)] 3. safe(c) = false, safe(b) = false A4 A3 32 6. Minden feltétel kombináció lefedettsége Multiple Condition Coverage Definíció: A feltételek kimeneteinek minden lehetséges kombinációja bekövetkezett a tesztelés során Általában a feltételek számával exponenciálisan növekedő számú teszt szükséges Kevesebb, ha a lusta kiértékelést is figyelembe vesszük 100%-os feltétel kombináció lefedettséghez: 1. safe(c) = true, safe(b) = false 2. safe(c) = false, safe(b) = true 3. safe(c) = false, safe(b) = false 4. safe(c) = true, safe(b) = true [safe(c) safe(b)] A4 A2 A3 33

Feltétel és döntési lefedettségek összefoglalása Vezérlési folyam alapú kritériumok viszonya Forrás: S. A. Vilkomir and J. P. Bowen, From MC/DC to RC/DC: formalization and analysis of control-flow testing criteria, Formal Aspects of Computing, vol. 18, no. 1, pp. 42-62, 2006. 35 7. Alap út lefedettség (Basis path coverage) Definíció: Tesztelés során bejárt független utak száma Összes független út száma 100% út lefedettség együtt jár: 100% utasítás lefedettség, 100% döntés lefedettség feltétel lefedettség nem garantált A1 A2 Út fedettség: 80% Utasítás fedettség: 100% A4 A3 A5 36

Tesztelés az út fedettség alapján 1/2 Cél: Független utak bejárása Független utak a tesztelés szempontjából: Van olyan utasítás vagy elágazás, ami a másikban nincs meg A független utak maximális száma: CK, ciklomatikus komplexitás Szabályos vezérlési gráf alapján meghatározható: CK(G)=E-N+2, ahol E: élek száma N: csomópontok száma a G vezérlési gráfban (vezérlési gráf összekötött, 1 kimenet és 1 bemenet) A független utak halmaza nem egyedi 37 Tesztelés az út fedettség alapján 1/2 A1 Cél: Független utak bejárása Független utak a tesztelés szempontjából: A2 Van olyan utasítás vagy elágazás, ami a másikban nincs meg A független utak maximális száma: CK, ciklomatikus komplexitása5 Szabályos vezérlési gráf alapján meghatározható: CK(G)=E-N+2, ahol E: élek száma N: csomópontok száma a G vezérlési gráfban (vezérlési gráf összekötött, 1-1 kimenet és bemenet) A független utak halmaza nem egyedi A4 A3 N=5, E=8, CK=5 max. 5 független út! 38

Tesztelés az út fedettség alapján 2/2 Algoritmus: Max. CK számú független út kiválasztása Bemenetek generálása egy-egy út bejárásához Problémák: Nem minden út bejárható (ld. feltételek). Generálható-e az úthoz bemeneti szekvencia? Lehetséges-e a belső változók beállítása? Ciklusok: Korlátozni (minimalizálni) kell a bejárást! Teljesen automatikus módszerek nem léteznek 39 Kiegészítő fedettségi mértékek Loop Ciklusok 0 (ahol értelmezhető), 1, illetve többszöri végrehajtása Race Több szál futása egyszerre egy-egy kódrészleten Relational operator Határértékek használata összehasonlító operátorok esetén Weak mutation Operátor vagy operandus hibákra tesztek készítése Table Ugrási táblák (állapotgép megvalósítások) teljes tesztelése Linear code sequence and jump Lineáris szekvenciák fedése a forráskódban (lehetnek benne vezérlési utasítások, de lineárisan bejárva) Object code branch Gépi kódú feltételes ugrások fedése (fordító függő) 40

Példa: Vezérlési folyam alapú kritériumok Product getproduct(string name, Category cat){ if (name == null! cat.isvalid) throw new IllegalArgumentException(); Product p = ProductCache.getItem(name); if (p == null){ p = DAL.getProduct(name, cat); } return p; } Cél: Utasítás fedettség, döntési ág fedettség, C/DC fedettség 41 Mértékszámok (kritériumok) áttekintése Vezérlési folyam alapú kritériumok Utasítás lefedettség Döntési ág lefedettség Feltétel lefedettségek Útvonal lefedettség Adatfolyam alapú kritériumok Definiálás használat fedettségek Definíciómentes útvonalak fedettsége Módszerek kombinációja 42

Adatfolyam alapú tesztelés Cél: Változók értékadásának és az értékek felhasználásának vizsgálata a tesztelés során Rossz értéket adtam? Rosszul használtam fel? Inicializálatlan? A programgráf címkézése: def v: v változó értékadása c-use v: v változó felhasználása számításban p-use v: v változó felhasználása elágazási feltételben Útvonalak: def-clear v útvonal: nincs benne def v címkéjű utasítás d-u v (def-use v) útvonal: def v címkéjű utasítással indul p-use v vagy c-use v utasítással zárul Közben def-clear v útvonal van Nincs belső hurok (legfeljebb a teljes d-u v útvonal képez hurkot) 43 Példa a címkézésre x y z a x=a+2 def x c-use a y=24 def y z=x+y c-use x c-use y def z if (x>12) p-use x p-use x p-use x 44

All-defs: All-defs fedettségi kritérium Minden v változóra, minden def v utasításra: Egy use v utasításig legalább egy def-clear v útvonal tesztelése (itt use v lehet akár p-use v, akár c-use v) forall v, forall def v: def v one def-clear path tested: to one use v: use v use v use v 46 All-p-uses: All-p-uses, all-c-uses kritériumok Minden v változóra, minden def v utasításra: Minden p-use v utasításig legalább egy def-clear v útvonal tesztelése All-c-uses: Minden v változóra, minden def v utasításra: Minden c-use v utasításig legalább egy def-clear v útvonal tesztelése forall v, forall def v: def v def v one def-clear path tested: to all use v: p-use v p-use v p-use v c-use v c-use v c-use v 47

All-p-uses/some-c-uses: További variációk és all-uses Minden v változóra, minden def v utasításra: Minden p-use v utasításig és (ha p-use v nincs) legalább egy c-use v utasításig legalább egy def-clear v útvonal tesztelése All-c-uses/some-p-uses: Minden v változóra, minden def v utasításra: Minden c-use v utasításig és (ha c-use v nincs) legalább egy p-use v utasításig legalább egy def-clear v útvonal tesztelése All-uses: Minden v változóra, minden def v utasításra: Minden use v utasításig legalább egy def-clear v útvonal tesztelése Az eddigi kritériumokat magába foglalja 48 All-paths: All-paths és all-du-paths Minden v változóra, minden def v utasításra: Minden use v utasításig minden bejárható def-clear v útvonal tesztelése Hurkok esetén problémás a definíció teljesítése (bejárások száma) All-du-paths: Minden v változóra, minden def v utasításra: Minden use v utasításig minden d-u v útvonal tesztelése forall v, forall def v: def v def v all def-clear path tested: all d-u path tested: to all use v: use v use v use v use v use v use v 49

Adatfolyam alapú kritériumok hierarchiája all-paths Nehezen megvalósító all-du-paths all-uses all-c-uses / some-p-uses all-p-uses / some-c-uses all-defs 100% döntési ág fedettség 100% utasításfedettség; általában minimum kritérium all-p-uses all-edges all-nodes 50 Mértékszámok (kritériumok) áttekintése Vezérlési folyam alapú kritériumok Utasítás lefedettség Döntési ág lefedettség Feltétel lefedettségek Útvonal lefedettség Adatfolyam alapú kritériumok Definiálás használat fedettségek Definíciómentes útvonalak fedettsége Módszerek kombinációja 51

Teszttervezési módszerek összefoglalása Specifikáció és struktúra alapú módszerek Sokféle módszer illetve technika Mindegyik alkalmazásához gyakorlat kell A gyakorlatban általában csak a legegyszerűbb módszereket használják Biztonságkritikus rendszerek: Vannak előírt módszerek (pl. DO178B szabvány: MC/DC szerinti tesztelés) Technikák kombinációja hatásos általában: Példa (MS tanulmány): specifikáció alapú: 83%-os kódfedés + exploratory: 86%-os kódfedés + strukturális: 91%-os kódfedés 52 Tesztek végrehajtása Milyen sorrendben hajtsuk végre a teszteket: Ha várhatóan kevés a hiba: Először a hatékony (nagyobb hibafedésű) teszteket! Hosszabb utak, összetett feltételű elágazások tesztje hibafedés hibafedés c 1 c 2 t t t teszt t teszt 53

Mire jók? Mire jók a teszt fedettségi mértékek? Megtalálhatók azok a programrészek, ahol hiányos a tesztelés Ez alapján bővíthető a teszt készlet Azonosíthatók a redundáns tesztek (azonos részeket fednek le) Adatfüggésre is figyelni kell (más adattal más hibát tesztel) Indirekt mértéke a kód minőségének a sikeres tesztekhez tartozó fedettség Inkább mértéke a tesztkészlet teljességének A tesztelés befejezése a mértékekhez köthető Mire nem jók? Az implementációból kihagyott (nem megvalósított) követelmények tesztelése Kódrészletek kiragadásával történő tesztelés eredményessége kérdéses (a kódrészlet elveszíti környezetét) 54