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.
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 = 9A 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%
Hasonlóképpen látni fogjuk a 2. forgatókönyvet,
2 forgatókönyv:
Ha A = -3, B = -9
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: 6/7 = 85%
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%.
Mire terjed ki a nyilatkozat fedezete?
- Fel nem használt nyilatkozatok
- Halott kód
- Fel nem használt ágak
- 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.
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
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
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:
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) }
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:
Példa:
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