Kihagyás

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

Bázisút


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=3
  • return 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).