Szoftverfejlesztés teszteléssel A szoftvertesztelés úgyis a tesztelők dolga! Vagy nem csak az övék?! 2017. november 22. (c) 2017 CTL Software Kft 1
Bemutatkozás (c) 2017 CTL Software Kft 2
ELISPOT (c) 2017 CTL Software Kft 3
(c) 2017 CTL Software Kft 4
(c) 2017 CTL Software Kft 5
AD-E20\counted\A3 AD-E20\counted\G3 AD-E20\counted\B3 AD-E20\counted\H3 (c) 2017 CTL Software Kft 6
(c) 2017 CTL Software Kft 7
(c) 2017 CTL Software Kft 8
(c) 2017 CTL Software Kft 9
CTL Software Kft Kecskeméten 2009 óta A portfolióban több, mint 10 alkalmazás 2016-ban több, mint 80 kiadott szoftververzió (c) 2017 CTL Software Kft 10
Kérdés (c) 2017 CTL Software Kft 11
A szoftvertesztelés úgyis a tesztelők dolga! Vagy nem csak az övék?! (c) 2017 CTL Software Kft 12
Elvárásaink felhasználóként (c) 2017 CTL Software Kft 13
A szoftverhibák költségei I. Egy kiadott szoftverben a vevő felhasználója hibát talál Az ügyfél nem tudja elvégezni a munkáját a hiba kijavításáig Az ügyfélszolgálatunk a hiba kijavításáig leterhelt lesz Vállalatunk és szoftverünk hírneve csorbát szenved a legjobb reklám a jó minőségű termék és szolgáltatás A háttércsapat lehet, hogy napokig dolgozik a hiba reprodukálásán A programozók kijavítják a hibát A javítást és a teljes szoftvert teszteljük és kiadjuk Az ügyfélszolgálat telepíti a javított verziót (c) 2017 CTL Software Kft 14
A szoftverhibák költségei II. Egy fejlesztés alatt lévő szoftverben a programozó megtalálja a hibát és 5 perc munkával minden a megfelelő mederbe kerül! (c) 2017 CTL Software Kft 15
Szoftverfejlesztési módszertanok Követelmények Analízis Tervezés Implementálandó Inkrementálisan elkészülő működő szoftververziók Tesztelés Kódolás (Waterfall, Spiral, Agilis) (c) 2017 CTL Software Kft 16
A szoftvertesztelés V modellje Megrendelő Üzleti igény Validálás Felhasználói elfogadási tesztek Követelményspecifikáció Verifikáció Funkcionális tesztek Integrációs és rendszer tesztek Tervezési specifikáció Kód review, függőség ell. Forráskód egységek Egységtesztek, statikus analízis Szállító (c) 2017 CTL Software Kft 17
A szoftverhibák költségei III. Kódolás során Funkcionális tesztek Validálás Felhasználói hibajelentés (c) 2017 CTL Software Kft 18
Test early and test often (c) 2017 CTL Software Kft 19
De mielőtt belevetnénk magunkat a tesztelésbe (c) 2017 CTL Software Kft 20
Módszertani szempontok A kiváló szakemberi képességek és hozzáállás szerepe rendkívül fontos az elsődleges minőség szempontjából (c) 2017 CTL Software Kft 21
Egyéb módszertani szempontok Bízzuk a számítógépre amiben jobb, mint az ember Szintaxis ellenőrzése Kódolási stílus segítése, ellenőrzése (statikus analízis) Egyszerűség mérése (Ciklomatikus komplexitás) Futásidejű helyesség-ellenőrzés elsősorban egységtesztek által funkcionális tesztek által amennyiben érdemes Rendszerszintű ellenőrzés: Continuous Integration (CI) Automata tesztelés (c) 2017 CTL Software Kft 22
A szoftvertesztelés V modellje Üzleti igény Validálás Felhasználói elfogadási tesztek Követelményspecifikáció Verifikáció Funkcionális tesztek Tervezési specifikáció Kód review, függőség ell. Forráskód egységek Egységtesztek, statikus analízis (c) 2017 CTL Software Kft 23
Egységtesztek (Unit tests) A legkisebb szoftver-egységek (tipikusan osztályok) helyes működését biztosítják (c) 2017 CTL Software Kft 24
Egységtesztek (Unit tests) Az egységtesztek futtatására sokféle keretrendszer létezik NUnit MSTest Junit Google Test (c) 2017 CTL Software Kft 25
Egységtesztek (Unit tests) Unit test Class x (c) 2017 CTL Software Kft 26
Egységtesztek esettanulmány UnitTest_Addition ICalculatable +float Calculate(float a, float b) Addition +float Calculate(float a, float b) (c) 2017 CTL Software Kft 27
Test Driven Development (TDD) (c) 2017 CTL Software Kft 28
Test Driven Development (TDD) Írj egy teszt esetet Futtasd az összes tesztet és ellenőrizd az új teszt sikertelenségét Elégítsd ki a teszt esetet egy minimális implementációval Ellenőrizd, hogy minden teszt eset helyesen lefut Ha szükséges, végezz refaktorálást Ismételd! (c) 2017 CTL Software Kft 29
TDD - példa (c) 2017 CTL Software Kft 30
TDD - példa (c) 2017 CTL Software Kft 31
TDD - példa (c) 2017 CTL Software Kft 32
TDD - példa (c) 2017 CTL Software Kft 33
TDD - példa (c) 2017 CTL Software Kft 34
TDD - példa (c) 2017 CTL Software Kft 35
TDD - példa (c) 2017 CTL Software Kft 36
TDD - példa (c) 2017 CTL Software Kft 37
TDD - példa (c) 2017 CTL Software Kft 38
TDD - példa (c) 2017 CTL Software Kft 39
TDD - példa (c) 2017 CTL Software Kft 40
TDD - példa (c) 2017 CTL Software Kft 41
TDD - példa (c) 2017 CTL Software Kft 42
TDD - példa (c) 2017 CTL Software Kft 43
TDD - példa (c) 2017 CTL Software Kft 44
Mi a hiba? (c) 2017 CTL Software Kft 45
TDD - példa (c) 2017 CTL Software Kft 46
TDD - példa (c) 2017 CTL Software Kft 47
TDD - példa (c) 2017 CTL Software Kft 48
Refaktorálás (c) 2017 CTL Software Kft 49
Mit szeretnénk még? Skalár-műveletek Vektor-műveletek Addition Addition Subtraction Subtraction Multiplication Multiplication Division Division (c) 2017 CTL Software Kft 50
TDD - példa (c) 2017 CTL Software Kft 51
Hozzuk létre a funkciók direkt szorzatát! ArrayOperation Addition Subtraction Array Addition! Array Subtratcion! Multiplication Array Multiplication! Division Array Division! (c) 2017 CTL Software Kft 52
Hogyan tovább? ArrayOperation ICalculatable +float Calculate(float a, float b) Addition +float Calculate(float a, float b) Subtraction +float Calculate(float a, float b) (c) 2017 CTL Software Kft 53
(c) 2017 CTL Software Kft 54
Létrehoztuk a funkciók direkt szorzatát! ArrayOperation Addition Subtraction Array Addition Array Subtratcion Multiplication Division Array Multiplication Array Division (c) 2017 CTL Software Kft 55
Mock ArrayOperation ICalculatable +float Calculate(float a, float b) Addition +float Calculate(float a, float b) Test Mock +float Calculate(float a, float b) (c) 2017 CTL Software Kft 56
A TDD esettanulmány eredményei Az implementációt kis egységekre bontottuk, ezáltal Csökkentettük a kód méretét Csökkentettük a szükséges teszt esetek számát El tudtunk érni teljes teszt-lefedettséget! Követtük az objektumorientált programozás SOLID alapelveit Explicit módon felmerült a kérdés és megválaszoltuk, hogy milyen számítási pontosságra van szükségünk. Magabiztosak vagyunk, hogy az implementáció helyes A kódunk karbantartható A TDD kikényszeríti a jó programozási alapelvek használatát! (c) 2017 CTL Software Kft 57
A TDD a megoldás mindenre? (c) 2017 CTL Software Kft 58
Lehet-e egységteszteket utólag elkészíteni? (c) 2017 CTL Software Kft 59
A 100% egységteszt lefedettség garancia-e a tökéletes működésre? (c) 2017 CTL Software Kft 60
SOLID principles Single responsibility principle a class should have only a single responsibility (i.e. changes to only one part of the software's specification should be able to affect the specification of the class) Köv. 15. Köv. 26. Class 1 Köv. 15. Köv. 26. Class 1 Class 2 (c) 2017 CTL Software Kft 61
SOLID principles Open/closed principle software entities should be open for extension, but closed for modification. ArrayOperation ICalculatable Addition +float Calculate(float a, float b) Subtraction +float Calculate(float a, float b) (c) 2017 CTL Software Kft 62
SOLID principles Liskov substitution principle objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program. ArrayOperation ICalculatable Addition +float Calculate(float a, float b) Subtraction +float Calculate(float a, float b) (c) 2017 CTL Software Kft 63
SOLID principles Interface segregation principle many client-specific interfaces are better than one generalpurpose interface ArrayOperation ICalculatable +float Calculate(float a, float b) (c) 2017 CTL Software Kft 64
SOLID principles Dependency inversion principle one should depend upon abstractions, [not] concretions ArrayOperation ICalculatable Addition +float Calculate(float a, float b) Subtraction +float Calculate(float a, float b) (c) 2017 CTL Software Kft 65
A szoftvertesztelés V modellje Üzleti igény Validálás Felhasználói elfogadási tesztek Követelményspecifikáció Verifikáció Funkcionális tesztek Integrációs és rendszer tesztek Tervezési specifikáció Kód review, függőség ell. Forráskód egységek Egységtesztek, statikus analízis (c) 2017 CTL Software Kft 66
A szoftvertesztelés V modellje Üzleti igény Validálás Felhasználói elfogadási tesztek Követelményspecifikáció Verifikáció Funkcionális tesztek Integrációs és rendszer tesztek Tervezési specifikáció Kód review, függőség ell. Forráskód egységek Egységtesztek, statikus analízis (c) 2017 CTL Software Kft 67
A szoftvertesztelés V modellje Üzleti igény Validálás Felhasználói elfogadási tesztek Követelményspecifikáció Verifikáció Funkcionális tesztek Integrációs és rendszer tesztek Tervezési specifikáció Kód review, függőség ell. Forráskód egységek Egységtesztek, statikus analízis (c) 2017 CTL Software Kft 68
A szoftvertesztelés V modellje Üzleti igény Validálás Felhasználói elfogadási tesztek Követelményspecifikáció Verifikáció Funkcionális tesztek Integrációs és rendszer tesztek Tervezési specifikáció Kód review, függőség ell. Forráskód egységek Egységtesztek, statikus analízis (c) 2017 CTL Software Kft 69
A szoftvertesztelés V modellje Üzleti igény Validálás Felhasználói elfogadási tesztek Követelményspecifikáció Verifikáció Funkcionális tesztek Integrációs és rendszer tesztek Tervezési specifikáció Kód review, függőség ell. Forráskód egységek Egységtesztek, statikus analízis (c) 2017 CTL Software Kft 70
A szoftvertesztelés V modellje Üzleti igény Validálás Felhasználói elfogadási tesztek Követelményspecifikáció Verifikáció Funkcionális tesztek Integrációs és rendszer tesztek Tervezési specifikáció Kód review, függőség ell. Forráskód egységek Egységtesztek, statikus analízis (c) 2017 CTL Software Kft 71
A szoftvertesztelés V modellje Üzleti igény Validálás Felhasználói elfogadási tesztek Követelményspecifikáció Verifikáció Funkcionális tesztek Integrációs és rendszer tesztek Tervezési specifikáció Kód review, függőség ell. Forráskód egységek Egységtesztek, statikus analízis (c) 2017 CTL Software Kft 72
Hogyan készítsük el a teszt terveket? (c) 2017 CTL Software Kft 73
ISO 14971 Risk Management (Kockázatkezelés) (c) 2017 CTL Software Kft 74
Hibák súlyosság szerint Hiba leírása Nyomtatásban a. lemarad a dátum végéről A szoftver nem települ fel az ügyfél számítógépére A szoftver legújabb verziója más eredménnyel értékel egy mintát, mint az előző verzió Súlyossági fok Alacsony Magas Kritikus (c) 2017 CTL Software Kft 75
Mennyit teszteljünk? Költség (HUF) Tesztelés költsége Becsült teljes költség Rejtett hibák becsült költsége Optimum: minimális teljes költség Tesztelési költség (HUF) (c) 2017 CTL Software Kft 76
Jó tesztek tulajdonságai Megismételhető Gyors Független más tesztektől (c) 2017 CTL Software Kft 77
Funkcionális tesztek Hogyan teszteljünk? Kézi tesztelés Teszt tervek alapján Felfedező (exploratory) Automata tesztelés Szükséges idő? Változó követelmények? Kell-e rendszeresen futtatni? Programozási feladat! (c) 2017 CTL Software Kft 78
Funkcionális tesztek Hogyan teszteljünk? API tesztek GUI tesztek (c) 2017 CTL Software Kft 79
Használhatósági tesztek UI tesztek UI hatékonyság tesztek / UX Elérhetőség sérült emberek számára (c) 2017 CTL Software Kft 80
Regressziós tesztek (c) 2017 CTL Software Kft 81
Konfigurációs tesztek Minden PC konfiguráción jól fut? 32 és 64 bites gépen is jól fut? (c) 2017 CTL Software Kft 82
Teljesítmény tesztek (c) 2017 CTL Software Kft 83
Kompatibilitási tesztek (c) 2017 CTL Software Kft 84
Kompatibilitási tesztek Kihívás Operációs rendszerek Windows 7 Windows 10 Számosság Platform x86 x64 2 MS Office 2010 2013 2016 SQL server 2008, 2012 2014, 2017 2 3 4 Összesen 11 vagy 48 (c) 2017 CTL Software Kft 85
Biztonsági (security) tesztek (c) 2017 CTL Software Kft 86
Működés a gyakorlatban Szükséges kellékek: Szoftverfejlesztési módszertan Projektmenedzsment Követelmények felmérése, dokumentálása, nyilvántartása, követése Kockázat értékelés és menedzsment Teszt terv: futtatandó funkcionális tesztek definiálása Szoftver tervezés Kiváló programozói képességek, szokások és gyakorlat Forráskódkezelés Konfiguráció-kezelés Elkészült szoftverelemek folyamatos minőségellenőrzése (c) 2017 CTL Software Kft 87
Elkészült szoftverelemek folyamatos minőségellenőrzése A gyakorlatban csak automatizálással valósítható meg Continuous Integration (CI) Unit tesztek futtatása Statikus analízis Automatizált funkcionális tesztek futtatása (c) 2017 CTL Software Kft 88
Teszt-lefedettség A magas kockázatú funkciókat (követelményeket) tesztelni kell Honnan tudjuk, hogy mely követelmények vannak tesztekkel fedve? (c) 2017 CTL Software Kft 89
Traceability matrix Test Case 1 Test Case 2 Követelmény 1 + Követelmény 2 + Követelmény 3 + (c) 2017 CTL Software Kft 90
A folyamatok követhetősége Szabályozott környezetben szükséges, hogy a tevékenységek és folyamatok dokumentáltan történjenek Ilyenek: Orvosi műszergyártás Repülőgép-ipar (c) 2017 CTL Software Kft 91
A folyamatok követhetősége A követelmények, teszt esetek, teszt futtatások mind követésre kerülnek Az egyes entitások önálló audit trail-el rendelkeznek: Mikor? Ki változtatott? Mit változtatott? (c) 2017 CTL Software Kft 92
A megvalósítás szoftver eszközei (c) 2017 CTL Software Kft 93
Szoftver életciklus-támogatás (ALM) Inflectra SpiraTeam IBM DOORS Intland Polarion PTC Microsoft TFS (c) 2017 CTL Software Kft 94
Forráskódkezelő Git Svn (c) 2017 CTL Software Kft 95
Continuous integration Jenkins TeamCity CruiseControl CruiseControl.NET (c) 2017 CTL Software Kft 96
Automata teszt keretrendszerek Egységtesztekhez xunit Funkcionális tesztekhez TAFX Selenium SmartBear Rapise (c) 2017 CTL Software Kft 97
A gyakorlatban (c) 2017 CTL Software Kft 98
(c) 2017 CTL Software Kft 99
(c) 2017 CTL Software Kft 100
(c) 2017 CTL Software Kft 101
(c) 2017 CTL Software Kft 102
Teszt futtatások követése Log file-ok Egy kézi teszt futtatás felvétele: Felvétel Egy automata teszt futtatás felvétele: Video (c) 2017 CTL Software Kft 103
A szoftvertesztelés úgyis a tesztelők dolga! Vagy nem csak az övék?! (c) 2017 CTL Software Kft 104
Kérdések? (c) 2017 CTL Software Kft 105