Struktúra alapú teszttervezési módszerek

Hasonló dokumentumok
Struktúra alapú teszttervezési módszerek

Szoftver modul/unit tesztelés

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

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

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

Szoftverminőségbiztosítás

Szoftverminőségbiztosítás

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

Szoftver tesztelés a gyakorlatban 2

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

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

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

Modell alapú tesztelés mobil környezetben

Java programozási nyelv

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

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

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

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)

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

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

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

C programozás. 1 óra Bevezetés

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

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

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

OO rendszerek jellemzői

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

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

C programozási nyelv

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

Dinamikus modellek szerkezete, SDG modellek

Programozási alapismeretek 1. előadás

Java II. I A Java programozási nyelv alapelemei

Modell alapú tesztelés

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Java II. I A Java programozási nyelv alapelemei

Programozási nyelvek (ADA)

Modell alapú tesztelés

Tartalomjegyzék. Általános Információ! 2. Felhasználói dokumentáció! 3. Feladat! 3. Környezet! 3. Használat! 3. Bemenet! 3. Példa!

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

Programozási nyelvek II. JAVA

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

Szoftverminőségbiztosítás

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

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

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

Programozás C és C++ -ban

Szkriptnyelvek. 1. UNIX shell

Szoftvertervezés és -fejlesztés I.

Modell alapú tesztelés

Kiterjesztések sek szemantikája

Komputeralgebra Rendszerek

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

Bevezetés az informatikába

Mintavételes szabályozás mikrovezérlő segítségével

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

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

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

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

Programozás II. 2. Dr. Iványi Péter

AWK programozás, minták, vezérlési szerkezetek

Digitális Technika. Dr. Oniga István Debreceni Egyetem, Informatikai Kar

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

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Vezérlési szerkezetek

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

A C# programozási nyelv alapjai

Fordító részei. Fordító részei. Kód visszafejtés. Izsó Tamás szeptember 29. Izsó Tamás Fordító részei / 1

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Modellek ellenőrzése és tesztelése

Szoftver karbantartás

Webprogramozás szakkör

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

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

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

Dr. Schuster György február / 32

Programozás BMEKOKAA146. Dr. Bécsi Tamás 3. előadás

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

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

A félév során előkerülő témakörök

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Programzás I gyakorlat

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

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

Bevezetés a C++ programozási nyelvbe

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

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

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

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

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

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

Programozás I. Metódusok C#-ban Egyszerű programozási tételek. Sergyán Szabolcs

Digitális Technika. Dr. Oniga István Debreceni Egyetem, Informatikai Kar

A szoftver tesztelés alapjai

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

Karakterkészlet. A kis- és nagybetűk nem különböznek, a sztringliterálok belsejét leszámítva!

Átírás:

Szoftverellenőrzési technikák Struktúra alapú teszttervezési módszerek Majzik István, Micskei Zoltán http://www.inf.mit.bme.hu/ 1

Teszttervezés módszerei I. Specifikáció alapú 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ú M1 A rendszer mint üvegdoboz adott A1 A belső struktúra is ismert Tesztelés alapja a belső működés: programgráf bejárása A2 A4 A3 2

Jól kezelhető struktúra: A belső 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 3

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 4

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 5

Tartalom 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 Összefoglalás Módszerek kombinációja Teszt fedettség mérése 6

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 7

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% 8

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% 9

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 10

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! 11

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: 1. safe(c) = true, safe(b) = false 2. safe(c) = false, safe(b) = true 3. safe(c) = false, safe(b) = false [safe(c) safe(b)] A4 A2 A3 12

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 13

Feltétel és döntési lefedettségek összefoglalása Forrás: Kelly J. Hayhurst et al. A Practical Tutorial on Modified Condition/Decision Coverage, NASA/TM- 2001-210876, 2001 14

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. 15

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 16

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 17

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 18

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 A4 A3 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 A5 N=5, E=8, CK=5 max. 5 független út! 19

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 20

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ő) 21

Tartalom 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 Összefoglalás Módszerek kombinációja Teszt fedettség mérése 22

Alapfogalmak Alapötlet: Változók értékadásának és felhasználásának viszonyát vizsgáljuk Hibás értékadás, hibás felhasználás detektálható A programgráf címkézése def(v): adott helyen a v változónak értéket adunk use(v): adott helyen a v változót felhasználjuk p-use(v): v értékét feltételben használjuk c-use(v): v értékét számolásban használjuk A programgráf útjai Definíciómentes út (definition clear path): v-nek nem adunk értéket az út csomópontjaiban 23

Példa a címkézésre Változók: 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 24

Adatfolyam alapú tesztelési kritériumok All-defs: def v use v minden v, minden def v: egy def-mentes út tesztelve: def v egy use-v-ig: use v use v use v 25

Adatfolyam alapú tesztelési kritériumok All-defs: def v use v minden v, minden def v: egy def-mentes út tesztelve: def v egy use-v-ig: use v use v use v All-uses: def v All-paths: def v (p-uses, c-uses) use v use v use v use v use v use v 26

Strukturális fedettségi kritériumok viszonya All-DU-Paths All-Uses Bonyolultabb fedési kritériumok a biztonságkritikus szabványokban All C-Uses / Some P-Uses All-P-Uses / Some C-Uses All-Defs All-P-Uses All-Edges All-Nodes Ezt már egy igényesebb tesztelési cél A projektek nagy része ezt sem éri el, 90%-os lefedettség már egy jó cél 27

Tartalom 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 Összefoglalás Módszerek kombinációja Teszt fedettség mérése 28

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 29

Mire jók a teszt fedettségi mértékek? Mire jók? 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) 30

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 31

Példa: Teszt fedettség mérése: gcov, ggcov gcov: gcc mellett használható Korlátozott tudású (felülvizsgálat szükséges) Program felműszerezése: Speciális fordítás gcc -ftest-coverage -fprofile-arcs src.c Naplózza az egyes programágak végrehajtását -fprofile-arcs esetén döntési ágakat is Elkészülő log fájlok:.bb,.bbg,.da Off-line elemzés: gcov gcov src.c 88.89% of 9 source lines executed in file cov.c Annotált forráskód Grafikus jelentés: ggcov 32

Példa: gcov annotált forráskód #include <stdio.h> int main (void) { 1 int i; 10 for (i = 1; i < 10; i++) { 9 if (i % 3 == 0) 3 printf ("%d is divisible by 3\n",i); 9 if (i % 11 == 0) ###### printf ("%d is divisible by 11\n",i); 9 } 1 return 0; 1 } 33

Példa: ggcov elemzés 34

Példa: ggcov elemzés green - executed at least once yellow - part of the line executed red - never executed blue - suppressed black - no executable code 35

IPL Cantata++ architektúra 36