PARC METODIC
1 METHOD PARK Mutanții sunt liberi sau cine îmi testează testele?

2 Benjamin Klüglein Inginer software principal, Inf. Diplomă (FH) 2
4 Tema noastră astăzi Testarea mutației 4
6 Nicio idee nouă. Sugerat de Richard Lipton 1971 Publicat de DeMillo, Lipton și Sayward în IEEE Computer, 11 (4): aprilie În multe cazuri testele unui program care descoperă erori simple sunt, de asemenea, eficiente în descoperirea erorilor mult mai complexe. Acest așa-numit efect de cuplare poate fi utilizat pentru a economisi muncă în timpul procesului de testare, IBM prezintă primul computer portabil (IBM 5100). 1976 Apple aduce Apple I pe piață => momente interesante, putere de calcul gestionabilă 6
7 Fapte amuzante X-Men apar pentru prima dată în 1963, dar numai cu succes de la aprox. Lectorul a existat abia din 1982. După cum vom vedea, subiectul nostru a avut nevoie și de un mic start-up
8 De ce testarea? De ce scriu teste, am simțit bine sentimentul. Andreas Möller Sentimentul bun de a oferi calitate Ce vreau de fapt să implementez? Reglementări mai bune de proiectare/API, cum ar fi IEC (software pentru dispozitive medicale) Necesită testare la toate nivelurile de testare unitară, integrare și sistem 8
9 Numai distracția în scrierea testelor poate fi menținută în limite Consumatoare de timp, complicate, testele pot fi o bestie proprie Aducerea propriilor concepte și structuri Uneori există și o lipsă de cunoștințe Testele sunt un teritoriu neexplorat pentru noi toți Nu puteți testa codul nostru deloc gestionat Chiar și descuamat în recenziile de cod 9
Găsirea a 10 răspunsuri Cât de bune sunt testele mele unitare? Cât de bună este acoperirea testului meu? Ce teste pot lipsi? 10
11 De ce am nevoie pentru testarea mutației? Codul este furnizat de mutanți. Ar trebui să fie verde la începutul procedurii. Ca de obicei;-) 11
12 pași prin vânătoarea de mutanți 1. Se generează mutanți (erori) 2. UT-urile sunt efectuate pentru fiecare mutant 1. Dacă un test este roșu, mutantul a fost ucis 2. Dacă nimeni nu se răstoarnă, mutantul a supraviețuit 3. Evaluarea procentului de mutanți uciși Al 12-lea
13 MT vs. Acoperirea tradițională a testelor Acoperirea testelor compară doar codul care a fost executat, dar nu dacă testele sunt capabile să găsească erori. acoperirea sunt măsurate. pitest.org 13
14 Comutabil automat la diferite clase de mutanți Condiționali Limitați mutatori mutali Mutatori inversați negativi Mutatori matematici Mutatori negativi condiționali Mutator Valori returnate Mutator Metoda vid Apeluri Mutator Constructor apel Mutator mutant constant liniar Metoda non vid Apel Mutator Eliminare condițional Mutator membru experimental Mutator variabil Mutator experimental mutator 14
15 mutatori condiționali Boundary Mutator Original Change> => => Incrementează Mutator Original Change Inversează negativ Mutator Float public original negat (float final i) < return -i; >Schimbare float public negat (float final i) < return i; >15
16 Mutators II Math Mutator Original Change *// *% * & & ^ &> >> >> 17 Mutators III Valori returnate Mutator Original Boolean Int, octet, scurt Lung X + 1 Float, obiecte duble Metoda Vid Apel Mutator Original public int foo () < int i = 5; dosomething(i); return i; >Modificați adevărat sau fals 1 sau 0, spre deosebire de original - (x + 1.0) Null sau RuntimeException pentru schimbarea valorii nule public int foo () < int i = 5; return i; >17
18 Cum funcționează totul? În funcție de cea mai bună tehnologie: se fac modificări ale numerelor liniei bytecode și numele fișierului sursă necesar Mutate.py (script pentru mutațiile codului C): generează un fișier modificat 18
19 Provocări Consum intensiv Poate fi utilizat doar cu cea mai recentă putere de calcul Test de unitate timp de funcționare min 53 s min 39 s Timp de funcționare teste MT min 44 s 19
20 provocări - timing ========================================> scanare clasă: 1 secundă> analiza acoperirii și dependenței: 2 minute și 33 de secunde> construiți teste de mutație: 1 secundă> rulați analiza mutației: 5 minute și 7 secunde> Total: 7 minute și 44 de secunde =============== ===================================================== =============== - Statistici ================================== ======== ======================================== >> Generat 5336 mutații au ucis 3034 (57%) >> teste Ran 9923 (1,86 teste pe mutație) 20
21 Provocări II Falsuri pozitive Suport lingvistic de calitate diferită Utilizare în proiectul curent greu de utilizat: transpilare JavaScript 21
22 Soluții posibile Mai multă putere (CPU, fire) Utilizați numai în anumite momente Limitați la anumite teste Activați numai anumiți mutanți PIT: Analiză incrementală Încercare de optimizare cu presupuneri despre modificări 22
25 Sfârșit Vă mulțumim pentru atenție. Dacă aveți întrebări: 25