Szoftverminőségbiztosítás



Hasonló dokumentumok
Szoftverminőségbiztosítás

Szoftver tesztelés a gyakorlatban 2

Struktúra alapú teszttervezési módszerek

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

Szoftverminőségbiztosítás

Szoftverminőségbiztosítás

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

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

ESZKÖZTÁMOGATÁS A TESZTELÉSBEN

Szoftverminőségbiztosítás

Szoftverminőségbiztosítás

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

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

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

Szoftverminőségbiztosítás

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)

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

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

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

OO rendszerek jellemzői

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

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

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

Teljesítmény Mérés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Teljesítmény Mérés / 20

Rendszermodellezés: házi feladat bemutatás

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

Programozási nyelvek (ADA)

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

Kiterjesztések sek szemantikája

Fordító Optimalizálás

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

Java programozási nyelv

Modellek ellenőrzése és tesztelése

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

TESZTELÉSI MÓDSZEREK

Szoftverminőségbiztosítás

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

Bevezetés a programozásba I.

C programozási nyelv

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

Szoftvermérés:hogyan lehet a szoftvertermék vagy a szoftverfolyamat valamely jellemzőjéből numerikus értéket előállítani.

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

Szoftver karbantartás

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

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

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

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

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

Dinamikus modellek szerkezete, SDG modellek

Formális módszerek GM_IN003_1 Program verifikálás, formalizmusok

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

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

Szoftverminőségbiztosítás

Programozás C nyelven (3. ELŐADÁS) Sapientia EMTE

Bonyolultsági. mértékek erlang programokhoz. Király Roland

Komputeralgebra Rendszerek

Fejlett programozási nyelvek C++ Iterátorok

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

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

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

Laborgyakorlat 3 A modul ellenőrzése szimulációval. Dr. Oniga István

Bevezetés az informatikába

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

Modell alapú tesztelés mobil környezetben

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

S z á m í t ó g é p e s a l a p i s m e r e t e k

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

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

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

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

A C programozási nyelv II. Utasítások. A függvény.

8.3. AZ ASIC TESZTELÉSE

Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba

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

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

Szoftverminőségbiztosítás

S01-7 Komponens alapú szoftverfejlesztés 1

PROGRAMOZÁS tantárgy. Gregorics Tibor egyetemi docens ELTE Informatikai Kar

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

Programozási nyelvek 6. előadás

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

Hardver leíró nyelvek (HDL)

BASH script programozás II. Vezérlési szerkezetek

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

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

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

C programozás. 1 óra Bevezetés

Szelekció. Döntéshozatal

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

A C# programozási nyelv alapjai

A JavaScript főbb tulajdonságai

Programrendszerek tanúsítása szoftverminőség mérése

Programozási nyelvek a közoktatásban alapfogalmak I. előadás

Adatszerkezetek 7a. Dr. IványiPéter

Programozási nyelvek Python

Python bevezető foglalkozás Python bevezető foglalkozás

Webprogramozás szakkör

A szoftver-folyamat. Szoftver életciklus modellek. Szoftver-technológia I. Irodalom

Átírás:

NGB_IN003_1 SZE 2014-15/2 (10) Szoftverminőségbiztosítás Struktúra alapú (white-box) technikák

A struktúrális tesztelés Implementációs részletek figyelembevétele Tesztelési célok -> lefedettség Implicit hibamodell A hibák a vezérlési szerkezeteket érintik Vezérlési folyam követése Kimerítő út tesztelés nem végezhető Metrika alapú teszttervezés

Struktúrális tesztelés alkalmazása Vezérlés-intenzív alkalmazások Tervezési hibák felderítése Szabványok szerinti tesztelés

Funkcionális és struktúrális tesztelés Funkcionális tesztelés alaposságának ellenőrzése Specifikáció alapú (funkcionális) tesztekkel elért lefedettség mérése kiegészítés további tesztesetekkel valamilyen értelemben teljes lefedettség elérése Tisztán struktúrális alapon létrehozott tesztesetek

Funkcionális és struktúrális tesztelés (folyt.) Specifikáció Specifikáció Szoftver Teszt fut. Tesztkészlet Szoftver Teszt fut. Tesztkészlet Futási eredmények Elvárt eredmények Lefedettségi elemzés Elvárt eredmények Futási eredmények Értékelés Értékelés

Funkcionális és struktúrális tesztelés (folyt.) önmagában egyik módszer sem kielégítő nincs szignifikáns különbség a hatékonyságban kiegészítik egymást végrehajtási sorrend: funkcionális tesztek struktúrális tesztek

Tesztlefedettség Annak a mértéke, hogy egy tesztkészlet lefuttatásával milyen mértékben hajtódott végre a program kód (Milyen alapos volt a tesztelés?) L=(végrehajtott lefedettségi elemek száma)/(az összes a kódban lévő lefedettségi elemek száma) A kódnak rendelkezésre kell állnia A lefedettségi elemeket meg kell tudni számlálni A tesztvégrehajtás közben "mérni" kell az elért lefedettséget

A tesztlefedettség jellemzői Ugyan azon tesztkészlet eltérő lefedettséget eredményez(het) eltérő lefedettségi elemekre Több eltérő tesztkészlet eredményezhet ugyan olyan lefedettséget (pontosan ugyanazokat a lefedettségi elemeket) de eltérő lehet a hiba-felderítő képességük A lefedettségi mutató segítségével nem lehet azonosítani a specifikáció nem implementált részeit

Tesztlefedettség elemzők Speciális teszteszközök a lefedettség mérésével kapcsolatos tevékenységek automatizálására a program kód instrumentálása (beműszerezés) tesztek végrehajtása (az instrumentált kód lefedettségi adatainak gyűjtése) tesztjelentés készítése (melyből meghatározhatók a lefedett elemek ill. előállnak a lefedettségi statisztikák)

Vezérlésfolyam gráf A vezérlésfolyam (control flow) elemzés a program futás közbeni viselkedésének a program struktúrára vetítése Vezérlésfolyam gráf A struktúrális tesztek (lefedettség elemek) meghatározásának egyik legfontosabb kiindulási modellje A program lebontása alap blokkokra (szekvenciálisan egymást követő utasítások) A gráf elemei: N - az alapblokkok halmaza, gráf csomópontok E - a blokkok egymásutánisága, gráf élek n0 - a kiinduló blokk

Vezérlésfolyam gráf (pl.)

Lefedettség típusok Magas szintű tesztelési lefedettség elemek követelmény-lista elem, menü opció, tranzakció típus, adatbázis struktúra elem, interfész elem, állapot átmenet, stb. Kódlefedettség típusok vezérlésfolyam gráf elemek: utasítások alap blokkok (döntés-döntés utak) döntés kimenetelek (ágak) összetett logikai kifejezések részkifejezései független utak

Kód lefedettség mértékek Metrika C0 C1 C1p C2 Cd CMCC C Leírás Utasítás lefedés (minden utasítás) Döntés-döntés út lefedés (minden alap blokk) Döntés kimenet lefedés (minden döntés minden kimenete) C1 + ciklus lefedés C1 + függő út-párok figyelembevétele Összetett feltétel lefedés (boole lefedés) Út lefedés (minden lehetséges út)

Lefedettség mérése Az instrumentálás intruzív tevékenység! A különböző lefedettség elemeket általában a magaszintű programozási nyelv elemeire értjük (utasítás, ág, logikai kifejezés, stb.) object code visszavezetése magasszintű forrásra (optimalizáló compiler ) végrehajtáskor az instrumentálás okozhat overhead-et real time követelmények, spec. időzítések?!

Ciklomatikus komplexitás McCabe definiálta program-komplexitás mérésére Gráf ciklomatikus száma erősen összefüggő síkbeli irányított gráf ennyi régióra osztja a síkot független körök száma a gráfban V(G)=e-n+p Vezérlésfolyam gráfra: V(G)=e-n+2p (p=1) => V(G)=e-n+2 lineárisan független program-utak száma (lehetséges program-utak "bázis rendszerének" számossága)

Lineárisan független utak (pl.) Utak\Élek 1 2 3 4 5 6 7 8 9 10 A,B,C,G 1 0 0 1 0 0 0 0 1 0 A,B,C,B,C,G 1 0 1 2 0 0 0 0 1 0 A,B,E,F,G 1 0 0 0 1 0 0 1 0 1 A,D,E,F,G 0 1 0 0 0 1 0 1 0 1 A,D,F,G 0 1 0 0 0 0 1 0 0 1 A,B,C,B,E,F,G 1 0 1 1 1 0 0 1 0 1 A,B,C,B,C,B,C,G 1 0 2 3 0 0 0 0 1 0

Program és gráf-topológia A gráfutak halmaza eltérhet a program (implementált) valódi bejárható útjaitól! Specifikált működés Programozott (Megvalósulható) működés Gráf topológia szerinti működés

Ciklomatikus komplexitás és tesztelés minimális cél a független utak egy maximális halmazának lefedése tesztekkel a maximális (számosságú) úthalmaz nem egyedi a ciklomatikus komplexitás használható a független utak számának meghatározására McCabe a ciklomatikus komplexitásról és az útalapú tesztelésről: csak tesztelési minőségi kritérium, nem módszer a tesztesetek azonosítására

Ciklomatikus komplexitás és tesztelhetőség A ciklomatikus komplexitás jó metrika a program komplexitására (fejlesztési, megértési erőfeszítés) hibavalószínűség => tesztelési figyelem tesztelési nehézség Ciklomatikus komplexitás Kockázat 1-10 Egyszerű program 11-20 Komplex program, mérsékelt kockázat 21-50 Komplex, magas kockázat 50- Tesztelhetetlen program

A lefedettség erőssége Lefedettség típusok erőssége (alapossága): C > C2 > C1 > C0 Az erősebb lefedettség magában hordozza a gyengébbet A szabványok általában C1 lefedettség elérését kívánják meg

A lefedettség erőssége (pl.) c g a b e f i j d h Teljes utasítás lefedés a,b,c,e,f,g,i,j a,b,d,e,f,h,i,j Teljes döntés-kimenet lefedés a,b,c,e,f,g,i,j a,b,d,e,f,h,i,j Teljes független út lefedés a,b,c,e,f,g,i,j a,b,d,e,f,h,i,j a,b,c,e,f,h,i,j Teljes út lefedés a,b,c,e,f,g,i,j a,b,d,e,f,h,i,j a,b,c,e,f,h,i,j a,b,d,e,f,g,i,j

A lefedettség erőssége (pl.) Amikor az utasítás lefedés kevés:... i=0; if(a){ i=5; } c=b/i;...

Összetett logikai kifejezések feltételekben Az összetett logikai kifejezés összes lehetséges kombinációja tesztelendő utasítás komplexitás <-> út komplexitás különböző nyelvek eltérő logikai operátor szemantikája "mellékhatások" az összetett logikai kifejezésben

Összetett logikai kifejezések feltételekben (pl.) Amikor a C MCC elérése fontos lehet: if ( feltétel1 && ( feltétel2 függvény1() ) ) utasítás1; else utasítás2; Tesztesetek: 1. feltétel1 hamis 2. feltétel1 igaz, feltétel2 igaz Teljes C 1 lefedés, de függvény1() nem került meghívásra.

Lefedettség elemző eszköz (pl.) gcov statement coverage report -: 69:template <typename T> -: 70:int seqsearch(const T list[], int listlength, T searchitem) -: 71:{ 1: 72: int loc; -: 73: 2: 74: for (loc = 0; loc < listlength; loc++) 2: 75: if (list[loc] == searchitem) 1: 76: return loc; -: 77: #####: 78: return -1; -: 79:}

Lefedettség elemző eszköz (pl.) gcov branch coverage report -: 84:template <typename T> -: 85:int seqorderedsearch(const T list[], int listlength, T searchitem) -: 86:{ 1: 87: int loc = 0; -: 88: 1: 89: while (loc < listlength && list[loc] < searchitem) branch 0 taken 0 call 1 returns 1 branch 2 taken 0 branch 3 taken 1 -: 90: { #####: 91: ++loc; branch 0 never executed -: 92: } 1: 93: if (loc < listlength && list[loc] == searchitem) branch 0 taken 0 call 1 returns 1 branch 2 taken 0 1: 94: return loc; branch 0 taken 1 -: 95: else #####: 96: return -1; -: 97:} Összetett log. kif. miatt branch cov. Összetett log. kif. miatt

Az adatfolyam tesztelése Az adatfolyam alapú tesztelés vezérlés folyam információ (gráf) segítségével elemzi az adatfolyamot Adatfolyam értékadásoktól (DEF) az érték felhasználásáig (USE) két féle felhasználás: számításban (C-USE), elágazási feltételben (P-USE) Input (változók)tól az output (változók)ig Cél: a tesztekkel végrehajtani az összes útvonalat a definícióktól a felhasználásokig

Az adatfolyam tesztelése (folyt.) változók értékadásai és felhasználásuk definiálás/hivatkozás hibák never used never defined define more times before used DF-utak (definíció/felhasználás) DEF(v,m) USE(v,n), p-use, c-use definition-clear path

Az adatfolyam tesztelése (folyt.) Rapps-Weyuker adatfolyam lefedési metrikák All-DU paths All-Uses All C-uses/some P-uses All P-uses/some C-uses All-Defs

Adatfolyam utak (pl.) 1 int testfloat(char s[]){ 2 int i=0; 3 int f=0; 4 while(isspace(s[i])) 5 i++; 6 if(s[i]=='+' s[i]=='-') 7 i++; 8 f=i; 9 while(isdigit(s[i])) 10 i++; 11 if(s[i]=='.'){ 12 i++; 13 f=i; 14 while(isdigit(s[i])) 15 i++; 16 if(f==i) 17 return 0; 18 } 19 if(f==i) 20 return 0; 21 if(s[i]=='e' s[i]=='e'){ 22 i++; 23 if(s[i]=='+' s[i]=='-') 24 i++; 25 f=i; 26 while(isdigit(s[i])) 27 i++; 28 if(f==i) 29 return 0; 30 } 31 if(s[i]) 32 return 0; 33 else return 1; 34 } du-path1: DEF(i,2)..C-USE(i,8) nem definíció mentes pl. DEF(i,5) du-path2: DEF(f,3)..P-USE(f,16) nem definíció mentes pl. DEF(f,8) du-path3: DEF(f,25)..P-USE(f,28) definíció mentes