Sunteți pe pagina 1din 27

Code coverage and

mutation testing

Ce inseamna code coverage?


Este o masuratoare cu care se calculeaza ce
procent dintr-un program este testat de catre o
suita de teste
Criterii de acoperire:
la nivel de metoda
la nivel de instructiune
la nivel de ramura
la nivel de conditie

Code coverage tools


Am studiat doua unelte de code coverage:
Clover - dezvoltat de grupul de dezvoltatori
Atlassian, gratuit pentru proiecte open-source

EclEmma - unealta inceputa initial de Marc

Hoffmann, dupa care a fost rescrisa ca sa

foloseasca libraria JaCoCo, dezvoltata de acelasi autor;

Acoperirea uneltei EclEmma


EclEmma verifica acoperirea la nivel de instructiune si
la nivel de conditii

Acoperirea uneltei Clover


Clover verifica acoperirea la nivel de metoda si la nivel
de instructiune, dar nu si la nivel de conditie sau ramura

Rapoarte EclEmma
Dupa rulare, EclEmma marcheaza fundalul codului cu
rosu, galben si verde in functie de gradul de acoperire si
adauga pe margine buline care indica problema pe
hover
EclEmma vine cu o fereastra de rapoarte

Rapoarte Clover
Unealta Clover este foarte bogata in rapoartele ce le poate genera,
generand atat statistici legate de proiect, cat si rapoarte ce ofera informatii
detaliate.

Ce inseamna mutation testing?


Mutation testing este folosit pentru a proiecta noi
teste software si pentru a evalua calitatea testelor
actuale.
Mutation testing implica modificarea codului sursa
in pasi mici.
Fiecare versiune se numeste mutant si testele
detecteaza si rejecteaza daca comportamentul
mutantului este diferit de cel al originalului.

Mutation Testing
Mutantii sunt bazati pe operatori de mutare bine
definiti care mimeaza ori erori standard de
programare (ca numele gresit a unei variabile sau
operator) sau forteaza crearea de teste (ca impartirea
la 0).
Scopul este de a ajuta programatorul sa dezvolte
teste eficiente sau sa detecteze slabiciuni in datele de
test folosite pentru program sau in sectiuni de cod
care sunt accesate uneori sau deloc pe durata
executiei.

Mutation Testing - Scop


Testele pot fi create pentru a verifica corectitudinea
implementarii unui sistem software dat, dar crearea
de teste pune inca intrebarea daca testele sunt
corecte si suficiente pentru a acoperi cerintele
originale. Aceasta problema teoretica este insasi o
problema filozofica numita Who will guard the
guards?

Mutation Testing

Operatori de mutatie traditionali


Descriere

Exemplu

Inserarea de valori absolute

a = b + c devine a = 0

Schimbarea operatorilor aritmetici a = b + c devine a = b - c

Schimbarea conectorilor logici

a = b & c devine a = b | c

Schimbarea operatorilor
relationali

while(a < b) devine while (a > b)

Inserarea de operatori unari

a = b devine a = -b

Mutation Testing - Exemplu


Cosideram urmatoarea secventa de cod

Codul original

Mutant

Pentru a = 1 si b = 0 rezultatul produs de mutant


este diferit de cel al originalului, ceea ce inseamna
ca mutantul este rejectat.

Mutation Tools
Pentru prezentarea noastra am ales urmatoarele mutation tools:

PIT - http://pitest.org/

Judy - http://mutationtest.com/

PIT - introducere
Initial dezvoltat (just for fun), ca un framework pentru testare
distribuita
Primele versiuni au fost bazate pe Jumble, cu unele imbunatatiri.
Dupa versiunea 0.29 PIT a venit cu propriul generator de mutatii
Usor de folosit putand fi instalat ca plugin atat in cadrul NetBeans,
cat si pentru Eclipse

PIT - Instalare

PIT - suport

Ofera suport prin email


Cel mai recent tool dar si cel mai matur fiind dezvoltat si in prezent.
Compatibil cu JUnit3 si JUnit4
Nu ofera suport pentru Java 1.4

PIT - utilizare

PIT - utilizare
La finalul rularii ofera un raport in format html unde sunt evidentiate
mutatiile si testele care au picat
PIT este un tool de mutatie care nu compileaza codul ci modifica
bytecode-ul in memorie. Acest lucru il face mult mai rapid.

PIT - mutatii aplicate

Judy
Tool dezvoltat in Java cu extensii de AspectJ;
Ultima versiune 2.1.0, ce a fost lansata in ianuarie
2014, suporta 27 de operatori si este in continua
dezvoltare;
Poate fi folosit atat pe Linux, cat si pe Windows(32/64
bit);

Judy - Instalare
Instalarea acestei unelte presupune la primul pas descarcarea unei
arhive folosind link-ul urmator:
http://mutationtest.com/judy/releases/judy-210.html;
Al doilea pas este reprezentat de dezarhivarea fisierelor
descarcate;

Judy - rulare
Rularea si generarea
de mutanti se
realizeaza cu ajutorul
cmd folosindu-se o
comanda cu anumiti
parametrii obligatorii;

Judy parametrii obligatorii


-w, --workspace PATH - calea catre folderul de lucru;

-c, --classes PATH - defineste calea catre clasele ce compun


proiectul

-t, --test-classes PATH - calea catre clasele de test


-s, --sources PATH - calea catre fisierele sursa.

-l, --libs PATH - calea catre dependintele definite in cadrul


proiectului;

Judy
Dupa ce comanda a fost rulata, rezultatul generat de
Judy este stocat intr-un fisier judy-result.txt/judyresult.xml

Judy - avantaje
Are nevoie de doar 11 secunde pentru a genera aproximativ 20 de
mii de mutanti -> foarte rapid;
Se configureaza si se ruleaza usor cu ajutorul unei comenzi cmd;
Ofera statistici usor de urmarit cu privire la status-ul mutantilor
generati;
Ofera suport pentru Windows si Linux;
Este in continua dezvoltare, punand la dispozitie programatorilor un
bug-tracker pentru a vizualiza problemele existente si pentru a putea
contribui la imbunatatirea versiunii curente;

Multumim!

S-ar putea să vă placă și