• Non ci sono risultati.

Usare il tool emma

N/A
N/A
Protected

Academic year: 2021

Condividi "Usare il tool emma"

Copied!
20
0
0

Testo completo

(1)

Usare il tool emma

info3

angelo gargantini @ unibg

(2)

Cosa vuol dire copertura

• Quando si scrivono dei test è importante:

1) controllare mediante assert che il ns programma si comporti come atteso

2) valutare alla fine quanto del nostro programma è stato testato.

(3)

Cosa è emma

• Emma è un tool (free) per la valutazione della copertura di codice java

• http://emma.sourceforge.net/

• Ci sono altri tool

– cobertura:http://cobertura.sourceforge.net – Codecover http://codecover.org

(4)

Come funziona

1. scrivi e compila il tuo codice java come al solito

• in eclipse

fai nuovo progetto (ad esempio emmaprj)

fai nuova classe Prova (ad esempio dal menu file, new class)

Usa il package di default

compila e fai run normalmente

(5)

Come funziona

1. download emmaxxx-lib.zip dal sito di emma o dal sito del corso ed estrai

emma.jar salvandolo nella directory dove ci sono i file *.class da testare

in eclipse, nella directory che contiene tutto il progetto emmaprj cerca la directory con nome classes

tipo Documents and settings/<nome

utente>/workspace /emmaprj/lì dentro ci sono i tuoi

*.class

2. apri una finestra DOS e fai cd fino alla directory dove hai messo emma.jar

se fai dir dovresti vedere emma.jar e il file .class

usa tab per auto completion

(6)

Lancia emma

• Esegui il programma originale con emma in diversi modi:

– esegui emma per avere informazioni in coverage.txt:

java –cp emma.jar emmarun –cp . Prova

• per avere output in html (in dir. coverage) usa l'opzione -r html

java –cp emma.jar emmarun -r html –cp . Prova

• per avere il sorgente marcato usa l'opzione -sp

<directory dove hai i sorgenti>

java –cp emma.jar emmarun -r html -sp . –cp . Prova

(7)

Con i package e separati i class

• Se usi un package pack

– i tuoi file java hanno all’inizio package pack

– i *.java si trovano nella sotto directory src/pack – i *.class si trovano nella sotto directory bin/pack – Devi seguire i comandi

java –cp emma.jar emmarun -sp ../src –cp . pack.Esercizio

(8)

• EMMA supports class, method, line, and basic block coverage

• EMMA does not do branch or path coverage.

However, EMMA reports fractional line coverage to help you visualize untested branches in code.

(9)

Struttura esempi

• nei nostri esempi avremo

– il metodo da testare con nome foooo

– nel main metteremo le chiamate al metodo foooo corrispondenti ai casi di test che abbiamo trovato

(10)

Esempio

• Scrivi un metodo che prende un intero x e un array di interi e se x è 0 restituisce il primo intero (o 0 se l’array è vuoto),

altrimenti se x non è 0, restituisce l’intero più grande nell’array se è maggiore di x, altrimenti restituisce x

• scrivi il grafo, trova i casi di test per copertura dei comandi, dei branch, decisioni e condizioni

• prova poi con emma

(11)

Esercizio

• scrivi un metodo azzera che dati due interi a e b e un array di interi, azzera tutti gli elementi

dell’array compresi tra a e b, quelli minori di a li mette a -1 e quelli maggiori di b a +2

• opzionale: scrivi un metodo che dato un array di interi ne stampa il contenuto e usalo nel main prima e dopo la chiamata del metodo azzera

• scrivi il grafo, trova i casi di test per copertura dei comandi, dei branche, decisioni e condizioni,

MCDC

• prova poi con emma

(12)

Esercizio 2

• Scrivi un metodo BISESISTILE che prende in

ingresso un numero x restituisce true se x è un anno bisestile e false altrimenti

• Fai il digramma di flusso di controllo del metodo, trova i percorsi per lo statement coverage e

decision e branch coverage

• Trova i casi di test e provali in EMMA

• Quali altri casi di test servono per avere l’MCDC?

(13)

Con Junit e Emma

Puoi eseguire i casi di test del tuo programma con junit e vedere la coprtura ottenuta. Non è semplice. Il comando è:

java -cp emma.jar emmarun -r html -sp . -cp

<classpath che contiene i jar per junit> -r html org.eclipse.jdt.internal.junit.

runner. RemoteTestRunner -classNames ProvaTest

Ad esempio:

java -cp emma.jar emmarun -r html -sp .

-cp.:/home/garganti/local/eclipse/plugins/org.junit_3.8.1/junit.jar:/ho me/garganti/local/eclipse/plugins/org.eclipse.jdt.junit_3.1.1/junitsup port.jar:/home/garganti/local/eclipse/plugins/org.eclipse.jdt.junit.run

time_3.1.0/junitruntime.jar -r html

org.eclipse.jdt.internal.junit.runner.RemoteTestRunner -version 3 -port 49039 -classNames ProvaTest

(14)

Raccolta dati

• Potete anche unire la copertura ottenuta da

diverse run del programma per avere un unico report:

1. esegui emmarun con opzione merge

java -cp emma.jar emmarun -merge yes -raw -cp . <mainclass>

2. genera il report totale:

java -cp emma.jar emma report -r html -sp . -in coverage.es

(15)

Istrumentazione

• invece che eseguire emmarun per avere la copertura puoi alternativamente fare così:

• 1. genera un jar dal tuo programma (puoi usare export to jar di eclipse, identifica la mainclass)

– per eseguirlo puoi fare java -jar progetto.jar

• 2. istrumenta il tuo jar in modo di avere un jar modificato

– java -cp emma.jar emma instr -m overwrite -cp progetto.jar

• 3. esegui il jar come prima (però con class path che includa emma.jar)

– java -cp emma.jar progetto.jar

(16)

Eclemma

• Invece che usare emma, noi useremo eclemma:

piccola demo

• eclemma.sf.net

• Scarica il file .zip e fai l'unzip nella directory di eclipse

(17)

Con Eclemma puoi

• Lanciare un tuo programma e vedere la copertura durante il suo uso

• Lanciare I tuoi casi di test e vedere la copertura

• Vedere in dettaglio I dati della copertura ed esportarli

• Fare il merge di sessioni

(18)

Annotazione del codice

• Verde: testato

• Rosso: non testato

• Giallo: testato parzialmente

• Esempio:

if(a) …

a è testato solo true

(19)

Visione globale

(20)

Alternativa: codecover

• http://codecover.org/

• Codecover ad esempio fornisce anche altre informazioni:

• Copertura delle condizioni nelle decisioni

• Ridondanza dei casi di test

• ...

Riferimenti

Documenti correlati

- di approvare (ferma restando l’esigenza di sistema per un progressivo ulteriore innalzamento dei livelli di sicurezza, quanto meno con particolare riferimento

− la nota datata 10 dicembre 2010, con la quale il Direttore generale SIA ha riscontrato direttamente la nota del Procuratore generale della Corte di appello

Ogni entry può essere descritta da una o più classi e di conseguenza deve utilizzare almeno tutti gli attributi previsti come obbligatori della classi usate, mentre non

This module lays the fundamental groundwork for understanding all major principles of active directory from management and design to integrating with other forests and

Sulla base di Information Directory, CSI-Piemonte ha realizzato il Portale per il Riuso dei Dati Pubblici del Piemonte www.dati.piemonte.it, volto alla ricerca e alla distribuzione

systemctl stop samba smbd nmbd winbind samba-ad-dc systemctl mask samba smbd nmbd winbind. systemctl disable samba smbd nmbd winbind systemctl

Pneumatic cylinders, Various actuators, Accessories for pneumatic cylinders, Valves and solenoid valve, Auxiliary valves, Accessories for valves and solenoid valves, Air motors,

Comacomp é a associação dos fabricantes italianos de componentes dentro da federunacoma, a federação italiana dos fabricantes de máquinas agrícolas, para movimentação de terra