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

Hasonló dokumentumok
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

Struktúra alapú teszttervezési módszerek

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

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

Struktúra alapú teszttervezési módszerek

Szoftver modul/unit tesztelé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)

Szoftverminőségbiztosítás

A szoftver tesztelés alapjai

Szoftverminőségbiztosítás

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

Szoftverminőségbiztosítás

Tesztelési szintek Tesztautomatizálás

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

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

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

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

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

Szkriptelési feladat megoldása

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

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

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

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

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

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

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

Modellek ellenőrzése és tesztelése

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

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

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

Szoftverminőségbiztosítás

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

Programozási nyelvek II. JAVA

Szoftverminőségbiztosítás

MIÉRT KELL TESZTELNI?

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

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

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

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

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

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

Utolsó módosítás:

Modell alapú tesztelés mobil környezetben

Programozási nyelvek II. JAVA

Szoftver karbantartás

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

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

Komputeralgebra Rendszerek

MŰSZAKI TESZTTERVEZÉSI TECHNIKÁK SPECIFIKÁCIÓ ALAPÚ, VAGY FEKETEDOBOZ TECHNIKÁK

Funkciópont elemzés: elmélet és gyakorlat

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

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

Szoftverminőségbiztosítás

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

TESZTELÉS A SZOFTVER ÉLETCIKLUSÁN ÁT SZOFTVERFEJLESZTÉSI MODELLEK

Objektumorientált tesztelés

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

Unit tesztelés. Honfi Dávid, Micskei Zoltán. Integrációs és ellenőrzési technikák (VIMIA04) Méréstechnika és Információs Rendszerek Tanszék

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

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

Szoftver tesztelés a gyakorlatban 2

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

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

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

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

OO rendszerek jellemzői

Programozási alapismeretek 1. előadás

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

Szoftvertesztelés - Bevezető

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

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

Szoftvertervezés és -fejlesztés I.

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

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

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

Utolsó módosítá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!

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

Java II. I A Java programozási nyelv alapelemei

Programozási nyelvek (ADA)

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.

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

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

Szerző Lővei Péter LOPSAAI.ELTE IP-08PAEG/25 Daiki Tennó

ELTE, Informatikai Kar december 12.

Gyártórendszerek Dinamikája. Irányítástechnikai alapfogalmak

Tesztelési feladatok és kihívások a FALCON projektben

Java II. I A Java programozási nyelv alapelemei

Szkriptnyelvek. 1. UNIX shell

Dokumentáció az 1. feladatsorhoz (egyszerű, rövidített kivitelben)

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

Digitális eszközök típusai

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

Dinamikus modellek szerkezete, SDG modellek

Szoftvertesztelés Alapok

Robusztusság tesztelés

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

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

2019, Funkcionális programozás. 2. el adás. MÁRTON Gyöngyvér

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

Átírás:

Integrációs és ellenőrzési technikák (VIMIA04) Teszttervezés Majzik István, Micskei Zoltán Méréstechnika és Információs Rendszerek Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék 1

Áttekintés Funkció Felülvizsgáló Verziókezelő rendszer Fejlesztő Éles környezet Kódolási szabályok Statikus analízis Egységteszt Folytonos integráció kiszolgáló Felügyelet Rendszerteszt 2 E2E teszt Ikonok: icons8.com

Miért fontos a teszttervezés? More than the act of testing, the act of designing tests is one of the best bug preventers known. Boris Beizer 3

Tesztelési alapfogalmak (ismétlés) Specification, requirements Test cases Test execution Verdicts SUT: system under test Teszteset (test case) o bemeneti értékek, végrehajtási feltételek és elvárt eredmények halmaza, amelyeket egy konkrét célért fejlesztettek Tesztkészlet (test suite) Teszt-orákulum (test oracle) o Olyan elv vagy módszer, ami segít eldönteni a tesztelőnek, hogy sikeres volt-e a teszt Eredmény (verdict): pass / fail /error / inconclusive 4

Megoldandó feladatok Tesztkiválasztás (test selection) o Milyen bemeneti értékeket és adatok használjunk? Orákulum problémája o Honnan lesz megbízható orákulum? Kilépési feltétel (exit criteria) o Meddig folytassuk a tesztelést? 5

Teszttervezési technikák Cél: tesztesetek kiválasztása tesztcél alapján Specifikáció alapú SUT: black box Csak a specifikáció ismert Előirt funkcionalitás vizsgálata Struktúra alapú SUT: white box Belső felépítés ismert Felépítés és működés alapján bejárás 6

Lefedettségi metrikák Tesztelhető elemek mekkora %-a volt tesztelve Tesztelhető elemek o Specifikáció: követelmény, funkció o Struktúra: utasítás, döntés Lefedettségi feltétel (coverage criterion) o X % az Y metrikánál Ez nem hibafedés! 7

Mire jók a lefedettségi metrikák? Kiértékelés (mérés) Kiválasztás (cél) Meglévő tesztek kiértékelése Hiányzó tesztek azonosítása Teszt tervezése metrika mentén Cél adott % elérése 8

SPECIFIKÁCIÓ ALAPÚ TESZTELÉS 9

Teszttervezési technikák Cél: tesztesetek kiválasztása tesztcél alapján Specifikáció alapú SUT: black box Csak a specifikáció ismert Előirt funkcionalitás vizsgálata Struktúra alapú SUT: white box Belső felépítés ismert Felépítés és működés alapján bejárás 10

Specifikáció alapú technikák Ekvivalencia partícionálás Határértékanalízis Use case / user story Kombinatorikus módszerek Döntési táblák 11

Ekvivalencia partícionálás Bemenet és kimenet ekvivalencia osztályai: o Olyan adatok, amelyek várhatóan ugyanazt a hibát fedik le (ugyanazt a programrészt járják be) o Cél: Egy-egy ekvivalencia osztályból egy-egy teszt adat kiválasztása (többire elvileg hasonló) Nagyon környezetfüggő (context-dependent) o Ismerni kell a környezetet és a SUT-ot! o Tesztelő tudásán múlik a módszer hatékonysága 12

Ekvivalencia osztályok meghatározása Meghatározás heurisztikus folyamat: o Kezdés: érvényes és érvénytelen bemeneti adatok o Partíciók tovább finomítása Tipikus heurisztikák: o Tartomány (pl. 1-1000) < min, min-max, >max o Halmaz (pl. RED, GREEN, BLUE) érvényes elem, érvénytelen o Specifikus (pl. @ az elején) feltétel teljesül, feltétel nem teljesül o Egyéni (pl. február hónap) 13

Tesztesetek származtatása ekv. osztályból Több bemenet ekv. osztályainak összekapcsolása Érvényes (normál) ekv. osztályok esetén: o egy teszt minél több osztályt fedjen le Érvénytelen ekv. osztályok esetén: o először minden érvénytelen osztályhoz külön teszt legyen o egymás hatását ne oltsák ki o majd több osztály kombinációja is 14

FELADAT Ekvivalencia partícionálás Követelmény: A hitelfelvételt meg kell tagadni, ha a kért összeg 1M Ft-nál nagyobb és az igénylő 25 évnél fiatalabb, kivéve ha az összeg 3M Ft-nál kisebb és az igénylőnek már volt korábban visszafizetett hitele. Bemeneti paraméterek? Ekvivalencia osztályok? Van kérdésünk a követelménnyel kapcsolatban? 16

Specifikáció alapú technikák Ekvivalencia partícionálás Határértékanalízis Use case / user story Kombinatorikus módszerek Döntési táblák 17

Határérték-analízis Adattartományok határait vizsgálja o Egy-egy ekvivalencia osztály határaira koncentrál o Bemeneti és kimeneti tartományokra is Tipikus megtalált hibák: o relációs operátorok o ciklusok be- és kilépési feltételei o adatstruktúrák mérete o 18

Tipikus teszt adatok határértékeknél Egy határérték 3 tesztet jelent: határérték Egy tartomány 5-7 tesztet jelent: határérték 1 határérték 2 19

FELADAT Határérték-analízis Követelmény: Legalább három könyvet kell rendelni a kedvezményes ár eléréséhez, és tíz könyv rendelése esetén további kedvezmény jár. Milyen értékeket használjunk a tesztelésre? Van kérdésünk a követelménnyel kapcsolatban? 21

Specifikáció alapú technikák Ekvivalencia partícionálás Határértékanalízis Use case / user story Kombinatorikus módszerek Döntési táblák 22

Tesztek származtatása használati esetekből Tipikus tesztesetek: o 1 teszt: fő ág ( happy path, mainstream ) Ellenőrzés: utófeltételek vizsgálata o Alternatív lefutások: mindegyikhez külön teszteset o Előfeltételek (nem)teljesülése Jobbára magasabb szintek (rendszer, elfogadási ) 23

FELADAT Használati esetek (use case) 24

STRUKTÚRA ALAPÚ TESZTELÉS 25

Teszttervezési technikák Cél: tesztesetek kiválasztása tesztcél alapján Specifikáció alapú SUT: black box Csak a specifikáció ismert Előirt funkcionalitás vizsgálata Struktúra alapú SUT: white box Belső felépítés ismert Felépítés és működés alapján bejárás 26

Mi a belső felépítés? Kód esetén: forráskód struktúrája Forráskód: int a = 1; while(a < 16) { if(a < 10) { a += 2; } else { a++; } } a = a * 2; Control-flow graph (CFG): control flow Megjegyzés: CFG pontos definíciójával most nem foglalkozunk! 27

Alapfogalmak int t = 1; Speed s = SLOW; Utasítás Blokk if (! started){ } start(); if (t > 10 && s == FAST){ brake(); } else { accelerate(); } 28 Feltétel Döntés Döntési ág

Utasítás (statement) Blokk (block) Alapfogalmak o Utasítások egybefüggő sorozata, amik között nincs elágazás vagy függvényhívás Feltétel (condition) o Egyszerű vizsgálat, amiben nincs logikai (Boole) operátor Döntés (decision) o Nulla vagy több logikai operátorral összekötött feltételből álló kifejezés Döntési ág (branch) o Egy döntés lehetséges kimenetele Út (path) o Utasítások sorozata, tipikusan a modul be és kilépési pontja között 29

1. Utasítás lefedettség Tesztelés során végrehajtott utasítások száma Összes utasítás szám A1 A2 A4 A3 A5 Utasítás lefedettség: 4/5 = 80% 30

Utasítás lefedettség értékelése Minden utasítást legalább egyszer végrehajtunk k=0 [a>0] k=1 [a<=0] m=1/k Utasítás lefedettség: 100% DE: hiányzik a [a<=0] ág Üres ágak lefedését nem garantálja 31

2. Döntési lefedettség Tesztelés során előfordult döntési eredmények száma Döntési eredmények lehetséges száma A2 Döntési lefedettség: 50% A4 A3 Hány eredménye lehet egy döntésnek? 32

Döntési lefedettség értékelése Minden utasítást legalább egyszer végrehajtunk Minden ágat lefedünk (üres ágakat is) # safe(c) safe(b) [safe(c) safe(b)] A2 [else] 1 T F 2 F F A4 A3 100% döntési lefedettség DE: safe(b) = true eset hiányzik! Feltételek kombinációjára nem figyel 33

További lefedettségi metrikák (lásd MSc) Condition Coverage Condition/Decision Coverage (C/DC) Modified Condition/Decision Coverage (MC/DC) Multiple Condition Coverage (MCC) Loop Coverage All-Defs Coverage All-Uses Coverage 34

FELADAT Struktúra alapú tesztelés 1 Product getproduct(string name, Category cat){ 2 if (name == null! cat.isvalid) 3 throw new IllegalArgumentException(); 4 5 Product p = ProductCache.getItem(name); 6 7 if (p == null){ 8 p = DAL.getProduct(name, cat); 9 } 10 11 return p; 12 } Tervezz teszteket: 100% utasítás lefedettség 100% döntési lefedettség 36

Kód lefedettség számolása a gyakorlatban Mindegyik eszköznél más definíciók Megvalósítás o Forrás/bináris kód instrumentálása o Lefedettséget számoló utasítások hozzáadása if (a > 10){ CoveredBranch(1, true); b = 3; } else { CoveredBranch(1, false); b = 5; } send(b); Lásd például: Is bytecode instrumentation as good as source code instrumentation, 2013. 37

Kód lefedettség használata Mire használható: o Egyáltalán nem tesztelt kódrészlet azonosítása o Tesztkészlet teljességének értékelése o Kilépési feltételekben Mire nem használható: o Hiányzó/hiányos követelmények azonosítása o Kód/teszt minőségével csak indirekt kapcsolat 38

Kód lefedettség használata a gyakorlatban Microsoft tapasztalata: o Test suite with high code coverage and high assertion density is a good indicator for code quality. o Code coverage alone is generally not enough to ensure a good quality of unit tests and should be used with care. o The lack of code coverage to the contrary clearly indicates a risk, as many behaviors are untested. (Forrás: Parameterized Unit Testing with Microsoft Pex ) Kapcsolódó cikkek: o Coverage Is Not Strongly Correlated with Test Suite Effectiveness, 2014. DOI: 10.1145/2568225.2568271 o The Risks of Coverage-Directed Test Case Generation, 2015. DOI: 10.1109/TSE.2015.2421011 39

Teszttervezési technikák összefoglalása Specifikáció és struktúra alapú technikák o Több, egymást kiegészítő módszer o Mindegyik módszert gyakorolni kell Technikák kombinációja hasznos Példa (Microsoft): specifikáció alapú: 83% kód lefedettség + felderítő tesztelés: 86% kód lefedettség + struktúra alapú: 91% kód lefedettség 40 40

Összefoglalás 41