Typy, nástroje a doporučené postupy

Význam pokrytí kódu při testování softwaru

Při vývoji softwaru se nevyhnutelně setkáme s chybami. Tyto chyby mohou mít podobu syntaktických nesrovnalostí, logických omylů, chyb při běhu, problémů s výkonem, datových nesrovnalostí a dokonce i závažnějších problémů.

Vzhledem k tomu, že chyby jsou při tvorbě softwaru téměř všudypřítomné, je testování softwaru klíčovým krokem v procesu vývoje. Důkladné a efektivní testování zajistí nejen kvalitní software, který vyhovuje požadavkům uživatelů, ale také software, který je v souladu s předpisy a je téměř bez zranitelností, které by mohly být zneužity.

Testování softwaru lze provádět různými způsoby, včetně automatizovaného testování, unit testování, integračního testování nebo testování celého softwaru prostřednictvím systémového testování.

Zásadní otázkou však zůstává: jak zjistit, zda byl váš software testován dostatečně? Jsou testy, které jste provedli, opravdu komplexní?

Otestovali jste důkladně všechny části svého softwaru, nebo existují části kódu, které nebyly otestovány vůbec?

Tyto otázky se nevyhnutelně vynoří při testování softwaru, a proto je pokrytí kódu tak důležité.

Pokrytí kódu je metrika, která vám udává, jak velká část vašeho kódu byla vykonána, a tedy testována, prostřednictvím testů, které jste spustili. Výsledky pokrytí kódu se vyjadřují v procentech.

Toto procento ukazuje, jak velká část kódu byla otestována testy, které jste na kódu spustili. Pokud například získáte 60% pokrytí kódu, znamená to, že 40 % vašeho kódu nebylo otestováno a mohou se v něm skrývat chyby a zranitelnosti.

Pokrytí kódu vám tedy umožňuje analyzovat efektivitu a úplnost testů, které jste na svém softwaru provedli. Tím se zajišťuje, že software je před vydáním důkladně otestován. Snižuje se tak pravděpodobnost softwarových chyb v produkčním softwaru, které by mohly negativně ovlivnit uživatelskou zkušenost.

I když 100% pokrytí kódu nezaručuje, že software je zcela bez chyb, je vhodné usilovat o vysoké pokrytí, abyste zajistili efektivní testování vašeho softwaru.

V kritických odvětvích, jako je letectví a medicína, kde mohou chyby v softwaru způsobit i smrt, vyžadují předpisy 100% pokrytí softwaru během testování.

Typy metrik pokrytí kódu

Existuje několik metrik pokrytí kódu, které lze měřit během testování softwaru. Mezi ně patří:

  • Pokrytí příkazů: Měří procento spustitelných příkazů ve zdrojovém kódu, které byly provedeny během testování.
  • Pokrytí funkcí: Měří procento definovaných funkcí, které byly volány během testování.
  • Pokrytí větví: Měří procento větví nebo možných cest, které byly provedeny ze všech rozhodovacích bodů ve zdrojovém kódu. Zajišťuje, že všechny větve z rozhodovacích struktur, jako jsou `if`, `switch` a `if else`, byly plně otestovány.
  • Pokrytí podmínek: Měří procento booleovských výrazů, které byly testovány na pravdivé i nepravdivé hodnoty.
  • Pokrytí smyček: Měří procento smyček ve zdrojovém kódu, které byly provedeny během testování.
  • Pokrytí cesty: Měří procento všech možných cest provádění ve zdrojovém kódu, které byly otestovány.

Výše uvedené metriky jsou obvykle součástí zprávy o pokrytí kódu.

Doporučené postupy pro pokrytí kódu

Při provádění pokrytí kódu se doporučuje dodržovat několik osvědčených postupů, které zajistí jeho účinnost a kvalitu. Mezi ně patří:

Mějte jasné cíle pokrytí

Před zahájením jakéhokoli testování softwaru si stanovte cílové procento pokrytí pro každou metriku, která je relevantní. To pomáhá nejen stanovit jasné testovací cíle, ale také snižovat chyby v softwaru tím, že směřuje úsilí týmu ke zvýšení pokrytí kódu. Také to zajišťuje, že testování softwaru dostane během vývoje potřebnou pozornost.

Zaměřte se na kvalitu testu

Je důležité mít na paměti, že pokrytí kódu pouze ukazuje procento kódu, které bylo testováno, a neříká nic o tom, zda byl kód otestován správně nebo zda je software bez chyb. Proto by se mělo klást důraz na psaní kvalitních a efektivních testů, které správně otestují software a přinesou hodnotu, a ne pouze na snahu dosáhnout 100% pokrytí kódu.

Zvyšte pokrytí kódu v často se měnícím kódu

Zatímco dosažení vysokého pokrytí kódu u rozsáhlých projektů může být obtížné, lze vynaložit úsilí na jeho postupné zlepšování.

Výborným přístupem je vyžadovat vysoké pokrytí kódu, například nad 90 %, u každého nového commitu. Vynucení pokrytí kódu na úrovni commitu je realistické a proveditelné a zajišťuje, že veškeré nové změny v softwaru budou mít vynikající pokrytí.

Měřte a analyzujte data pokrytí kódu

Využijte výsledky pokrytí kódu k identifikaci oblastí, které ještě vyžadují testování, a k prioritizaci budoucího úsilí v oblastech s nízkým pokrytím. Analyzujte data a zaměřte se na kritické oblasti aplikace, které je třeba otestovat. Zlepšování a stanovení priorit na základě údajů o pokrytí kódu vede k lépe testovanému softwaru s menším počtem chyb.

Pokrytí kódu vs. pokrytí testem

Přestože se obě metriky používají k posouzení účinnosti testů, pokrytí kódu a pokrytí testem se liší v jejich použití a v tom, co měří.

Pokrytí testem je metrika, která určuje, jak dobře testy pokrývají požadavky na software. Zahrnuje testování každého softwarového požadavku a pomáhá zjistit, do jaké míry software splňuje zadané požadavky. Výsledky ukazují procento požadavků, které byly testovány. Pokrytí testem obvykle provádějí odborníci na zajištění kvality.

Pokrytí kódem na druhou stranu je metrika, která se používá k určení procenta zdrojového kódu, který byl proveden testy. Výsledky ukazují, do jaké míry byly příkazy, funkce, cesty, smyčky, větvení a podmínky ve zdrojovém kódu provedeny testy. Pokrytí kódu se používá k hodnocení toho, jak dobře testy pokrývají zdrojový kód a obvykle ho provádějí vývojáři softwaru.

Pokrytí kódu je důležitou metrikou při testování softwaru. Zde je několik nástrojů, které vám s ním pomohou:

Clover

Clover je nástroj pro pokrytí kódu s otevřeným zdrojovým kódem, který původně vyvinula společnost Atlassian. Je napsán v jazyce Java a běží na jakémkoli operačním systému, který splňuje požadavky Java Runtime Environment.

Clover lze použít pro kód napsaný v jazycích Java, Groovy nebo AspectJ. Podporuje testovací frameworky jako JUnit, TestNG a Spock a lze ho integrovat s IDE jako IntelliJ IDEA a Eclipse.

Clover měří metriky pokrytí kódu, jako jsou metody, příkazy, větve, celkové pokrytí a pokrytí podle testů. Generuje konfigurovatelné zprávy HTML, které kromě oblastí s nejvyšším rizikem zobrazují výsledky pokrytí kódu. Tyto zprávy lze použít při optimalizacích testů. Zprávy lze generovat i ve formátu PDF, XML, JSON nebo prostého textu. Mezi hlavní výhody Cloveru patří integrace s mnoha nástroji a aktivní vývoj.

JaCoCo

JaCoCo je bezplatná knihovna pro pokrytí kódu pro programovací jazyk Java, vyvinutá týmem EclEmma. Je implementována v EclEmma, což je nástroj pro pokrytí kódu Java pro IDE Eclipse.

JaCoCo poskytuje analýzu pokrytí, jejíž výsledky jsou shrnuty a zvýrazněny v editoru zdrojového kódu Java, s možností rozbalení na úroveň metody. Výsledky jsou prezentovány pomocí přizpůsobitelného barevného kódu, který zvýrazňuje řádky kódu, které byly plně, částečně nebo dosud nepokryty testy. Umožňuje slučování a zvažování různých testovacích běhů pro dosažení úplného pokrytí zdrojového kódu. JaCoCo je lehký nástroj a nevyžaduje žádné úpravy projektů ani konfiguraci.

Cobertura

Cobertura je bezplatný a open-source nástroj pro pokrytí kódu v jazyce Java, založený na Jcoverage, který lze používat samostatně, přes skript Ant nebo plugin Maven. Nejběžnější je použití Cobertury pro pokrytí kódu přes plugin Maven.

Cobertura měří procento řádků nebo větví, které byly provedeny testy spuštěnými na zdrojovém kódu Java. Poskytuje metriky, jako je pokrytí řádků (procento provedených příkazů) a pokrytí větví (procento pokrytých větví). Ukazuje také faktor složitosti, který se zvyšuje s rostoucím počtem větví v kódu Java. Výsledky pokrytí kódu jsou prezentovány v HTML nebo XML a ukazují, které části kódu nebyly testovány. Cobertura slouží i k hledání netestovaného kódu, chyb a k identifikaci nedostupného kódu.

Istanbul

Istanbul je nástroj pro pokrytí kódu v JavaScriptu s podporou ES6+. Lze jej nainstalovat do libovolného JavaScript projektu jako vývojovou závislost přes správce balíčků Node.

Istanbul poskytuje metriky pokrytí kódu, jako jsou výpis, větev, funkce a pokrytí řádků. Zobrazuje také řádky ve zdrojovém kódu, které nebyly pokryty testy. Toho dosahuje přidáním čítačů do JavaScript kódu, aby mohl sledovat, do jaké míry testy jednotek spouští zdrojový kód. Výsledky pokrytí kódu z Istanbulu lze zobrazit v terminálu nebo ve formě HTML. Istanbul také nabízí podporu pro aplikace, které vytvářejí podprocesy, a pro zdrojově mapované pokrytí projektů Babel a TypeScript.

Pytest-cov

Pytest-cov je bezplatný plugin Pythonu, který se používá k generování zpráv o pokrytí kódu pro Python kód. Instaluje se přes Pip a ovládá se z příkazového řádku. Jeho zpráva o pokrytí kódu ukazuje příkazy, které nejsou pokryty testy, a udává procento pokrytí. Nabízí podporu pro podprocesy, xdist a konzistentní chování pytestu. Pytest-cov při provádění testů maže existující datové soubory pokrytí, aby zajistil nová a čistá data pro každý nový test, ale také umožňuje kombinovat výsledky z předchozích testů.

Coverage.py

Coverage.py je nástroj pro pokrytí kódu pro programy Python. Měří pokrytí řádků (příkazů) a udává počet příkazů v programu, příkazy vynechané testy a procentuální pokrytí testem. Zobrazuje také řádky ve zdrojovém kódu Pythonu, které byly vynechány testy. Lze jej nakonfigurovat pro měření pokrytí větví. Coverage.py lze použít i pro zjištění, které testy provedly které řádky. Jeho zpráva o pokrytí kódu může být prezentována v terminálu i ve formátech HTML, XML, JSON a LCOV.

SimpleCov

SimpleCov je nástroj pro pokrytí kódu v jazyce Ruby. Využívá vestavěnou knihovnu Ruby ke sběru dat pro určování pokrytí kódu po provedení testů. Výborná je prezentace výsledků pokrytí kódu, které slučuje i z různých typů testů, takže zpráva ukazuje výsledky všech testů a umožňuje snadnou identifikaci netestovaných částí kódu. Formátuje zdrojový kód pomocí barev, což usnadňuje identifikaci testovaných a netestovaných částí kódu. SimpleCov měří a hlásí pokrytí linky testy, ale lze ho nakonfigurovat pro měření pokrytí větví.

Hluboký kryt

Deep Cover je přesný nástroj pro pokrytí kódu v Ruby. Nabízí přesnější zprávy o pokrytí linky tím, že linka je považována za pokrytou pouze tehdy, pokud je provedena zcela, ne jen částečně. Nabízí také podporu pro pokrytí uzlů a větví pro zjištění, zda některé větve nebyly testovány. Je snadno použitelný, nevyžaduje konfiguraci a lze ho integrovat s dalšími nástroji pro pokrytí kódu, jako je vestavěná knihovna Ruby nebo SimpleCov. Deep Cover zpřesňuje nástroje tím, že označí řádky jako provedené jen tehdy, když je celý řádek kódu proveden.

Závěr

I když vyšší pokrytí kódem nemusí automaticky znamenat bezchybný software, je to zásadní metrika, kterou je třeba zohlednit při testování. Pokrytí kódu je klíčové pro posouzení, do jaké míry testy skutečně testují zdrojový kód softwaru. Zlepšování pokrytí kódu vede k lépe otestovanému softwaru, který je méně náchylný k chybám v produkci. Pro pokrytí kódu při testování softwaru zvažte použití nástrojů zmíněných v tomto článku.

Můžete také prozkoumat cloudové nástroje pro zátěžové testování.