NGB_IN003_1 SZE 2014-15/2 (12) Szoftver- minőségbiztosítás Tesztautomatizálás (folyt.)
NGB_IN003_1 SZE 2014-15/2 (12)
Szoftver-minőségbiztosítás
Tesztautomatizálás (folyt.)
Automatizálási megfontolások
❖ Mit akarunk tesztelni?
❖ Hogyan lehet/kell a teszteket beállítani?
❖ Honnan származnak a bemenetek?
❖ Mit kell ellenőrizni?
❖ Mik az elvárt kimenetek?
❖ Hogy lehet eldönteni egy teszt sikerességét?
Tesztautomatizálási architektúrák
❖ Funkcionális ekvivalencia tesztelés
❖ Szkript alapú tesztelés
❖ Keretrendszer alapú tesztelés
❖ API alapú tesztelés
❖ Adat-hajtott tesztelés
❖ Modell alapú tesztelés
Funkcionális ekvivalencia tesztelés❖ Alternatív program az elvárt eredmények előállítására
Tesztelés
SUTAlternatív program
(teszt orákulum)
Eredmények(összehasonlítás)
Szkript alapú tesztelés❖ Kihívások
❖ Módszertani:❖ törékeny tesztek (termék és interfész változások)❖ különböző konfigurációk kezelése❖ SUT állapot követése❖ bedrótozott input
❖ Technikai:❖ lépéstartás az új, fejlesztésben használt technológiákkal❖ instrumentálás❖ az eszközben lévő hibák❖ szükséges testreszabás❖ custom control-ok kezelése
Szkript alapú tesztelés (folyt.)
❖ Bizonyos esetekben használható rögzítés/visszajátszás:
❖ UI korai befagyasztása
❖ standard UI technológiák használata
❖ felderítő tesztelés monitorozása
Szkript alapú tesztelés (folyt.)
❖ Felhasználás automatizált regressziós teszteléshez:
❖ Meglévő manuális tesztek automatizálása
❖ Hozzáadás a regressziós tesztkészlethez
❖ Eredmények = fájl (kimenet) összehasonlítás
❖ Minden teszthez ugyanaz a technika
Keretrendszer alapú tesztelés❖ Tesztelő keretrendszer: kódkönyvtár ~ konkrét tesztektől
szeparált rutinok❖ Előnyök:
❖ modularitás❖ komponensek újra felhasználása❖ teszteszköz és UI parancsok önálló fejlesztése❖ függetlenség a tesztelt alkalmazástól (teszteset
szriptek)❖ hibakezelő utility-k
API alapú tesztelés❖ Nyílvános és privát API-k
❖ Egység-, integrációs és rendszer tesztek
❖ Többféle megközelítés
❖ hardkódolt
❖ adat-hajtott
❖ szkript alapú
❖ random tesztek
Kód alapú API-n keresztüli tesztelés❖ Minden teszteset egy program
❖ bemenetek biztosítása (API hívások), kimenet elemzése
Teszt programSUT
API
függőségek(kód, adatok)
Interaktív API-n keresztüli tesztelés❖ A tesztelő rendelkezésére áll egy teszt UI
Teszt UISUT
API
függőségek(kód, adatok)
Tesztelő
Szkriptelt API-n keresztüli tesztelés❖ Minden teszteset egy szkript
❖ bemenetek biztosítása (API hívások), kimenet logolása
Szkript-interpreterSUT
API
függőségek(kód, adatok)
Szkript
Inputfájlok
Logfájlok
Várteredmények
Adat-hajtott tesztelés
❖ Elemek szeparálása a tesztelésben:❖ Teszteset különáll a meghajtótól❖ Önálló teszteszköz/környezet❖ Önálló tesztadatok (input, eredmények)❖ Önálló szkript-nyelv❖ Önálló teszt-konfiguráció❖ Elkülönült instrumentált SUT
Adat-hajtott tesztelés (folyt.)
❖ Célzott előnyök:
❖ Az egyes összetevők jobb karbantarthatósága
❖ Jobb érthetőség (absztrakciós szint emelése)
❖ Változtatások (UI, teszt API, teszteszköz) hatásának minimalizálása
❖ Flexibilis teszt-szkriptek, jobb újra felhasználatóság
Adat-hajtott tesztelés (folyt.)
SUTSzkript-nyelvTesztszkript
Nyelv spec.Teszt
konfig.Teszt-adatok
SUT konfig.
SUT UI-modell
SUT spec. parancsok
Modell alapú teszt-automatizálás
❖ Tesztek elvégzése (teszteset generálás, értékelés) szabályok alapján
❖ A szoftver állapot modelljére alapozva (felhasználói akciók, akciók eredménye, korrekt új állapot)
❖ Sztochasztikus tesztelés
❖ Nem sztochasztikus tesztelés
Modell alapú teszt-automatizálás (folyt.)
SUT
Teszt-program
SUT konfig.
SUT állapot-modell
Input adatok
Modell alapú teszt-automatizálás (folyt.)
❖ Sztochasztikus tesztek
❖ Random esemény bemenetek a program számára
❖ Elért állapot ellenőrzése
❖ kód-feltételek (assertions)
❖ esemény-logok
❖ állapot átmenet térképek
❖ Jól alkalmazható szűkebb funkciójú szoftverek esetén (pl. beágyazott rendszerek)
Modell alapú teszt-automatizálás (folyt.)
❖ Nem sztochasztikus tesztek
❖ Bemenetek szisztematikus előállítása a modellnek megfelelően
❖ függvényhívások és paraméterek megválasztása
❖ input érték tartományok megválasztása az állapotok és átmenetek alapján
❖ esemény szekvenciák bemenetként
❖ pozitív és negatív tesztesetek
A tesztelhetőség javítása❖ További ellenőrzési lehetőségek beépítése:
❖ Hardver integritás ellenőrzése
❖ Adatbázis integgritás ellenőrzése
❖ Memória integritás ellenőrzése
❖ Erőforrás felhasználás jelentése
❖ Esemény logok készítése
❖ Csomagoló réteg kialakítása
❖ üzenetek, (állapot)változók monitorozása, beállítása
Automatizálási funkciók❖ Automatikus teszteset/adat generálás (tesztesetek a
követelményekből vagy a kódból)
❖ Tesztesetek kiválasztása
❖ Beavatkozás mentes teszt-végrehajtás
❖ Tesztkörnyezet beállítása (konfiguráció)
❖ Eredmény összehasonlítás
❖ Sikeresség/sikertelenség eldöntése, riportolása
Tesztkörnyezetek funkciói❖ Forráskód elemzése❖ Teszteset tervezés és létrehozás támogatása❖ Tesztadatok generálása❖ Tesztkörnyezet menedzselése❖ Tesztesetek kiválasztása futásra❖ Teszt-szkriptek futtatása❖ Tesztelési események rögzítése❖ Elvárt eredmények kezelése (létrehozás, tárolás, frissítés, stb.)❖ A szoftver válaszainak rögzítése❖ A tesztfutás értékelése❖ Riportok előállítása
Tesztkörnyezet (pl.)
Cantata
Teszteredmények
Lefedettségi adatok Tesztesetek
Teszt-szkript(és orákulum)
Tesztkörnyezet (pl.)❖ Cantata funkciók
❖ Tesztervezés❖ statikus elemzés (komplexitás metrikák)
❖ Tesztautomatizálás❖ teszt-szkript generálás (csonkok, csomagolók)
❖ Teszt végrehajtás❖ make file generálás (SCM csatolás)❖ input adatok táblázatokból
❖ Objektum orientált tesztelés❖ teszteset leszármaztatás
❖ Lefedettség elemzése❖ hívás, utasítás, kód alapblokk, döntés, feltétel, kontextus
❖ Riportok
Integrált egységtesztelés - JUnit❖ Java programok egység-tesztelése
❖ Automatikus tesztelés
❖ Tesztkészletek végrehajtása
❖ fejlesztéssel egyidejű teszteset tervezés
❖ Tesztfutások “értékelése”
❖ eredmények értékelése
❖ Teszteredmények rögzítése
Integrált egységtesztelés - JUnit❖ Végrehajtás és dokumentálás alapja a command pattern
(3.8.x verzió)
Integrált egységtesztelés - JUnit❖ Teszt metódusok
❖ tesztelendő kód hívása❖ kijelentések a helyes eredményekre vonatkozóan
❖ assert(’2’==ch)❖ assertEquals(’2’,ch)❖ fail()
❖ TestSuite-ok létrehozása❖ ekvivalencia osztályok❖ határérték analízis❖ stb.
Integrált egységtesztelés - JUnit❖ Hiba kezelés❖ failure (erre számítunk, teszteredmény)❖ error (erre nem számítunk)
public void run(TestResult result) { result.startTest(this); setUp(); try { runTest(); } catch (AssertionFailedError e) { //1 result.addFailure(this, e); } catch (Throwable e) { // 2 result.addError(this, e); } finally { tearDown(); } }
Integrált egységtesztelés - JUnit
JUnit IDE integráció
Automatizálási tanulságok
❖ A tesztelés kognitív tevékenység
❖ A tesztautomatizálás szoftver fejlesztés (is)
❖ A tesztautomatizálási projektek drágák
❖ Az automatizálás a rossz tesztelési folyamaton csak ront
❖ A teljes tesztelés nem automatizálható