Kurz pokrytí kódu: Testování větví, prohlášení a rozhodování
Co je pokrytí kódem?
Pokrytí kódu je míra, která popisuje míru testování zdrojového kódu programu. Je to jedna z forem testování bílého boxu, které najde oblasti programu, které nejsou uplatněny sadou testovacích případů. Vytváří také některé testovací případy pro zvýšení pokrytí a stanovení kvantitativní míry pokrytí kódu.
Ve většině případů systém pokrytí kódem shromažďuje informace o běžícím programu. Také to kombinuje s informacemi o zdrojovém kódu a vytváří zprávu o pokrytí kódem testovací sady.
Proč používat Testování pokrytí kódu?
Zde je několik hlavních důvodů pro použití pokrytí kódem:
- Pomáhá vám měřit efektivitu implementace testu
- Nabízí kvantitativní měření.
- Definuje míru, do jaké byl zdrojový kód testován.
Metody pokrytí kódu
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ého pole, ve které jsou všechny spustitelné příkazy ve zdrojovém kódu provedeny alespoň jednou. Používá se pro výpočet počtu příkazů ve zdrojovém kódu, které byly provedeny. Hlavním účelem Statement Coverage 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áře založeného na struktuře testovaného kódu.
In Bílý Box Testování, tester se soustředí na to, jak software funguje. Jinými slovy, tester se soustředí na vnitřní práci se zdrojovým kódem týkající se řídicích vývojových grafů nebo vývojových diagramů.
Obecně platí, že pokud se podíváme na zdrojový kód, bude existovat široká škála prvků, jako jsou operátory, funkce, smyčkování, výjimečné ovladače atd. Na základě vstupu do programu nemusí být některé příkazy kódu provedeny . Cílem pokrytí příkazů je pokrýt všechny možné cesty, řádky a příkazy v kódu.
Pojďme to pochopit na příkladu, jak vypočítat pokrytí výpisu.
Scénář pro výpočet pokrytí prohlášení pro daný zdrojový kód. Zde používáme dva různé scénáře, abychom zkontrolovali procento pokrytí prohlášení pro každý scénář.
Zdrojový kód:
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 = 9Příkazy označené žlutou barvou jsou ty, které jsou provedeny podle scénáře
Počet provedených příkazů = 5, Celkový počet příkazů = 7
Pokrytí výpisu: 5/7 = 71 %
Podobně uvidíme scénář 2,
Scénář 2:
Jestliže A = -3, B = -9
Příkazy označené žlutou barvou jsou ty, které jsou provedeny podle scénáře.
Počet provedených příkazů = 6
Celkový počet výpisů = 7
Pokrytí výpisu: 6/7 = 85 %
Ale celkově, pokud vidíte, všechna prohlášení jsou pokryta oběma scénáři. Můžeme tedy dojít k závěru, že celkové pokrytí prohlášením je 100 %.
Na co se vztahuje Pokrytí prohlášení?
- Nepoužité výpisy
- Mrtvý kód
- Nepoužité větve
- Chybějící prohlášení
Testování pokrytí rozhodnutí
Pokrytí rozhodování je technika testování bílého pole, která hlásí pravdivé nebo nepravdivé výsledky každého booleovského výrazu zdrojového kódu. Cílem testování pokrytí rozhodování je pokrýt a ověřit veškerý dostupný zdrojový kód kontrolou a zajištěním, že každá větev každého možného rozhodovacího bodu je provedena alespoň jednou.
V tomto typu pokrytí se výrazy mohou stát složitými, takže dosažení 100% pokrytí je náročné. Proto se k vykazování této metriky používají různé metody. Tyto metody upřednostňují nejkritičtější kombinace. I když se podobá pokrytí rozhodování, poskytuje větší citlivost na tok řízení.
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
Bude proveden kód zvýrazněný žlutě. Zde je zaškrtnuto „Ne“ výsledek rozhodnutí If (a>5).
Pokrytí rozhodnutí = 50 %
Scénář 2:
Hodnota a je 6
Bude proveden kód zvýrazněný žlutě. Zde je zaškrtnuto „Ano“ výsledek rozhodnutí If (a>5).
Pokrytí 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é je testován každý výsledek z modulu kódu (příkaz nebo smyčka). Účelem pokrytí pobočky je zajistit, aby každá rozhodovací podmínka z každé pobočky byla provedena alespoň jednou. Pomáhá měřit zlomky nezávislých segmentů kódu a zjišťovat sekce bez větví.
Pokud jsou například výsledky binární, musíte otestovat výsledky True i False.
Vzorec pro výpočet pokrytí pobočky:
Příklad pokrytí pobočky
Chcete-li zjistit pokrytí větví, uvažujme stejný příklad, který byl použit dříve
Zvažte následující kód -
Demo(int a) { If (a> 5) a=a*3 Print (a) }
Větve pokrytí bude brát v úvahu i nepodmíně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:
Testování pokrytí poboček nabízí následující výhody:
- Umožňuje ověřit všechny větve v kódu
- Pomáhá vám zajistit, že žádné rozvětvené vedení nezpůsobí abnormality fungování programu
- Metoda pokrytí větví odstraňuje problémy, ke kterým dochází kvůli testování pokrytí příkazů
- Umožňuje vám najít oblasti, které nejsou testovány jinými testovacími metodami
- Umožňuje vám najít kvantitativní míru pokrytí kódem
- Pokrytí větví ignoruje větve uvnitř booleovských výrazů
Testování krytí podmínek
Pokrytí stavu nebo výraz pokrytí je testovací metoda používaná k testování a vyhodnocování proměnných nebo dílčích výrazů v podmíněném příkazu. Cílem pokrytí podmínek je zkontrolovat jednotlivé výsledky pro každou logickou podmínku. Pokrytí podmínek nabízí lepší citlivost na tok řízení než pokrytí rozhodování. V tomto pokrytí jsou brány v úvahu pouze výrazy s logickými operandy.
Pokud například výraz obsahuje booleovské operace jako AND, OR, XOR, což označuje celkové možnosti.
Pokrytí podmínek nezaručuje plné pokrytí rozhodnutí.
Vzorec pro výpočet krytí podmínek:
Příklad:
Pro výše uvedený výraz máme 4 možné kombinace
- TT
- FF
- TF
- FT
Zvažte následující vstup
X = 3
Y = 4 |
(X | TRUE | Pokrytí stavu je ¼ = 25 % |
A = 3
B = 4 |
(a>b) | NEPRAVDIVÉ |
Pokrytí stroje konečného stavu
Pokrytí konečného automatu je jistě nejsložitějším typem metody pokrytí kódem. Je to proto, že pracuje na chování návrhu. V této metodě pokrytí musíte hledat, kolik časově specifických států je navštíveno, tranzitováno. Také kontroluje, kolik sekvencí je zahrnuto v konečném automatu.
Jaký typ pokrytí kódu zvolit
To je jistě nejobtížnější odpověď. Aby bylo možné vybrat metodu pokrytí, musí tester zkontrolovat, že
- testovaný kód má jeden nebo více neobjevených defektů
- náklady na případnou pokutu
- náklady na ztracenou pověst
- náklady na ztracený prodej atd.
Čí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.
Pokrytí kódu vs. funkční pokrytí
Pokrytí kódu | Funkční pokrytí |
---|---|
Pokrytí kódu vám říká, jak dobře byl zdrojový kód cvičen vaší testovací stolicí. | Funkční pokrytí měří, jak dobře byla funkčnost návrhu pokryta vaší testovací stolicí. |
Nikdy nepoužívejte specifikaci návrhu | Použijte specifikaci návrhu |
Provedeno vývojáři | Provedeno testery |
Nástroje pro pokrytí kódu
Zde je seznam důležitých nástrojů pro pokrytí kódu:
Název nástroje | Description |
---|---|
Cobertura | Je to nástroj pro pokrytí otevřeného zdrojového kódu. Měří pokrytí testem pomocí instrumentace kódové základny a analyzuje, které řádky kódu se spouštějí a které se nespouštějí při spuštění testovací sady. |
Jetel | Clover také zkracuje dobu testování tím, že spouští pouze testy, které pokrývají kód aplikace, který byl 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ých zdrojových souborů, tříd a úrovní metod. |
Kalistick | Kalistick je aplikace třetí strany, která analyzuje kódy z různých úhlů pohledu. |
CoView a CoAnt | Coding Software je nástroj pro pokrytí kódu pro metriky, vytváření simulovaných objektů, testovatelnost kódu, pokrytí cest a větví atd. |
Bullseye pro C++ | BulseyeCoverage je nástroj pro pokrytí kódu C++ a C. |
Sonar | Sonar je otevřený nástroj pro pokrytí kódu, který vám pomůže řídit kvalitu kódu. |
Výhody a nevýhody použití pokrytí kódem
Výhody pokrytí kódu | Nevýhody pokrytí kódu |
---|---|
Užitečné k vyhodnocení kvantitativní míry pokrytí kódem | I když není v návrhu implementována jakákoli konkrétní funkce, pokrytí kódu stále vykazuje 100% pokrytí. |
Umožňuje vám vytvářet další testovací případy pro zvýšení pokrytí | Není možné určit, zda jsme pomocí pokrytí kódu testovali všechny možné hodnoty vlastnosti |
Umožňuje vám najít oblasti programu, které nejsou vykonávány sadou testovacích případů | Pokrytí kódu také neříká, jak moc a jak dobře jste pokryli svou logiku |
V případě, že zadaná funkce není implementována nebo není zahrnuta ve specifikaci, pak techniky založené na struktuře nemohou tento problém najít. |
Shrnutí
- Pokrytí kódu je míra, která popisuje míru testování zdrojového kódu programu
- Pomáhá vám měřit efektivitu implementace testu
- Pět metod pokrytí kódu je 1.) Pokrytí prohlášení 2.) Pokrytí stavu 3) Pokrytí pobočky 4) Toggle Pokrytí 5) Pokrytí FSM
- Pokrytí příkazů zahrnuje provedení všech spustitelných příkazů ve zdrojovém kódu alespoň jednou
- Pokrytí rozhodnutí uvádí pravdivé nebo nepravdivé výsledky každého booleovského výrazu
- V pokrytí pobočky je testován každý výstup z kódového modulu
- Podmíněné odhalí, jak jsou proměnné nebo podvýrazy v podmíněném příkazu vyhodnocovány
- Pokrytí konečného automatu je jistě nejsložitějším typem metody pokrytí kódem
- Aby bylo možné vybrat metodu pokrytí, musí tester zkontrolovat náklady na potenciální pokutu, ztracenou pověst, ztracený prodej atd.
- Pokrytí kódu vám říká, jak dobře byl zdrojový kód uplatněn vaší testovací stolicí, zatímco funkční pokrytí měří, jak dobře byla pokryta funkčnost návrhu.
- Cobertura, JTest, Clover, Emma, Kalistick je několik důležitých nástrojů pro pokrytí kódu
- Pokrytí kódu vám umožňuje vytvářet další testovací případy pro zvýšení pokrytí
- Pokrytí kódu vám nepomůže určit, zda jsme testovali všechny možné hodnoty funkce