420 likes | 548 Views
Modellvezérelt tesztelés. Paróczi Zsombor. A legnagyobb kérdés. Hogyan kontrollálható az állapotrobbanás a tesztelés érdemi rontása nélkül. Előadás felépítése. MBT - ről általában 3 kiválasztott cikk Search -based testing for Event- B
E N D
Modellvezérelttesztelés ParócziZsombor
A legnagyobbkérdés Hogyankontrollálhatóazállapotrobbanás a tesztelésérdemirontásanélkül.
Előadásfelépítése • MBT-rőláltalában • 3 kiválasztottcikk • Search-based testing for Event-B • Syntactic Abstraction of B Models to Generate Tests • Model-Based Testing of Object-Oriented Reactive Systems with Spec Explorer
MBT Model based testing
MBT • Black-box rendszer / szoftvertesztelés • Modelltkészítünk (sokesetbenkézzel) • Modell alapjángeneráljuk a teszteket • Végrehajtjuk a teszteket TestSuite TCP Connection establishment “The active open is performed by the client sending a SYN to the server. It sets the segment's sequence number to a random value A. In response, the server replies with a SYN-ACK. The acknowledgment number is set to one more than the received sequence number (A + 1), and the sequence number that the server chooses for the packet is another random number, B. Finally, the client sends an ACK back to the server. The sequence number is set to the received acknowledgement value, and the acknowledgement number is set to one more than the received sequence number i.e. B + 1. “ TC#2 TC#N TC#1 Model Forrás: Konformanciatesztelésdiasor – Távközlőhálózatok , Csöndes Tibor, Ericsson Kft., R&D
ElőnyökHátrányok • Csak a modelltkellkarbantartani • Modell hibái is kiderülhetnek • Sokszor a formálismodellrendelkezésreáll (távközlőrendszerek) • Párhuzamosanírható a tesztés a kód • Állapottérrobbanásrafigyelnikell • Teszteseteknehezebbenhordozhatóak • Modell “készítése” kritikusfolyamat • Nagyonsokmúlik a tesztgenerálóalgoritmuson
MBT dimenziói Forrás: A taxonomy of model-based testing (M. Utting, A. Pretschner, B. Legeard)
FSM - Finite State Machine Def:Egy determinisztikusvéges automata a következő hatos: ahol: az állapotok véges halmaza a bemenetek véges halmaza a kimenetek véges halmaza az állapot átmenet függvény, mely leképezi a jelenlegi állapotot és a bemenetet a következő állapotra: a kimeneti függvény, mely leképezi a jelenlegi állapotot és a bemenetet a kimenetre: a kezdeti állapot Megjegyzés: Különbség a nyelvi automatákhoz képest: a fent definiált FSM egy bemenetre egy kimenetet ad és nincs elfogadó állapot. (Így tudunk tesztelni!) Forrás: Tesztsorozatgenerálásdiasor – Távközlőhálózatok , Csöndes Tibor, Ericsson Kft., R&D
EFSM –Extended Finite State Machine Def:Egy determinisztikus kiterjesztettvéges automata a következő tizes: ahol: a predikátumok véges halmaza, azaz egy bemeneti eseményhez egy adott állapotban és változó kombinációban az igaz, vagy hamis értéket rendeli. a változók véges halmaza az akciók véges halmaza a változók kezdeti értéke Forrás: Tesztsorozatgenerálásdiasor – Távközlőhálózatok , Csöndes Tibor, Ericsson Kft., R&D
Ezegygráf! • Állapotok= Gráfpontjai(összesváltozóösszesbinárisa 2n) • Akciók = Gráfélei • Tesztelő él (Testing edge) legyen a következő: • Az automata állapotba vitele • bemeneti esemény előidézése és kimenet ellenőrzése • A várt állapot ellenőrzése Forrás: Tesztsorozatgenerálásdiasor – Távközlőhálózatok , Csöndes Tibor, Ericsson Kft., R&D
Klasszikusmódszerek • DS módszer • W módszer • UIO sorozatokmódszere • TTmódszer Egy minimális költségű tesztsorozatot keresni, amely leteszteli az FSM összes állapotátmenetét, egyenértékű azzal, hogy keresünk egy Vidéki kínai postás (RCP) utat gráf élein: Minimális költségű út, mely az FSM kezdeti állapotából indul, végighalad -ben lévő éleken legalább egyszer és visszatér a kezdeti állapotba. TermészetesenE-ben lévő éleket is használhatunk a bejárás során Forrás: Tesztsorozatgenerálásdiasor – Távközlőhálózatok , Csöndes Tibor, Ericsson Kft., R&D
Search-based testing for Event-B AlinStefanescu – University of Pitesti, Romania 13th CREST Open Workshop
Event-B Forrás: AlinStefanescu – CREST Open workshop – London 2011
Syntactic Abstraction of B Models to Generate Tests J. Julliand, N. Stouls, P.-C. Bué, and P.-A. Masson Tests and Proofs 2010, Malaga : Spain (2010)
Ötlet • A teljesrészgráfegyrészéntesztekvégrehajtása • Hogyanlehetrészgráfotlétrehozni? • Állapotokrészhalmazáraszűkítés • Relevánsváltozókkiemelése • Data-Flow Fependency Only • Data-Flow and Control-Flow Dependencies • Állapotrészhalmazból abstract modell Abstract modellés “tesztcél” (TP) összevetése, ebbőlmárkevesebbésrövidebbtesztlesz.
Model-Based Testing of Object-Oriented Reactive Systems with Spec Explorer MargusVeanes, Colin Campbell, Wolfgang Grieskamp, Wolfram Schulte, Nikolai Tillmann, Lev Nachmanson Microsoft 2007
Spec Explorer • Spec# ésAsmLmodellezőnyelvek • Modell ellenőrző • FSM alapjántesztekelőállítása • .NET nyelvűprogramokkonformanciatesztelése
Példa: Chat • The chat system is a distributed, reactive system with an arbitrary number of clients. • Each client may post text messages that will be delivered by the system to all other clients that have entered the chat session. • The system delivers pending messages in FIFO order with local consistency. • However, if there are multiple senders, the messages may be interleaved arbitrarily.
Modell készítése Clientosztály • “entered” boolváltozó • “unreceivedMsgs” kliensremég meg nemérkezett, de mármásokáltalelküldöttüzeneteklistája • Konstruktor • Enter akció • Send akció • Receive akció
Spec# leírás (1) class Client {boolentered; Map<Client,Seq<string>> unreceivedMsgs; [Action] Client() {this.unreceivedMsgs= Map;foreach(Client c in enumof(Client), c != this){ c.unreceivedMsgs[this] = Seq{}; this.unreceivedMsgs[c] = Seq{}; } entered = false; }
Spec# leírás(2) [Action] void Enter() requires !entered; { entered = true; } [Action] void Send(string message)requires entered; {foreach(Client c in enumof(Client), c != this, c.entered) c.unreceivedMsgs[this] += Seq{message}; }
Spec# leírás(3) [Action(Kind=ActionAttributeKind.Observable)] void Receive(Client sender, string message) requires sender != this && unreceivedMsgs[sender].Length > 0 && unreceivedMsgs[sender].Head == message; { unreceivedMsgs[sender] = unreceivedMsgs[sender].Tail; } }
Miértilyen “egyszerű” a gráf? • “Üres” tesztekszűrése • Állapottérszűkítés • Felhasználóiannotálás • Elfogadóállapotokdefiníciója • Állapotinvariánsok • Paraméterszűkítés • Funkciókorlátozás • Direktállapotszűrés • Állapotcsoportosítás
Állapottérszűkítés • Egyadottállapotbanazelőfeltételekalapjánszűrnek • A tesztelésnél a következőlépésvizsgálatánálmárteljesült precondition alapján • Pl.: Konstruktorután “entered” false lesz, ezértaz Enter() meghívható
Felhasználóiannotálás • 3 ténylegesaktívanhívhatóakció van • 1 “megfigyelhető” akció • Kényszeríthetőésletilthatóegyadottakciófigyelése
Elfogadóállapotokdefiníciója • Egyszerűleírássaladható meg, mitjelentazelfogadóállapot • Példábanmindenállapot, kivéve a kezdetiállapotésamikor van meg nemérkezettüzenet enumof(Client).Size > 0 &&Forall{ c in enumof(Client), s in c.unreceivedMsgs.Keys; c.unreceivedMsgs[s].Length == 0}
Állapotinvariánsok • Minden állapotbanérvényesállítások (nemrelevánsakvagyelőretudjuk, hogynemfordulhatelő) • Példában: egyikklienssemkapja meg a sajátüzenetét Forall{ c in enumof(Client); c notinc.unreceivedMsgs.Keys } Ellenőrzéstazeszközelvégzi, de azállapototelrejti
Paraméterszűkítés • Alapméretezettértékek • Típusalapúkorlátozás • Paraméteralapúkorlátozás • Funkcióparaméteralapúkorlátozás • Példában: • Message csak “Hi” lehet • Message: Set{c in enumof(Client);<c,"hi">}.
Funkciókorlátozás • Funkciókvégrehajtásánaknemtriviáliselőfeltételekhezvalókötése • Példában: Minden klienskonstruktorvégrehajtásautánlehetcsak a Send() parancsotmeghívni enumMode { Creating, Entering, Sending }; Mode CurrentMode { get { if (enumof(Client).Size < 2) return Mode.Creating; if(Set{cinenumof(Client),!c.entered;c}.Size<2) return Mode.Entering; return Mode.Sending; } }
Direktállapotszűrés • Rákövetkezésekkülönkorlátozása • Példában: Egyadottüzenetetegyklienscsakegyszerküld el mielőttazmindenkihezmegérkezne Forall{c in enumof(Client), s in c.unreceivedMsgs.Keys,m1 in c.unreceivedMsgs[s], m2 in c.unreceivedMsgs[s]; m1 != m2}
Állapotcsoportosítás • Többállapototegyosztálybalehetsorolni, egyreprezentatívelemkiválasztásával • Példában: Belépésekilletveüzenetküldéseksorrendje a tesztet (és a modellt) semmódosítja – azonostípusúak a kliensek Bag{c in enumof(Client); <c.entered,Bag{<s,m> in c.unreceivedMsgs; m}>} (n kliensnélez n! belépésisorrendlehetne, ebbőlcsakegyetlátunk)
A legnagyobbkérdés Hogyankontrollálhatóazállapotrobbanás a tesztelésérdemirontásanélkül.
Énmegkaptam a választ… … de ha vannakkérdések, örömmelválaszolok.