11 predavanje IV dio Verifikacija i validacija nastavak

  • Slides: 30
Download presentation
11. predavanje IV. dio Verifikacija i validacija, nastavak

11. predavanje IV. dio Verifikacija i validacija, nastavak

U ovom predavanju trebali bi. . . opisati principe testiranja sustava i testiranja njegovih

U ovom predavanju trebali bi. . . opisati principe testiranja sustava i testiranja njegovih komponenti razumjeti osnovne karakteristike alata koji se koriste za automatsko testiranje

Testiranje Pokusno izvođenje softvera ili njegovih dijelova na umjetno pripravljenim podacima uz pažljivo analiziranje

Testiranje Pokusno izvođenje softvera ili njegovih dijelova na umjetno pripravljenim podacima uz pažljivo analiziranje rezultata Svrha testiranja je verifikacija ili validacija Mi ćemo se ograničiti na testiranje u svrhu verifikacije, tj. provjeru radi li softver prema svojoj specifikaciji

Vrste i faze testiranja Testiranje grešaka – služi za provjeru funkcionalnih zahtjeva, namjera je

Vrste i faze testiranja Testiranje grešaka – služi za provjeru funkcionalnih zahtjeva, namjera je otkriti odstupanja između softvera i njegove specifikacije. Test podaci se konstruiraju tako da otkriju greške, a ne da simuliraju normalnu upotrebu Statičko testiranje – služi za provjeru nekih oblika ne-funkcionalnih zahtjeva, npr. izmjeriti performanse softvera ili stupanj pouzdanosti. Test podaci su odabrani tako da liče na stvarne korisničke podatke, obično veliki broj podataka

Testiranje grešaka Uspješno je kada pokaže da softver ne radi dobro Nakon testiranja grešaka

Testiranje grešaka Uspješno je kada pokaže da softver ne radi dobro Nakon testiranja grešaka slijedi postupak debuggiranja (objasnili smo ga prije) Testiranje može pokazati da postoje greške, ali ne može dokazati da grešaka nema!

Proces testiranja grešaka 1/2 Sastoji se od nekoliko faza S jedne strane testiramo manje,

Proces testiranja grešaka 1/2 Sastoji se od nekoliko faza S jedne strane testiramo manje, sastavne dijelove, a s druge strane kako su oni integrirani u cijeli sustav U testiranju integracije fokusiramo se na interakcije između dijelova softvera i na funkcionalnost cjeline Ipak se i u toj fazi otkrivaju greške u pojedinim dijelovima, pa se faze zato mogu ponavljati

Proces testiranja grešaka 1/2 Testiranje dijelova obično provode osobe koje su razvile te dijelove

Proces testiranja grešaka 1/2 Testiranje dijelova obično provode osobe koje su razvile te dijelove Testiranje integracije obavlja neki nezavisni tim Sažeti prikaz testiranja grešaka:

Testiranje dijelova softvera S obzirom na odabir test podataka, razlikujemo nekoliko pristupa testiranju dijelova

Testiranje dijelova softvera S obzirom na odabir test podataka, razlikujemo nekoliko pristupa testiranju dijelova softvera: - Funkcionalno testiranje (black-box testing) - Strukturalno testiranje (white-box testing) - Testiranje po putovima (path testing)

Funkcionalno testiranje 1/2 Test primjeri izvode se isključivo iz specifikacije dotičnog dijela softvera Softver

Funkcionalno testiranje 1/2 Test primjeri izvode se isključivo iz specifikacije dotičnog dijela softvera Softver se promatra kao 'crna kutija' o kojoj jedino znamo da bi ona (prema specifikaciji) za zadane ulaze trebala proizvesti zadane izlaze Zbog postojanja grešaka, ulazi iz određenog (nepoznatog) skupa Ie izazvat će neispravno ponašanje, koje ćemo prepoznati po izlazima iz skupa. Oe

Funkcionalno testiranje 2/2 Test primjeri se biraju tako da postoji velika vjerojatnost da pripadaju

Funkcionalno testiranje 2/2 Test primjeri se biraju tako da postoji velika vjerojatnost da pripadaju skupu Ie (oslanjamo se na iskustvo) Moguć je i sistematički pristup gdje svaki primjer biramo iz po jedne klase ekvivalencije, gdje su svi ulazni podaci podjeljeni u takve klase Dobro je isprobati i 'rubove' tih klasa ekvivalencije

Primjer – procedura za sekvencijalno traženje

Primjer – procedura za sekvencijalno traženje

Klase ekv. ulaznih podataka Jasno je da u ovom primjeru možemo napraviti dvije klase

Klase ekv. ulaznih podataka Jasno je da u ovom primjeru možemo napraviti dvije klase ulaznih podataka - ulazi gdje je Key zaista element polja T - ulazi gdje Key nije element polja T Dalje, iskustva u radu s poljima govore nam da treba probati: - polje T s ekstremnom duljinom, u ovom slučaju s jednim elementom - element Key na rubovima, odnosno na sredini polja T

Ulazne partijcije za primjer sekvencijanog pretraživanja niza

Ulazne partijcije za primjer sekvencijanog pretraživanja niza

Strukturalno testiranje Dodatni test primjeri izvode se na osnovu poznavanja interne strukture testiranog dijela

Strukturalno testiranje Dodatni test primjeri izvode se na osnovu poznavanja interne strukture testiranog dijela softvera i korištenih algoritama Služimo se analizom programskog koda dotičnog dijela softvera kako bi odabrali dodatne test primjer, tj. da bi bolje podijelili domenu na klase ekvivalencije

Primjer: JAVA kod za binarno pretraživanje

Primjer: JAVA kod za binarno pretraživanje

Klase ekvivalencije za primjer s binarnim pretraživanjem Niz mora biti sortiran (poredan)! Niz se

Klase ekvivalencije za primjer s binarnim pretraživanjem Niz mora biti sortiran (poredan)! Niz se dijeli u tri bitna dijela – nastaju novi rubni uvjeti

Popis svih test primjera za binarno pretraživanje Imamo ukupno 8 test primjera (klasa ekvivalencije)

Popis svih test primjera za binarno pretraživanje Imamo ukupno 8 test primjera (klasa ekvivalencije)

Testiranje po putovima Posebna vrsta strukturalnog testiranja, test primjeri se biraju tako da se

Testiranje po putovima Posebna vrsta strukturalnog testiranja, test primjeri se biraju tako da se ispita svaki nezavisni put kroz dijagram toka kontrole testiranog dijela softvera Najprije moramo imati dijagram toka kontrole dotičnog dijela softvera Posebno se označavaju početak i kraj kontrole, a petlje i grananja se crtaju na poseban način Nezavisni put je onaj koji ide od početka do kraja i prolazi barem jednim novim lukom

Obrasci za crtanje dijagrama toka kontrole

Obrasci za crtanje dijagrama toka kontrole

Primjer dijagrama toka za binarno pretraživanje

Primjer dijagrama toka za binarno pretraživanje

Nezavisni putovi za primjer bin. pr. Početak je čvor 1, kraj je čvor 14

Nezavisni putovi za primjer bin. pr. Početak je čvor 1, kraj je čvor 14 (ovi brojevi čvorova odgovaraju brojevima linije u prog. kodu u JAVI) Postoje 4 nezavisna puta: - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 14 - 1, 2, 3, 4, 5, 6, 7, 11, 12, 5, . . . ; - 1, 2, 3, 4, 5, 6, 7, 11, 13, 5, . . . ;

Efikasnost testiranja po putovima 1/2 Ako se u test primjerima prođe svaki od ovih

Efikasnost testiranja po putovima 1/2 Ako se u test primjerima prođe svaki od ovih putova, onda smo sigurni da je: - svaka naredba bila izvršena barem jednom - svako grananje bilo isprobano za slučaj istine i za slučaj laži Ciklomatska složenost – maksimalni broj nezavisnih putova u dijagramu toka (broj lukova)-(broj čvorova)+2

Efikasnost testiranja po putovima 2/2 Kod kompliciranijih rutina (mnogo grananja i petlji) znatno je

Efikasnost testiranja po putovima 2/2 Kod kompliciranijih rutina (mnogo grananja i petlji) znatno je teže konstruirati sve moguće test primjere Zato postoje dinamički analizatori programa, koji mjere broj izvršavanja svake naredbe tijekom testiranja Tako možemo otkriti koji dijelovi programa još nisu dovoljno testirani, pa onda smišljamo nove test primjere kako bi i te dijelove testirali

Testiranje integracije Provodi se nakon što se manji dijelovi softvera udruže u veću cjelinu

Testiranje integracije Provodi se nakon što se manji dijelovi softvera udruže u veću cjelinu Cilj testiranja je otkriti greške koje nastaju zato što dijelovi na pogrešan način koriste međusobna sučelja Ova vrsta testiranja posebno je važna za objektno oblikovane sustave – objekti su definirani kroz svoje sučelje, nastaju greške čiji je uzrok interakcija, a ne rad pojedinog objekta

Test primjeri kod testiranja integracije Test primjeri se primjenjuju na cjelinu, a ne na

Test primjeri kod testiranja integracije Test primjeri se primjenjuju na cjelinu, a ne na pojedine dijelove

Tipovi sučelja između udruženih dijelova Proceduralno sučelje – jedan dio softvera poziva proceduru koja

Tipovi sučelja između udruženih dijelova Proceduralno sučelje – jedan dio softvera poziva proceduru koja pripada drugom dijelu softvera Parametarsko sučelje – podatak ili referenca na njega prenosi se kao parametar u pozivu procedure iz jednog dijela softvera u drugi Slanje poruka – jedan dio zahtjeva uslugu od drugog tako što mu šalje poruku, povratna poruka uključuje i rezultat izvršene usluge Zajednička memorija – blok memorije dostupan je raznim dijelovima softvera, jedan dio sprema podakte u blok, a drugi ih čita

Vrste grešaka u korištenju sučelja Nerazumjevanje sučelja – npr. kod proceduralnog sučelja, dio koji

Vrste grešaka u korištenju sučelja Nerazumjevanje sučelja – npr. kod proceduralnog sučelja, dio koji poziva rutinu za binarno pretraživanje ne zna da polje mora biti sortirano Pogrešna upotreba sučelja - npr. krivi tip podataka u parametarskom sučelju Greške u timingu – npr. kod slanja poruka ili kod zajedničke memorije, dijelovi koji proizvode, odnosno troše podatke rade na različitim brzinama

Naputci za testiranje integracije 1/2 Pregledati programski kod svakog dijela softvera i popisati sve

Naputci za testiranje integracije 1/2 Pregledati programski kod svakog dijela softvera i popisati sve interakcije jednog dijela s drugim U slučaju proceduralnog sučelja probati situaciju kad procedura vraća status greške U slučaju parametarskog sučelja oblikovati testove koji koriste ekstremne vrijednosti parametara Ako se prenose pointeri – isprobati primjere s nul-pointerima

Naputci za testiranje integracije 2/2 Ako se razmjenjuju poruke, probati stvoriti znatno više poruka

Naputci za testiranje integracije 2/2 Ako se razmjenjuju poruke, probati stvoriti znatno više poruka nego što se očekuje u normalnim okolnostima Ako se koristi zajednička memorija, varirati redoslijed aktiviranja dijelova softvera koji pristupaju toj memoriji (Testiranje integracije posebno je težak posao, greške se mogu pojaviti samo u iznimnim situacijama ili na neočekivanim mjestima, zato je dobro slijediti ove naputke!)

CASE alati za testiranje Uobičajeni alati koji se koriste za testiranje - Test manager

CASE alati za testiranje Uobičajeni alati koji se koriste za testiranje - Test manager – upravlja testiranjem tako da pokreće softver koji se testira za razne test podatke - Generator test podataka – generira test primjere koji odgovaraju specifikaciji - Prorok – daje očekivane rezultate testa (prototip ili prethodna verzija aplikacije) - Komparator datoteka – otrkiva razlike između stvarnih i očekivanih rezultata testa - Generator izvještaja – oblikuje izvještaj o rezultatima - Dinamički analizator – broji koliko puta se pojedina naredba izvršila - Simulator – simulira na primjer ciljno računalo na kojem se softver treba izvoditi