42
MODELLVEZÉRELT TESZTELÉS Paróczi Zsombor

Modellvezérelt tesztelés

  • Upload
    paxton

  • View
    49

  • Download
    0

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: Modellvezérelt tesztelés

MODELLVEZÉRELT TESZTELÉSParóczi Zsombor

Page 2: Modellvezérelt tesztelés

A legnagyobb kérdés

Hogyan kontrollálható az állapotrobbanás

a tesztelés érdemi rontása nélkül.

Page 3: Modellvezérelt tesztelés

Előadás felépítése

• MBT-ről általában

• 3 kiválasztott cikk

• 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

Page 4: Modellvezérelt tesztelés

MBTModel based testing

Page 5: Modellvezérelt tesztelés

MBT• Black-box rendszer / szoftver tesztelés• Modellt készítünk (sok esetben kézzel)• Modell alapján generáljuk a teszteket• Végrehajtjuk a teszteket

Model

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. “

TestSuite

TC#1

TC#2 TC#N

Forrás: Konformancia tesztelés diasor – Távközlő hálózatok , Csöndes Tibor, Ericsson Kft., R&D

Page 6: Modellvezérelt tesztelés

Előnyök Hátrányok

• Csak a modellt kell karbantartani

• Modell hibái is kiderülhetnek

• Sokszor a formális modell rendelkezésre áll (távközlő rendszerek)

• Párhuzamosan írható a teszt és a kód

• Állapottér robbanásra figyelni kell

• Tesztesetek nehezebben hordozhatóak

• Modell “készítése” kritikus folyamat

• Nagyon sok múlik a tesztgeneráló algoritmuson

Page 7: Modellvezérelt tesztelés

MBT dimenziói

Forrás: A taxonomy of model-based testing (M. Utting, A. Pretschner, B. Legeard)

Page 8: Modellvezérelt tesztelés

FSM - Finite State MachineDef: Egy determinisztikus vé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

0,,,,, stOISFSM nststS ,,1 niiI ,,1 nooO ,,1

SIS :

0st

OIS :

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: Tesztsorozat generálás diasor – Távközlő hálózatok , Csöndes Tibor, Ericsson Kft., R&D

Page 9: Modellvezérelt tesztelés

EFSM – Extended Finite State Machine

9

Def: Egy determinisztikus kiterjesztett vé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

00 ,,,,,,,,, vastAVARPOISEFSM

VARA

P

0va

Forrás: Tesztsorozat generálás diasor – Távközlő hálózatok , Csöndes Tibor, Ericsson Kft., R&D

Page 10: Modellvezérelt tesztelés

Ez egy gráf!• Állapotok = Gráf pontjai (összes változó összes binárisa

2n)

• Akciók= Gráf élei

• Tesztelő él (Testing edge) legyen a következő:

1. Az automata állapotba vitele2. bemeneti esemény előidézése és kimenet

ellenőrzése3. A várt állapot ellenőrzése

)/,,( lkji oivvTEST

istki lo

jst

Forrás: Tesztsorozat generálás diasor – Távközlő hálózatok , Csöndes Tibor, Ericsson Kft., R&D

Page 11: Modellvezérelt tesztelés

Klasszikus módszerek• DS módszer• W módszer• UIO sorozatok módszere• TT mó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észetesen E-ben lévő éleket is használhatunk a bejárás során

G cE

cE

Forrás: Tesztsorozat generálás diasor – Távközlő hálózatok , Csöndes Tibor, Ericsson Kft., R&D

Page 12: Modellvezérelt tesztelés

SEARCH-BASED TESTING FOR EVENT-BAlin Stefanescu – University of Pitesti, Romania

13th CREST Open Workshop

Page 13: Modellvezérelt tesztelés

Event-B

Forrás: Alin Stefanescu – CREST Open workshop – London 2011

Page 14: Modellvezérelt tesztelés

Event-B teszt generálás

Page 15: Modellvezérelt tesztelés

Explicit állapottér

Page 16: Modellvezérelt tesztelés

Probléma megközelítése

Page 17: Modellvezérelt tesztelés

Probléma megközelítése

Page 18: Modellvezérelt tesztelés

GA megközelítés

Page 19: Modellvezérelt tesztelés

Fitness

Page 20: Modellvezérelt tesztelés

Eredmények

Page 21: Modellvezérelt tesztelés

SYNTACTIC ABSTRACTION OF B MODELS TO GENERATE TESTSJ. Julliand, N. Stouls, P.-C. Bué, and P.-A. Masson

Tests and Proofs 2010, Malaga : Spain (2010)

Page 22: Modellvezérelt tesztelés

Ötlet• A teljes részgráf egy részén tesztek végrehajtása

• Hogyan lehet részgráfot létrehozni?• Állapotok részhalmazára szűkítés• Releváns változók kiemelése

• Data-Flow Fependency Only• Data-Flow and Control-Flow Dependencies

• Állapot részhalmazból abstract modell

Abstract modell és “teszt cél” (TP) összevetése, ebből már kevesebb és rövidebb teszt lesz.

Page 23: Modellvezérelt tesztelés

Absztrakció

Page 24: Modellvezérelt tesztelés

MODEL-BASED TESTING OF OBJECT-ORIENTED REACTIVE SYSTEMS WITH SPEC EXPLORER Margus Veanes, Colin Campbell, Wolfgang Grieskamp, Wolfram Schulte, Nikolai Tillmann, Lev Nachmanson

Microsoft 2007

Page 25: Modellvezérelt tesztelés

Spec Explorer

• Spec# és AsmL modellező nyelvek

• Modell ellenőrző

• FSM alapján tesztek előállítása

• .NET nyelvű programok konformancia tesztelése

Page 26: Modellvezérelt tesztelés

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.

Page 27: Modellvezérelt tesztelés

Modell készítése

Client osztály

• “entered” bool változó

• “unreceivedMsgs” kliensre még meg nem érkezett, de már

mások által elküldött üzenetek listája

• Konstruktor

• Enter akció

• Send akció

• Receive akció

Page 28: Modellvezérelt tesztelés

Spec# leírás (1)

class Client {bool entered;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;

}

Page 29: Modellvezérelt tesztelés

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};

}

Page 30: Modellvezérelt tesztelés

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;

}

}

Page 31: Modellvezérelt tesztelés

2 kliensre az állapottér

Page 32: Modellvezérelt tesztelés

Miért ilyen “egyszerű” a gráf?• “Üres” tesztek szűrése• Állapottér szűkítés• Felhasználói annotálás• Elfogadó állapotok definíciója• Állapot invariánsok

• Paraméter szűkítés• Funkció korlátozás• Direkt állapot szűrés• Állapot csoportosítás

Page 33: Modellvezérelt tesztelés

Állapottér szűkítés

• Egy adott állapotban az előfeltételek alapján szűrnek

• A tesztelésnél a következő lépés vizsgálatánál már

teljesült precondition alapján

• Pl.: Konstruktor után “entered” false lesz, ezért az Enter()

meghívható

Page 34: Modellvezérelt tesztelés

Felhasználói annotálás

• 3 tényleges aktívan hívható akció van

• 1 “megfigyelhető” akció

• Kényszeríthető és letiltható egy adott akció figyelése

Page 35: Modellvezérelt tesztelés

Elfogadó állapotok definíciója• Egyszerű leírással adható meg, mit jelent az elfogadó

állapot• Példában minden állapot, kivéve a kezdeti állapot és

amikor van meg nem érkezett üzenet

enumof(Client).Size > 0 &&Forall{ c in enumof(Client), s in c.unreceivedMsgs.Keys;

c.unreceivedMsgs[s].Length == 0}

Page 36: Modellvezérelt tesztelés

Állapot invariánsok

• Minden állapotban érvényes állítások (nem relevánsak vagy előre tudjuk, hogy nem fordulhat elő)

• Példában: egyik kliens sem kapja meg a saját üzenetét

Forall{ c in enumof(Client); c notin c.unreceivedMsgs.Keys }

Ellenőrzést az eszköz elvégzi, de az állapotot elrejti

Page 37: Modellvezérelt tesztelés

Paraméter szűkítés• Alapméretezett értékek• Típus alapú korlátozás• Paraméter alapú korlátozás• Funkció paraméter alapú korlátozás

• Példában:• Message csak “Hi” lehet

• Message: Set{c in enumof(Client);<c,"hi">}.

Page 38: Modellvezérelt tesztelés

Funkció korlátozás• Funkciók végrehajtásának nemtriviális előfeltételekhez való

kötése

• Példában: Minden kliens konstruktor végrehajtása után lehet csak a Send() parancsot meghívni

enum Mode { Creating, Entering, Sending };

Mode CurrentMode { get {

if (enumof(Client).Size < 2) return Mode.Creating;

if(Set{cin enumof(Client),!c.entered;c}.Size<2) return Mode.Entering;

return Mode.Sending; }

}

Page 39: Modellvezérelt tesztelés

Direkt állapot szűrés• Rákövetkezések külön korlátozása

• Példában: Egy adott üzenetet egy kliens csak egyszer küld el mielőtt az mindenkihez megérkezne

Forall{c in enumof(Client), s in c.unreceivedMsgs.Keys,m1 in c.unreceivedMsgs[s], m2 in c.unreceivedMsgs[s]; m1 != m2}

Page 40: Modellvezérelt tesztelés

Állapot csoportosítás• Több állapotot egy osztályba lehet sorolni, egy

reprezentatív elem kiválasztásával

• Példában: Belépések illetve üzenetküldések sorrendje a tesztet (és a modellt) sem módosítja – azonos típusúak a kliensek

Bag{c in enumof(Client); <c.entered,Bag{<s,m> in c.unreceivedMsgs; m}>}

(n kliensnél ez n! belépési sorrend lehetne, ebből csak egyet látunk)

Page 41: Modellvezérelt tesztelés

A legnagyobb kérdés

Hogyan kontrollálható az állapotrobbanás

a tesztelés érdemi rontása nélkül.

Page 42: Modellvezérelt tesztelés

Én megkaptam a választ…

… de ha vannak kérdések, örömmel válaszolok.