Prezentácia sa nahráva. Prosím počkajte

Prezentácia sa nahráva. Prosím počkajte

Karol Rástočný karol.rastocny@stuba.sk Testovanie softvéru Karol Rástočný karol.rastocny@stuba.sk 15.4.2019.

Podobné prezentácie


Prezentácia na tému: "Karol Rástočný karol.rastocny@stuba.sk Testovanie softvéru Karol Rástočný karol.rastocny@stuba.sk 15.4.2019."— Prepis prezentácie:

1 Karol Rástočný karol.rastocny@stuba.sk
Testovanie softvéru Karol Rástočný

2 Testovanie softvéru Proces verifikácie pre určenie a zlepšenie kvality softvéru [Friedman&Voas, 1995] Verifikácia vyhodnocuje či produkt spĺňa požiadavky Validácia vyhodnocuje či produkt zodpovedá jeho plánovanému použitiu Verifikácia Validácia Problém Špecifikácia Návrh Implementácia Systém

3 https://www. easterbrook

4 ISO/IEC/IEEE 29119 Štandardy pre testovanie softvéru
Koncepty, definície, procesy, dokumentácia, techniky návrhu testov, ... 4.92 testovanie – skupina aktivít vykonávaných za účelom určenia a/alebo vyhodnotenia vlastností jedného alebo viacerých testovaných prvkov [ISO/IEC/IEEE :2013] Note 1 to entry: Testing activities could include planning, preparation, execution, reporting, and management activities, insofar as they are directed towards testing. 4.68 test item - work product that is an object of testing EXAMPLE A system, a software item, a requirements document, a design specification, a user guide. 4.69

5 Kde to začalo? Výber daní v Japonsku – prvý štatistický model kvality (1950) Výroba automobilov ( ) Monopoly – kvalita nebola prvoradá Prepájanie trhov – súperenie v kvalite Najskôr Japonci potom USA (Ford, GM) Modely kvality výroby Testovanie ako overenie kvality

6 1822–1956: Ladenie 1951: Prvé modely kvality SW
1952: Prvý univerzálny počítač (IBM) – testovanie konfigurácií Difference engine (Babbage)

7 1957–1988: Splnenie požiadaviek
1957: Charles L. Baker; Program testing vs debugging 1958: Prvý tím testerov SW (projekt Merkúr) 1961: Weinberg, Leeds – testovanie má overiť adaptovateľnosť programu a nie schopnosť spracovať informáciu 1967: IBM; Evaluation of the Functional Testing of Control Programs – potreba testovanie plánovať 1968: Bauer; Software crisis – potreba písať verifikovateľný a znovupoužiteľný kód 1969: Dijkstra; Testing shows the presence, not the absence of bug 1970: Royce, Vodopádový model

8 Vodopádový model Benington, 1956 / Royce, 1970

9 W-Model Špecifikácia systému Implementácia systému Zostavenie softvéru
Návrh systému Zostavenie systému Špecifikácia požiadaviek Nasadenie systému Testovanie návrhu Testovanie špecifikácie Testovanie požiadaviek Akceptačné testovanie Systémové testovanie Testovanie integrácie Testovanie jednotiek (Paul Herzlich, 1993)

10 Testovanie čiernej skrinky Testovanie bielej skrinky
Požiadavky Špecifikácia požiadaviek Akceptačné testovanie Požiadavky/špecifikácia systému Špecifikácia systému Systémové testovanie Požiadavky/štruktúra systému Návrh systému Testovanie integrácie Štruktúra jednotky Implementácia systému Testovanie jednotiek Testovanie bielej skrinky

11 Testovanie jednotiek/komponentov
Testovanie izolovanej jednotky programu

12 Jednotka programu Kúsok kódu spustiteľný z vonkajšieho prostredia jednotky Implementuje nízkoúrovňovú funkcionalitu Závisí na úrovni abstrakcie a technológii Procedúra Funkcia Metóda Trieda Aspekt Modul Komponent

13 Izolácia jednotky Samostatné testovanie Chyby sú izolované v jednotke
Bez integračných závislostí Znižuje množstvo testovacích prípadov Napr. stupeň vetvenia Chyby sú izolované v jednotke Jeden test – jedna potenciálna chyba Jednoduché prešetrenia výsledkov testovania Jednoduchá oprava chyby

14 Vykonávatelia testovania jednotiek
Programátor jednotky Pozná vnútorné detaily jednotky Demonštruje korektnosť a kvalitu riešenia Demonštruje pripravenosť na integráciu Zvyšuje zapojenie programátora do kvality Inžinier testovania Nezávislé potvrdenie Vyžaduje pochopenie funkcií a štruktúry jednotky

15 Fázy Statické testovanie jednotiek Dynamické testovanie jednotiek
Kód je skúmaný voči všetkým prípadom správania sa Jednotka je validovaná voči požiadavkám Dynamické testovanie jednotiek Spúšťanie jednotky Vstupné dáta sú vyberané na základe štrukúty Výstupy sú validované voči očakávaným výstupným dátam

16 Statické testovanie jednotky
Kód nemusí byť kompletný Nájdi chyby hneď ako je to možné Techniky Inšpekcia Peer review voči preddefinovaným kritériám Automatizácia: Statická analýza Prechod Simulácia preddefinovaných scenárov s vysvetlením

17 Dynamické testovanie jednotiek
Izolované spustenie testovanej jednotky: Jednotka je vyňatá z jej exekučného prostredia Exekučné prostredie je emulované a skompilované spolu s jednotkou Kompilát je spustený s vybranými vstupmi, pričom sú zozbierané jednotlivé výstupy Výstupy sú porovnané voči očakávaným výstupom – rozdiel znamená zlyhanie

18 Prostredie testovania jednotky
Ovládač testu Výstupy Volanie a vstupné parametre Výstupné parametre Testovaná jednotka Volanie Pot. Vol. Potvrdenie Stub Stub Log Log

19 Rámce pre testovanie jednotiek
Skriptovanie a spúšťanie ovládačov testov Ovládač testu Vykonávač testov (test runner) IDE integrácie CI integrácie Samostatne stojace aplikácie Kód testu jednotky Vstupné dáta Tvrdenia (assertions)

20 Rámce pre atrapy Skriptovanie stub-ov Atrapa (mock) Nahradená jednotka
Imitácia vykonania when – šablóna volania nahradenej jednotky then – návratová hodnota Monitorovanie spustenia Počítadlo spustenia Vstupné dáta spustenia

21 Fixture: Skupina testov
Fixture set-up Nastavenie prostredia pre celú skupinu testov Test case set-up Nastavenie prostredia pre jeden testovací prípad Spustené pred vykonaním každého testovacieho prípadu Test cases Testy jednotiek Test case tear down Vyčistenie prostredia po vykonaní jedného testovacieho prípadu Spustené po vykonaní každého testovacieho prípadu Fixture tear down Vyčistenie prostredia po vykonaní celej skupiny testov

22 Fixture set-up Test case set-up Test case i Test case tear down
[Next test case] [All test cases executed] Fixture tear down

23 Štruktúra testu jednotky (AAA)
Príprava (Arrange) Input data preparation Mocks set-up Vykonanie (Act) Execution of an unit under test Potvrdenie (Assert) Validácia vykonania atráp Validácia výstupných dát

24 NUnit + Moq + Shoudly (C#)
[TestFixture] public class RestServiceTest { private Mock<Core> core; private Mock<AnonymizationCore> anoymizationCore; private RestService service; [SetUp] public void SetUp() core = new Mock<Core>() { CallBase = true }; anoymizationCore = new Mock<AnonymizationCore>() { CallBase = true }; service = new RestService(core.Object, anoymizationCore.Object); } [Test] public void PingTest() service.Ping().Result.ShouldBe("OK");

25 [Test] public void GenerateTestsTest() { var request = new GenerateTestsRequest() RootAstNode = new Common.AST.AstNode(), Author = "author", }; var testSuites = new CloneableList<ITestSuite>(1) new TestSuiteTestData() { Name = "Name 1", SourceCode = "Code 1“ } var jobData = new JobData(); jobData.SetTestSuites(testSuites); core.Setup(x => x.GenerateTests(It.IsNotNull<AstNode>()) .Returns(Task.FromResult(jobData)); var response = service.GenerateTests(request).Result; response.JobId.ShouldNotBe(Guid.Empty); response.TestSuites.ShouldNotBeNull(); response.TestSuites.Count().ShouldBe(1); }

26 Sú jednotkové testy postačujúce?

27 Testovanie integrácie
Technika systematického zostavovania softvérového systému počas vykonávania testov zameraných na odhalenie chýb spojených z rozhraniami.

28 Testovanie integrácie
Cieľ: Zostaviť primerane stabilný systém v laboratórnom prostredí Dôvody Rôzne moduly sú vytvorené rôznymi vývojármi Testy jednotiek volajú atrapy a nie reálne jednotky prostredníctvom hardvérových a programových rozhraní

29 Úrovne testovania integrácie
Vnútrosystémové testovanie Nízkoúrovňové testovanie integrácie s cieľom zostaviť súdržný systém Medzisystémové testovanie Vysokoúrovňové testovanie rozhraní samostatne testovaných systémov End-to-end testovanie zamerané na špecifickú vlastnosť Testovanie párov Testovanie integrácie dvoch systémov

30 Techniky integrácie Integrácia relevantných jednotiek čiastočne naprogramovaného systému Inkrementálna Zhora dole Zdola hore Sandwich Big bang

31 Inkrementálna integrácia
Systém je zostavený inkrementálnou integráciou v cykloch Integruj novú otestovanú a schválenú jednotku Spusti testy Analyzuj výsledky testov Oprav chyby

32 Integrácia zhora nadol
Inkrementálna hierarchický integrácia smerom od volajúcich jednotiek Jednotky z nižších úrovní sú nahradené atrapami A C B D

33 Top down integration Nahraď atrapu implementovanou jednotkou
Otestuj rozhranie voči implementácii Spusti regresné testovanie A B C D E F

34 Bottom up integration Inkrementálna hierarchický integrácia smerom od volaných jednotiek Vyššie úrovne sú nahradené ovládačom Ovládače testov z vyšších úrovní sú nahrádzané implementovanými jednotkami Test driver Test driver B C D E F

35 Zhora nadol vs. zdola nahor
Validácia hlavných návrhových rozhodnutí Dekompozícia problému z hora nadol Sledovanie funkcií na systémovej úrovni Rozhrania systému sú na najvyššej úrovni Zložitosť návrhu testovacích prípadov Vysoké úrovne vyžadujú veľa atráp Techniky zdola nahor vyžadujú iba tvrdenia Znovupoužiteľnosť testovacích prípadov Regresné testovanie v technikách z hora nadol

36 Big bang integrácia Všetky jednotky sú testované samostatne
Všetky jednotky sú naraz integrované Všetky rozhrania sú testované na celom systéme

37 Sandwich integrácia Kombinácia techník zhora nadol, zdola nahor a big bang Použi techniku zhora nadol na najvyšších úrovniach Použi techniky zdola nahor na najnižších úrovniach Použi techniku bing bang na stredné úrovne

38 Systémové testovanie Komplexné testovanie vykonávané s cieľom validovať celý systém a jeho charakteristiky vychádzajúce z požiadaviek a návrhu.

39 Systémové testovanie Validuje integráciu celého systému (HW aj SW jednotky) voči funkcionálnym a nie funkcionálnym požiadavkám Špecializované typy testov na meranie kvalitatívnych vlastností

40 Úroveň testovania vs. typ testu
Vývojové fázy Kvalitatívne vlastnosti

41 Testy komunikácie Verifikujú komunikáciu medzi (pod-)systémami
Základné testy spojenia Naviazanie základného spojenia Testy schopností Sledovateľnosť statických schopností, napr. časové limity, rozsahy hodnôt Testy správania Verifikujú dynamické požiadavky na komunikáciu

42 Testy modulov Verifikujú, že všetky individuálne funkcie modulov systému zodpovedajú očakávaniam Testy sú navrhnuté tak, aby verifikovali špecifickú funkciu konkrétneho modulu Správnosť je verifikovaná prostredníctvom Systémových log-ov Poskytnutých výstupov

43 Testy vlastností Verifikujú správnosť systémových procesov
Scenáre biznisu Skriptovanie vstupov používateľských rozhraní a porovnanie výstupov používateľského rozhrania Veľa manuálnej práce Ťažké na údržbu Nahraj a pusť Zmeny GUI vyžadujú nové nahrávky

44 Testy použiteľnosti Verifikujú používateľské rozhrania voči potrebám používateľov Nezameriavajú sa na programové chyby Alpha testovanie Simulovaná prevádzka potenciálnymi používateľmi na strane vývojára Beta testovanie Marketingová beta – zabezpečenie skorého povedomia a záujmu o produkt Technická beta – získanie spätnej väzby od používateľov v reálnom prostredí Akceptačná beta – ubezpečenie, že produkt zodpovedná akceptačným kritériám

45 Testy bezpečnosti Verifikujú charakteristiky bezpečnosti
Očakávané správanie Negatívne scenáre a scenáre zneužitia Neočakávané správanie Penetračné testovanie Systémové zlyhania, exploidy, integrácie, ošetrenie chýb, …

46 Testy hraničných hodnôt
Verifikujú robustnosť oproti hraničným podmienkam a špeciálnym a základným hodnotám Podporované hodnoty Pozorovanie správnej funkčnosti Nepodporované hodnoty Pozorovanie definovaných chybových správ a procesov spracovania chýb

47 Testy spolupráce Verifikujú spoluprácu s produktami tretích strán
Testovanie konfigurácií Kontroluje spoluprácu medzi rôznymi HW a SW komponentmi Testovanie kompatibility Kontroluje funkčnosť systému v rôznych prostrediach

48 Testovanie výkonu Verifikuje výkon systému voči požiadavkám Merania
Zaťaženie vs. merateľné charakteristiky Merania End-to-end response time CPU time Network connection time Database access time Waiting time

49 Testovanie škálovateľnosti
Verifikovanie, že je možné systém škálovať smerom k jeho projektovaným limitom Identifikuje limity kedy systém dosiahne požiadavky na oneskorenie a priepustnosť Limitácie Veľkosť dátového úložiska Šírka sieťového pásma Rýchlosť

50 Stress testy Vyhodnocujú a zisťujú správanie systému po prekonaní očakávanej kapacity systému Inkrementálne zvyšovanie limitov pokiaľ systém nezlyhá Zlyhanie po presiahnutí limitu by malo viesť k spusteniu mechanizmov zotavenia zo zlyhania Odhaľujú problémy s Únikmi pamäti Alokáciou a rozdrobením vyrovnávacej pamäte Proces Otestuj individuálne moduly – kapacita modulov Otestuj individuálne prepojenia medzi modulmi – kapacita prepojení Otestuj celý systém – kapacity všetkých prepojení a modulov

51 Testy zaťaženia a stability
Uistenie, že systém zostane stabilný po dlhšiu dobu plnej záťaže Simulácia situácií z reálneho života Problémy dlhodobej záťaže Spomalenie systému Problémy s funkcionalitou Tiché zlyhania Komplexné zlyhania systému

52 Testy spoľahlivosti Merajú schopnosť systému zostať funkčným počas dlhšej doby MTTF – mean time to failure / priemerná doba zlyhania MTTR – mean time to repair / priemerná doba opravy MTBF – mean time between failures / priemerná doba medzi zlyhaniami Techniky náhodného testovania TTR1 TTR2 TTR3 TTR4 TTF1 TTF2 TTF3 TTF4 TBF1 TBF2 TBF3 TBF4

53 Regresné testy Verifikujú nové verzie systému voči charakteristikám predchádzajúcich verzií Overenie, že neboli zavedené nové chyby Vybraná množina testovacích prípadov Maximalizácia pravdepodobnosti odhalenia novej chyby Zníženie nákladov na testy

54 Prieskumné testovanie
Celkové testovanie kvality za súčasného Učenia Návrhu testov Vykonávania testov Analýzy výsledkov Pre Náklady na prípravu Skoré odhalenie kritických chýb Deduktívne uvažovanie Proti Testy nie je možné skontrolovať Malá miera automatizácie Kvalita je závislá na skúsenostiach

55 Akceptačné testovanie
Formálne testovanie vykonávané na určenie či systém zodpovedá akceptačným kritériám.

56 Akceptačné testovanie
Vykonávané zákazníkmi na základe ich očakávaní Používateľské akceptačné testovanie Uistenie sa, že systém zodpovedá zmluvným akceptačným kritériám Biznisové akceptačné testovanie Uistenie sa, že systém zodpovedám požiadavkám podnikania – obchodná stratégia, štandardy, ...

57 Akceptačné kritériá Merateľné kritériá
Preferované sú kvantitatívne Vybrané a prioritizované zákazníkom Zamerané na kvalitatívne atribúty z rôznych uhlov pohľadu Transcendentálny pohľad – ťažké na definovanie Používateľský pohľad – zdroj uspokojenia Výrobný pohľad – vyhovenie špecifikácii Produktový pohľad – vnútorné vlastnosti Hodnotový pohľad – cena, ktorú je zákazník ochotný zaplatiť

58 Priebeh akceptačného testovania
Systémový inžinier testovania na staane zákazníka Asistuje zákazníkovi v príprave testovacieho prostredia Trénuje inžinierov akceptačného testovania v používaní systému Poskytuje výsledky predchádzajúcich systémových testov inžinierom akceptačného testovania Asistuje inžinierom akceptačného testovania pri vykonávaní akceptačných testov

59 Priebeh akceptačného testovania
Zistené chyby sú reportované dodávateľovi Chyby sú opravené, nová zostava je pretestovaná a dodaná zákazníkovi Inžinieri akceptačného testovania opakujú testy, ktoré zlyhali Rozdiely v akceptačných kritériách, ktoré vychádzajú z ich chybného definovania, sú zadokumentované

60 Testovanie integrácie vs. Systémové testovanie

61 Granularita Testovanie integrácie Systémové testovanie
Rozhrania medzi jednotkami Komunikujú jednotky správne? Systémové testovanie Systém ako celok Zodpovedá systém požiadavkám?

62 Požiadavky Testovanie integrácie Systémové testovanie
Funkcionálne požiadavky Sú správne implementované vnútorné systémové scenáre? Systémové testovanie Funkcionálne aj nie funkcionálne požiadavky Sú správne implementované scenáre interakcie systému s okolím? Vyhovuje systém kvalitatívnym požiadavkám?

63 Techniky návrhu testov
Testovanie integrácie Techniky založené na štruktúre a špecifikácii Testovanie čiernej aj bielej skrinky Systémové testovanie Techniky založené na špecifikácii Testovanie čiernej skrinky

64 Účastníci Testovanie integrácie Systémové testovanie
Vývojári a inžinieri testovania Systémové testovanie Inžinieri testovania

65 Typy testov Testovanie integrácie Systémové testovanie
Techniky integrácie Zhora nadol, zdola nahor, big-bang, ... Systémové testovanie Testovanie kvalitatívnych vlastností Testovanie výkonu, škálovateľnosti, bezpečnosti, použiteľnosti, ….

66 Výsledky Testovanie integrácie Systémové testovanie Integrovaný systém
Verifikovaný systém

67 Príklad: Filter playlistu
Používateľ zadá playlist Systém vyfiltruje skladby dlhšie než 3 minúty Systém vyfiltruje klasickú hudbu Systém vyfiltruje skladby z nižšou kvalitou než 128kbps Systém spustí multimediálny prehrávač s prefiltrovaným playlistom Kvalitatívna požiadavka: Systém musí prefiltrovať skladieb do 1s

68 Príklad: Architectúra
Playlist Duration filter Genre filter Quality filter

69 Príklad: Testovanie jednotiek
Arrange: Nahraď Quality filter atrapou Act: Zavolaj Genre filter s jednou klasickou a jednou jazzovou skladbou v playliste Assert: Atrapa Quality filter bola spustená s jednou jazzovou skladbou IDE Playlist Duration filter Genre filter Quality filter

70 Example: Test integrácie
Arrange Nahraď Quality filter atrapou Act: Zavolaj Genre filter s jednou klasickou (2,5 min) a dvomi jazzovými skladbami (2,2 a 3,01 min) Assert: Atrapa Quality filter bola spustená s jednou jazzovou skladbou (2,2 min) Android emulator / IDE Playlist Duration filter Genre filter Quality filter

71 Example: System (performance) test
Arrange Priprav playlist s skladbami Aktivuj stopky Act: Spusti filter playlistu s pripraveným playlistom Zastav stopky Assert: Stopky odmerali menej než 1s Samsung Galaxy S8, Oreo Playlist Duration filter Genre filter Quality filter

72 Nové Trendy

73 Agilný vývoj softvéru Veľké množstvo zmien Častá integrácia
Automatizácia akceptačného testovania Funkčných požiadavky – scenáre Testovanie akceptačných testov Použiteľnosť Častá integrácia Overenie spätnej kompatibility Rozsiahle regresné testovanie Efektívne vykonávanie CI

74 Agilný vývoj softvéru Vývojár = analytik + návrhár + programátor + TESTER Testovanie priamo integrálnou súčasťou vývoja DevOps Analytik – potreba skorej testovateľnosti wireframes, scenáre -> zdrojový kód Návrhár – potreba simulácie Testovanie prototypov Programátor – rýchle identifikovanie chýb Generovanie testov, testovanie v reálom čase, údržba a konzistentnosť testov

75 Potrebuje agilný svet Testerov?
Bezpečnosť a robustnosť Plán testovania Potrebné vytvoriť a udržiavať Sledovanie aktuálnych zraniteľností Testovateľnosť ako požiadavka Testovanie testov Review, mutačné testovanie Exploratívne testovanie Cielené hľadanie chýb v produkte

76 BigData Testovanie výkonnosti Testovanie paralelných procesov
Škálovateľnosť – spracujeme terabajty dát? Zdroje – koľko RAM/CPU/... potrebujeme? Testovanie paralelných procesov Testovanie kvality dát Extrakcia a vyhodnotenie charakteristík Dátová analytika, počítačové učenie Náklady na vykonanie testov

77 IoT Testovanie použiteľnosti Testovanie kompatibility a konfigurácií
Je konfigurácia použiteľná pre bežného používateľa Čo sa stane po pridaní a odobratí zariadenia Testovanie kompatibility a konfigurácií Bezpečnosť BigData

78 Literatúra ISO/IEC/IEEE 29119-1:2013
NAIK, K. – TRIPATHY, P. Software Testing and Quality Assurance: Theory and Practice. Wiley-Spektrum, s. ISBN


Stiahnuť ppt "Karol Rástočný karol.rastocny@stuba.sk Testovanie softvéru Karol Rástočný karol.rastocny@stuba.sk 15.4.2019."

Podobné prezentácie


Reklamy od Google