Click here to load reader

Vežbe - Objektno-orijentisano testiranje · PDF fileVežbe - Objektno-orijentisano testiranje Teorija ... kombinovanja grafova toka kontrole). Graf prikazan na gornjoj slici nije

  • View
    252

  • Download
    1

Embed Size (px)

Text of Vežbe - Objektno-orijentisano testiranje · PDF fileVežbe - Objektno-orijentisano testiranje...

  • Vebe - Objektno-orijentisano testiranje

    Teorija Finale State Machine (FSM) - Maina sa konanim brojem stanja ili Graf stanja i prelaza

    U testiranju softvera:

    FSM se prikazuje kao graf iji vorovi reprezentuju stanja koja predstavljaju stanja izvravanja

    softvera, a veze predstavljaju prelaze izmeu stanja. Stanje predstavlja prepoznatljivu situaciju

    koja ostaje u toj egzistenciji tokom nekog vremenskog perioda. Stanje se definie posebnim

    vrednostima za skup promenljivih, i dok promenljive imaju te vrednosti, smatra se da je softver u

    tom stanju.

    Sledea slika ilustruje model sa jednostavnim prelazom kojim se otvaraju vrata lifta. Ako je

    dugme u liftu pritisnuto (dogaaj koji se hvata), vrata e se otvoriti samo ako se lift ne pomera

    (preduslov: elevSpeed=0).

    Zadatak 1 /** *****************************************************

    // Stutter checks for repeat words in a text file.

    // It prints a list of repeat words, by line number.

    // Stutter will accept standard input or a list

    // of file names.

    // Jeff Offutt, June 1989 (in C), Java version March 2003

    //********************************************************* */

    class Stutter

    {

    // Class variables used in multiple methods.

    private static boolean lastdelimit = true;

    private static String curWord = "", prevWord = "";

  • private static char delimits [] =

    {, , ,, ., !, -, +, =, ;, :, ?,

    &, {, }, \\}; // First char in list is a tab

    //************************************************

    // main parses the arguments, decides if stdin

    // or a file name, and calls Stut().

    //************************************************

    public static void main (String[] args) throws IOException

    {

    String fileName;

    FileReader myFile;

    BufferedReader inFile = null;

    if (args.length == 0)

    { // no file, use stdin

    inFile = new BufferedReader (new InputStreamReader (System.in));

    }

    else

    {

    fileName = args [0];

    if (fileName == null)

    { // no file name, use stdin

    inFile = new BufferedReader (new InputStreamReader (System.in));

    }

    else

    { // file name, open the file.

    myFile = new FileReader (fileName);

    inFile = new BufferedReader (myFile);

    }

    }

    stut (inFile);

    }

    //************************************************

    // Stut() reads all lines in the input stream, and

    // finds words. Words are defined as being surrounded

    // by delimiters as defined in the delimits[] array.

    // Every time an end of word is found, checkDupes()

    // is called to see if it is the same as the

    // previous word.

    //************************************************

    private static void stut (BufferedReader inFile) throws IOException

    {

    String inLine;

    char c;

    int linecnt = 1;

    while ((inLine = inFile.readLine()) != null)

    { // For each line

    for (int i=0; i

  • lastdelimit = false;

    curWord = curWord + c;

    }

    }

    linecnt++;

    checkDupes (linecnt);

    }

    } // end Stut

    //************************************************

    // checkDupes() checks to see if the globally defined

    // curWord is the same as prevWord and prints a message

    // if they are the same.

    //************************************************

    private static void checkDupes (int line)

    {

    if (lastdelimit)

    return; // already checked, keep skipping

    lastdelimit = true;

    if (curWord.equals(prevWord))

    {

    System.out.println ("Repeated word on line " + line + ": " +

    prevWord+""+curWord);

    }

    else

    {

    prevWord = curWord;

    }

    curWord = "";

    } // end checkDupes

    //************************************************

    // Checks to see if a character is a delimiter.

    //************************************************

    private static boolean isDelimit (char C)

    {

    for (int i = 0; i < delimits.length; i++)

    if (C == delimits [i])

    return (true);

    return (false);

    }

    } // end class Stutter

  • 1. FSM koji reprezentuje Stutter, baziran je na grafu kontrole toka za ove 3 metode (tzv. metod

    kombinovanja grafova toka kontrole).

    Graf prikazan na gornjoj slici nije u potpunosti FSM, i ovo nije nain da se crtaju grafici iz

    softvera. Ova metoda ima nekoliko problema, prvi je da vorovi nisu stanja. Metode moraju da

    vrate rezultat na odgovarajuim mestima poziva tih metoda, to znai da grafovi sadre ugraene

    ne-determinizme. Na primer, postoje veze izmeu vora 2 u metodi checkDupes() ka voru 6 u

    metodi shut() i takoe veza izmeu vora 2 u checkDupes() ka voru 8 u metodi shut(). Mesto

    povratka zavisi odakle smo zvali metodu checkDupes(), iz vora 6 ili vora 8 u stut(). Drugi

    problem moe biti taj to implementacija samog softvera mora biti kompletno zavrena, pre nego

    to ponemo da pravimo graf. Ipak, na cilj je uvek da pripremimo testove to je ranije mogue.

    Najvaniji problem je ne srazmernost grafa veliini softvera. Moemo primetiti da graf postaje

    vro komplikovan sa samo ove tri metode, a sa velikim programima graf postaje mnogo gori.

  • 2. FSM baziran na softverskoj strukturi

    Prednosti:

    - prikazuje opti tok operacija u programu

    Nedostaci:

    - razliiti testeri bi prikazivali razliite grafikone, to uvodi nedoslednost u testiranju

    - zahteva temeljno poznavanje softvera, ne moemo testirati dok ne znamo najmanje detalje

    projekta, to je jako teko kod velikih programa

    3. Modelovanje stanja promenljivih

    Mehaniki nain za dobijanje FSM je da razmotrimo vrednosti promenljivih u programu. To se

    obino definie prilikom dizajniranja programa. Prvi korak je da odredimo koje promenljive

    mogu uestvovati u stanjima, a zatim izabrati one relevantne za FSM, na primer globalne i

    klasne promenljive.

    Na primer, klasa Shutter definie 4 promenljive:lastdelimit, curWord, prevWord i delimits.

    Promenljiva delimits je definisana na nivou klase, ali ne treba da bude odabrana kao deo stanja.

    Teoretski svaka kombinacija ove 3 promenljive definie razliito stanje. U praksi meutim to

    moe dovesti do beskonanog broja stanja. Na primer curWord i prevWord su stringovi i imaju

    neogranien skup vrednosti. Dakle, uobiajno je da se identifikuju vrednosti ili opsezi vrednosti

  • koji e biti zastupljeni kao stanja. Za klasu Shutter, oigledno je da taj skup treba da bude

    zasnovan na odnosu izmeu te dve promenljive, stvarajui sledee mogue vrednosti:

    curWord: undefined, word

    prevWord: undefined, sameword, differentword

    lastdelimit: true, false

    gde su rei word, sameword, differentword tipa string.

    Kombinacijom ovih vrednosti dolazimo do 12 moguih kombinacija stanja:

    1. (undefined, undefined, true)

    2. (undefined, undefined, false)

    3. (undefined, sameword, true)

    4. (undefined, sameword, false)

    5. (undefined, differentword, true)

    6. (undefined, differentword, false)

    7. (word, undefined, true)

    8. (word, undefined, false)

    9. (word, sameword, true)

    10. (word, sameword, false)

    11. (word, differentword, true)

    12. (word, differentword, false)

  • Naravno, nije svaka od ovih kombinacija mogua. Na primer curWord dobija odmah vrednost i

    nikad ne postaje nedefinisana nakon toga. Dakle, jedino mogue stanje u kome promenljiva

    curWord ima vrednost je stanje 1, koje emo proglasiti za poetno stanje. im se proita neki

    karakter, curWord ima vrednost neke rei, a lastdelimit je podeen na false (stanje 8). Kada je

    delimiter pronaen, prevWord ima vrednost iste rei ili razliite rei, u odnosu na curWord

    (stanja 10 i 12). Svako stanje gde je lastdelimit = true, moe biti konano stanje (nacrtano

    podebljanom linijom).

    Stanje 7 je izostavljeno, jer je nemogue doi do njega. Takoe, treba znati da se ovaj program

    zavrava na kraju proitanog fajla.

    Mehaniki proces u ovoj strategiji je privlaan zato to moemo oekivati da razliiti testeri

    izvedu isti ili slian FSM. Taj proces nije uvek mogue da se potpuno automatizuje, zato to

    postoji tekoa za utvrivanje prelaza iz odredita i zato to odluka o bilo kojoj varijabli zahteva

    presudu.

    4. Poslednja metoda za dobijanje FSM oslanja se na eksplicitinim zahtevima ili formalnoj

    specifikaciji koja opisuje ponaanje tog softvera.

    FSM na osnovu koda su dosta laki za razumevanje. Ako je softver dobro dizajniran, ovaj tip

    FSM treba da sadri iste informacije koje inje UML dijagram stanja.

  • Teorija

    Kada se testira objektno-orijentisani softver, klasa se obino predstavlja osnovnu jedinicu

    testiranja. To dovodi do 4 nivoa testiranja klasa:

    1. Intra-metod testiranje: testovi su izgraeni za pojedinane metode (ovo je tradicionalno

    jedinino testiranje)

    2. Inter-metod testiranje: viestruke metode u okviru klase su testirane zajedno (ovo je

    tradicionalno testiranje modula)

    3. Intra-klasno testiranje: testovi su izgraeni za pojedinane klase, obino kao sekvenca

    poziva metoda unutar klase

    4. Inter-klasno testiranje: vie od jedne klase je testirano u isto vreme, obino se vidi kako

    su u interakciji (ovo je vrsta integracionog testiranja)

Search related