Code Nástroj pro pokrytí: Testování příkazů, větví a rozhodnutí

⚡ Chytré shrnutí

Code Pokrytí je měření metodou white-box, které udává míru, do jaké byl zdrojový kód testován sadou testů, helping Týmy vyhledávají netestované příkazy, větve, podmínky a cesty, které mohou zabírat skryté vady.

  • 🎯 Definice: Code Pokrytí kvantifikuje, kolik zdrojového kódu vaše testy skutečně provedou.
  • 📊 Metody: Existuje pět metod – příkazová, rozhodovací, větvící, podmíněná a pokrytí konečným stavovým automatem.
  • 🧩 Prohlášení vs. větev: Pokrytí příkazů kontroluje řádky, zatímco pokrytí větví kontroluje každý výsledek rozhodnutí.
  • 🇧🇷 Code vs. funkční: Code opatření krytí uplatňovaná kódem; funkční opatření krytí pokryté požadavky.
  • 🛠️ Nástroje: Cobertura, OpenClover, EMMA a Sonar automatizují měření pokrytí.
  • 🤖 Asistence AI: Nástroje umělé inteligence generují testy a automaticky odhalují neotestované mezery v krytí s vysokým rizikem.

Code Tutoriál k pokrytí

Co je to Code Dosah?

Code krytí je míra, která popisuje stupeň, do jaké byl zdrojový kód programu testován. Je to jedna z forem testování bílé skříňky který vyhledává oblasti programu, které nebyly testovány sadou testovacích případů. Pomáhá také vytvářet další testovací případy pro zvýšení pokrytí a určení kvantitativní míry pokrytí kódu.

Ve většině případů systém pro pokrytí kódu shromažďuje informace o běžícím programu. Tyto informace pak kombinuje s informacemi o zdrojovém kódu a vygeneruje tak zprávu o pokrytí kódu testovací sady.

Proč používat Code Testování pokrytí?

Zde je několik hlavních důvodů pro použití pokrytí kódem:

  • Pomáhá vám měřit efektivitu implementace testů.
  • Nabízí kvantitativní měření testování.
  • Definuje míru, do jaké byl zdrojový kód testován.

Code Metody pokrytí

Následují hlavní metody pokrytí kódu:

  • Pokrytí prohlášení
  • Pokrytí rozhodování
  • Pokrytí pobočky
  • Toggle Pokrytí
  • Pokrytí FSM

Pokrytí prohlášení

Pokrytí prohlášení je technika testování bílé skříňky, při které jsou všechny spustitelné příkazy ve zdrojovém kódu provedeny alespoň jednou. Používá se k výpočtu počtu provedených příkazů ve zdrojovém kódu. Hlavním účelem krytí příkazů je pokrýt všechny možné cesty, řádky a příkazy ve zdrojovém kódu.

Pokrytí příkazů se používá k odvození scénářů založených na struktuře testovaného kódu.

Pokrytí prohlášení

Při testování metodou white box se tester soustředí na to, jak software funguje. Jinými slovy, tester se soustředí na vnitřní fungování zdrojového kódu, konkrétně na grafy toku řízení nebo vývojové diagramy.

Obecně v jakémkoli softwaru, pokud se podíváte na zdrojový kód, najdete širokou škálu prvků, jako jsou operátory, funkce, loo...ping, obslužné rutiny výjimek atd. Na základě vstupu do programu se některé příkazy kódu nemusí provést. Cílem pokrytí příkazů je pokrýt všechny možné cesty, řádky a příkazy v kódu.

Pojďme si to vysvětlit na příkladu, jak vypočítat krytí výpisů. Zde vezmeme dva různé scénáře, abychom pro každý scénář ověřili procento krytí výpisů.

Zdroj Code:

Prints (int a, int b) {                       ------------  Printsum is a function
    int result = a + b;
    If (result > 0)
        Print ("Positive", result)
    Else
        Print ("Negative", result)
    }                                        -----------   End of the source code

Scénář 1: Pokud A = 3, B = 9

Scénář krytí výpisu 1

Žlutě označené příkazy jsou ty, které jsou provedeny dle scénáře. Počet provedených příkazů = 5, celkový počet příkazů = 7, takže krytí příkazů = 5/7 = 71 %.

Scénář 2: Jestliže A = -3, B = -9

Scénář krytí výpisu 2

Žlutě označené příkazy jsou ty, které jsou provedeny dle scénáře. Počet provedených příkazů = 6, celkový počet příkazů = 7, takže krytí příkazů = 6/7 = 85 %.

Ale celkově, pokud se podíváte, všechny výroky jsou pokryty oběma scénáři. Můžeme tedy dojít k závěru, že celkové pokrytí výroků je 100 %.

Na co se vztahuje Pokrytí prohlášení?

  1. Nepoužité výpisy
  2. Mrtví Code
  3. Nepoužité větve
  4. Chybějící prohlášení

Testování pokrytí rozhodnutí

Pokrytí rozhodování je technika testování bílé skříňky, která hlásí pravdivé nebo nepravdivé výsledky každého booleovského výrazu ve zdrojovém kódu. Cílem testování pokrytí rozhodnutí je pokrýt a ověřit veškerý dostupný zdrojový kód kontrolou a zajištěním, aby každá větev každého možného rozhodovacího bodu byla provedena alespoň jednou.

V tomto typu pokrytí se výrazy mohou stát složitými, což ztěžuje dosažení 100% pokrytí. Proto se k vykazování této metriky používají různé metody. Tyto metody upřednostňují nejdůležitější kombinace. I když je to podobné jako pokrytí větví, poskytuje větší citlivost na tok řízení.

Testování pokrytí rozhodnutí

Příklad pokrytí rozhodnutí

Zvažte následující kód:

Demo(int a) {
    If (a > 5)
        a = a * 3
    Print (a)
    }

Scénář 1: Hodnota a je 2. Výsledek rozhodnutí „ne“. Pokud je zaškrtnuto políčko (a>5), pak krytí rozhodnutí = 50 %.

Scénář 2: Hodnota a je 6. Výsledek rozhodnutí „Ano“. Pokud je zaškrtnuto (a>5), pak krytí rozhodnutí = 50 %.

Testovací případ Hodnota A Výstup Pokrytí rozhodování
1 2 2 50%
2 6 18 50%

Testování pokrytí poboček

Pokrytí pobočky je metoda testování bílé skříňky, ve které se testuje každý výsledek z kódového modulu (příkazu nebo smyčky). Účelem pokrytí větví je zajistit, aby každá rozhodovací podmínka z každé větve byla provedena alespoň jednou. Pomáhá měřit podíly nezávislých segmentů kódu a vyhledávat sekce, které nemají žádné větve.

Pokud jsou například výsledky binární, musíte otestovat výsledky True i False.

Vzorec pro výpočet pokrytí pobočky:

Vzorec pro pokrytí pobočky

Příklad pokrytí pobočky

Pro zjištění pokrytí větví zvažte stejný příklad jako dříve. Pokrytí větví bude zohledňovat i bezpodmínečné větvení.

Testovací případ Hodnota A Výstup Pokrytí rozhodování Pokrytí pobočky
1 2 2 50% 33%
2 6 18 50% 67%

Výhody pokrytí pobočky:

  • Umožňuje ověřit všechny větve v kódu.
  • Pomáhá vám zajistit, aby žádná větve nevedla k abnormalitám v provozu programu.
  • Odstraňuje problémy, ke kterým dochází v důsledku testování pokrytí příkazů.
  • Umožňuje najít oblasti, které nejsou testovány jinými testovacími metodami.
  • Umožňuje najít kvantitativní míru pokrytí kódu.
  • Pokrytí větví ignoruje větve uvnitř booleovských výrazů.

Testování krytí podmínek

Pokrytí stavuPokrytí výrazů neboli pokrytí výrazů je testovací metoda používaná k testování a vyhodnocení proměnných nebo dílčích výrazů v podmíněném příkazu. Cílem pokrytí podmínek je kontrolovat jednotlivé výsledky pro každou logickou podmínku. Pokrytí podmínek nabízí lepší citlivost na tok řízení než pokrytí rozhodnutí. V tomto pokrytí se berou v úvahu pouze výrazy s logickými operandy.

Například pokud výraz obsahuje booleovské operace jako AND, OR nebo XOR, označuje to celkový počet možností. Pokrytí podmínek nezaručuje úplné pokrytí rozhodnutí.

Vzorec pro výpočet krytí podmínek:

Vzorec pro krytí stavu

Pro výraz se dvěma operandy existují čtyři možné kombinace: TT, FF, TF a FT. Uvažujme vstup X=3, Y=4 (x b) NEPRAVDA, což dává krytí podmínky 1/4 = 25 %.

Pokrytí stroje konečného stavu

Pokrytí konečným stavovým automatem je jistě nejsložitějším typem metody pokrytí kódu. Je to proto, že pracuje s chováním návrhu. V této metodě pokrytí je třeba sledovat, kolikrát jsou určité stavy navštíveny nebo procházeny. Také se kontroluje, kolik sekvencí je zahrnuto v konečném stavovém automatu.

Jaký typ Code Krytí k výběru

Na tuto otázku je jistě nejtěžší odpovědět. Aby tester mohl vybrat metodu krytí, musí ověřit, zda:

  • testovaný kód má jednu nebo více neobjevených vad,
  • náklady na případnou pokutu,
  • náklady na ztracenou reputaci,
  • náklady na ušlé tržby a tak dále.

Čím vyšší je pravděpodobnost, že vady způsobí nákladné výpadky výroby, tím přísnější úroveň krytí musíte zvolit.

Code Krytí vs. funkční krytí

Code Krytí Funkční pokrytí
Ukazuje, jak dobře byl zdrojový kód otestován vaší testovací stolicí. Měří, jak dobře byla funkčnost návrhu pokryta vaší testovací stolicí.
Nikdy nepoužívá specifikaci návrhu. Používá specifikaci návrhu.
Hotovo vývojáři. Provedeno testery.

Code Nástroje pro pokrytí

Zde je seznam důležitých nástrojů pro pokrytí kódu:

Název nástroje Description
Cobertura Nástroj pro pokrytí kódu s otevřeným zdrojovým kódem. Měří pokrytí testy instrumentací kódové základny a analýzou, které řádky kódu se při spuštění testovací sady provedou a které ne.
Jetel Jetel (OpenClover) také zkracuje dobu testování tím, že spouští pouze testy, které pokrývají kód aplikace upravený od předchozího sestavení.
DevPartner DevPartner umožňuje vývojářům analyzovat Java kód pro kvalitu a složitost kódu.
Emma EMMA podporuje pokrytí tříd, metod, řádků a základních bloků, agregované na úrovni zdrojového souboru, třídy a metody.
Kalistick Kalistick je aplikace třetí strany, která analyzuje kód z různých perspektiv.
CoView a CoAnt Nástroj pro pokrytí kódu pro metriky, vytváření simulovaných objektů, testovatelnost kódu, pokrytí cest a větví a další.
Bullseye pro C++ BullseyeCoverage je nástroj pro pokrytí kódu. C++ a C.
Sonar Sonar je nástroj pro správu otevřeného kódu, který vám pomáhá spravovat kvalitu kódu.

Výhody a nevýhody používání Code Krytí

Výhody Nevýhody
Užitečné pro vyhodnocení kvantitativní míry pokrytí kódu. I když specifická funkce není v návrhu implementována, pokrytí kódu stále hlásí 100% pokrytí.
Umožňuje vytvářet další testovací případy pro zvýšení pokrytí. Není možné určit, zda byly pomocí pokrytí kódu otestovány všechny možné hodnoty funkce.
Umožňuje najít oblasti programu, které nebyly procvičeny sadou testovacích případů. Code Pokrytí nevypovídá o tom, do jaké míry a jak dobře jste pokryli svou logiku.

Nejčastější dotazy

Mnoho týmů si klade za cíl 70 až 80 %. Dosažení 100 % je zřídkakdy nákladově efektivní. Zaměřte se na pokrytí kritické a vysoce rizikové logiky, spíše než na honění jediného čísla napříč celou kódovou základnou.

Ne. Úplné pokrytí dokazuje, že každý proběhlý řádek byl ověřen, nikoli to, že každý vstup, hodnota nebo požadavek byl ověřen. Logické chyby a chybějící funkce mohou stále zůstat nepovšimnuty, takže pokrytí spíše doplňuje než nahrazuje dobrý návrh testu.

Code Pokrytí měří, kolik zdrojového kódu se během testování spustí. Pokrytí testů je širší, tracjak dobře testy řeší požadavky, funkce a rizika. Code pokrytí je jedním ze vstupů do celkového pokrytí testy.

Ne. Můžete dosáhnout 100% pokrytí příkazů a zároveň ponechat větve netestované, například chybějící cestu else. Pokrytí větví (rozhodnutí) je silnější, protože zahrnuje pokrytí příkazů a procvičuje každý výsledek.

Umělá inteligence analyzuje zdrojový kód a existující testy, aby určila neotestované a vysoce rizikové cesty, a poté navrhuje nebo generuje nové případy. Strojové učení také upřednostňuje, které testy spustit, čímž zkracuje zpětnou vazbu a zároveň udržujeping pokrytí vysoké.

Ano. Nástroje umělé inteligence, jako je Diffblue Cover, skenují kód a autonomně píší jednotkové testy pro odkrytou logiku. Zaměřují se na rizikové větve a podmínky, čímž zvyšují pokrytí s mnohem menší manuální námahou.

OpenClover měří pokrytí příkazů, větví a metod a shromažďuje více než 20 metrik. Cobertura, EMMA a JaCoCo existují další široce používané bezplatné možnosti pro Java projektů.

Modifikované krytí podmínek/rozhodnutí vyžaduje, aby každá podmínka v rozhodnutí nezávisle ovlivnila výsledek. Je přísnější než krytí poboček a je nařízeno pro bezpečnostní software, jako je avionika, podle normy DO-178C.

Shrňte tento příspěvek takto: