Úvod do JaCoCo

1. Prehľad

Pokrytie kódu je softvérová metrika používaná na meranie toho, koľko riadkov nášho kódu sa vykoná počas automatizovaných testov.

V tomto článku sa pozrieme na niektoré praktické aspekty používania JaCoCo - generátor správ o pokrytí kódu pre projekty Java.

2. Konfigurácia Maven

Aby sme mohli začať pracovať s JaCoCo, musíme tento doplnok maven deklarovať v našom pom.xml spis:

 org.jacoco jacoco-maven-plugin 0.7.7.201606060606 správa pripraveného agenta správa pripraveného balíka 

Tu uvedený odkaz vás vždy dovedie k najnovšej verzii doplnku v centrálnom úložisku maven.

3. Správy o pokrytí kódu

Predtým, ako sa začneme zaoberať funkciami pokrytia kódu JaCoCo, musíme mať vzorku kódu. Tu je jednoduchá funkcia Java, ktorá kontroluje, či reťazec číta rovnako dozadu a dopredu:

public boolean isPalindrome (String inputString) {if (inputString.length () == 0) {return true; } else {char firstChar = inputString.charAt (0); char lastChar = inputString.charAt (inputString.length () - 1); Reťazec mid = inputString.substring (1, inputString.length () - 1); return (firstChar == lastChar) && isPalindrome (v strede); }}

Všetko, čo teraz potrebujeme, je jednoduché JUnit test:

@Test public void whenEmptyString_thenAccept () {Palindrome palindromeTester = nový Palindrome (); assertTrue (palindromeTester.isPalindrome ("")); }

Spustenie testu pomocou JUnit automaticky uvedie do pohybu agenta JaCoCo, teda vytvorí správu o pokrytí v binárny formát v cieľovom adresári - cieľ / jacoco.exec.

Je zrejmé, že výstup nemôžeme interpretovať iba jednou rukou, ale môžu to iné nástroje a doplnky - napr. Sonar Qube.

Dobrou správou je, že môžeme použiť jacoco: správa cieľ za účelom generovania čitateľných správ o pokrytí kódu v niekoľkých formátoch - napr. HTML, CSV a XML.

Teraz sa môžeme pozrieť napríklad na target / site / jacoco / index.html stránke a uvidíte, ako vyzerá vygenerovaný prehľad:

Po kliknutí na odkaz uvedený v správe - Palindrome.java , môžeme prejsť podrobnejším pohľadom pre každú triedu Java:

Upozorňujeme, že pokrytie kódu môžete priamo spravovať pomocou JaCoCo vo vnútri Eclipse s nulová konfigurácia, vďaka pluginu EclEmma Eclipse.

4. Analýza správy

Naša správa ukazuje 21% pokrytie pokynov, 17% pokrytie pobočiek, 3/5 pre cyklomatická zložitosť a tak ďalej.

38 pokynov, ktoré v správe zobrazuje JaCoCo, odkazuje na inštrukcie bytecode na rozdiel od bežných pokynov pre kód Java.

Správy JaCoCo vám pomôžu vizuálne analyzovať pokrytie kódu pomocou diamantov s farbami pre vetvy a farbami pozadia pre riadky:

  • Červený diamant znamená, že počas testovacej fázy neboli cvičené žiadne vetvy.
  • Žltý diamant ukazuje, že kód je čiastočne zakrytý - niektoré pobočky neboli uplatnené.
  • Zelený diamant znamená, že počas testu boli precvičené všetky vetvy.

Rovnaký farebný kód platí pre farbu pozadia, ale pre pokrytie čiar.

JaCoCo poskytuje hlavne tri dôležité metriky:

  • Pokrytie riadkov odráža množstvo kódu, ktoré sa uplatnilo na základe počtu inštrukcií Java byte code, ktoré vyvolali testy.
  • Pokrytie pobočiek zobrazuje percento uplatnených pobočiek v kóde - zvyčajne sa týka ako / inak a prepínač Vyhlásenia.
  • Cyklomatická zložitosť odráža zložitosť kódu udaním počtu ciest potrebných na pokrytie všetkých možných ciest v kóde prostredníctvom lineárnej kombinácie.

Vezmime si triviálny príklad, ak nie je ak alebo prepínač príkazov v kóde, bude cyklomatická zložitosť 1, pretože na pokrytie celého kódu potrebujeme iba jednu cestu vykonania.

Cyklomatická zložitosť vo všeobecnosti odráža počet testovacích prípadov, ktoré musíme implementovať, aby sme pokryli celý kód.

5. Rozpis koncepcie

JaCoCo beží ako Agent Java, je zodpovedný za prístrojové vybavenie bytového kódu počas vykonávania testov. JaCoCo vŕta do každej inštrukcie a ukazuje, ktoré čiary sa cvičia počas každého testu.

Na zhromažďovanie údajov o pokrytí JaCoCo používa ASM na prístrojové vybavenie kódu za behu, pričom prijíma udalosti z Rozhranie nástroja JVM v procese:

Agenta JaCoCo je tiež možné spustiť v serverovom režime, v tomto prípade môžeme svoje testy spustiť pomocou jacoco: skládka ako cieľ iniciovať žiadosť o výpis.

Môžete sledovať odkaz na oficiálnu dokumentáciu, kde nájdete ďalšie podrobné informácie o dizajne JaCoCo.

6. Skóre pokrytia kódu

Teraz, keď už vieme niečo o tom, ako JaCoCo funguje, vylepšme skóre pokrytia kódu.

Aby sme dosiahli 100% pokrytie kódu, musíme zaviesť testy, ktoré pokryjú chýbajúce časti zobrazené v úvodnej správe:

@ Test public void whenPalindrom_thenAccept () {Palindrome palindromeTester = nový Palindrome (); assertTrue (palindromeTester.isPalindrome ("poludnie")); } @Test public void whenNearPalindrom_thanReject () {Palindrome palindromeTester = new Palindrome (); assertFalse (palindromeTester.isPalindrome ("neón")); }

Teraz môžeme povedať, že máme dostatok testov na to, aby sme pokryli celý náš kód, ale aby sme sa uistili, že to spustíme, spustime príkaz Maven mvn jacoco: správa zverejniť správu o pokrytí:

Ako vidíte, všetky riadky / vetvy / cesty v našom kóde sú úplne pokryté:

V projektoch v reálnom svete a s vývojom idúcim ďalej musíme sledovať skóre pokrytia kódu.

JaCoCo ponúka jednoduchý spôsob deklarovania minimálne požiadavky to by malo byť splnené, inak sa zostavenie nepodarí.

Môžeme to urobiť pridaním nasledujúceho skontrolovať cieľ v našom pom.xml spis:

 jacoco-check check BALÍČEK RIADENIE RIADENIA 0,50 

Ako asi tušíte, obmedzujeme tu minimálne skóre pre pokrytie liniek na 50%.

The jacoco: skontrolovať cieľ je viazaný do overiť, takže môžeme spustiť príkaz Maven - mvn čisté overiť skontrolovať, či sa pravidlá dodržiavajú alebo nie. V denníkoch sa zobrazí niečo ako:

[CHYBA] Nepodarilo sa vykonať cieľ org.jacoco: jacoco-maven-plugin: 0.7.7.201606060606: kontrola (jacoco-check) na testovanie mutácií projektu: Kontroly pokrytia neboli splnené.

7. Záver

V tomto článku sme videli, ako využiť plugin JaCoCo maven na generovanie správ o pokrytí kódu pre projekty Java.

Majte však na pamäti, 100% pokrytie kódu nie je potrebné, odráža efektívne testovanie, pretože odráža iba množstvo kódu vykonaného počas testov. V predchádzajúcom článku sme hovorili o testovanie mutácií ako sofistikovanejší spôsob sledovania účinnosti testov v porovnaní s bežnými pokrytie kódu.

Môžete si pozrieť príklad uvedený v tomto článku v prepojenom článku Projekt GitHub.


$config[zx-auto] not found$config[zx-overlay] not found