code coverage tutorial
Tento komplexní výukový program vysvětluje, co je Pokrytí kódu v Testování softwaru, jeho typy, výhody a nevýhody:
Konečným cílem každé společnosti zabývající se vývojem softwaru je vývoj kvalitního softwaru. K dosažení tohoto cíle musí být software důkladně otestován.
Testování je tedy nedílnou součástí vývoje softwarové aplikace. Proto je nezbytné, aby vyvinutý software byl zkontrolován vývojářem (což se provádí během fáze testování jednotky) a poté byl předán týmu QC, aby byl důkladně otestován, aby bylo zajištěno, že má minimální nebo žádné chyby.
Software je testován na jednotce, než je vydán skutečnému testovacímu týmu k testování. Protože toto testování zahrnuje testování na úrovni kódu, provádí ho vývojář. To je zajištěno, aby každá část testovaného kódu fungovala podle očekávání.
Zde jsou testovány malé bloky kódu, které byly vyvinuty izolovaně, aby byla zajištěna jejich správnost. Otázka, která se často v mysli vývojáře rýsuje, je kolik testování jednotky by mělo být provedeno a odpověď na to spočívá v pokrytí kódu.
Tento výukový program vám poskytne hluboké znalosti o tom, co je pokrytí kódu a proč jej potřebujeme. Dozvěděli byste se, jak se liší od Test Coverage.
Podíváme se také na nástroje a metodiky, které se používají pro pokrytí kódu, a na konci tohoto kurzu bychom viděli výhody spolu s jeho nevýhodami. Některé z mýtů spojených s pokrytím kódu by zde byly také pokryty.
Co se naučíte:
Co je pokrytí kódu
Toto je důležitá metrika testování jednotky. Je užitečné znát účinnost jednotkových testů. Jedná se o míru, která udává, jaké procento zdrojového kódu by bylo provedeno během testování.
Jednoduše řečeno, míra, do jaké se během testování provede zdrojový kód softwarového programu nebo aplikace, se nazývá pokrytí kódu.
Pokud testy provedou celou část kódu včetně všech větví, podmínek nebo smyček, řekli bychom, že existuje úplné pokrytí všech možných scénářů, a tedy pokrytí kódu je 100%. Abychom tomu porozuměli ještě lépe, pojďme si vzít příklad.
Níže je uveden jednoduchý kód, který slouží k přidání dvou čísel a zobrazení výsledku v závislosti na hodnotě výsledku.
Input a, b Let c = a + b If c <10, print c Else, print ‘Sorry’
Výše uvedený program přijímá dva vstupy, tj. „A“ a „b“. Součet obou je uložen v proměnné c. Pokud je hodnota c menší než 10, vytiskne se hodnota „c“, jinak se vytiskne „Sorry“.
Nyní, pokud máme nějaké testy k ověření výše uvedeného programu s hodnotami a & b tak, že součet je vždy menší než 10, pak se druhá část kódu nikdy nespustí. V takovém scénáři bychom řekli, že pokrytí není úplné.
Byl to jen malý příklad k objasnění významu pokrytí kódu. Když prozkoumáme více, získáte lepší přehled.
Proč potřebujeme pokrytí kódu
(obraz zdroj )
Z různých důvodů je pokrytí kódu nezbytné a některé z nich jsou uvedeny níže:
Otázky a odpovědi na rozhovor se serverem SQL pro zkušené soubory PDF
- Pomáhá zjistit, zda má software menší chyby ve srovnání se softwarem, který nemá dobré pokrytí kódem.
- Pomáhá zlepšovat kvalitu kódu a nepřímo pomáhá při poskytování kvalitnějšího „softwaru“.
- Jedná se o míru, kterou lze použít k poznání účinnosti testu (účinnost jednotkových testů, které jsou psány pro testování kódu).
- Pomáhá identifikovat ty části zdrojového kódu, které by nebyly testovány.
- Pomáhá určit, zda je aktuální testování (testování jednotky) dostatečné nebo ne a zda je třeba provést další testy.
Pokrytí kódu V Pokrytí testu
Abychom pochopili rozdíl mezi Pokrytím kódu a Pokrytím testu, nejprve pochopíme význam Testování pokrytí.
Pokrytí testu
Jde o měřítko toho, kolik částí očekávaného testování bylo během testování softwaru pokryto. Podle „Očekávané testování“ máme na mysli kompletní sadu testovacích případů, které jsou zapsány k provedení za účelem testování daného softwaru.
Předpokládejme, že pro testování softwaru byla napsána sada 500 testovacích případů. Nyní bylo v rámci testovací činnosti provedeno pouze 300 testovacích případů. Předpokládejme, že to bylo kvůli nedostatku času. V takovém případě bude testovacím pokrytím níže.
Pokrytí testu = (provedené testovací případy / celkový počet testovacích případů) * 100
= (300/500) * 100
= 60%
Porovnejme to s tím, co je pokrytí kódu.
Pokrytí kódu
Jedná se o míru, která ukazuje, do jaké míry se zdrojový kód aplikace provede během testování kódu. Ukazuje tedy míru, do jaké by se zdrojový kód testoval.
Předpokládejme, že chcete otestovat aplikaci s 500 řádky kódu, pomocí testů bude provedeno pouze 400 řádků kódu. Předpokládejme, že je to kvůli tomu, že se určitá smyčka / podmínka neprovede. V takovém případě bude kódem pokrytí níže.
Pokrytí kódu = (počet řádků provedeného kódu / celkový počet řádků kódu) * 100
= (400/500) * 100
= 80%
Níže jsou uvedeny rozdíly mezi pokrytím kódu a pokrytím testu:
Pokrytí testu | Pokrytí kódu |
---|---|
Jde o měřítko toho, jak velká část očekávaného testování byla pokryta během testování softwaru. | Jedná se o míru, která ukazuje, do jaké míry se zdrojový kód aplikace provede během testování kódu. |
Pokrytí testu lze vypočítat pomocí následujícího vzorce: Pokrytí testu = (provedené testovací případy / celkový počet testovacích případů) * 100 | Pokrytí kódu lze vypočítat pomocí následujícího vzorce: Pokrytí kódu = (počet řádků provedeného kódu / celkový počet řádků kódu) * 100 |
Metodiky
Zde budeme diskutovat o různých metodách, které jsou / mohou být použity k měření pokrytí kódu.
Abychom těmto metodikám porozuměli, podívejme se na následující fragment kódu:
Add (int a, int b) { If (b > a) { b = b - a Print b } If (a > b) { b = a – b Print b } Else Print ‘0’ }
Pokrytí prohlášení
Tato metodika je měřítkem, které říká, zda byly všechny možné spustitelné příkazy kódu ve zdrojovém kódu provedeny alespoň jednou. Jedná se o metodu, která zajistí, že testy budou každý řádek zdrojového kódu pokryty alespoň jednou.
Může to znít jednoduše, ale při měření pokrytí prohlášení je třeba postupovat opatrně. Důvodem je, že ve zdrojovém kódu může existovat určitá podmínka, která se nemusí provést v závislosti na vstupních hodnotách.
To by znamenalo, že při testování nebudou pokryty všechny řádky kódu. Možná budeme muset použít různé sady vstupních hodnot k pokrytí všech takových podmínek ve zdrojovém kódu.
Například, ve výše uvedeném zdrojovém kódu, pokud jsou vstupní hodnoty brány jako 2 a 3, pak by se „Else“ část kódu neprovedla. Pokud jsou však vstupní hodnoty typu 3 a 2, část kódu „If“ by se nespustila.
To znamená, že ani jedna sada hodnot našeho pokrytí prohlášení by nebyla 100%. V takovém případě možná budeme muset provést testy se všemi třemi ((2, 3), (3, 2), (0, 0)) sadou hodnot, abychom zajistili 100% pokrytí prohlášení.
Funkční pokrytí
Jak název napovídá, tato metodika měří, do jaké míry jsou během testování pokryty funkce přítomné ve zdrojovém kódu. Během provádění testu jsou testovány všechny funkce, které jsou ve zdrojovém kódu. Opět je nutné zajistit, abychom tyto funkce testovali na různé hodnoty, aby byla funkce důkladně testována.
Ve zdrojovém kódu může být více funkcí a v závislosti na použitých vstupních hodnotách může nebo nemusí být funkce volána. Účelem pokrytí funkcí je tedy zajistit, abychom měli každou požadovanou funkci.
Například, ve výše uvedeném zdrojovém kódu, pokud naše testy volají funkci „Přidat“ dokonce jednou, pak bychom to nazvali jako úplné pokrytí funkcí.
Pokrytí stavu
Ve zdrojovém kódu, ať už máme podmínku kdekoli, bude výsledkem logická hodnota true nebo false. Podmínka pokrytí si klade za cíl zjistit, zda testy pokrývají obě hodnoty, tj. True, false.
Ve zdrojovém kódu, když je každá vyskytující se podmínka vyhodnocena pro pravdivé i nepravdivé stavy, se říká, že pokrytí podmínek pro kód je úplné.
Například, ve výše uvedeném kódu, pokud se použijí sady hodnot (2, 3) a (4, 2), bude pokrytí podmínky 100%. Když se použije datová sada (2, 3), pak (b> a) se vyhodnotí jako true a (a> b) se vyhodnotí jako false. Podobně, když se použije datová sada (4, 2), pak (b> a) se vyhodnotí jako false a (a> b) se vyhodnotí jako true.
Obě podmínky tedy mají obě hodnoty, tj. True i false. Proto by pokrytí podmínek bylo 100%.
Pokrytí pobočky
Tato metodologie si klade za cíl zajistit, aby každá větev, která se objeví v každé podmíněné struktuře, byla provedena ve zdrojovém kódu. Například ve výše uvedeném kódu by měla být všechna prohlášení „If“ a jakékoli doprovodné prohlášení „Else“ zahrnuty do testu 100% pokrytí pobočky.
Například, ve výše uvedeném kódu, pokud se použijí sady hodnot (2, 3), (4, 2), (1, 1), bude pokrytí větve 100%. Když se použije datová sada (2, 3), pak (b> a) a provede se první větev „If“. Podobně, když se použije datová sada (4, 2), pak se (a> b) vyhodnotí jako true a provede se druhá větev „If“.
Poté s datovou sadou (1, 1) se větev ‚Else 'vyhodnotí jako true a provede se. Tím je zajištěno 100% pokrytí pobočky.
Pokrytí větví Vs Podmíněné pokrytí
Pokrytí větve je často zaměňováno s Pokrytím podmínek, oba jsou však odlišné.
Pochopme to na jednoduchém příkladu.
If (a >0) & (b >0) Then Print “Hello” Else Print “Bye”
Zapište si datovou sadu potřebnou k dokončení Pokrytí pobočky:
(1, 1) - V tomto případě platí „a“ i „b“, takže je splněna podmínka If.
(1, 0) - V tomto případě je „a“ pravdivé a „b“ by bylo nepravdivé, takže se provede jiná část kódu.
Jak víme, účelem pokrytí pobočky je nechat každou pobočku provést alespoň jednou a tohoto účelu je dosaženo.
Pokrytí stavu:
(1, 0) - V tomto případě je „a“ pravdivé a „b“ by bylo nepravdivé.
(0, 1) - V tomto případě je „a“ nepravdivé a „b“ by bylo pravdivé.
Účelem Pokrytí podmínek je získat každou z pravdivých a nepravdivých pro každou provedenou podmínku a tohoto účelu je zde dosaženo.
Všimli jste si, že část else se nespustí v pokrytí Podmínkou? To je místo, kde se Pokrytí podmínek liší od Pokrytí větví.
nejlepší bezplatný stahovač z youtube na mp3
Nástroje pro pokrytí kódu
Pro měření pokrytí kódu libovolného softwaru je na trhu k dispozici několik nástrojů.
Níže jsou uvedeny některé z nástrojů pro vaši referenci:
- Parasoft JTest
- Testwell CTC ++
- Dosah
- JaCoCo
- CodeCover
- Pokrytí terčem
- EMMA
- OpenCover
- NCover
- Squish COCO
- Měřič pokrytí
- GCT
- TCAT C / C ++
- Mařenka
- JCov
Doporučené čtení => Nástroje pro pokrytí kódu
Výše uvedený odkaz bude obsahovat následující informace o těchto nástrojích:
- Klíčové vlastnosti
- Typ licence
- Oficiální URL
- Výhody a nevýhody
- Nejnovější verze
Výhody
Jak je vidět výše, je to velmi užitečná testovací metrika z níže uvedených důvodů:
- Pomáhá identifikovat ty oblasti ve zdrojovém kódu, které by zůstaly nevyzkoušené / nepokryté testy.
- Přijde vhod při identifikaci použitého / mrtvého kódu, čímž se zlepší kvalita kódu.
- Efektivitu jednotkových testů lze zjistit pomocí pokrytí kódu.
- Pomocí těchto metrik lze dodat software s lepší kvalitou.
Nevýhody
- Pokus o zaměření na 100% pokrytí kódu někdy způsobí nedostatek robustnosti testů, což má za následek ztrátu při zachycení scénářů náchylných k defektům.
- Na rozdíl od běžného vnímání nemůže zaručit, že navržený software splňuje všechny požadavky.
Mýty vs. fakta
Mýtus | Skutečnost |
---|---|
100% pokrytí kódu zajišťuje, že software nebude mít žádné chyby. | Ne, 100% pokrytí kódu nemůže zaručit bezchybný software. Dobré pokrytí kódu spolu s dobrým úsilím týmu QC může zajistit software s minimálními nebo žádnými chybami. |
100% pokrytí kódu znamená, že napsaný kód je perfektní. | Ne, ve skutečnosti, pokud nejprve kód nezachytí důležité požadavky, pak kód nelze označit za dokonalý, přestože pokrytí kódu je 100%. |
Pokrytí kódu měří účinnost testů prováděných na softwarovém produktu. | Ne, pokrytí kódu je pouze měřítkem, které se používá k testování účinnosti jednotkových testů, tj. Testů prováděných pouze na zdrojovém kódu softwaru. |
Časté dotazy
Otázka č. 1) Co je přijatelné pokrytí kódu?
Odpovědět: Dosažení 100% pokrytí kódu by nemělo být cílem při testování softwarového kódu jednotky. Ale proč ne? Abyste pochopili důvod, možná budete muset ponořit trochu hlouběji, abyste pochopili základní význam.
Když se zaměříme na 100% pokrytí, pak se častěji stává, že veškerá pozornost při navrhování testů jde do zajištění toho, zda bude každý příkaz, smyčka, větev nebo podmínka testována. Takže přistáváme s příliš velkým úsilím, které by za cenu stráveného času nemuselo stát.
Kromě toho, zaměření na vysoké pokrytí také vede ke ztrátě důležitých scénářů, u nichž je pravděpodobné, že budou mít vady, protože vše, co se snažíme, je zajistit, aby byl každý řádek kódu testován.
Zaměření na vysoké pokrytí kódem není vždy tak důležité a nemůže být ani pevně stanoveným číslem pro testování různých kódů. Obecně by však pokrytí 75% - 80% mělo být ideálním číslem.
Otázky a odpovědi k rozhovoru s analytiky qa pdf
Při testování našeho kódu by hlavní pozornost měla spočívat na zajištění pokrytí kritických a pravděpodobných scénářů náchylných k chybám. Pokud by došlo k jejich zmeškání, pak i přes 100% pokrytí kódu by naše testy měly špatnou účinnost.
Otázka č. 2) Jak zkontroluji pokrytí kódu?
Odpovědět: Abychom otestovali procento pokrytí kódu, kterého jste mohli dosáhnout testy navrženými pro testování kódu, máme na trhu několik nástrojů. V závislosti na použitém programovacím jazyce máme různé nástroje.
Některé z nich jsou uvedeny níže:
- Jáva - Pokrytí, JaCoCo
- Javascript - Blanket.js, Istanbul
- Krajta - Coverage.py
- Rubín - SimpleCov
Pomocí těchto nástrojů můžeme získat úplnou zprávu o pokrytí našich testů, které nám pomohou zjistit, která část kódu by byla spuštěna a které by naše testy zmeškaly.
Otázka č. 3) Je pokrytí kódu dobrou metrikou?
Odpovědět: Ve scénářích z reálného života je to do jisté míry a určitými způsoby užitečné.
Podíváme-li se nejprve na jeho omezení, velmi dobře víme, že 100% pokrytí nezaručuje, že je kód bez chyb, ani nezaručuje, že všechny požadavky byly v kódu pokryty, tj. Navzdory 100% pokrytí kódu jsme velmi pravděpodobné, že budou mít chyby v kódu, důvodem je, že pokrytí nezajišťuje testování všech scénářů.
Kromě toho, pokud byly požadavky při psaní kódu přeskočeny, pak neexistuje mapování požadavků s kódem, o který se postará jako o součást pokrytí kódu.
Když to řekneme, nemůžeme popřít, že když používáme jako metriku pokrytí kódu, dává nám představu, jestli jsme pokryli základní požadavky testování každého řádku našeho kódu. Toto procento pokrytí nám dává představu o tom, kolik částí našeho kódu se provádí pomocí našich testů jednotek.
Zjistili jsme, kolik z našeho kódu by nebylo provedeno. To nám zase pomáhá rozhodnout, o kolik více testů jednotek je zapotřebí a pro které části kódu.
Můžeme tedy dojít k závěru, že špatné pokrytí nám dává představu o neúčinnosti jednotkových testů. Zajištění 100% pokrytí zároveň není zárukou bezchybného kódu. Je tedy třeba mít vyvážený přístup, kde příliš nepokládáme důležitost cílení na vysoké procento pokrytí kódu.
Otázka č. 4) Jak mohu zlepšit své pokrytí kódem?
Odpovědět: Zpráva o pokrytí kódu, která je poskytována nástroji pro pokrytí, jako jsou JaCoCo, Istanbul atd., Ukazuje oblasti, na které se testy vztahují, a také ty, které by nebyly testovány.
Znáním nevyzkoušených částí kódu lze testy psát buď ručně, nebo pomocí libovolného automatizačního nástroje k pokrytí oblastí, které by jinak zůstaly nevyzkoušené, a tím zvýšit pokrytí kódu.
Zde je důležité si uvědomit, že i když můžeme napsat stovky řádků kódu, abychom otestovali funkci v kódu, pokrytí může být stále menší. Důvodem je, že příliš hluboké testování části obrovského kódu nepomůže ke zvýšení pokrytí kódu.
Pokud je tedy cílem zvýšit pokrytí, je třeba věnovat pozornost pokrytí všech funkcí, podmínek a smyček namísto hloubkového ponoření do jedné funkce a psaní velkých testů pro tuto jedinou funkci.
Závěr
Vysoce kvalitní softwarový produkt je to, co je požadováno v dnešním rychlém světě internetu.
Za zajištění kvalitního softwaru neodpovídá pouze QA Engineer, nýbrž také vývojář. Kódové pokrytí je tedy velmi užitečné, pokud jde o dodání kvalitního produktu týmu QA vývojářem.
Tento kurz vysvětluje vše o pokrytí kódu a jeho použití. Také jsme se ponořili trochu hlouběji do porozumění rozdílu mezi pokrytím kódu a pokrytím testu. Kromě toho jsme porozuměli použitým metodikám spolu s řadou nástrojů pro pokrytí kódu.
Zde byly vysvětleny výhody a nevýhody. Nakonec jsme zrušili některé mýty a časté dotazy související s pokrytím kódu
Šťastné čtení!!
Doporučené čtení
- Top 15 nástrojů pro pokrytí kódu (pro Java, JavaScript, C ++, C #, PHP)
- 15 nejlepších nástrojů JAVA pro vývoj, sestavení, profiler, pokrytí kódu a kontrolu
- Výukový program pro funkce / metody C # s příklady kódu
- Výukový program pro zpracování výjimek C # s příklady kódu
- Výukový program pro želvy SVN: Revize v úložišti kódů
- Výukový program Java Array Length s příklady kódu
- Výukový program AWS CodeBuild: Extrahování kódu z Maven Build
- Výukový program SVN: Správa zdrojového kódu pomocí Subversion