Kódlefedettség oktatóanyag: Elágazás, nyilatkozat és döntésteszt

Mi a kód lefedettsége?

A kódlefedettség egy olyan mérőszám, amely leírja a program forráskódjának tesztelésének mértékét. Ez a fehérdobozos tesztelés egyik formája, amely megkeresi a program azon területeit, amelyeket egy teszteset nem gyakorol. Néhány tesztesetet is létrehoz a lefedettség növelésére és a kódlefedettség mennyiségi mértékének meghatározására.

A legtöbb esetben a kódlefedési rendszer információkat gyűjt a futó programról. Ezt a forráskód-információkkal is kombinálja, hogy jelentést készítsen a tesztcsomag kódlefedettségéről.

Miért használja a kódlefedettség tesztelését?

Íme néhány fő ok a kódlefedettség használatára:

  • Segít mérni a teszt végrehajtásának hatékonyságát
  • Kvantitatív mérést kínál.
  • Meghatározza, hogy a forráskód milyen mértékben lett tesztelve.

Kódlefedési módszerek

Az alábbiakban bemutatjuk a főbb kódlefedési módszereket

  • Nyilatkozat lefedettsége
  • Döntés lefedettsége
  • Ágak lefedettsége
  • Toggle Lefedettség
  • FSM lefedettség

Nyilatkozat lefedettsége

Nyilatkozat lefedettsége egy fehér doboz tesztelési technika, amelyben a forráskód összes végrehajtható utasítása legalább egyszer végrehajtásra kerül. A végrehajtott utasítások számának kiszámítására szolgál a forráskódban. A Statement Coverage fő célja, hogy lefedje a forráskód összes lehetséges útvonalát, sorát és utasítását.

A kimutatás lefedettsége a forgatókönyv származtatására szolgál a tesztelt kód szerkezete alapján.

Nyilatkozat lefedettsége

In fehér Box Tesztelés, a tesztelő a szoftver működésére koncentrál. Más szóval, a tesztelő a forráskód belső működésére fog koncentrálni a vezérlési folyamatábrákra vagy folyamatábrákra vonatkozóan.

Általában minden szoftverben, ha a forráskódot nézzük, sokféle elem található, mint például operátorok, függvények, hurkok, kivételes kezelők stb. A program bemeneti adatai alapján előfordulhat, hogy egyes kódutasítások nem hajthatók végre . A nyilatkozatlefedettség célja, hogy lefedje a kódban található összes lehetséges útvonalat, sort és utasítást.

Értsük meg ezt egy példán keresztül, hogyan számítsuk ki a kimutatás lefedettségét.

Forgatókönyv a nyilatkozat-lefedettség kiszámításához az adott forráskódhoz. Itt két különböző forgatókönyvet veszünk figyelembe, hogy ellenőrizzük az egyes forgatókönyvek nyilatkozatlefedettségének százalékos arányát.

Forráskó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 

1 forgatókönyv:

Ha A = 3, B = 9

Nyilatkozat lefedettsége

A sárga színnel jelölt utasítások azok, amelyek a forgatókönyv szerint végrehajtásra kerülnek

A végrehajtott utasítások száma = 5, az összes utasítás száma = 7

Nyilatkozat lefedettsége: 5/7 = 71%

Nyilatkozat lefedettsége

Hasonlóképpen látni fogjuk a 2. forgatókönyvet,

2 forgatókönyv:

Ha A = -3, B = -9

Nyilatkozat lefedettsége

A sárga színnel jelölt utasítások azok, amelyek a forgatókönyv szerint végrehajtásra kerülnek.

A végrehajtott utasítások száma = 6

Az állítások száma összesen = 7

Nyilatkozat lefedettsége

Nyilatkozat lefedettsége: 6/7 = 85%

Nyilatkozat lefedettsége

De összességében, ha látja, az összes állítást mindkét forgatókönyv lefedi. Ebből arra következtethetünk, hogy a kimutatás teljes lefedettsége 100%.

Nyilatkozat lefedettsége

Mire terjed ki a nyilatkozat fedezete?

  1. Fel nem használt nyilatkozatok
  2. Halott kód
  3. Fel nem használt ágak
  4. Hiányzó nyilatkozatok

Döntéslefedettség tesztelése

Döntés lefedettsége egy fehér doboz tesztelési technika, amely a forráskód minden logikai kifejezésének igaz vagy hamis eredményét jelenti. A döntési lefedettség tesztelésének célja az összes elérhető forráskód lefedése és érvényesítése azáltal, hogy ellenőrzi és biztosítja, hogy minden lehetséges döntési pont minden ága legalább egyszer végrehajtásra kerüljön.

Ennél a lefedettségtípusnál a kifejezések bonyolulttá válhatnak, így kihívást jelent a 100%-os lefedettség elérése. Ez az oka annak, hogy különféle módszereket használnak a mérőszám jelentésére. Ezek a módszerek a legkritikusabb kombinációkat részesítik előnyben. Bár hasonló a döntési lefedettséghez, nagyobb érzékenységet biztosít az áramlás szabályozására.

Döntéslefedettség tesztelése

Példa a döntési lefedettségre

Vegye figyelembe a következő kódot:

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

1 forgatókönyv:

A értéke 2

Döntéslefedettség tesztelése

A sárgával kiemelt kód végrehajtásra kerül. Itt a döntés „Nem” eredménye Ha (a>5) be van jelölve.

Döntési fedezet = 50%

2 forgatókönyv:

A értéke 6

Döntéslefedettség tesztelése

A sárgával kiemelt kód végrehajtásra kerül. Itt a döntés „Igen” eredménye Ha (a>5) be van jelölve.

Döntési fedezet = 50%

Teszt eset A értéke teljesítmény Döntés lefedettsége
1 2 2 50%
2 6 18 50%

Ágazati lefedettség tesztelése

Ágak lefedettsége egy fehér doboz tesztelési módszer, amelyben egy kódmodul (utasítás vagy ciklus) minden eredményét tesztelik. A fióklefedettség célja annak biztosítása, hogy minden egyes döntési feltétel legalább egyszer végrehajtásra kerüljön. Segít a független kódszegmensek töredékeinek mérésében és az elágazás nélküli szakaszok megtalálásában.

Például, ha az eredmények binárisak, tesztelnie kell az igaz és hamis eredményeket is.

A fióklefedettség kiszámításának képlete:

Ágazati lefedettség tesztelése

Példa a fióktelep lefedettségére

Az ágak lefedettségének megismeréséhez tekintsük a korábban használt példát

Vegye figyelembe a következő kódot:

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

Ágazati lefedettség tesztelése

A fiókfedezet figyelembe veszi a feltétel nélküli fióktelepet is

Teszt eset A értéke teljesítmény Döntés lefedettsége Ágak lefedettsége
1 2 2 50% 33%
2 6 18 50% 67%

A fióki lefedettség előnyei:

Az ági lefedettség tesztelése a következő előnyöket kínálja:

  • Lehetővé teszi a kód összes ágának érvényesítését
  • Segít abban, hogy az elágazás ne okozzon rendellenességet a program működésében
  • A fióklefedettség módszere eltávolítja a nyilatkozatlefedettség tesztelése miatt felmerülő problémákat
  • Lehetővé teszi, hogy megtalálja azokat a területeket, amelyeket más vizsgálati módszerekkel nem tesztelnek
  • Lehetővé teszi a kódlefedettség mennyiségi mérőszámának meghatározását
  • Az áglefedettség figyelmen kívül hagyja a logikai kifejezéseken belüli ágakat

Állapot lefedettség vizsgálata

Feltétel Lefedettség vagy a kifejezéslefedettség a feltételes utasításban lévő változók vagy részkifejezések tesztelésére és kiértékelésére használt tesztelési módszer. A feltétellefedettség célja minden egyes logikai feltétel egyedi kimenetelének ellenőrzése. A feltételek lefedettsége jobb érzékenységet kínál a vezérlési folyamatra, mint a döntési lefedettség. Ebben a lefedettségben csak a logikai operandusokkal rendelkező kifejezéseket veszik figyelembe.

Például, ha egy kifejezés logikai műveleteket tartalmaz, mint az ÉS, VAGY, XOR, ami az összes lehetőséget jelzi.

A feltétel lefedettség nem ad garanciát a teljes döntési fedezetre.

Az állapotlefedettség kiszámításának képlete:

Állapot lefedettség vizsgálata

Példa:

Állapot lefedettség vizsgálata

A fenti kifejezéshez 4 lehetséges kombinációnk van

  • TT
  • FF
  • TF
  • FT

Vegye figyelembe a következő bemenetet

X = 3

Y = 4

(x TRUE Az állapot lefedettsége ¼ = 25%
A = 3

B = 4

(a>b) HAMIS

Véges állapotú gépi lefedettség

A véges állapotú gépi lefedettség minden bizonnyal a kódlefedési módszer legösszetettebb típusa. Ez azért van, mert a tervezés viselkedésén dolgozik. Ennél a lefedettségi módszernél meg kell keresni, hogy hány időspecifikus állapotot látogatnak meg, tranzitálnak. Azt is ellenőrzi, hogy egy véges állapotú gép hány sorozatot tartalmaz.

Milyen típusú kódlefedettséget válasszon

Minden bizonnyal ez a legnehezebb válasz. A lefedettségi módszer kiválasztásához a tesztelőnek ellenőriznie kell, hogy a

  • a tesztelés alatt álló kódnak egyetlen vagy több feltáratlan hibája van
  • az esetleges büntetés költsége
  • az elvesztett hírnév költsége
  • elveszett eladás költsége stb.

Minél nagyobb a valószínűsége annak, hogy a hibák költséges gyártási hibákat okoznak, annál súlyosabb lefedettségi szintet kell választania.

Kódlefedettség kontra funkcionális lefedettség

Kódlefedettség Funkcionális lefedettség
A kódlefedettség megmutatja, hogy a tesztpad milyen jól alkalmazta a forráskódot. A funkcionális lefedettség azt méri, hogy a tesztpad mennyire fedi le a tervezés funkcionalitását.
Soha ne használjon tervezési specifikációt Használja a tervezési specifikációt
A fejlesztők készítették Tesztelők készítette

Kódlefedési eszközök

Itt található a fontos kódlefedettségi eszközök listája:

Eszköz neve Leírás
Cobertura Ez egy nyílt forráskódú lefedettségi eszköz. A teszt lefedettségét egy kódbázis műszerezésével méri, és elemzi, hogy a tesztcsomag futásakor mely kódsorok futnak, és melyek nem.
Lóhere A Clover a tesztelési időt is csökkenti, mivel csak azokat a teszteket futtatja, amelyek lefedik az előző build óta módosított alkalmazáskódot.
DevPartner A DevPartner lehetővé teszi a fejlesztők számára az elemzést Java kód a Code Quality and Complexity.
Emma Az EMMA támogatja az osztály-, metódus-, vonal- és alapblokk-lefedettséget, az összesített forrásfájl-, osztály- és metódusszinteket.
Kalistick A Kalistick egy harmadik féltől származó alkalmazás, amely különböző szempontokból elemzi a kódokat.
CoView és CoAnt A kódolószoftver egy kódlefedési eszköz metrikákhoz, álobjektumok létrehozásához, kód tesztelhetőségéhez, útvonal- és áglefedettséghez stb.
Bullseye for C++ A BulseyeCoverage egy kódlefedési eszköz C++ és C.
Fishfinder A Sonar egy nyílt kódlefedettségi eszköz, amely segít a kódminőség kezelésében.

A kódlefedettség használatának előnyei és hátrányai

A kód lefedettségének előnyei A kódlefedettség hátrányai
Hasznos a kódlefedettség mennyiségi mérőszámának értékeléséhez Még akkor is, ha egy adott funkció nincs implementálva a tervezésben, a kódlefedettség továbbra is 100%-os lefedettséget jelent.
Lehetővé teszi további tesztesetek létrehozását a lefedettség növelése érdekében Nem állapítható meg, hogy egy jellemző összes lehetséges értékét teszteltük-e a kódlefedettség segítségével
Lehetővé teszi, hogy megtalálja a program azon területeit, amelyeket tesztesetek nem gyakorolnak A kód lefedettsége szintén nem árulja el, mennyit és milyen jól fedte le a logikáját
Abban az esetben, ha a megadott függvény nincs implementálva, vagy nem szerepel a specifikációban, akkor a struktúra alapú technikák nem tudják megtalálni a problémát.

Összegzésként

  • A kódlefedettség egy olyan mérőszám, amely leírja a program forráskódjának tesztelésének mértékét
  • Segít mérni a teszt végrehajtásának hatékonyságát
  • Öt kódlefedettségi módszer: 1.) Nyilatkozat lefedettsége 2.) Feltétel lefedettség 3) Fiók lefedettsége 4) Toggle Lefedettség 5) FSM lefedettség
  • Az utasításlefedettség magában foglalja a forráskódban található összes végrehajtható utasítás legalább egyszeri végrehajtását
  • A döntési lefedettség minden egyes logikai kifejezés igaz vagy hamis eredményét jelenti
  • Az ági lefedettségben a kódmodul minden eredményét tesztelik
  • A feltételes megmutatja, hogy a feltételes utasításban lévő változók vagy részkifejezések hogyan kerülnek kiértékelésre
  • A véges állapotú gépi lefedettség minden bizonnyal a kódlefedési módszer legösszetettebb típusa
  • A fedezeti módszer kiválasztásához a tesztelőnek ellenőriznie kell a potenciális büntetés költségét, az elvesztett hírnevet, az értékesítés elvesztését stb.
  • A kódlefedettség megmutatja, hogy a forráskódot milyen jól alkalmazta a tesztpad, míg a funkcionális lefedettség azt méri, hogy a tervezés funkcionalitását mennyire sikerült lefedni.
  • Cobertura, JTest, Clover, Emma, ​​Kalistick néhány fontos kódlefedési eszköz
  • A Code Coverage lehetővé teszi további tesztesetek létrehozását a lefedettség növelése érdekében
  • A kódlefedettség nem segít meghatározni, hogy teszteltük-e egy szolgáltatás összes lehetséges értékét