Gyakorlati alapok II.
A szoftverfejlesztés
Tesztelés
Az alábbi fejezet Sallay András informatikatanár oktatási anyagára támaszkodik (www.szit.hu)
Az elvégzett szellemi vagy anyagi termék tesztelése alapvető fontosságú az ipari termelésben. A tesztelés elsődlegesen a termék előzetes kipróbálását jelenti. Ennek során azt ellenőrizzük le, hogy a termék hozza-e az előírt specifikációt, azaz teljesíti-e az előzetes elvárásokat. Az autók töréstesztje például egy ilyen fajta előtesztelés biztonsági szempontok alapján.
Ugyanez a helyzet szoftverek esetében is. A szoftverek minőségének biztosítása érdekében azokat folyamatosan tesztelni szükséges, mielőtt átadjuk az ügyfelünknek végső használatra. A teszteléssel megpróbáljuk a szoftver hibáit felderíteni és megszüntetni.
Minden hiba megtalálása lehetetlen vállalkozás, de mindent meg kell
tennünk, hogy a szoftverben minél kevesebb hiba maradjon.
A tesztelés során bemenő adatokkal látjuk el az adott szoftvert, majd
figyeljük a visszaadott eredményeket, ezzel detektálva a hibákat.
A keresett hibák halmazát nevezzük hibamodellnek.
Manapság a tesztelés már oly fontos, meghatározó és bonyolult munkatevékenység, hogy külön elsajátítandó szakmát alkot.
A tesztelés során a megadott megfelelő bemenő és kimenő adatokat, amelyek
valószínűleg még felfedetlen hibákat mutatnak meg, jó tesztesetnek nevezzük.
Alapelvek
A tesztelés felderíti a hibákat, de az sosem derül ki, hogy nincs-e több hiba.
Általában csak a magas kockázatú részeket teszteljük.
A tesztjeinket, illetve a tesztmódszereket folyamatosan fejleszteni kell.
A megfelelő teszteset kiválasztása: a bemenő és kimenő adatokat együtt adjuk meg.
Ha egy teszteset nem ismételhető, akkor az kerülendő.
Érvényes és érvénytelen adatokra is tesztelünk.
Megfelelő tesztelőt kell választani: ez általában a program írójától különböző ember.
Nézzünk erre egy jellemző példát!
A feladat egy háromszög területének kiszámítása. A képlet a következő:
Tháromszög = (alap * magasság) / 2
Lehetséges bemenő adatok:
alap: 30
magasság: 35
Ekkor a kimenő adat:
(30 * 35) / 2 = 525
Az elvárt végeredmény immanens módon tartalmazza az érvényes és érvénytelen kimeneti adatokat:
érvényes - pozitív, egész, nem végtelen (+nem túl nagy),
érvénytelen - negatív, 0, nem egész, nem egész adattípus.
Alapvetően kétféle tesztelési technikát különböztetünk meg:
-
statikus,
-
dinamikus.
Statikus tesztelésről beszélünk, amikor nem fordítjuk, nem futtatjuk a programot, csak a forráskódot vizsgáljuk (száraztesztnek nevezik, ha a tesztelés fejben történik). Dinamikus tesztelés esetén a forráskódot és futó programot is vizsgáljuk.
Forrás - Source: www.szit.hu
Statikus tesztelés
A statikus tesztelés lehet szimplán a kód ellenőrzése. Készíthetünk kereszthivatkozási táblázatokat vagy tartalmilag ellenőrizzük forráskódot. A forráskódban ellentmondásokat kereshetünk: például felhasználatlan objektumokat vagy felhasználatlan változóértékeket.
Forrás - Source: www.szit.hu
A kódellenőrzés alkalmával összehasonlítjuk a megvalósítandó algoritmust a megírt kóddal. Az egyik leghatékonyabb módszer, ha egy avatatlan személynek elmagyarázzuk a kódunk működését sorról sorra.
Forrás - Source: www.szit.hu
A kódot tartalmilag is ellenőrizhetjük:
Forrás - Source: www.szit.hu
A tartalmi ellenőrzés során a következő hibalehetőségekre kell figyelnünk:
Felhasználatlan változóérték - például: int a = 1; deklarációja, amit később a kódban nem használunk fel,
Érték nélküli változó - például: int a; deklarációja, amit később fel akarunk használni, de nem tudjuk, mert nincs értéke (nincs inicializálva),
Nem változó értékadás - például: i *= 1 - 0;
Azonos igaz/hamis logikai formulák - például: if(i < 1 && i > 100); i nem lehet egyszerre kisebb 1-nél és nagyobb 100-nál,
Konstans értékű kifejezés - például: amikor a művelet eredménye mindig 0 vagy konstans más szám (ez legfeljebb matematikai bizonyítás ellenőrzésekor engedhető meg),
Végtelen ciklus - például: for( ; ; ); konkrét kódban ilyen formátumban remélhetőleg nem fog előfordulni, de végtelen ciklus generálásába könnyen belefuthatunk,
Érték nélküli függvény - például: a függvénynek mindig lennie kell 1 vagy több kimeneti értékének,
Érték nélküli operátor - például: 1 operandusú operátor nem állhat önmagában ( ++), 2 operandusú operátor nem állhat csakis 1 operandussal (a + ), stb.
Mellékhatással járó függvény
Dinamikus tesztelés
A dinamikus tesztelés során fordítunk és tesztelünk, valamint a fordítótól
eltérő eszközöket is használhatunk.
Ha a forráskód rendelkezésre áll, akkor fehér-dobozos tesztről, ha nem, fekete-dobozos tesztről beszélünk.
Fehér-dobozos tesztelés
A fehér-dobozos tesztet (white box) a forráskód alapján készítjük,
ennek során közvetlenül, a forráskód segítségével hozzáférünk a kódstruktúrákhoz
és
a konkrét megvalósításhoz. Jellemzően a fejlesztők végzik.
Forrás - Source: www.szit.hu
A tesztelésnek a következő céljai lehetnek:
funkció,
képesség (feature),
minőség,
tranzakció,
strukturális elem.
A következő struktúrákat teszteljük:
kódsorok,
szelekciók,
iterációk,
metódusok,
osztályok,
funkciók,
modulok.
A tesztelés során felmerül a lefedettség
kérdése. Ez alatt azt értjük, hogy a struktúrák hány százalékát tudjuk
tesztelni a meglévő tesztekkel.
Fekete-dobozos tesztelés
A fekete dobozos teszt esetén (black box) nem férünk hozzá a
forráskódhoz, a
specifikáció alapján tesztelünk. Az ilyen teszteket jellemzően nem a
fejlesztő csapat végzi.
A fekete dobozos módszerek:
ekvivalencia-osztályok keresése
határeset-elemzés
Ekvivalencia-osztályok keresése
Keressük a jó teszteseteket, azaz olyan bemenő adatokat, amelyek minél
több feltételnek felelnek meg. Keresnünk kell valamilyen szempontot, amely
alapján csoportosíthatjuk a bemenő adatokat. Az így kialakított csoportokat
nevezzük ekvivalencia-osztálynak. Ilyen módon lényegében olyan tesztesetet keresünk,
amely jellemzőek az adott csoportra. Például: egy ilyen csoportból bármely
elemet kiválasztva, ha hibát kapunk, a csoport egy másik elemét kiválasztva
szintén hibát kell kapnunk. Ennek igaznak kell lennie az ellenkezőjére is: ha
a csoport egy elemére megfelelő eredményt kapunk, akkor a valószínűleg a
többire is.
Ha bemenő adatok egy értéktartományt alkotnak, kétféle ekvivalencia osztályunk
lehet:
érvényes – azok az adatok, amelyek megengedettek - például 0 < n < 10,
érvénytelen – azok az adatok, amelyek az érvényességi tartomány alatt és felett állnak - például n < 0 && n > 100.
Lehetséges, hogy abban az esetben
is érvényes ekvivalencia-osztályról beszéljünk, ha a bemenő adatok
mennyiségét vizsgáljuk. Például 6 adat még érvényes, de ha 6-nál több vagy
kevesebb már érvénytelen ekvivalencia-osztályt alkot.
Lehetséges továbbá az is, hogy érvényes ekvivalencia-osztályt bemenő adatok
egy jellemző tulajdonsága alkosson, például 2 hatványai. Ekkor az érvényes
ekvivalencia-osztály a 2, 4, 8, 16, 32, 64, stb., érvénytelen a többi szám.
Határeset-elemzés
A határeset-elemzés során az ekvivalencia-osztály határán lévő elemeket vizsgáljuk. Ez
a megközelítés tekinthető
az ekvivalencia osztály kiegészítésének. Ha az érvényes tartomány 0 és 10
közé esik (0 <= n <= 10), akkor a vizsgálandó érvényes adatok 0, 10, az
érvénytelen vizsgálandó adatok -1 és 11.
Adott darabszám esetén, ha pontosan 6 adat a bemenet, akkor érvényes adatként
vizsgálunk 6 darab adatot, érvénytelenként 5 és 7 darab adatot.
Ekvivalencia-particionálás
Más néven Equivalence partitioning (Equivalence Class Partitioning - ECP). Egy szoftvertesztelési technika, ahol a bemenő adatokat ekvivalencia-osztályokba soroljuk, vagyis csoportosítjuk. Az egy ekvivalencia-osztályba sorolt hibák ugyanazon hibás eredményt kell szolgáltatniuk. 2 típusú ekvivalencia osztályt kell keresnünk:
-
érvényesek,
-
érvénytelenek a bemeneti adatok.
A tesztek szint szerinti csoportosítása
-
komponensteszt,
-
integrációs teszt,
-
rendszerteszt,
-
átvételi teszt.
Összefoglalás
Forrás - Source: www.szit.hu
A tesztelési folyamatot a tervezéstől a végeredményig a következő lépésekben foglalhatjuk össze:
-
tesztterv készítése,
-
végrehajtás,
-
kilépési feltételek vizsgálata - azaz megnevezzük azon feltételeket, ahol befejezhetjük a tesztelést,
-
eredmények értékelése,
-
jelentés készítése.
Forrás - Source: www.szit.hu