Szoftver tesztelés a gyakorlatban 2

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

Szoftverminőségbiztosítás

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

Szoftverminőségbiztosítás

Struktúra alapú teszttervezési módszerek

Szoftverminőségbiztosítás

Java programozási nyelv

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 újrafelhasználás

Kód átvizsgálás. Irodalom. (Code review) code review,smart Bear Inc., ! Jason Cohen: Best kept secrets of peer

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

Miskolci Egyetem Általános Informatikai Tanszék

A tesztelés feladata. Verifikáció

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

Modellek ellenőrzése és tesztelése

Szoftverminőségbiztosítás

OO rendszerek jellemzői

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

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

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

S01-7 Komponens alapú szoftverfejlesztés 1

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

UML (Unified Modelling Language)

Szoftver-technológia II. Modulok és OOP. Irodalom

Szoftverminőségbiztosítás

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

Struktúra alapú teszttervezési módszerek

Szoftver-technológia II. Szoftver újrafelhasználás. (Software reuse) Irodalom

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

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

Komponens alapú fejlesztés

Szoftverminőségbiztosítás

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

Modell alapú tesztelés mobil környezetben

Szoftver modul/unit tesztelés

Statikus technikák: A szoftver átvizsgálása. Statikus technikák: A szoftver átvizsgálása

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

ködös határ (félreértés, hiba)

Név: Neptun kód: Pontszám:

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

A szoftver tesztelés célja

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

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

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

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

Programozás C nyelven 5. ELŐADÁS. Sapientia EMTE

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

Rendszer-modellezés, modellezési technikák

Programozási nyelvek II. JAVA

Szoftver-technológia II. Architektúrák dokumentálása UML-lel. Irodalom. Szoftver-technológia II.

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

Formális módszerek GM_IN003_1 Bevezetés

Rendszer-modellezés, modellezési technikák

A C# programozási nyelv alapjai

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

Java II. I A Java programozási nyelv alapelemei

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

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

ELTE, Informatikai Kar december 12.

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

Információtartalom vázlata

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

Java II. I A Java programozási nyelv alapelemei

Modell alapú tesztelés

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

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

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

V & V Feladatok. V & V Feladatok

INFORMATIKA javítókulcs 2016

Intelligens eszközök fejlesztése az ipari automatizálásban Evosoft Hungary kft., Evosoft Hungary Kft.

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

Szoftver követelmények meghatározása

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

Szoftvertechnológia ellenőrző kérdések 2005

A tesztelés szükségessége

Programfejlesztési Modellek

Szkriptnyelvek. 1. UNIX shell

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

5. előadás. Programozás-elmélet. Programozás-elmélet 5. előadás

Objektum Orientált Szoftverfejlesztés (jegyzet)

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

Kiterjesztések sek szemantikája

Alapok. tisztán funkcionális nyelv, minden függvény (a konstansok is) nincsenek hagyományos változók, az első értékadás után nem módosíthatók

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

Parametrikus tervezés

Modell alapú tesztelés

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

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

Komputeralgebra Rendszerek

Integrációs mellékhatások és gyógymódok a felhőben. Géczy Viktor Üzletfejlesztési igazgató

Adminisztrációs feladatok Strukturált programok A C programnyelv elemei

Szoftver architektúra, Architektúrális tervezés

IRÁNYÍTÓ RENDSZER IRÁNYÍTANDÓ FOLYAMAT. Biztonsági funkciók Biztonsági integritás. Normál működés. Hibák elleni védettség Saját (belső) biztonság

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

A szoftverfejlesztés eszközei

Szoftverminőségbiztosítás

Oktatási segédlet 2014

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

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

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

Átírás:

Szoftver tesztelés a gyakorlatban 2 Struktúrális tesztelés 2 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ú teszt tervezés

3 Tesztesetek Specifikált m!ködés Tesztesetek 2 Program m!ködése Tesztesetek 1 Struktúrális tesztelés alkalmazása 4! Vezérlés-intenzív alkalmazások! Tervezési hibák felderítése! Szabványok szerinti tesztelés

Vezérlés-folyam alapú tesztelés 5! vezérlés-folyam gráf! irányított gráf! csomópontok: utasítások! élek: egymást követ! utasítások között! többféle granuláltságú vezérlés-folyam gráf! visszavezethet!k egyedi DD-út gráffá 6 Vezérlés-folyam gráf (pl.) 4 5 6 7 8 9 1ö 11 12 13 21 14 15 16 17 18 19 20 22 23

7 Vezérlés-folyam gráf (pl.)! struktúrálatlan program! lehetetlen a kimerít! tesztelés first A B C D E F G last 8 DD-út! Döntés-döntés út! csomópont indeg=0! csomópont outdeg=0! csomópont indeg"2 vagy outdeg"2! csomópont indeg=1 és outdeg=1! maximális lánchossz"1

9 DD-út gráf példa first A B C D E F G H I J K L M N O last 10 Teszt lefedettségi metrikák C 0 C 1 C 1 p minden utasítás minden DD-út minden pred. összes kimenetel C 2 +ciklusok C d +függ! DD-út párok C MCC többszörös feltétel C # minden lehetséges út

11 Ciklusok kezelése! Önálló ciklus (max n futás)! egyszer! kétszer! m(<n)-szer! n-1, n, n+1 menet! Egymásba ágyazott ciklusok! belülr!l kifelé haladva, küls!k min., tesztelés alatt álló végig, már teszteltek fix értéken 12 Ciklusok kezelése (folyt.) first first first A A A B B B C C C D D D last last last

13 Független utak! legalább egy élben eltérnek egymástól! minimális cél a független utak egy maximális halmazának lefedése tesztekkel! a maximális úthalmaz nem egyedi! a ciklomatikus komplexitás használható a független utak számának meghatározására 14 Ciklomatikus komplexitás! 1976 Thomas McCabe! statikus szoftver metrika! lineárisan független utak száma egy program modulban! egész szám! programnyelv független

15 Ciklomatikus komplexitás! gráfok cikomatikus száma! V(G)=e-n+p! e élek! n csomópontok! p komponensek A A 1 2 B D B D 5 6 3 4 E 7 8 E C F C F 9 10 G G Független utak (pl.) A 1 2 B D 5 6 3 4 E 7 8 C F 16 9 10 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 G

last d a A first 17 Alapvet! komplexitás! kondenzációs gráf komplexitása! struktúrált programozás! szekvencia! if-then! if-then-else! case! el!l tesztel! ciklus! hátul tesztel! ciklus 18 Alapvet! komplexitás (pl.) first first first first A A A A B a a a first C D E F F F F e G H G H G H G c I J I J I b K L K L N M N M N last O O O O last last last last

19 A metrika felhasználása! er!s korreláció a metrika és a hibák gyakorisága között! kockázat (risk) becslés! program érthet!sége! karbantartás, módosítás! tesztelhet!ség 20 Kockázat becslés Ciklomatikus komplexitás Kockázat 1-10 Egyszer$ program 11-20 21-50 50- Komplex program, mérsékelt kockázat Komplex, magas kockázat Tesztelhetetlen program

21 Komplexitás példa! RPC csomagfeldolgozó rutin! tevékenységek a csomagban érkez! üzenet mez!i és beállítási adatok alapján! 160 sor (121 kódsor)! 15 % megjegyzés 22 Komplexitás példa (folyt.)! Egyszer$sített vezérlés-folyam gráf

23 Egyéb tesztelési metrikák! függvény lefedettség! hívás/visszatérés lefedettség! ciklus lefedettség! mutációs lefedettség 24 Adatfolyam alapú tesztelés! 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

Adatfolyam alapú tesztelés (folyt.) 25! 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 26 Struktúrális tesztelési példák Állítsa el! az alábbi programrészlet vezérlésfolyam gráfját! A gráf alapján határozza meg a teljes független út lefedéshez szükséges tesztek számát! 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 }

Struktúrális tesztelési példák 27! V(G)=e-n+2=45-34+2=13! V(G)=D+1=12+1=13 Struktúrális tesztelési példák (folyt.) 28 Hány teszteset kellene teljes logikai kifejezés (boole, C MCC ) lefedés eléréséhez? Predikátum csomópontok összetett logikai kifejezéseinek összes részkifejezését a lehetséges kimenetekbe kell vinni. (N rész kifejezésre ez 2 N.) Pl.:... if(s[i]=='+' s[i]=='-')... A két rész kifejezés nem fügettlen! s[i]== + s[i]== - teljes kif. s[i]= + true false true s[i]= - false true true s[i]= a false false false lehetetlen true true true

Struktúrális tesztelési példák (folyt.) 29 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. Struktúrális tesztelési példák (folyt.) 30 Mit tudunk mondani a függvény alapvet! (esszenciális) komplexitásáról? A kondenzációs gráf ciklomatikus komplexitása 1-e? Sérülnek-e struktúrált programozási elvek? belépés ciklusba nem a ciklus fejben kilépés ciklusból nem a feltétel vizsgálatkor kilépés szelekciós szerkezetb!l belépés szelekciós szerkezetbe nem a szelekciónál

Struktúrális tesztelési példák (f.) 31 Mit tudunk mondani a függvény alapvet! (esszenciális) komplexitásáról? összetett szelekciós blokkban, nem a függvény végén lév! return utasítás => struktúrálatlanság Struktúrális tesztelési példák (folyt.) 32 A programkódból adjon meg legalább három DF-utat (Definíció- Felhasználás, DEF-USE), adja meg, hogy ezek az utak definition clear utak-e, illetve hogy C (computation), vagy P (predicate) felhasználásról van-e szó. 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

Struktúrális tesztelési példák (folyt.) 33 C for ciklusok kezelése for(kifejezés1;kifejezés2;kifejezés3) utasítás; kifejezés1; /*def */ while(kifejezés2){ /*p-use */ utasítás; kifejezés3; /*def */ } Struktúrális tesztelési példák (folyt.) 34! Relációs operátorok helyességének tesztelése! rendezési relációk! 3 lehetséges eset! a! "#$!%&#! => 3 teszteset

Funkcionális és struktúrális tesztelés 35! ö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 Funkcionális és struktúrális tesztelés (folyt.) 36! 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, DD-utak! topológiailag lehetséges utak

37 Struktúrális tesztelés Specifikált viselkedés Programozott viselkedés (Megvalósulható utak) Topológiailag lehetséges utak 38 Tesztelési stratégiák! Egységek (modulok) tesztelése! Izolációs tesztelés! Inkrementális tesztelés (hibrid techn.)! Integrációs tesztelés! Inkrementális tesztelés! Big bang tesztelés

39 Az egységtesztelés szerepe! moduláris fejlesztés -> moduláris tesztelhet!ség! white box jelleg! fejlesztés közbeni tesztelés! tesztelési komplexitás csökkentés! hatékonyabb integrációs fázis Az egység tesztelés szükségessége 40 input modul integrált rendszer output input modul output

41 Az izolációs tesztelés el!nyei! kisebb tesztelési komplexitás! könnyebb strukturális lefedettséget elérni! egyszer$bb tesztvégrehajtó egységek és csonk modulok! modul változtatása csak a hozzátartozó tesztek módosításával jár! tiszta egységtesztek Az izolációs tesztelés hátrányai 42! nem biztosít korai integrációt! tesztvégrehajtó (driver) és csonk (stub) modulok szükségesek a hierarchia minden szintjén

43 Az egységtesztelés el!nyei! könnyebb teszt generálás és karbantartás! alacsonyabb relatív id!igény! hibák pontos azonosítása! párhuzamosíthatóság 44 Integrációs tesztelés! Mars Climate Orbiter! Lockheed Martin - pounds! Jet Propulsion Laboratory - newton! Együttm$ködés tesztelése! Interfészek tesztelése! Módszerek! funkcionális dekompozíció alapú! hívási gráf alapú! big bang

45 Dekompozíciós int. tesztelés! Funkcionális dekompozíció -> modul fa! Korábban tesztelt modulok! Modulok integrálása! top-down! bottom-up! szendvics! Meghajtó modulok és modul-csonkok 46 Top-down tesztelés

47 A top-down tesztelés el!nyei! korai integráció! top-down tervezés esetén id! hatékony! er!sen követelmény orientált egység tesztelés! alsóbb szinteken megvalósított redundáns funkcionalitás kisz$rhet! A top-down tesztelés hátrányai 48! csonkok szükségesek! egyre komplikáltabb tesztek! egyre nehezebben elérhet! struktúrális lefedettség! modul módosítása más modulok tesztjeinek módosítását igényli

49 Bottom-up tesztelés 50 A bottom-up tesztelés el!nyei! korai integráció! nincs szükség csonkokra! alsó szint$ modulok könny$ tesztelhet!sége! jól használható objektumok tesztelésére

A bottom-up tesztelés hátrányai 51! egyre komplikáltabb tesztek! egyre nehezebben elérhet! struktúrális lefedettség! meg kell várni az alacsonyabb szint$ modulok tesztelését 52 Szendvics integrálás! Big bang integráció részfákon

Integrálás a hívási gráf alapján 53! Funkcionális dekompozíció <-> hívási gráf! elmozdulás struktúrális irányba! Páronkénti integrálás! Szomszédos integrálás 54 Páronkénti integrálás! csonk/meghajtó fejlesztés csökkentése! hívási gráf szomszédos párjainak integrálása! hívási gráf élenkénti tesztek

55 Páronkénti integrálás 2 1 3 11 4 13 5 6 12 7 14 8 9 10 15 16 17 18 56 Szomszédos integrálás! integrálás egy gráf csomópont szomszédságán! a csomóponttól egy él távolságokra lév! csomópontok halmazával! pred. és succ. csomópontok irányított gráfnál, vagyis meghajtó és csonkok! szomszédságok száma! Sz=N bels! +N forrás! N bels! =N-(N forrás +N nyel! )

57 Szomszédos integrálás 2 1 3 11 4 13 5 6 12 7 14 8 9 10 15 16 17 18 58 Út alapú integrálás! Viselkedési szálak! Interfészek tesztelése vs. interakciók tesztelése! Végrehajtás (vezérlés folyam) modulok között! Kiterjesztett vezérlés folyam gráf! modul forrás csomópontok (kezdet, folytatás)! modul nyel!k (vég, vezérlés átadás)

59 Út alapú integrálás! Modul végrehajtási út (MEP)! kiterjesztett forrástól nyel!ig! Üzenetek (modulok között)! vezérlés átadás! MM-út! adat átadás! utasítás végrehajtási utak és üzenetek szekvenciája 60 MM-út gráf! Adott modulra (egységre)! csomópontok: MEP-ek! élek: modulok közötti üzenetek! Integrációs tesztelés az MM-út gráf alapján! MM-utak mélysége! üzenet tétlenség! adatfolyam tétlenség

61 MM-utak A B C 1 1 1 MEP(A,2) 2 2 2 3 MEP(B,1) 3 4 MEP(A,1) MEP(C,1) 3 4 MEP(B,2) 5 MEP(A,3) MEP(C,2) 6 4 5 MM-út MM-út gráf 62 Adatfolyam tétlenség! Adattárolásra vezet! feldolgozás! adatfolyam diagram F1 A F2 Közvetlen adatfolyam kapcsolat F1 F2 A Közvetett adatfolyam kapcsolat

63 MM-út komplexitás! Egyszer$sített MM-út gráf! UML szekvencia diagramok! ciklomatikus komplexitás A B C 64 MM-út alapú tesztelés! Funkcionális! ki- és bemenetek! Struktúrális! azonosítás, meghatározás! Mindenféle életciklus modellhez! Meghajtó és csonk fejlesztés eliminálása