Tesztelés

Mit vizsgál a tesztelés?

A tesztelés és a hibakeresés a Haskell programok funkcionális tulajdonságait vizsgálja.

A funkcionális tulajdonságok azok amelyek az “egyenlőt az egyenlőre” cserélésével nem változnak meg.

Például x és x' funkcionális tulajdonságai azonosak:

x = y + y where y = 2*2
x' = 2*2 + 2*2

x és x' némely tulajdonságai különbözőek, például a kiértékeléshez szükséges idő és memória. Ezekkel a nemfunkcionális tulajdonságokkal később foglalkozunk.

A tesztelés esetei az értékek típusa alapján

A tesztelés eseteit a vizsgált értékek típusa alapján vesszük sorra:

A tesztelés leegyszerűsítve ezeknek az értékeknek az egyenlőségét vizsgálja. Például egy egyszerű teszteset: 2^10 == 1024.

Az egyenlőség vizsgálata mellett az értékek megjelenítése is fontos lehet (például debugoláskor). Tesztelés alatt az egyenlőségvizsgálatot és a megjelenítést fogjuk érteni.

Adatok tesztelése

Egy σ típsú értéket adatnak nevezünk, ha a σ típusra van Data osztály példány. Ez az osztály a Data.Data modulban definiált. Például x adat ha x típusa Bool, Int, Double, [Int], (Int, Char), …

A következő eseteket fogjuk vizsgálni:

Véges adatok tesztelése

Véges adatok tesztelésére megfelelőek a Prelude-beli (==) és show metódusok.

Példa:

test1= 2^10 == 1024
show1= show (2^10)

(Az értelmező minden adat elé automatikusan odateszi a show metódust.)

Végtelen adatok tesztelése

Végtelen adatok tesztelésekor az egyenlőségvizsgálat divergálhat (nem ad végeredményt). Példa:

test2= [1..] == [1..]

A megjelenítés eredménye végtelen lehet és lehetnek benne soha meg nem jelenő részek. Például a pár második eleme nem fog megjelenni:

show2= show ([1..], [2..])

Megoldás

A végtelen adat tesztelését véges adatra tesztelésére vezetjük vissza úgy hogy bizonyos szintnél vágást végzünk. Példa:

test3= take 10 [1..] == take 10 [1..]

A vágás helye lehet dinamikus is a rendelkezésre álló időtől függően. (Az ezt megvalósító könyvtár hamarosan megjelenik a HackageDB-n! Az egyenlőségvizsgálat három eredménnyel zárulhat: egyenlő / nem egyenlő / lehet hogy egyenlő.)

Parciális adatok tesztelése

Egy adat parciális, ha tartalmazza a ⊥ értéket, azaz egyes részeinek a kiértékelése során programhiba keletkezik vagy a kiértékelés nem terminál.

Például (undefined, 23) vagy let x = x+1 in x ilyen érték.

Parciális adatok tesztelésére sem alkalmas az (==) és show metódus.

Megoldás: kivételkezelés, időkorlát bevezetése (hamarosan a HackageDB-n!).

Függvények tesztelése

A függvények egyenlőségvizsgálata szoros kapcsolatban áll a tulajdonság alapú teszteléssel.

Például az f függvény kommutativitásának tesztelése azonos a következő egyenlőség eldöntésével:

-- test4= f == flip f

Megoldások

Kérdések:

Számítások tesztelése

Ez nem más mit a mellékhatásos programok viselkedés alapú tesztelése. Ezt a legnehezebb megvalósítani.

Folytatás következik