Budapes( Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék. Tesztelés és profiling



Hasonló dokumentumok
A szoftver tesztelés alapjai

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

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

A legalacsonyabb szintű tesztelés. A programot felépítő egységek tesztelése Unit: egy rendszer legkisebb önálló egységként tesztlehető része.

Szoftverminőségbiztosítás

JUnit.

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

Modell alapú tesztelés mobil környezetben

Szűgyi Zalán. Unit tesztek Java és C++ környezetben

Sikeres végrehajtás(pass): ez azt jelenti, hogy a teszt rendben lefutott, és az ellenőrzési feltételek mind teljesültek.

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

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

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

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

MIÉRT KELL TESZTELNI?

OOP és UML Áttekintés

Programozási technológia II 7. előadás. Verifikáció és validáció Giachetta Roberto

Tesztelési szintek Tesztautomatizálás

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

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)

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

Közösség, projektek, IDE

Szoftverminőségbiztosítás

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

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

public class HelloWorld extends TestCase { public void testmultiplication() { // Testing if 3*2=6: assertequals ("Multiplication", 6, 3*2);

Utolsó módosítás:

Miskolci Egyetem Általános Informatikai Tanszék

A tesztelés feladata. Verifikáció

Gyakorlat és házi feladat tájékoztató

Eseményvezérelt alkalmazások fejlesztése I 11. előadás. Szoftverek tesztelése

Szoftverminőségbiztosítás

Teszt terv Új funkció implementációja meglévı alkalmazásba

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

Utolsó módosítás:

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

Szoftvertechnológia 10. előadás. Verifikáció és validáció. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Szoftvertesztelés Alapok

Webes alkalmazások fejlesztése 10. előadás. Webszolgáltatások tesztelése (ASP.NET Core) Cserép Máté

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

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

Bánsághi Anna Bánsághi Anna 1 of 62

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

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Szkriptelési feladat megoldása

Szoftverminőségbiztosítás

Programozási technológia 2.

Használati alapú és modell alapú tesztelés kombinálása szolgáltatásorientált architektúrák teszteléséhez az ipari gyakorlatban

ELTE, Informatikai Kar december 12.

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

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

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

Folyamatmodellezés és eszközei. Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék

A JUnit alapú egységteszteléshez felhasználandó annotációk leírásait az alábbi URL-en találja meg:

WebService tesztelés. SOAPui Pro, GreenPepper és Confluence használatával. Verhás & Verhás Szoftver Manufaktúra KNOW-HOW

A TESZTELÉS ALAPJAI MIÉRT SZÜKSÉGES A TESZTELÉS? MI A TESZTELÉS? ÁLTALÁNOS TESZTELÉSI ALAPELVEK

Modern unit és integrációs tesztelés

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

Java I. A Java programozási nyelv

4. gyakorlat: Teszttervezés és integráció

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Gyakorlat és házi feladat tájékoztató

Segédanyag: Java alkalmazások gyakorlat

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

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

A Java EE 5 plattform

Metamodellezés. Simon Balázs BME IIT, 2011.

BME Irányítástechnika és Informatika Tanszék A programozás alapjai

(Teszt)automatizálás. Bevezető

Osztálytervezés és implementációs ajánlások

OOP: Java 8.Gy: Abstract osztályok, interfészek

Osztálytervezés és implementációs ajánlások

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

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Robusztusság tesztelés

Szoftver újrafelhasználás

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

A feladatok megoldásához felhasználandó annotációk leírásait az alábbi URL-en találja meg:

Programozási alapismeretek 1. előadás

Programozási nyelvek JAVA EA+GY 1. gyakolat

Java programozási nyelv 5. rész Osztályok III.

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

Java programozási nyelv 4. rész Osztályok II.

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

Bevezető. Servlet alapgondolatok

Univerzális munkafolyamat szimulátor

Intervenciós röntgen berendezés teljesítményszabályozójának automatizált tesztelése

RIA Rich Internet Application

Segédanyag: Java alkalmazások gyakorlat

Programfejlesztési Modellek

Autóipari beágyazott rendszerek. Komponens és rendszer integráció

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

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

A dokumentáció felépítése

Mobil Informatikai Rendszerek

Komponens alapú fejlesztés

Biztonsági folyamatirányító. rendszerek szoftvere

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

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

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

Átírás:

Budapes( Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék Tesztelés és profiling

A tesztelés lehetséges céljai A tesztelés lehetséges céljai o Bizonyosságot szerezni a rendszer minőségi állapotáról o Információ a döntéshozáshoz (pl. release / no release) o Hibák keresése o Hibák megakadályozása MoGók: o Dijkstra: A tesztelés a hibák jelenlétét, és nem a hibamentességet tudja kimutatni. o Hoare: A tesztelés egy induklv bizonyítás része: Ha a program jól működik egy adog teszt adatra, akkor várhatóan hasonló adatokra is jól működik. 2

Alapelvek (7 tesqng principles) 1 Csak a hibák meglétét tudja kimutatni 2 A kimerítő tesztelés legtöbbször lehetetlen o Hány teszt kéne egy 2 integer paraméterű függvényhez? 3 Tesztelés már a korai fázisokban 4 Hibák csoportosulása (Defect clustering) o A komponensek egy kis részében van a hibák nagy része 5 Rovarirtó paradoxon (PesQcide paradox) o Teszt újra és újra fugatva egyre kevésbé hatékony o Minden módszer után marad még valami más Lpusú hiba 6 A tesztelés kontextus függő 7 Hibák hiánya tévedés (Absence- of- errors fallacy) o Hibamentes tesztlefutás még nem jelent jó rendszert 3

Alapelvek (7 tesqng principles) 1 Csak a hibák meglétét tudja kimutatni 2 A kimerítő tesztelés legtöbbször lehetetlen o Hány teszt kéne egy 2 integer paraméterű függvényhez? 3 Tesztelés már a korai fázisokban 4 Hibák csoportosulása (Defect clustering) o A komponensek egy kis részében van a hibák nagy része 5 Rovarirtó paradoxon (PesQcide paradox) o Teszt újra és újra fugatva egyre kevésbé hatékony o Minden módszer után marad még valami más Lpusú hiba 6 A tesztelés kontextus függő 7 Hibák hiánya tévedés (Absence- of- errors fallacy) o Hibamentes tesztlefutás még nem jelent jó rendszert 4

Alapelvek (7 tesqng principles) 1 Csak a hibák meglétét tudja kimutatni 2 A kimerítő tesztelés legtöbbször lehetetlen o Hány teszt kéne egy 2 integer paraméterű függvényhez? 3 Tesztelés már a korai fázisokban 4 Hibák csoportosulása (Defect clustering) o A komponensek egy kis részében van a hibák nagy része 5 Rovarirtó paradoxon (PesQcide paradox) o Teszt újra és újra fugatva egyre kevésbé hatékony o Minden módszer után marad még valami más Lpusú hiba 6 A tesztelés kontextus függő 7 Hibák hiánya tévedés (Absence- of- errors fallacy) o Hibamentes tesztlefutás még nem jelent jó rendszert 5

Alapelvek (7 tesqng principles) 1 Csak a hibák meglétét tudja kimutatni 2 A kimerítő tesztelés legtöbbször lehetetlen o Hány teszt kéne egy 2 integer paraméterű függvényhez? 3 Tesztelés már a korai fázisokban 4 Hibák csoportosulása (Defect clustering) o A komponensek egy kis részében van a hibák nagy része 5 Rovarirtó paradoxon (PesQcide paradox) o Teszt újra és újra fugatva egyre kevésbé hatékony o Minden módszer után marad még valami más Lpusú hiba 6 A tesztelés kontextus függő 7 Hibák hiánya tévedés (Absence- of- errors fallacy) o Hibamentes tesztlefutás még nem jelent jó rendszert 6

Alapelvek (7 tesqng principles) 1 Csak a hibák meglétét tudja kimutatni 2 A kimerítő tesztelés legtöbbször lehetetlen o Hány teszt kéne egy 2 integer paraméterű függvényhez? 3 Tesztelés már a korai fázisokban 4 Hibák csoportosulása (Defect clustering) o A komponensek egy kis részében van a hibák nagy része 5 Rovarirtó paradoxon (PesQcide paradox) o Teszt újra és újra fugatva egyre kevésbé hatékony o Minden módszer után marad még valami más Lpusú hiba 6 A tesztelés kontextus függő 7 Hibák hiánya tévedés (Absence- of- errors fallacy) o Hibamentes tesztlefutás még nem jelent jó rendszert 7

Alapelvek (7 tesqng principles) 1 Csak a hibák meglétét tudja kimutatni 2 A kimerítő tesztelés legtöbbször lehetetlen o Hány teszt kéne egy 2 integer paraméterű függvényhez? 3 Tesztelés már a korai fázisokban 4 Hibák csoportosulása (Defect clustering) o A komponensek egy kis részében van a hibák nagy része 5 Rovarirtó paradoxon (PesQcide paradox) o Teszt újra és újra fugatva egyre kevésbé hatékony o Minden módszer után marad még valami más Lpusú hiba 6 A tesztelés kontextus függő 7 Hibák hiánya tévedés (Absence- of- errors fallacy) o Hibamentes tesztlefutás még nem jelent jó rendszert 8

Alapfogalmak Teszt bemenet SUT Teszt kimenet Orákulum Eredmény 9

Alapfogalmak Teszt bemenet SUT Teszt kimenet Orákulum Eredmény teszteset (test case) o bemeneq értékek, végrehajtási előfeltételek, várt eredmények és végrehajtási utófeltételek halmaza tesztkészlet (test suite) orákulum (oracle) o várt és az aktuális eredményeket összehasonlító forrás eredmény (verdict) o sikeres (pass), sikertelen (fail), nem meggyőző (inconclusive), hiba (error) tesztelés!= hibakeresés (debugging) 10

Alapfogalmak Teszt bemenet SUT Teszt kimenet Orákulum Eredmény teszteset (test case) o bemeneq értékek, végrehajtási előfeltételek, várt eredmények és végrehajtási utófeltételek halmaza tesztkészlet (test suite) orákulum (oracle) o várt és az aktuális eredményeket összehasonlító forrás eredmény (verdict) o sikeres (pass), sikertelen (fail), nem meggyőző (inconclusive), hiba (error) tesztelés!= hibakeresés (debugging) 11

Alapfogalmak Teszt bemenet SUT Teszt kimenet Orákulum Eredmény teszteset (test case) o bemeneq értékek, végrehajtási előfeltételek, várt eredmények és végrehajtási utófeltételek halmaza tesztkészlet (test suite) orákulum (oracle) o várt és az aktuális eredményeket összehasonlító forrás eredmény (verdict) o sikeres (pass), sikertelen (fail), nem meggyőző (inconclusive), hiba (error) tesztelés!= hibakeresés (debugging) 12

Alapfogalmak Teszt bemenet SUT Teszt kimenet Orákulum Eredmény teszteset (test case) o bemeneq értékek, végrehajtási előfeltételek, várt eredmények és végrehajtási utófeltételek halmaza tesztkészlet (test suite) orákulum (oracle) o várt és az aktuális eredményeket összehasonlító forrás eredmény (verdict) o sikeres (pass), sikertelen (fail), nem meggyőző (inconclusive), hiba (error) tesztelés!= hibakeresés (debugging) 13

Alapfogalmak Teszt bemenet SUT Teszt kimenet Orákulum Eredmény teszteset (test case) o bemeneq értékek, végrehajtási előfeltételek, várt eredmények és végrehajtási utófeltételek halmaza tesztkészlet (test suite) orákulum (oracle) o várt és az aktuális eredményeket összehasonlító forrás eredmény (verdict) o sikeres (pass), sikertelen (fail), nem meggyőző (inconclusive), hiba (error) tesztelés!= hibakeresés (debugging) 14

Alap problémák Teszt kiválasztás (test selecqon) o Milyen teszt bemeneteket használjunk? Kilépési feltétel (exit criteria) o Meddig teszteljünk? Orákulum o Honnan lesz jó teszt orákulumunk? Tesztelhetőség (testability) o Mennyire könnyű tesztelni a rendszert? Megfigyelhetőség (observability) Vezérelhetőség (controllability) 15

Alap problémák Teszt kiválasztás (test selecqon) o Milyen teszt bemeneteket használjunk? Kilépési feltétel (exit criteria) o Meddig teszteljünk? Orákulum o Honnan lesz jó teszt orákulumunk? Tesztelhetőség (testability) o Mennyire könnyű tesztelni a rendszert? Megfigyelhetőség (observability) Vezérelhetőség (controllability) 16

Alap problémák Teszt kiválasztás (test selecqon) o Milyen teszt bemeneteket használjunk? Kilépési feltétel (exit criteria) o Meddig teszteljünk? Orákulum o Honnan lesz jó teszt orákulumunk? Tesztelhetőség (testability) o Mennyire könnyű tesztelni a rendszert? Megfigyelhetőség (observability) Vezérelhetőség (controllability) 17

Alap problémák Teszt kiválasztás (test selecqon) o Milyen teszt bemeneteket használjunk? Kilépési feltétel (exit criteria) o Meddig teszteljünk? Orákulum o Honnan lesz jó teszt orákulumunk? Tesztelhetőség (testability) o Mennyire könnyű tesztelni a rendszert? Megfigyelhetőség (observability) Vezérelhetőség (controllability) 18

Szohver tesztelés Tesztelés folyamata Tesztelés szintjei Tesztelési fajták TeszGervezési technikák Tesztelés az életciklusban 19

Szohver tesztelés Tesztelés folyamata Tesztelés szintjei Tesztelési fajták TeszGervezési technikák Tesztelés az életciklusban Planning and Control Analysis and Design ImlementaQon and ExecuQon EvaluaQng Exit Criteria and ReporQng Test Closure AcQviQes 20

Szohver tesztelés Tesztelés folyamata Tesztelés szintjei Tesztelési fajták TeszGervezési technikák Tesztelés az életciklusban Planning and Control Analysis and Design ImlementaQon and ExecuQon EvaluaQng Exit Criteria and ReporQng Test Closure AcQviQes 21

Általános irányelvek o Milyen metodológiát, o milyen Lpusú teszteket, o milyen eszközöket, o ki fog használni, o milyen kilépési feltétellel, o milyen dokumentáció kell o Tesztelési stratégia 22

Tesztelési stratégia Általános irányelvek o Milyen metodológiát, o milyen Lpusú teszteket, o milyen eszközöket, o ki fog használni, o milyen kilépési feltétellel, o milyen dokumentáció kell o Pl.: o extrém programozás o Modul & rendszer o JUnit & GUI Tester o Fejlesztő és teszt csapat o 90% utasítás lefedegség & minden használaq eset 23

Fedés o Kód o Specifikáció Kimenetek eloszlása Költség! Tesztkészlet értékelése 24

Szohver tesztelés Tesztelés folyamata Tesztelés szintjei Tesztelési fajták TeszGervezési technikák Tesztelés az életciklusban Planning and Control Analysis and Design ImlementaQon and ExecuQon EvaluaQng Exit Criteria and ReporQng Tesztesetek tervezése, specifikálása Teszteset célja Kiindulási környezet Teszteset lépései, teszt adatok Elvárt kimenet Még mielőtt elkezdenénk tesztkódot írni Szisztematikus módszer ajánlott Test Closure AcQviQes 25

Szohver tesztelés Tesztelés folyamata Tesztelés szintjei Tesztelési fajták TeszGervezési technikák Tesztelés az életciklusban Planning and Control Analysis and Design ImlementaQon and ExecuQon EvaluaQng Exit Criteria and ReporQng Test Closure AcQviQes Manuális vagy automatikus van, amit nem éri meg automatizálni Automatikus esetén a teszt a build folyamat része Kimenetek naplózása Idő, teszt környezet Komponensek verziói Rendszer kimenete 26

Szohver tesztelés Tesztelés folyamata Tesztelés szintjei Tesztelési fajták TeszGervezési technikák Tesztelés az életciklusban Planning and Control Analysis and Design Incidensek rögzítése Tesztelés folytatásáról dönteni ImlementaQon and ExecuQon EvaluaQng Exit Criteria and ReporQng Test Closure AcQviQes Tesztelés lezárása Tipikusan mérföldkövenként Tapasztalat összegyűjtése Teszt eszközök, környezetek (testware) befejezése 27

Szohver tesztelés Tesztelés folyamata Tesztelés szintjei Tesztelési fajták TeszGervezési technikák Tesztelés az életciklusban Unit / Modul Integrációs Rendszer Elfogadás (Acceptance) 28

Egy modul tesztelése T1 M2 Stub3 29

Egy modul tesztelése Tesztelendő modul T1 M2 Stub3 30

Egy modul tesztelése Teszt végrehajtó modul hívása Teszt kiértékelő kimenet figyelése Tesztelendő modul T1 M2 Stub3 31

Egy modul tesztelése Teszt végrehajtó modul hívása Teszt kiértékelő kimenet figyelése Tesztelendő modul Teszt csonk korlátozott funkcionalitás T1 M2 Stub3 32

Egy modul tesztelése Teszt végrehajtó modul hívása Teszt kiértékelő kimenet figyelése Tesztelendő modul Teszt csonk korlátozott funkcionalitás T1 M2 Stub3 Teszt program vagy teszt script 33

Integráció tesztelése T1 : Tester t1(d1) M1 M2 M3 e1 t2(d2,d21) e2 34

Integráció tesztelése Tesztelt rendszer több modulból állhat (itt M1, M2, M3) T1 : Tester t1(d1) M1 M2 M3 e1 t2(d2,d21) e2 35

Integráció tesztelése Tesztelt rendszer több modulból állhat (itt M1, M2, M3) Teszt 1 bemenő adat várt eredmény T1 : Tester t1(d1) M1 M2 M3 e1 t2(d2,d21) e2 36

Integráció tesztelése Tesztelt rendszer több modulból állhat (itt M1, M2, M3) Teszt 1 bemenő adat várt eredmény T1 : Tester t1(d1) M1 M2 M3 Teszt kimenet kiértékelés e1 t2(d2,d21) e2 37

Integráció tesztelése Tesztelt rendszer több modulból állhat (itt M1, M2, M3) Teszt 1 bemenő adat várt eredmény T1 : Tester t1(d1) M1 M2 M3 Teszt kimenet kiértékelés e1 Teszt 2 t2(d2,d21) e2 38

Integráció tesztelése Tesztelt rendszer több modulból állhat (itt M1, M2, M3) Teszt 1 bemenő adat várt eredmény T1 : Tester t1(d1) M1 M2 M3 Teszt kimenet kiértékelés e1 Teszt 2 t2(d2,d21) e2 Teszt szekvencia 39

Szohver tesztelés Tesztelés folyamata Tesztelés szintjei Tesztelési fajták TeszGervezési technikák Tesztelés az életciklusban Unit / Modul Integrációs Rendszer Akár a megrendelő által Végleges (vagy nagyon hasonló) környezet Teljes rendszer (minden függőséggel együtt) Követelmények alapján Elfogadás (Acceptance) 40

Szohver tesztelés Tesztelés folyamata Tesztelés szintjei Tesztelési fajták TeszGervezési technikák Tesztelés az életciklusban Funkcionális Nem- funkcionális Alfa és béta Regressziós 41

Szohver tesztelés Tesztelés folyamata Tesztelés szintjei Tesztelési fajták TeszGervezési technikák Tesztelés az életciklusban Funkcionális Nem- funkcionális Teljesítmény, stressz, használhatóság, robusztusság Alfa és béta Regressziós 42

Szohver tesztelés Tesztelés folyamata Tesztelés szintjei Tesztelési fajták TeszGervezési technikák Tesztelés az életciklusban Funkcionális Nem- funkcionális Alfa és béta Regressziós Módosítások után Korábbi funkciót nem rontottunk el Teljes tesztkészlet egy részét csak Teszt készlet minimalizálás 43

Szohver tesztelés Tesztelés folyamata Tesztelés szintjei Tesztelési fajták TeszGervezési technikák Tesztelés az életciklusban Tesztelő tapasztalata Specifikáció alapú Struktúra alapú Hiba alapú Valószínűségi 44

Szohver tesztelés Tesztelés folyamata Tesztelés szintjei Tesztelési fajták TeszGervezési technikák Tesztelés az életciklusban Ad hoc tesztelés Felderítő tesztelés (exploratory) rendszer megismerése teszt tervezés és alkalmazás futtatása együtt Tesztelő tapasztalata Specifikáció alapú Struktúra alapú Hiba alapú Valószínűségi 45

Szohver tesztelés Tesztelés folyamata Tesztelés szintjei Tesztelési fajták TeszGervezési technikák Tesztelés az életciklusban Fekete doboz (black box) / funkcionális tesztelés Csak a specifikációból indulunk ki Tesztelő tapasztalata Specifikáció alapú Struktúra alapú Hiba alapú Valószínűségi 46

Szohver tesztelés Tesztelés folyamata Tesztelés szintjei Tesztelési fajták TeszGervezési technikák Tesztelés az életciklusban Fehér doboz (white box) / strukturális tesztelés Belső működést is ismerjük Forráskód, belső modell.. Tesztelő tapasztalata Specifikáció alapú Struktúra alapú Hiba alapú Valószínűségi 47

Szohver tesztelés Tesztelés folyamata Tesztelés szintjei Tesztelési fajták TeszGervezési technikák Tesztelés az életciklusban Hiba kitalálás Pl. korábbi hibák alapján Mutációs tesztelés Kód mutálása tesztek értékelése Teszt mutálása új tesztesetek készítése Tesztelő tapasztalata Specifikáció alapú Struktúra alapú Hiba alapú Valószínűségi 48

Szohver tesztelés Tesztelés folyamata Tesztelés szintjei Tesztelési fajták TeszGervezési technikák Tesztelés az életciklusban (Ortogonális kategória) Tesztesetek származtatása determinisztikus vagy valószínűségi módon Módszerek Véletlenszerű (random) Működési (operational) Statisztikai (random + kritérium) Tesztelő tapasztalata Specifikáció alapú Struktúra alapú Hiba alapú Valószínűségi 49

Szohver tesztelés Tesztelés folyamata Tesztelés szintjei Tesztelési fajták TeszGervezési technikák Tesztelés az életciklusban Tesztelő tapasztalata Ezek kombinációja hatásos általában! Specifikáció alapú Struktúra alapú Hiba alapú Valószínűségi 50

Szohver tesztelés Tesztelés folyamata Tesztelés szintjei Tesztelési fajták TeszGervezési technikák Tesztelés az életciklusban V modell Agilis 51

Tesztelés a V modellben Üzemeltetés, karbantartás Követelmények elemzése Rendszer validáció Rendszer specifikálás Rendszer verifikáció Architektúra tervezés Rendszer integrálás Modul tervezés Modul verifikáció Modul implementáció 52

A tesztelés tervezése Üzemeltetés, karbantartás Követelmények elemzése Rsz. validáció tervezés Rendszer validáció Rendszer specifikálás Rendszerteszt tervezés Rendszer verifikáció Architektúra tervezés Integrációs teszt tervezés Rendszer integrálás Modul tervezés Modul teszt tervezés Modul verifikáció Modul implementáció 53

Szohver tesztelés Tesztelés folyamata Tesztelés szintjei Tesztelési fajták TeszGervezési technikák Tesztelés az életciklusban V modell Teszt-vezérelt fejlesztés (TDD) test-first development Folyamatos tesztelés Agilis 54

Tesztelés gyakorlaq kérdései Tesztelés a fejlesztési költség több mint 50%- a! o teszt adatok generálása o teszt kód írása o tesztek fugatása o eredmények kiértékelése Részfeladatok automaqzálhatóak Az automaqzálás alapja: pl. modellek o osztálydiagram: modul interfészek teszt vezérlők és teszt csonk váz generálása o állapotgépek: modulok együgműködése teszt szekvencia 55

További információ InternaQonal Sohware TesQng QualificaQons Board (ISTQB), URL: hgp://istqb.dedicated.adaptavist.com/ o o o ISTQB Glossary of TesQng Terms FoundaQon Level Syllabus (2010) Magyarul is: hgp://www.hstqb.com/index.php?qtle=downloads IEEE, Sohware Engineering Body of Knowledge (SWEBOK), URL: hgp://www.computer.org/portal/web/swebok/ o Chapter 5: Sohware TesQng IEEE, Sohware and Systems Engineering Vocabulary (SE VOCAB), URL: hgp://pascal.computer.org/sev_display/ o Definíciók kereshető jegyzéke 56

Összefoglalás Szohver tesztelés Tesztelés folyamata Tesztelés szintjei Tesztelési fajták TeszGervezési technikák Tesztelés az életciklusban Planning and Control Unit / Modul Funkcionális Tesztelő tapasztalata V modell Analysis and Design Integrációs Nem- funkcionális Specifikáció alapú Agilis ImlementaQon and ExecuQon Rendszer Alfa és béta Struktúra alapú EvaluaQng Exit Criteria and ReporQng Elfogadás (Acceptance) Regressziós Hiba alapú Test Closure AcQviQes Valószínűségi 57

A JUnit keretrendszer bemutatása

Szohver tesztelés Tesztelés folyamata Tesztelés szintjei Tesztelési fajták TeszGervezési technikák Tesztelés az életciklusban Planning and Control Unit / Modul Funkcionális Tesztelő tapasztalata V modell Analysis and Design Integrációs Nem- funkcionális Specifikáció alapú Agilis ImlementaQon and ExecuQon Rendszer Alfa és béta Struktúra alapú EvaluaQng Exit Criteria and ReporQng Elfogadás (Acceptance) Regressziós Hiba alapú Test Closure AcQviQes Valószínűségi 59

JUnit alap funkciók Tartalom JUnit haladóbb funkciók 60

JUnit JUnit 4.x o Egyik legelterjedtebb keretrendszer o Szerzők: Erich Gamma és Kent Beck JUnit: többféle teszt fugató o Parancssoros o Egyszerű GUI o IDE- be beépülő Követelmény: Java 1.5 JUnit 3- hoz képest nagy változás 61

Egy egyszerű JUnit teszt Java 5 annotációk használata a definíciókhoz Egyszerű teszt osztály: o Egyes metódusát annotáljuk: @org.junit.test o Metódus törzsében hívjuk meg a Unit Under Test- et o Eredmény ellenőrzése: org.junit.assert.* használata pl. assertequals(expected, actual) 62

Egy egyszerű JUnit teszt package hu.bme.mit.junit.example; import org.junit.test; import junit.framework.testcase; public class ListTest { @Test public void testaddtoemptylist(){ MyList l = new MyList(); l.add(1); } } org.junit.assert.assertequals(1, l.getsize()); 63

Egy egyszerű JUnit teszt package hu.bme.mit.junit.example; import org.junit.test; import junit.framework.testcase; public class ListTest { @Test public void testaddtoemptylist(){ MyList l = new MyList(); l.add(1); Teszt metódus } } org.junit.assert.assertequals(1, l.getsize()); 64

Egy egyszerű JUnit teszt package hu.bme.mit.junit.example; import org.junit.test; import junit.framework.testcase; public class ListTest { @Test public void testaddtoemptylist(){ MyList l = new MyList(); l.add(1); Teszt metódus Ellenőrzés } } org.junit.assert.assertequals(1, l.getsize()); 65

JUnit teszt fugatása Eclipse- ben Teszt osztály kiválasztása Run As - > JUnit test Eredmény megjelenik: o zöld vagy piros o hibás tesztek o elvárt vs. aktuális eredmény 66

JUnit Eclipse alag - Előkészület Konvenció: teszteknek külön könyvtár létrehozása o Név: test BeépíteG JUnit könyvtár hozzáadása 67 67

JUnit Eclipse alag - Előkészület Konvenció: teszteknek külön könyvtár létrehozása o Név: test BeépíteG JUnit könyvtár hozzáadása 68 68

JUnit teszt létrehozás Teszt osztály neve o [Unit_neve]Test o [Unit_neve]Tests Tesztelendő osztály kiválasztása Kisegítő metódusok generálása o test fixture o setup & teardown 6

Teszt környezet: Test fixture Tesztesetekhez szükséges környezet előállítása: o tesztek által közösen használt o definiált objektumok Tesztelés során egyszer kell csak elvégezni o @BeforeClass, @AherClass o Vigyázat: nem lesznek függetlenek a tesztesetek! Minden teszteset lefugatása előg és után o @Before, @Aher 70

public class ListTests { } List emptylist; Test fixture: példa @Before public void setup(){ emptylist = Collections.EMPTY_LIST; } @After public void teardown() { emptylist = null; } @Test public void testemptylist() { assertequals("empty list should have 0 elements", 0, emptylist.size()); } 71

Ellenőrzések: AsserQon Teszt eredményének automatikus ellenőrzése Tesztesetenként egy Különben nehéz megtalálni a hibát org.junit.assert assertequals(expected,actual) assertfalse(boolean) asserttrue(boolean) assertnull(object) assertnotnull(object) assertsame(expected,actual) assertnotsame(expected,actual) assertarrayequals(expecteds, actuals) 72

JUnit annotációk Annotation @Test public void method() @Before public void method() @After public void method() @BeforeClass public void method() @AfterClass public void method() @Ignore @Test (expected=illegalargumentexception.class) @Test(timeout=100) Description Teszt metódus definiálása Minden teszt előtt lefut, pl. teszt környezet előkészítése Minden teszt után fut le Csak egyszer fut le az összes teszt előtt, tipikusan időigényes feladat kerül ide Tesztek befejezése után fut le, pl. takarítás Kihagyja az adott tesztet, pl. akkor érdemes használni, ha megváltozott a kód Akkor sikeres a teszt, ha ezt a kivételt dobja Teszt futási idejét korlátozza 73

Tesztesetek csoportosítása Tesztkészletek használata JUnit 4-ben: o @RunWith: teszt fugató meghatározása o @SuiteClasses: tesztkészlet tagjainak megadása import org.junit.runner.runwith; import org.junit.runners.suite; @RunWith(Suite.class) @Suite.SuiteClasses({ ListTest.class, VectorTest.class}) public class AllTests { // placeholder for the above annotations } 74

JUnit alap funkciók Tartalom JUnit haladóbb funkciók 75

Várt kivételek Hibakezelés vizsgálata Azt várjuk, hogy a unit kivételt fog dobni public class RegularExpressionJUnit4Test { private static String zipregex = "^\\d{5}([\\-]\\d{4})?$"; private static Pattern pattern; @BeforeClass public static void setupbeforeclass() throws Exception { pattern = Pattern.compile(zipRegEx); } } @Test(expected=IndexOutOfBoundsException.class) public void verifyzipcodegroupexception() throws Exception{ Matcher matcher = this.pattern.matcher("22101-5051"); boolean isvalid = matcher.matches(); matcher.group(2); } 76

Parametrizált tesztek Gyakori helyzet: sok hasonló teszt o csak a paraméterekben térnek el o felesleges redundancia a teszt kódban JUnit 4 megoldás: parameterized tests o teszt kód és teszt adatok szétválasztása o keretrendszer gondoskodik arról, hogy a tesztadat halmaz minden elemével végrehajtsa a tesztesetet Használata: 6 egyszerű lépés 77

JUnit parametrizált tesztek 1/6 Általános, paraméter nélküli tesztkód megírása @Test public void testcomplexcalculation() throws Exception { } Integer r = calc.complexcalculation(a, b); assertequals(res, r); Teszt adatok még nincsenek definiálva: o a, b: bemenet o res: elvárt kimenet 78

JUnit parametrizált tesztek 2/6 Feeder metódus létrehozása. o StaQkus metódus, ami egy Collection-t ad vissza o @Parameters annotáció használata o Metóduson belül: többdimenziós Object tömb létrehozása majd List Lpusúvá konvertálás @Parameters public static Collection<Object[]> complexcalcvalue() { return Arrays.asList(new Object[][] { { 1, 1, 12 }, } { -1, 1, -10 }, { 10, 10, 30 }, { 2, 2, 14 } }); 79

JUnit parametrizált tesztek 3/6 Osztályváltozók létrehozása az 1. lépés paramétereihez: private Integer a; private Integer b; private Integer res; 80

JUnit parametrizált tesztek 4/6 Konstruktor létrehozása, ami összekapcsolja a tagváltozókat a paraméterekkel: public ParametricTest(Integer a, Integer b, Integer res) { super(); this.a = a; this.b = b; this.res = res; } 81

JUnit parametrizált tesztek 5/6 Speciális teszt fugató megadása o A teszt osztály szintjén megadni, hogy org.junit.runners.parametrized fogja fugatni @RunWith(Parameterized.class) public class ParametricTest { } 82

JUnit parametrizált tesztek 6/6 Tesztek fugatása o Az általános testcomplexcalculaqon() teszt négyszer fog lefutni o A 2. lépésben definiált értékeket felhasználva 83

Tesztek kategorizálása, pl. o Lefutási idő o Erőforrás igény Categories Kategóriák implementálása osztályként vagy interfészként public interface FastTests {} public interface SlowTests {} Öröklődés interface PerformanceTests extends SlowTests{} 84

Categories /2 Felhasználás 1: tesztosztály megjelölése @Category(FastTests.class) public class CalculatorTest {} Felhasználás 2: tesztesetek megjelölése @Category(SlowTests.class) public void complexcalc (int a, int b){} FuGatás o @RunWith(Categories.class) o @IncludeCategory(SlowTests.class) o @SuiteClasses( { CalculatorTest.class, ParametricTest.class }) o public static class SlowTestSuite {} 85

Categories /3 o Kategória fugatása @IncludeCategory(FastTests.class) o Kategória kihagyása a fugatásból @ExcludeCategory(SlowTests.class) 86

Rules JUnit kiterjesztési pontok létrehozása Alap kiterjesztések o TemporaryFolder Könyvtárak és fájlok létrehozása A létrehozog elemek a teszt lefutását követően törlődnek @Rule public TemporaryFolder tempfolder = new TemporaryFolder(); File newfile = tempfolder.newfile("myfile.txt"); o ExternalResource Minta a tesztelés előg beállítást igénylő erőforrásokhoz, amelyek állapotát a tesztelést követően vissza kell állítani 87

Rules /2 o ErrorCollector Teszt továbbfutása hibajelenség esetén Hibajelentések listázása a teszt lefutását követően o ExpectedExcepQon Várt kivételek és üzenetek specifikálása a teszten belül @Rule public ExpectedException exception = ExpectedException.none(); exception.expect(illegalargumentexception.class); o Timeout Osztály szintű Qmeout beállítása @Rule public MethodRule globaltimeout = new Timeout(20); 88

Theories ÁltalánosítoG kapcsolat a bemenet és a kimenet közög Egyszerűbb felépítés, mint a parametrizált tesztek esetén Osztály annotációja - @RunWith(Theories.class) Szükséges elemek o Adatokat generáló metódus - @DataPoints o Generált adatokat minden Theory felhasználja, mint bemenetet @DataPoints public static Integer[] data(){ return new Integer[] { new Integer(10), new Integer(17), new Integer(-16) }; 89

o Theory Teszt Theories /2 @Theory Tartalmaznia kell (legalább) egy Asser1on- t @Theory public void addtheory(integer a, Integer b){ assumetrue(a > 0); assumetrue(b > 0); } assertequals((a+b), calc.complexaddmethod(a, b)); 90

AssumpQons Feltételezések leírása a tesztadatokról Meghiúsult Assump1on esetén a teszt lefutása továbbra is sikeres assumetrue(a>0); assumetrue(b>0); Theories esetén hasznos o Teszt számára nem megfelelő bemenetek kiszűrése 91

PDE JUnit tesztek 92

JUnit plug- in tesztelés PDE JUnit o Tesztek fugatása Eclipse plug- inekhez OSGi kötegekhez o Eclipse 3.x része JUnithoz hasonló viselkedés Különbség: o Más tesz ugató: egy újabb Eclipse példányt indít o Olyan, mint a runqme workbench o Minden teszt ebben a workbench- ben fut Következmény: teljes Eclipse API hívható 93

PDE JUnit PDE JUnit egy Run- Time Eclipse példányban Lépések: o Run- Qme Eclipse elindítása Host Eclipse o Vezérlést átveszi a JUnit TestRunner o Tesztek lefutnak a run- Qme Java VM workspace- ben o Ha a tesztek lefutogak, leállítja a Run- Time Eclipse példányt Workspace loads Run-Time Eclipse PDE JUnit Test Runner Plug-in Test Plug-in Project Plug-in Test Project Run-Time Workspace.. 94

JUnit Plug- in Test beállítások Run ConfiguraQon ablak érdekesebb beállításai Test o Melyik tesztek fussanak Main o Run an applicaqon Headless mode Plug- ins o melyik plug- ineket töltse be ConfiguraQon o Clear the configuraqon area before launch 95

JUnit Plug- in Test beállítások Run ConfiguraQon ablak érdekesebb beállításai Test o Melyik tesztek fussanak Main o Run an applicaqon Headless mode Plug- ins o melyik plug- ineket töltse be ConfiguraQon o Clear the configuraqon area before launch 96

Unit tesztek Plug- in tesztelés o Nehézkes lehet sok külső függőség Integrációs tesztelés o Ez a Qpikus 97

Külön source folder Tesztek elhelyezése o Mint Java projekteknél o DE: deployhoz csomagoljuk a teszteket is Plug- in fragmens o Látja a plug- in belsejét Külön plug- in o Csak nyilvános API 98

Külön source folder Tesztek elhelyezése o Mint Java projekteknél o DE: deployhoz csomagoljuk a teszteket is Plug- in fragmens o Látja a plug- in belsejét Külön plug- in o Csak nyilvános API 99

Külön source folder Tesztek elhelyezése o Mint Java projekteknél o DE: deployhoz csomagoljuk a teszteket is Plug- in fragmens o Látja a plug- in belsejét Külön plug- in o Csak nyilvános API 100

Külön source folder Tesztek elhelyezése o Mint Java projekteknél o DE: deployhoz csomagoljuk a teszteket is Plug- in fragmens o Látja a plug- in belsejét Külön plug- in o Csak nyilvános API 101

GUI nélküli tesztelés Headless mode o GUI- függőség nélküli plug- inek o Előzetes tervezést igényel 102

GUI tesztelés o SWTBot Kapcsolódó Eclipse projektek Támogatás GEF alapú editorok teszteléséhez o Jubula Modellalapú tesztspecifikáció o WindowTester Pro Capture- and- playback alapú 103

Összefoglalás JUnit o egyszerűen használható o definiálás annotációk segítségével JUnit haladóbb funkciók o kivételek, parametrizált tesztek 104

További információ JUnit, hgp://www.junit.org/ Lars Vogel, JUnit Tutorial, hgp://www.vogella.de/arqcles/junit/arqcle.html Andrew Glover, Jump into JUnit 4, hgp://www.ibm.com/developerworks/java/tutorials/j- junit4/index.html 105

Profiling

Alkalmazás o Lassú, vagy o Sok memóriát fogyaszt Javítsuk ki! Probléma 107

Profiling Alkalmazásról (teljesítmény) információk gyűjtése o Dinamikus, futási idejű technika Tipikus begyűjtött információk: o Függvény be- és kilépések gyakorisága o Végrehajtási idők o Memóriafoglalás o Hívási láncok o Szálak állapota o 108

Profiling megvalósítás Instrumentálás o Jelzőszámok, naplózó utasítások hozzáadása o Kézi / automatikus o Kód / bináris / futási szinten Keretrendszer támogatás o Pl. Java (Java Virtual Machine Tool Interface),.NET o események, callback függvények Mintavételezés o Adott időnként megnézi az állapotot o Kevésbé beavatkozó, de kevésbé pontos is o HW támogatás lehetséges 109

Profiling megvalósítás Instrumentálás o Jelzőszámok, naplózó utasítások hozzáadása o Kézi / automatikus o Kód / bináris / futási szinten Keretrendszer támogatás o Pl. Java (Java Virtual Machine Tool Interface),.NET o események, callback függvények Mintavételezés o Adott időnként megnézi az állapotot o Kevésbé beavatkozó, de kevésbé pontos is o HW támogatás lehetséges 110

Profiling megvalósítás Instrumentálás o Jelzőszámok, naplózó utasítások hozzáadása o Kézi / automatikus o Kód / bináris / futási szinten Keretrendszer támogatás o Pl. Java (Java Virtual Machine Tool Interface),.NET o események, callback függvények Mintavételezés o Adott időnként megnézi az állapotot o Kevésbé beavatkozó, de kevésbé pontos is o HW támogatás lehetséges 111

Java profiler eszközök Rengeteg eszköz, lásd pl.: http://java-source.net/open-source/profilers jvisualvm o JDK beépített eszközöket használ YourKit Java Profiler Quest JProbe JIP Java Interactive Profiler Netbeans Profiler Eclipse: o Memory Analyzer (MAT) heap analyzer o Test & Performance Tools Platform (TPTP) 112

Memory Analyzer (MAT) Heap dump fájl vizsgálata o Java eszközökkel kinyerhető o Lényegében memóriatérkép Különálló RCP alkalmazás vagy Eclipse Memory Analysis perspektíva 113

Memory Analyzer (MAT) 114

Test & Performance Tools Platform Az egyik alap felső szintű projektje az Eclipsenek Alap infrastruktúra szolgáltatása Részei: o Platform o Testing Tools o Tracing & Profiling Tools o Monitoring Tools Tanács: telepítés után az Eclipse-ben nézzük a dokumentációját, ne a weboldalon lévőt (ott őskáosz van:) 115

Profiler használata Agent Controller (AC) o Folyamatok elindítása, leállítása o Profiling adatok begyűjtése o Lásd: Getting started with the Agent Controller v4.7 Integrated Agent Controller (IAC) o 4.4.2 óta automatikusan települ o Windows vagy Linux, IA32 vagy EM64T platformon o helyi folyamat vizsgálatához elég ez, nem kell külön AC Profile on Server funkció o Távoli alkalmazás szerver vizsgálata 116

Profiler használata Agent Controller (AC) o Folyamatok elindítása, leállítása o Profiling adatok begyűjtése o Lásd: Getting started with the Agent Controller v4.7 Integrated Agent Controller (IAC) o 4.4.2 óta automatikusan települ o Windows vagy Linux, IA32 vagy EM64T platformon o helyi folyamat vizsgálatához elég ez, nem kell külön AC Profile on Server funkció o Távoli alkalmazás szerver vizsgálata 117

Profiler használata Agent Controller (AC) o Folyamatok elindítása, leállítása o Profiling adatok begyűjtése o Lásd: Getting started with the Agent Controller v4.7 Integrated Agent Controller (IAC) o 4.4.2 óta automatikusan települ o Windows vagy Linux, IA32 vagy EM64T platformon o helyi folyamat vizsgálatához elég ez, nem kell külön AC Profile on Server funkció o Távoli alkalmazás szerver vizsgálata 118

Profiler elindítása Helyi gépen, Eclipse IDE-ből: o Profile as o Profiling run configuration 119

Profiling options Adott csomagok, osztályok, metódusok befoglalása / kizárása Előre beállított sablonok 120

Execution time analysis Végrehajtási idők, hívási láncok vizsgálata Execution statistics Thread analysis UML2 Interactions 121

Memory analysis Objektumok lefoglalása, mérete, kora Memória szivárgás, felesleges allokációk azonosítása 122

Probe insertion Pehelysúlyú profiling saját alkalmazásokhoz Csak a nekünk szükséges információ összegyűjtése ProbeKit keretrendszer 123