EMMA-ohje

Kattavuustyökalu EMMA

Yleistä:

EMMA on ilmainen työkalu kattavuuden mittaamiseen. Ajamalla työkalu jokaisen testiluokan kanssa voit varmistua siitä että testaussuunnitelmassa määritelty (100%) lausekattavuus saavutetaan käytetyllä testiluokalla. Käytännössä EMMA on mokkula joka tulee Javan virtuaalikoneen ja ajettavan ohjelman väliin. EMMA ei sinänsä liity JUnit:iin millään tavalla mutta sen avulla varmistutaan siis siitä että JUnitin testiluokkien kattavuus on riittävä ajamalla EMMA JVM:n ja JUnit-luokan välissä.

Huomautus: EMMAa ei lopulta käytetty projektin kattavuuksien mittaamisessa vaan siirryttiin Coverlipseen. Tästä dokumentista voi kuitenkin olla vielä hyötyä jollekulle.

Asennus:

Hae työkalu haluamallesi alustalle osoitteesta http://emma.sourceforge.net/ (-> downloads -> sourceforge download page -> paketti "emma-2.0.5312.zip")

Pura pakkaus haluamaasi hakemistoon ja aseta hakemistossa /lib/ oleva tiedosto emma.jar classpathiin. Mikäli et halua asettaa pakkausta classpathiin pitää pakkauksen sijainti spesifioida JVM:lle EMMA:a ajettaessa aiheuttaen hieman lisävaivaa. Kotikoneella kolmas näppärä vaihtoehto on kopioida emma.jar -tiedosto oman JRE:n hakemistoon "lib/ext/". Laitoksen ympäristössä tämä tuskin on sallittua.

Käyttö:

EMMA voidaan ajaa JUnit-testiluokan yhteydessä. Käännä testattavat luokat ja testiluokka normaalisti. EMMAn läpi voidaan ajaa jokin luokka seuraavasti:

java -cp ~/emman_hakemiston_sijainti_omasta_juurihakemistosta_katsoen/lib/emma.jar emmarun -cp ~/TestiLuokan_hakemisto TestiLuokka

Joudut siis lisäämään komentoon punaisella kirjoitetun pätkän aina luokkaa ajettaessa jos et käytä classpathia. Luokan sijainnin voi spesifioida myös nykyisen hakemiston suhteen ../../ -tyylisillä käskyillä. Viittaus kotihakemistoon (~) on kuitenkin aika näppärä. Jos käytät classpathia niin punaisen kohdan tilalla riittää käsky emmarun -cp ~/TestiLuokan_hakemisto. Tämä lienee kätevin tapa.

-cp paremetrilla asetetaan ensiksi siis emma.jar-paketin sijainti. Sitten ajetaan emmarun-käskyllä EMMA-työkalu. EMMA:lle pitää myös spesifioida parametrilla ajettavan luokan sijainti.

EMMA ajetaan kuitenkin useimmmiten JUnitin yhteydessä. Tällöin komennosta tulee hieman mutkikkaamman näköinen koska samalla pitää ajaa JUnit. JUnitin junit.jar:in sijainti on näppärä asettaa classpathissa (tällöin jälleen .jar-paketin hakemistoa ei tarvitse spesifioida).

Seuraavassa esimerkkikomento johon ei ole asetettu classpath-muuttujia:

java -cp ~/emman_sijainti/lib/emma.jar;~/JUnitin_sijainti/junit.jar;. emmarun -cp ~/JUnitin_sijainti/junit.jar;. -filter -junit* -filter -test* junit.textui.TestRunner TestiLuokka

Komennoilla

-filter -junit*
-filter -test*

kerrotaan EMMA:lle että jättää laskematta kattavuuden JUnit:ille ja itse testiluokille (ts. junit ja test -alkuisille luokille).

Komento näyttää aika kamalalta mutta siinä ei ole loppujen lopuksi mitään kummallista. EMMA ajetaan siinä aiemmin ilmoitetulla tavalla. Lisäksi ajetaan JUnit (josta on puolestaan oma tutoriaalinsa). Tämäntyyppiset pitkät komennot kannattanee tallentaa joksikin testiskriptiksi joka puolestaan ajetaan.

EMMA antaa testien ajon jälkeen ilmoiutksen kattavuustiedoston kirjoittamisesta. Saat tulokseksi "coverage.txt"-tiedoston hakemistoon, jossa ajoit käskyn. Tiedosto näyttää kutakuinkin seuraavanlaiselta:

[EMMA v2.0.5312 report, generated Tue Nov 01 13:09:05 EET 2005]
-------------------------------------------------------------------------------
OVERALL COVERAGE SUMMARY:

[class, %]      [method, %]     [block, %]      [line, %]      
[name]
100% (3/3)      100% (7/7)      95%  (120/126)  90%  (27/30)    all
classes

OVERALL STATS SUMMARY:

total packages: 2
total classes:  3
total methods:  7
total executable files: 3
total executable lines: 30

COVERAGE BREAKDOWN BY PACKAGE:

[class, %]      [method, %]     [block, %]      [line, %]      
[name]
100% (2/2)      100% (4/4)      91%  (64/70)    84%  (16/19)   
search
100% (1/1)      100% (3/3)      100% (56/56)    100% (11/11)   
default package
-------------------------------------------------------------------------------

[EMMA v2.0.5312 report, generated Tue Nov 01 13:09:05 EET 2005]


OVERALL COVERAGE SUMMARY:

[class, %] [method, %] [block, %] [line, %] [name] 100% (3/3) 100% (7/7) 95% (120/126) 90% (27/30) all classes

OVERALL STATS SUMMARY:

total packages: 2 total classes: 3 total methods: 7 total executable files: 3 total executable lines: 30

COVERAGE BREAKDOWN BY PACKAGE:

[class, %] [method, %] [block, %] [line, %] [name] 100% (2/2) 100% (4/4) 91% (64/70) 84% (16/19) search 100% (1/1) 100% (3/3) 100% (56/56) 100% (11/11) default package


Prosentteina ilmoitetaan siis:

  • [class, %] luokkakattavuus (kuinka monta luokkkaa testattu),
  • [method, %] metodikattavuus (kuinka monta metodia)
  • [block, %] blokkikattavuus (= sekvenssi bytecodea jossa ei ole jump tai jump target käskyjä)
  • [line, %] lausekattavuus (kuinka monta suoritettavaa lausetta)

Näistä ollaan siis lähinnä kiinnostuneita lausekattavuudesta jonka tulee olla 100%. Oheinen tapaus ei täytä kattavuuskriteeriä koska line % on selvästi 90.

Page last modified on December 12, 2005, at 12:35 PM