You are on page 1of 41

Testiranje softvera

Tok podataka
• Pokrivanje iskaza i odluka mogu prevideti
neke greške u kodu
• Pokrivanje putanja može dovesti do
nepraktičnog broja testova
• Samo neke od putanja mogu otkriti
dodatne greške
• Potrebno je razlikovati i izdvojiti važne
putanje
Tok podataka
• Intuicija – naredbe vrše međusobnu
interakciju kroz tok podataka
• Vrednost podatka se izračunava u jednoj,
a koristi u drugoj naredbi
• Pogrešna vrednost izračunavanja u jednoj
naredbi se može otkriti tek kad neka druga
naredba koristi tu vrednost
Tok podataka
• Testiranje metodom toka podataka koristi
graf toka kontrole (CFG) kako bi se
pronašle anomalije koje mogu uticati na
podatke
• Analiza ovih anomalija dovodi to novih
strategija odabira test putanja, koje
popunjavaju praznine između kompletnog
pokrivanja putanja (previše kompleksno) i
pokrivanja odluka i iskaza (ponekad ne
otkriva sve greške)
Tok podataka
Vrednost x u naredbi 6
je izračunata ili u 1 ili u 4

Loše izračunavanje se
može otkriti tek u 6
Tok podataka
• Testiranje toka podataka je metoda bele
kutije
• Prilikom odabira putanja za testiranje vodi
se računa o lokacijama dodele vrednosti
promenljivama i lokacijama njihove
upotrebe
• Korisne za izbor putanja programa koji
poseduju ugnježdene if-ove i petlje
Tok podataka
• Kategorije koje opisuju stanje podatka
1.D – definisan, kreiran, inicijalizovan
2.U – upotrebljen
– U proračunu
– Kao predikat uslova
Tok podataka
• Podatak smatramo da je definisan u
sledećim slučajevima:
– Pojava u deklaraciji
– Dodela nove vrednosti
– U pitanju je fajl koji je otvoren
– Dinamički alociran
–…
Tok podataka
• Podatak je upotrebljen kada je deo
proračuna ili deo predikata
• Promenljiva se koristi u proračunu (c) kada
se nalazi na desnoj strani izraza dodele
• Promenljiva se koristi u predikatu (p) kada
se direktno pojavi u tom predikatu
Tok podataka
Tok podataka
• Primer – povezati definicije i upotrebe za sledeći
program:
Tok podataka
Tok podataka
Tok podataka
Tok podataka
• (1, 6) i (4, 6) su
def – use parovi

• Definicije na 1, 4
• Upotreba na 6
Tok podataka
• DU par – par definicije i upotrebe neke
promenljive, takav da bar jedna DU
putanja postoji između definicije i upotrebe
• DU putanja – putanja u CFG počev od
definicije, do upotrebe jedne promenljive,
bez dodatnih definicija (promena vrednosti
te promenljive)
Tok podataka
• Dve putanje, 1,2,3,5,6
i 1,2,4,5,6
Tok podataka
• 1,2,3,5,6 je putanja bez dodatnih definicija,
između naredbi 1 i 6
• Ne postoji dodatna promena vrednosti x
• 1,2,4,5,6 nije putanja bez dodatnih
definicija
• Vrednost x je promenjena u 4
• (1,6) je DU par zato što postoji bar jedna
putanja - 1,2,3,5,6 bez dodatnih definicija
promenljive x
Tok podataka
• Postoji nekoliko kriterijuma pokrivenosti
• Najbitniji kriterijumi:
• Svi DU parovi: svaki DU par je izvršen bar
jednim testom (još se zove sve upotrebe)
• Sve DU putanje: svaka prosta (bez petlje)
putanja je izvršena bar jednim testom
• Sve definicije: za svaku definiciju, postoji bar
jedan test koji izvršava DU par koji sadrži tu
definiciju
Tok podataka
• Svi DU parovi (upotrebe)
• Potrebno je testovima
pokriti:

• Def 1, upotreba 6
• Def 1, upotreba 7
• Def 4, upotreba 6
• Def 4, upotreba 7
Tok podataka
• Sve DU putanje
• Potrebno je testovima
pokriti:

• Def 1, upotreba 9 (kroz 7)


1-2-3-5-6-7-9
• Def 1, upotreba 9 (kroz 8)
1-2-3-5-6-8-9
• Def 4, upotreba 9 (kroz 7)
4-5-6-7-9
• Def 4, upotreba 9 (kroz 8)
4-5-6-8-9
Tok podataka
• Sve definicije
• Potrebno je pokriti:

• Def 1, upotreba 6
ILI
Def 1, upotreba 7

• Def 4, upotreba 6
ILI
Def 4, upotreba 7
Tok podataka
• Dva tipa upotrebe promenljivih
• Upotreba se naziva predikatskom (p-use) ako se
pojavljuje u predikatskom izrazu neke naredbe
kontrole toka (if, while…)
• U suprotnom, naziva se računskom
(computational use ili c-use)
• Svaka je podskup DU parova (svih upotreba)
• Sve p-upotrebe + sve c-upotrebe = svi DU
parovi (sve upotrebe)
Tok podataka
Tok podataka
Tok podataka
Tok podataka
• Sve definicije – 100% pokrivenost ako izvršimo bar po
jedan DU par koji je sadrži
Tok podataka
• Svi DU parovi – 100% pokrivenost, svaki DU par je
pokriven bar jednom
Tok podataka
• Sve DU putanje
• 100% pokrivenost – svaka prosta putanja od svake
definicije do svih upotreba te definicije izvršena
• Jednostavna putanja u CFG – svaki njen deo se
posećuje minimalan broj puta (npr. otvorene putanje, 1
iteracija kroz petlju)
• Na prethodnom primeru, osim putanja koje pokrivaju
testovi za sve DU parove, posto je još dve putanje
0-1-4-5-9-10 i 1-4-5-9-10
• Nije ih moguće pokriti testovima
Tok podataka
• Postoje još neke strategije osim tri najopštije koje su već
opisane (pokrivanje definicija, DU parova, DU putanja)
• Zasnovane na tipu upotreba promenljivih (p-use i c-use):
1. Pokrivanje svih p-upotreba
2. Pokrivanje svih c-upotreba
3. Sve c-upotrebe, neke p-upotrebe
4. Sve p-upotrebe, neke c-upotrebe

• praktično podskup pokrivanja DU parova


• Pokrivanje DU parova zapravo znači pokrivanje svih p i c
upotreba
Tok podataka
• Sve p-upotrebe
Tok podataka
• Sve c-upotrebe
Tok podataka
• U nekim istraživanjima upoređene su
različite strategije testiranja na skupu od
14 Kernighan i Plauger programa
• To je skup matematičkih programa sa
poznatim bagovima koji se često koriste
za evaluaciju strategija testiranja
• U poređenju sa pokrivanjem odluka otkriva
veći broj bagova
Tok podataka
Tok podataka
• Testiranje svih upotreba (DU parova) u praksi
ima najbolje rezultate i najisplativije je
• U praksi je pokazano da ima prosečno dva puta
više potrebnih testova od pokrivanja odluka, ali
su rezultati mnogo bolji
• Potrebno je shvatiti da su podaci podjednako
važni kao i kod
• Testiranje toka podataka ispunjava prazninu
između pokrivanja svih putanja i pokrivanja
odluka
Testiranje petlji
• Oblik testiranja koji se kompletno fokusira na ispravnost
konstrukcija petlji
• Tehnički, može se reći da spada u deo tehnika toka
kontrole
• Testiraju se sledeći tipovi petlji:
– Proste petlje
– Ugnežđene petlje
– Nadovezane petlje
– Nestrukturirane petlje
Testiranje petlji
• Zašto se radi testiranje petlji?
1. Može otkriti probleme u ponavljanju iteracija
2. Može otkriti probleme sa performansama
3. Može otkriti neinicijalizovane promenljive unutar
petlji
4. Može otkriti probleme u inicijalizaciji petlje
Testiranje petlji
• Proste petlje
Treba primeniti sledeće testove (n je
maksimum mogućih iteracija petlje):
1. Preskočiti potpuno telo petlje,
2. Jedna iteracija petlje,
3. m iteracija petlje, gde je m<n,
4. n - 1, n, n + 1 iteracija.
Testiranje petlji
• Višestruke petlje

nadovezane ugnježdene nestrukturirane


Testiranje petlji
• Ugnježdene petlje
• Za testiranje ugneždenih petlji ne može se primeniti
prethodno opisana tehnika za proste petlje, pošto bi to
dovelo do geometrijskog povećanja broja test primera.
• Jedan pristup za ugneždene petlje bi bio:
1. Početi sa najugneždenijom petljom.
2. Sprovesti testove za jednostruku petlju na najugneždenijoj petlji
držeći ostale petlje na minimumu iteracija
3. Preći na okružujuću petlju, sprovodeći testove opisane u koraku
2. za nju dok se okružujuće petlje drže na minimumu iteracija, a
ugneždena petlja ili petlje na tipičnim vrednostima iteracija.
4. Ponavljati korak 3. sve dok se sve petlje ne istestiraju.
Testiranje petlji
• Nadovezane petlje
• Petlje koje slede jedna za drugom mogu se
tretirati kao jednostuke ako su nezavisne jedna
od druge.
• Nestrukturirane petlje
• Ova vrsta petlji (na primer, nisu ugneždene nego
se “seku”) je indikator lošeg stila programiranja.
Ovakve petlje ne treba testirati nego ih
eliminisati restrukturiranjem programa.

You might also like