METÓDOVÝ PARK
1 METÓDOVÝ PARK Mutanti sú na slobode alebo kto vlastne testuje moje testy?

2 Benjamin Klüglein, hlavný softvérový inžinier, Dipl. Inf. (FH) 2
4 Naša dnešná téma Testovanie mutácií 4
6 Žiadny nový nápad Navrhnutý Richardom Liptonom 1971 Publikované DeMillom, Liptonom a Saywardom v IEEE Computer, 11 (4): apríl V mnohých prípadoch sú testy programu, ktorý odhaľuje jednoduché chyby, účinné aj pri odhaľovaní oveľa zložitejších chýb. Tento takzvaný efekt spojenia je možné použiť na šetrenie práce počas testovacieho procesu, spoločnosť IBM predstavuje prvý prenosný počítač (IBM 5100). 1976 Apple uvádza na trh Apple I => vzrušujúce časy, zvládnuteľný výpočtový výkon 6
7 Zábavné fakty X-Men sa objavuje po prvýkrát v roku 1963, ale úspešný asi od roku. Lektor existuje iba od roku 1982. Ako uvidíme, bolo treba trochu vyskúšať aj našu tému 7
8 Prečo testovanie? Prečo píšem/píšeme testy, mal som z toho dobrý pocit. Andreas Möller Dobrý pocit z poskytovania kvality Čo vlastne chcem implementovať? Lepší dizajn/predpisy API, ako je IEC (softvér pre lekárske prístroje) Vyžaduje testovanie na všetkých úrovniach testovania, integrácie a systému 8
9 Iba pri písomných zábavách sa dá udržať hranica v medziach Časovo náročné, komplikované, testy môžu byť samé osebe Prinášanie vlastných koncepcií a štruktúr Niekedy je tu aj nedostatok vedomostí Testy sú pre nás všetkých nezmapovaným územím Náš kód nemôžete vôbec otestovať spracované Dokonca prezerané v recenziách kódu 9
Nájdenie 10 odpovedí Ako dobré sú moje testy jednotky? Aké dobré je moje pokrytie testom? Ktoré testy mi môžu chýbať? 10
11 Čo potrebujem na testovanie mutácií? Kód poskytujú mutanti. Na začiatku postupu by mal byť zelený. Ako obvykle;-) 11
12 krokov hľadaním mutantov 1. Generujú sa mutanty (chyby) 2. U každého mutanta sa vykonajú UT 1. Ak je test červený, mutant bol zabitý 2. Ak sa nikto neprevráti, mutant prežil 3. Vyhodnotenie percenta zabitých mutantov 12
13 MT vs. tradičné pokrytie testom Pokrytie testu porovnáva iba to, ktorý kód bol vykonaný, ale nie to, či sú testy schopné nájsť aj chyby. Pretože je v skutočnosti schopný zistiť, či je každý výrok zmysluplne testovaný, je zlatým štandardom testovanie mutácií. merajú sa všetky ostatné typy pokrytia. pitest.org 13
14 Automaticky prepínateľné na rôzne triedy mutantov Podmienky Hraničný prírastok mutátora Mutant Invertovať negatívne Mutator Matematický mutátor Negatívne podmienky Podmienky Mutator Vrátiť hodnoty Mutator Void Method Calls Mutator Constructor Calls Mutator Inline Constant Mutator Non Void Method Calls Mutator Remove Conditionals Mutator Experimental Member Variable Mutator Experimental Switch Mutator 14
15 mutátorov Podmienky Hraničný mutátor Pôvodná zmena> => => Prírastky pôvodná zmena mutátora Invertovať negatívy Mutátor Pôvodný verejný plavák negate (konečný plavák i) < return -i; >Zmeniť verejný plavák negate (konečný plavák i) < return i; >15
16 Mutators II Math Mutator Original Change *// *% * & & ^ &> >> >> 17 Mutators III Return Values Mutator Original Boolean Int, byte, short Long X + 1 Float, double Objects Void Method Call Mutator Original public int foo () < int i = 5; dosomething(i); return i; >Zmena true alebo false 1 alebo 0, na rozdiel od pôvodného - (x + 1,0) Null alebo RuntimeException pre nulovú hodnotu zmena public int foo () < int i = 5; return i; >17
18 Ako to všetko funguje? V závislosti na technológii Pitest: Vykonajú sa zmeny v číslach riadkov bytecode a požadovanom názve zdrojového súboru Mutate.py (skript pre mutácie kódu C): Vygeneruje upravený.c súbor 18
19 Výzvy Intenzívne napájanie Je možné vôbec použiť iba s najnovším výpočtovým výkonom Testy jednotky doba chodu min 53 s min 39 s Testy MT doba chodu min 44 s 19
20 výziev - načasovanie ========================================> cesta k triede skenovania: 1 sekunda> analýza pokrytia a závislosti: 2 minúty a 33 sekúnd> testy mutácie zostavy: 1 sekunda> analýza mutácie spustenia: 5 minút a 7 sekúnd> celkom: 7 minút a 44 sekúnd ================ =================================================== ================ - Štatistika ================================== ======== ======================================== >> Vygenerované 5336 mutácií zabitých 3034 (57%) >> vykonaných 9923 testov (1,86 testov na mutáciu) 20
21 Výzvy II Falošné pozitíva Jazyková podpora rôznej kvality Využitie v súčasnom projekte ťažko použiteľnom: transpilácia JavaScriptu 21
22 Možné riešenia Viac energie (CPU, vlákna) Použiť iba v určitých časoch Obmedziť na určité testy Aktivovať iba určité mutátory PIT: Prírastková analýza Pokus o optimalizáciu s predpokladmi zmien 22
25 Koniec Ďakujem za pozornosť Ak máte akékoľvek otázky: 25