9. előadás - Tesztelési elvek
- statikus teszt
- dinamikus teszt
- fekete doboz
- szürke doboz
- fehér doboz
Szürke doboz tesztelés
Sorozatoknál:
- a határok vizsgálata
- méret szerinti tesztelés (nulla elem, egy elem, több elem)
Fehér doboz módszerek
Van specifikáció és algoritmus is.
- Stratégia => teszt utak => tesztpredikátumok => ekvivalencia osztályok => egy-egy teszteset
Kipróbálási stratégiák
- Utasítás lefedés (test coverage): minden utasítást legalább egyszer hajtsunk végre
- feltételes levedés: minden feltétel legyen legalább egyszer igaz, illetve hamis!
- részfeltétel lefedés: minden részfeltétel legyen legalább egyszer igaz, illetve hamis.
Programgráf - a program elágazásait ábrázoló gráf
Bázisút
- a kezdőponttól a legelső elágazás- vagy ciklusfeltétel kiértékeléséig tart, vagy
- elágazás- vagy ciklusfeltételtől a következő elágazás- vagy ciklusfeltétel helyéig vezet, vagy
- elágazás- vagy ciklusfeltételtől a program végéig tart, s közben más feltétel kiértékelés nincs.
- ezek RÉSZUTAK
Tesztutak: olyan bázisút-sorozat, amely minden benne lévő élt pontosan egyszer tartalmaz
Tesztpredikátum (tesztfeltétel): amelyek teljesülése esetén pontosan egy tesztúton kell végighaladni.
Példa
Egy N természetes szám valódi (1-től és önmagától különböző) osztója...
int i = 2;
while(i < n && !(n % i == 0))
{
i++;
}
bool van = i < n;
if(van)
{
return i;
}
else
{
return -1; // Nincs ilyen szám
}
Utasítás lefedés: a "kritikus" pontok
i++lefut-e: n=3return i;: n=4
Feltételes lefedés: Minden feltétel összes lehetőségének tesztelése
- Ciklusfeltétel igaz: n=3
- Ciklusfeltétel hamis: n=4
- Elágazásfeltétel igaz: n=4
- Elágazásfeltétel hamis: n=2
Speciális tesztelések
- Biztonsági teszt
- Hatékonysági teszt
- Funkcióteszt
- tud-e minden funkciót
- Stressz-tesz
- gyorsan jönnek a feldolgozandó adatok
- Volumen-teszt
- tud-e nagyobb mennyiségű adatot is feldolgozni
Véletlen tesztek
Véletlen számok generálása
| Leírás | Jelölés |
|---|---|
| Két egész szám között (a és b) | \(Véletlen(a..b) \in \{a,...,b\}, a \leq b \in \mathbb{Z}\) |
| 1 és N között természetes számok | \(Véletlen(N) \in \{1,...,N\}, N \in \mathbb{N}\) |
| 0 és 1 között | \(Véletlenszám \in [0,1) \sub \mathbb{R}\) |
C#-ban
Random random = new Random(); //Véletlenszám generátor létrehozása
int v = random.Next(a, b); // a és b közötti random szám
v = random.Next(a)+1; // 1 és a közötti random szám
double w = random.NextDouble(); // 0 és 1 közötti random szám, lebegőpontos
Hibakeresés
Milyen hibajelenségek léphetnek fel a tesztelésnél? (példák)
- hibás az eredmény
- futási hiba keletkezett (pl.: kilépési kód nem 0)
- nincs eredmény
- részleges eredményt kaptunk
- olyat is kiír, amit nem vártunk
- túl sokat (sokszor) ír
- nem áll le a program
Cél: A felfedezett hibajelenség okának, helyének megtalálása
Elvek:
- Gondoljuk végig!
- Csak akkor javítsunk, ha megtaláltuk a hibát!
- Ugyanúgy fontos, hogy miért nem csinálja a program, amit várunk és, hogy miért csinál olyat, amit nem várunk
- Egy hiba a a program más részeiben is okozhat hibát
- Megjegyzés: A hibák száma, súlyossága a program méretével nemlineárisan (annál gyorsabban!) nő
Hibakeresési eszközök
- Változó-, memória-kiírás
- Töréspontok használata
- Lépésenkénti végrehajtás
- Adat-nyomkövetés
- Állapot-nyomkövetés (pl. paraméterekre vonatkozó előfeltételek, ciklus-invariánsok)
- Postmortem nyomkövetés: hibától visszafelé
Hibajavítás
Célja:
- a megtalált hiba kijavítása
Elvek:
- A hibát kell javítani és nem a tüneteit.
- A hiba kijavítása a program más részében hibát okozhat (rosszul javítunk, illetve korábban elfedett más hibát).
- Javítás után a tesztelés megismételendő!
- A hibajavítás a tervezési fázisba is visszanyúlhat (a módszertan célja: lehetőleg ne nyúljon vissza).