Ugrás a tartalomhoz

Modellalapú tesztelés

A Wikipédiából, a szabad enciklopédiából
Általános modellalapú tesztelési környezet

A modellalapú tesztelés a modellalapú tervezés alkalmazása, amely szoftver- vagy rendszertesztelés elvégzésére szolgáló artefaktumok tervezésére és opcionálisan azok végrehajtására is felhasználható. A modellek a tesztelendő rendszer (SUT) kívánt viselkedését vagy a tesztelési stratégiákat és a tesztkörnyezetet is ábrázolhatják. A jobb oldali kép az előbbi megközelítést ábrázolja.

A SUT-t (System Under Test) leíró modell általában egy absztrakt, részleges bemutatása a SUT kívánt viselkedésének. Az ilyen modellekből származtatott tesztek funkcionális tesztek, amelyek ugyanazon absztrakciós szinten vannak, mint a modell. Ezeket a teszteket összefoglalóan absztrakt tesztcsomagnak nevezik. Az absztrakt tesztcsomagot nem lehet közvetlenül végrehajtani egy SUT-n, mivel a csomag nem megfelelő absztrakciós szinten van. A végrehajtható tesztcsomagot le kell származtatni a megfelelő absztrakt tesztcsomagból. A végrehajtható tesztcsomag közvetlenül kommunikálhat a tesztelendő rendszerrel. Ezt úgy érik el, hogy az absztrakt teszt eseteket konkrét teszt esetekre térképezik, amelyek alkalmasak végrehajtásra. Néhány modellalapú tesztelési környezetben a modellek tartalmaznak elegendő információt a végrehajtható tesztcsomagok közvetlen generálásához. Másokban az absztrakt tesztcsomag elemeit specifikus utasításokhoz vagy metódushívásokhoz kell térképezni a szoftverben, hogy konkrét tesztcsomagot hozzanak létre. Ezt hívják a "térképezési probléma" megoldásának.[1]Az online tesztelés (lásd alább) esetén az absztrakt tesztcsomagok csupán elméletben léteznek, nem pedig explicit műalkotásokként.

A tesztek különböző módokon származtathatók modellekből. Mivel a tesztelés általában kísérleti jellegű és heurisztikákra épít, nincs ismert egyetlen legjobb megközelítés a tesztek származtatására. Gyakori, hogy a tesztelési származtatással kapcsolatos összes paramétert egy csomagba összevonják, amelyet gyakran "teszt követelményeknek", "teszt céljának" vagy akár "használati esetnek" neveznek. Ez a csomag tartalmazhat információkat a modell azon részeiről, amelyekre fókuszálni kell, vagy a tesztelés befejezésének feltételeiről (teszt leállítási kritériumok).

Mivel a tesztelési csomagok modellekből, nem pedig forráskódból származnak, a modellalapú tesztelés általában a feketedobozos tesztelés egyik formájaként van szemlélve.

A komplex szoftverrendszerek modellalapú tesztelése még mindig egy fejlődő terület.

Különösen a modellvezérelt mérnöki munkában vagy az Object Management Group ( OMG ) modellvezérelt architektúrájában a modellek a megfelelő rendszerek előtt vagy azokkal párhuzamosan épülnek fel. A modellek kész rendszerekből is építhetők. A tesztgenerálás tipikus modellezőnyelvei közé tartozik az UML, a SysML, a mainstream programozási nyelvek, a véges gépi jelölések, valamint a matematikai formalizmusok, mint például a Z, a B ( Event-B ), az Alloy vagy a Coq .

Modellalapú tesztelés telepítése

[szerkesztés | forrásszöveg szerkesztése]

A modellalapú tesztelés különböző ismert módjai közé tartozik az online tesztelés, az offline végrehajtható tesztek generálása és az offline manuálisan telepíthető tesztek generálása.[2]

Az online tesztelés azt jelenti, hogy a modellalapú tesztelő eszköz közvetlenül csatlakozik a tesztelendő rendszerhez (SUT), és dinamikusan teszteli azt.

Az offline módon generált végrehajtható tesztek azt jelentik, hogy a modellalapú tesztelő eszköz teszteseteket generál számítógép által olvasható formátumban, amelyeket később automatikusan végre lehet hajtani. Például egy Python osztályok gyűjteménye, amely megtestesíti a generált tesztelési logikát.

Az offline módon generált manuálisan telepíthető tesztek azt jelentik, hogy a modellalapú tesztelő eszköz teszteseteket generál, amelyek ember által olvasható formátumban készülnek el, és később segíthetnek a manuális tesztelésben. Például egy PDF dokumentum, amely emberi nyelven leírja a generált tesztlépéseket.

Tesztek algoritmikus levezetése

[szerkesztés | forrásszöveg szerkesztése]

A modellalapú tesztelés hatékonysága elsősorban az általa kínált automatizálás lehetőségének köszönhető. Ha egy modell gép által olvasható és olyan mértékben formális, hogy jól meghatározott viselkedési értelmezése van, akkor elvileg a tesztesetek gépesített módon is előállíthatók.

Véges állapotú gépekből

[szerkesztés | forrásszöveg szerkesztése]

Gyakran a modellt végesállapotú automatára vagy állapotátmeneti rendszerre fordítják le, vagy úgy értelmezik. Ez az automata a tesztelendő rendszer lehetséges konfigurációit képviseli. A tesztesetek megtalálásához az automatát végrehajtható útvonalak után keresik. Egy lehetséges végrehajtási útvonal tesztesetként szolgálhat. Ez a módszer akkor működik, ha a modell determinista, vagy átalakítható egy determinisztikus modellé. Értékes nem-szokványos teszteseteket lehet nyerni a modellekben szereplő nem meghatározott átmenetek kihasználásával.

A tesztelendő rendszer és a megfelelő modell bonyolultságától függően az útvonalak száma nagyon nagy lehet, mivel a rendszer lehetséges konfigurációinak száma hatalmas. A tesztesetek kiválasztásához, amelyek megfelelő, de véges számú útvonalat fednek le, tesztkriteriumokra van szükség, amelyek irányítják a kiválasztást. Ezt a technikát először Offutt és Abdurazik javasolta abban a cikkben, amely a modellalapú tesztelés kezdetét jelentette. Több technika is kifejlesztésre került a tesztesetek generálására,[3] és ezeket Rushby[4] ismertette. A tesztkriteriumok általános gráfok formájában vannak leírva a tesztelési tankönyvben[1].

A tételbizonyítás (theorem proving) eredetileg logikai formulák automatikus bizonyítására szolgált. A modellalapú tesztelési megközelítésekben a rendszert predikátumok halmazával modellezik, amelyek meghatározzák a rendszer viselkedését.[5]A tesztesetek előállításához a modellt úgy osztják fel, hogy ekvivalenciaosztályokat képeznek a rendszer viselkedését leíró predikátumok érvényes értelmezései felett. Minden ekvivalenciaosztály egy adott viselkedési esetet ír le, így egy-egy tesztesetként szolgálhat. A legegyszerűbb felosztás a diszjunktív normálforma (DNF) alkalmazásával történik, amely során a rendszer viselkedését leíró logikai kifejezéseket DNF formára alakítják.

Megszorításos logikai programozás és szimbolikus végrehajtás

[szerkesztés | forrásszöveg szerkesztése]

A megszorításprogramozás használható olyan tesztesetek kiválasztására, amelyek meghatározott megszorításoknak felelnek meg, mégpedig úgy, hogy változók halmazára vonatkozó megszorítások rendszerét oldják meg. A rendszert megszorítások segítségével írják le. A megszorítások rendszerének megoldása történhet: Boole-alapú megoldókkal (például SAT-solverekkel, amelyek a Boole-féle kielégíthetőségi problémán alapulnak), vagy Numerikus módszerkel, mint például a Gauss-elimináció. A megszorítások képleteinek megoldása során talált megoldás tesztesetként szolgálhat az adott rendszerhez.

A megszorításprogramozás (constraint programming) kombinálható a szimbolikus végrehajtással. Ebben a megközelítésben a rendszer modelljét szimbolikusan hajtják végre, vagyis a különböző vezérlési útvonalak mentén adattípusokra vonatkozó megszorításokat gyűjtenek össze. Ezután megszorításprogramozási módszert alkalmaznak a megszorítások megoldására és tesztesetek előállítására.

A modell-ellenőrzők tesztesetek generálására is használhatók. Eredetileg a modellellenőrzést arra fejlesztették ki, hogy ellenőrizzék: egy specifikáció tulajdonsága érvényes-e egy adott modellen. Tesztelési célokra használva a modellellenőrzőnek átadják a tesztelendő rendszer modelljét és a tesztelendő tulajdonságot. A bizonyítási eljárás során, ha a tulajdonság érvényes a modellben, a modellellenőrző tanúkat és ellenpéldákat azonosít. A tanú egy olyan útvonal, ahol a tulajdonság teljesül, míg az ellenpélda a modell végrehajtásának egy olyan útvonala, ahol a tulajdonság sérül. Ezek az útvonalak ismét tesztesetként használhatók.

Teszteset-generálás Markov-lánc alapú tesztmodell használatával

[szerkesztés | forrásszöveg szerkesztése]

A Markov-láncok hatékony eszközt jelentenek a modellalapú teszteléshez. A Markov-láncokkal megvalósított tesztmodellek használati modellként értelmezhetők – ezt nevezzük használati/statikus modellalapú tesztelésnek (Usage/Statistical Model Based Testing). A használati modellek, – így a Markov-láncok is – alapvetően két elemből állnak: : a véges állapotú gép (FSM), amely a tesztelt rendszer összes lehetséges felhasználási forgatókönyvét reprezentálja, és a működési profilok (OP), amelyek statisztikailag jellemzik, hogyan használják vagy fogják használni a rendszert.Az FSM segít meghatározni, hogy mit lehet vagy mit teszteltek már, míg az OP segítségével operációs tesztesetek vezethetők le. A használati/statikus modellalapú tesztelés abból a tényből indul ki, hogy egy rendszert nem lehet teljes körűen letesztelni, és a hibák nagyon alacsony valószínűséggel is előfordulhatnak. Ez a megközelítés lehetőséget kínál statikusan levezethető tesztesetek meghatározására, amelyek célja a tesztelt rendszer megbízhatóságának javítása. A használati/statikus modellalapú tesztelést nemrég kiterjesztették, hogy beágyazott szoftverrendszerekre is alkalmazható legyen.

  1. 1 2 Practical Model-Based Testing: A Tools Approach Archiválva 2012. augusztus 25-i dátummal a Wayback Machine-ben., Mark Utting and Bruno Legeard, ISBN 978-0-12-372501-1, Morgan-Kaufmann 2007
  2. ↑ Gordon Fraser, Franz Wotawa, and Paul E. Ammann (2009). "Testing with model checkers: a survey". Software Testing, Verification and Reliability. 19 (3): 215–261.{{cite journal}}: CS1 karbantartás: több név: szerzőfelsorolás (link)
  3. ↑ Böhr, Frank. Model Based Statistical Testing of Embedded Systems, 2011 IEEE Fourth International Conference on Software Testing, Verification and Validation Workshops, 18–25. o.. DOI: 10.1109/ICSTW.2011.11 (2011). ISBN 978-1-4577-0019-4
  4. ↑ Antti Huima (2007). "Implementing Conformiq Qtronic". Lecture Notes in Computer Science. 4581: 1–12. doi:10.1007/978-3-540-73066-8_1. {{cite journal}}: Unknown parameter |subtitle= ignored (súgó)
  5. ↑ Böhr, Frank. Model-Based Statistical Testing of Embedded Real-Time Software with Continuous and Discrete Signals in a Concurrent Environment: The Usage Net Approach. Verlag Dr. Hut (2012). ISBN 978-3843903486

Ez a szócikk részben vagy egészben a Model-based testing című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.