You are on page 1of 21

TESTAREA PROGRAMELOR

1. Introducere
Un test const n execuia programului pentru un set de date de intrare convenabil ales,
pentru a verifica dac rezultatul obinut este corect.
Un caz de test este un set de date de intrare mpreun cu datele de ieire pe care
programul ar trebui s le produc. De exemplu, valorile coeficienilor a,b,c ai unei ecuaii
de gradul doi mpreun cu valorile x1, x2, n testul unui program de rezolvare a ecuaiilor
de gradul doi. azurile de test se aleg astfel nc!t s fie puse n eviden, dac este
posibil, situaiile de funcionare necorespunztoare.
"estarea este activitatea de concepie a cazurilor de test, de execuie a testelor i de
evaluare a rezultatelor testelor, n diferite etape ale ciclului de via al programelor.
"e#nicile de testare sunt mult mai costisitoare dec!t metodele statice $inspectrile i
demonstrrile de corectitudine%, de aceea n prezent se apreciaz c te#nicile statice pot fi
folosite pentru a le completa pe cele dinamice, obinndu&se astfel o reducere a costului
total al procesului de verificare i validare. 'etodele traditionale de verificare(validare
presupun realizarea verificrii(validrii prin inspectri i teste. )ceste activiti ocup
circa *+&,+- din efortul total de dezvoltare, n funcie de natura aplicaiei.
.rin testare nu se poate demonstra corectitudinea unui program. )ceasta deoarece n cele
mai multe cazuri este practic imposibil s se testeze programul pentru toate seturile de
date de intrare care pot conduce la execuii diferite ale programului. "estarea poate doar
s demonstreze prezena erorilor ntr&un program. /ntr&un sens, testarea este un proces
distructiv, deoarece urmrete s determine o comportare a programului neintenionat de
proiectani sau implementatori. Din acest punct de vedere testarea nu trebuie s fie fcut
de persoanele care au contribuit la dezvoltarea programului. .e de alt parte conoaterea
structurii programului si a codului poate fi foarte utila pentru alegerea unor date de test
relevante.
1
"estarea n vederea verific rii programului folosete date de test alese de
participanii la procesul de dezvoltare a programului. 0a este efectuat la mai multe
nivele1 la nivel de unitate funcional, de modul, de subsistem, de sistem.
"estarea n vederea valid rii programului, numit i testare de acceptare, are drept
scop stabilirea faptului c programul satisface cerinele viitorilor utilizatori. 0a se
efectueaz n mediul n care urmeaz s funcioneze programul, deci folosindu&se date
reale. .rin testarea de acceptare pot fi descoperite i erori, deci se efectueaz i o
verificare a programului.
2. Testarea pe parcursul ciclului de via al unui prora!.
2.1. "estele 2unitare2
"estarea unui modul $o funcie, o clas, unitate .ascal, un pac#et )D), etc.% este
realizat de programatorul care implementeaz modulul. "oate celelalte teste sunt
efectuate, n general, de persoane care nu au participat la dezvoltarea programului.
3copul testarii unui modul este de a se stabili ca modulul este o implementare
corecta a specificatiei sale $conforma cu specificatia sa%. 3pecificatia poate fi neformala
sau formala. De exemplu1
& o specificaie de pre i post condiii pentru o funcie sau procedur4
& un invariant al clasei, care specific mulimea strilor posibile ale fiecrui obiect din
clasa respectiv, mpreun cu specificaii de pre i post condiii la nivelul funciilor
membru4
& o specificaie algebric a clasei4
& o specificaie 5(566 etc.
7n cursul testarii unui modul, modulul este tratat ca o entitate independent, care
nu necesit prezena altor componente ale programului. "estarea izolat a unui modul
ridic dou probleme1
- simularea modulelor apelate de cel testat4
2
- simularea modulelor apelante.
'odulele prin care se simuleaz modulele apelate de modulul testat se numesc
module 2ciot2 $n englez, 2stub2% . Un modul 2ciot2 are aceeai interfa cu modulul
testat i realizeaz n mod simplificat funcia sa. De exemplu, dac modulul testat
apeleaz o funcie de sortare a unui vector, cu antetul1
void sortare$int n, int 8lista%4
se poate folosi urmtoarea funcie 2ciot21
void sortare$int n, int 8lista%
9 int i4
printf$2 :n ;ista de sortat este12%4
for$i<+4 i=n4 i66% printf$2-d2, lista>i?%4
(( se citeste lista sortata, furnizata de testor
for$i<+4 i=n4 i66% scanf$2-d2, lista>i?%4
@
Un modul 2ciot2 se poate reduce eventual la o tabel de perec#i de forma1 2valori ale
parametrilor de intrare la un apel & rezultatul prevzut2.
azurile de apel ale modulului testat de ctre celelalte module ale programului
sunt simulate n cadrul unui 2modul driver2. 'odulul driver apeleaz modulul testat
furnizndu&i ca date de intrare datele de test ale modulului. Datele de test pot fi generate de
modulul driver, pot fi preluate dintr&un fiier sau furnizate de testor ntr&o manier
interactiv.

Aigura "1. 3tructura programului executabil
pentru testarea izolata a unui modul.
*
'odul driver
'odul ciot
'odulul testat
'odul ciot

2.2. "estele de integrare
3unt dedicate verificrii interaciunilor dintre module, grupuri de module,
subsisteme, p!n la nivel de sistem. 0xist mai multe metode de realizare a testelor de
integrare.
"estele de integrare presupun, ca i testele unitare, realizarea de module 2ciot2 i
module 2driver2. Bumrul de module 2driver2 i de module 2ciot2 necesare n testele de
integrare depinde de ordinea n care sunt testate modulele $metoda de integrare%. "estele
de integrare necesit de asemenea instrumente de gestiune a versiunilor i a
configuraiilor.
2.2.1. 'etoda 2big&bang2
3unt integrate ntr&un program executabil toate modulele existente la un moment
dat. 'odulele 2driver2 i 2ciot2 necesare sunt de asemenea integrate. 'etoda este
periculoas cci toate erorile apar n acelai timp i localizarea lor este dificil.
2.2.2. 7ntegrare progresiva

'etodele de integrare progresiv sunt mult mai eficiente. 7n fiecare moment se adaug
ansamblului de module integrate numai un singur modul. )stfel, erorile care apar la un
test provin din modulul care a fost ultimul integrat.
2.2.2.1. 7ntegrarea ascendent $2de Cos n sus2%
3e ncepe prin testarea modulelor care nu apeleaz alte module, apoi se adaug
progresiv module care apeleaz numai modulele deCa testate, p!n c!nd este asamblat
ntregul sistem. 'etoda necesit implementarea c!te unui modul 2driver2 pentru fiecare
modul al programului $i nici un modul 2ciot2%.
)vantaCele test rii de Cos n sus
D
Bu sunt necesare module 2ciot2. 'odulele 2driver2 se implementeaz mult mai
uor dec!t modulele 2ciot2. 0xist c#iar instrumente care produc automat module
2driver2.
DezavantaCele test rii de Cos n sus
1. .rogramul pe baza cruia se efectueaz validarea cerinelor este disponibil
numai dup testarea ultimului modul.
2. orectarea erorilor descoperite pe parcursul integrrii necesit repetarea
procesului de proiectare, codificare i testare a modulelor. .rincipalele erori de proiectare
sunt descoperite de abia la sf!rit, c!nd sunt testate modulele principale ale programului.
ceea ce, n general, conduce la reproiectare i reimplementare.
2.2.2.2. 7ntegrarea descendent $2de sus n Cos2%
3e ncepe prin testarea modulului principal, apoi se testeaz programul obinut
prin integrarea modulului principal i a modulelor direct apelate de el, i aa mai departe.
'etoda presupune implementarea unui singur modul 2driver2 $pentru modulul principal%
i a c!te unui modul 2ciot2 pentru fiecare alt modul al programului.
7ntegrarea descendent poate avea loc pe parcursul unei implementri descendente
a programului. 'odulul principal este testat imediat ce a fost implementat, moment n
care nu au fost nc implementate modulele apelate de el. De aceea, pentru testare este
necesar s se implementeze module 2ciot2. 7n continuare, pe msur ce se implementeaz
modulele de pe nivelul ierar#ic inferior, se trece la testarea lor folosind alte module
EciotF, .a.m.d. 7n fiecare pas este nlocuit un singur modul 2ciot2 cu cel real.
)vantaCele test rii de sus n Cos
1. 0rorile de proiectare sunt descoperite timpuriu, la inceputul procesului de
integrare, atunci c!nd sunt testate modulele principale ale programului.
)ceste erori fiind corectate la nceput, se evit reproiectarea i
reimplementarea maCoritii componentelor de nivel mai cobor!t, aa cum se
nt!mpl c!nd erorile respective sunt descoperite la sf!ritul procesului de
integrare.
2. .rogramul obtinut este mai fiabil caci principalele module sunt cel
,
mai mult testate.
*. .rin testarea modulelor de nivel superior se poate considera c sistemul n
ansamblul su exist dintr&o faza timpurie a dezvoltrii i deci se poate exersa cu el n
vederea validrii cerinelor4 acest aspect este de asemenea, foarte important n privina
costului dezvoltrii sistemului.
DezavantaCele test rii de sus n Cos
1. 0ste necesar s se implementeze c!te un modul 2ciot2 pentru fiecare modul al
programului, cu excepia modulului principal.
2. 0ste dificil de simulat prin module 2ciot2 componente complexe i componente
care conin n interfa structuri de date.
*. /n testarea componentelor de pe primele nivele, care de regul nu afieaz
rezultate, este necesar s se introduc instruciuni de afiare, care apoi sunt extrase, ceea
ce presupune o nou testare a modulelor.
)ceste dezavantaCe pot fi reduse aplicand te#nici #ibride, de exemplu, folosind n
locul unor module 2ciot2, direct modulele reale testate. 7ntegrarea nu trebuie sa fie strict
descendenta. De exemplu, experienta arata ca este foarte util sa se nceapa prin integrarea
modulelor de interfa utilizator. )ceasta permite continuarea integrrii n condiii mai
bune de observare a comportrii programului.
2.*. "estele de sistem
)cestea sunt teste ale sistemului de programe i ec#ipamente complet. 3istemul
este instalat i apoi testat n mediul su real de funcionare. 3unt teste de conformitate cu
specificaia cerintelor de sistem $softGare% 1
teste functionale, prin care se verifica satisfacerea cerintelor functionale
teste prin care se verifica satisfacerea cerintelor ne&functionale 1
o de performan,
o de fiabilitate,
o de securitate, etc.
)desea, testele de sistem ocup cel mai mult timp din ntreaga perioad de testare.
H
2.D. "estele de acceptare $validare%
3unt teste de conformitate cu produsul solicitat, conform contractului cu clientul $&
I3pecificatia cerintelor utilizatorilor%. )ceste teste sunt uneori conduse de client.
.entru unele produse softGare, testarea de acceptare are loc n dou etape1
1."estarea alfa1 se efectueaz folosindu&se specificaia cerinelor utilizatorilor,
p!n c!nd cele dou pri cad de acord c programul este o reprezentare satisfctoare a
cerinelor.
2."estarea beta1 programul este distribuit unor utilizatori selecionai, realiz!ndu&
se astfel testarea lui n condiii reale de utilizare.
2.,. "estele regresive.
3e numesc astfel testele executate dup corectarea erorilor, pentru a se
verifica dac n cursul corectrii nu au fost introduse alte erori. )ceste teste sunt efectuate
de regul n timpul ntreinerii. .entru uurarea lor este necesar s se ar#iveze toate testele
efectuate n timpul dezvoltrii programului, ceea ce permite, n plus, verificarea automat
a rezultatelor testelor regresive
". #eter!inarea ca$urilor de test
"estarea unui modul, a unui subsistem sau c#iar a ntregului program presupune
stabilirea unui set de cazuri de test.
Un caz de test cuprinde1
& un set de date de intrare4
J
& funcia ( funciile exersate prin datele respective4
& rezultatele $datele de ieire% ateptate4
/n principiu $teoretic% testarea ar trebui s fie ex#austiv, adic s asigure
exersarea tuturor cilor posibile din program. )desea o astfel de testare este imposibil,
de aceea trebuie s se opteze pentru anumite cazuri de test. .rin acestea trebuie s se
verifice r spunsul programului at!t la intr ri valide c!t i la intr ri nevalide.
3unt dou metode de generare a cazurilor de test, care nu se exclud, de multe ori
fiind folosite mpreun. )mbele metode pot sta la baza unor instrumente de generare
automat a datelor $cazurilor% de test1
1. azurile de test se determin pe baza specifica iei componentei testate, fr
cunoaterea realizrii ei4 acest tip de testare se numete
testare Ecutie neagraF $EblacK boxF%.
2. azurile de test se determin prin analiza codului componentei testate. )cest tip de
testare se mai numete i testare Ecutie transparentF, sau
testare structural .
*.1. "estarea Ecutie neagr F.
azurile de test trebuie s asigure urmtoarele verificri1
& reacia componentei testate la intrri valide4
& reacia componentei la intrri nevalide4
& existena efectelor laterale la execuia componentei, adic a unor efecte care nu rezult
din specificaie4
& performanele componentei $dac sunt specificate%.
Deoarece n marea maCoritate a cazurilor testarea nu poate fi efectuat pentru toate
seturile de date de intrare $testare ex#austiv%, n alegerea datelor de test plec!nd de la
specificaii se aplic unele metode fundamentate teoretic precum i o serie de euristici.
)legerea cazurilor de test folosind clasele de ec#ivalen
L
azurile de test pot fi alese partiion!nd at!t datele de intrare c!t i cele de ieire
ntr&un numr finit de clase de ec#ivalen. 3e grupeaz ntr&o aceeai clas datele care,
conform specificaiei, conduc la o aceeai comportare a programului.
M dat stabilite clasele de ec#ivalen ale datelor de intrare, se alege c!te un
eantion $de date de test% din fiecare clas. De exemplu, dac o dat de intrare trebuie s
fie cuprins ntre 1+ i 1N, atunci clasele de ec#ivalen sunt1
1% valori = 1+
2% valori ntre 1+ i 1N
*% valori I 1N
3e pot alege ca date de test1 N, 1,, 2+.
0xperiena arat c este util s se aleag date de test care sunt la frontiera claselor de
ec#ivalen. )stfel, pentru exemplul de mai sus ar fi util s se testeze programul pentru
valorile de intrare 1+ i 1N.
)lte cazuri de test se aleg astfel nc!t la folosirea lor s se obin eantioane din
clasele de ec#ivalen ale datelor de ieire $dun interiorul si de la frontierele lor%.
0xemplu1
Aie un program care trebuie s produc ntre * i H numere cuprinse ntre 1+++ i 2,++.
)tunci se vor alege intrri astfel nc!t ieirea programului s fie1
& * numere egale cu 1+++
& * numere egale cu 2,++
& H numere egale cu 1+++
& H numere egale cu 2,++
& rezultat eronat1 mai puin de * numere sau mai mult de H numere sau valori n afara
intervalului >1+++..2,++?
& ntre * i H numere cuprinse ntre 1+++ i 2,++
7n alegerea datelor de test trebuie s se elimine redundanele rezultate din
considerarea at!t a claselor de ec#ivalen de intrare c!t i a celor de ieire.
Unele programe trateaz datele de intrare n mod secvenial. /n aceste cazuri se
pot detecta erori n program test!ndu&l cu diverse combinaii ale intrrilor n secven.
'etoda de partiionare n clase de ec#ivalen nu aCut n alegerea unor astfel de
N
combinaii. Bumarul de combinaii posibile este foarte mare c#iar i pentru programe
mici. De aceea nu pot fi efectuate teste pentru toate combinaiile. n aceste cazuri este
esenial experiena celui care alctuiete setul de cazuri de test.
"estarea 2cutie neagr2 este favorizat de existena unei specificaii formale a
componentei testate.
0xemplu1
Aie o funcie de cutare a unui numr ntreg ntr&un tablou de numere ntregi,
specificat astfel1
int cauta $int x>?, int nrelem, int numar%4
pre 1 nrelem I + and e%ist i in >+..nrelem&1? 1 x>i? < numar
post 1 x E>cauta$x,nrelem,numar%? < numar and xO < xPP
error 1 cauta$x,nrelem,numar% < &1 and xO < xPP
7ntrrile valide sunt cele care satisfac pre&condiia. 0fectele laterale ale funciei
2cauta2 s&ar putea reflecta n modificarea unor variabile globale. .entru evidenierea lor
ar trebui ca la fiecare execuie de test a funciei s se vizualizeza valorile variabilelor
globale nainte i dup apelul funciei. )ceste verificri pot fi limitate, nlocuindu&se cu
inspectarea codului funciei, din care rezult evantualitatea modificrii unor variabile
globale.
3etul minim de date de test trebuie s verifice funcia n urmtoarele situaii1
1% tablou vid $nrelem<+%
2% tablou cu un singur element $nrelem<1%
a% valoarea parametrului 2numar2 este n tablou
b% valoarea parametrului 2numar2 nu este n tablou
*% tablou cu numr par de elemente $2nrelem2 este un numr par%
a% 2numar2 este primul n tablou
b% 2numar2 este ultimul n tablou
c%2numar2 este ntr&o poziie oarecare a tabloului
d%2numar2 nu este n tablou
D% tablou cu numr impar de elemente $2nrelem2 este impar%
i a,b,c,d ca la punctul *.
1+
Din specificaie rezult c funcia nu trebuie s modifice tabloul4 de aceea, apelul
su n programul de test trebuie s fie precedat i urmat de vizualizarea parametrului
tablou.
3etul cazurilor de test ar putea fi1
1% intrri1 orice tablou
nrelem<+
orice numr
ieiri 1 valoarea funciei < &1
tabloul nemodificat
2% intrri1 x>+? < 1+
nrelem<1
numr < 1+
ieiri 1 valoarea funciei < +
tabloul nemodificat1 x>+?< 1+
*% intrri1 x>+?< 1+
nrelem<1
numr < 1,
ieiri 1 valoarea funciei < &1
tabloul nemodificat1 x>+? < 1+
D% intrri1 x>+? < 1+, x>1? < 2+
nrelem<2
numr < 1+
ieiri 1 valoarea funciei < +
tabloul nemodificat1 x>+? < 1+, x>1? < 2+
............................................................................................................
7n alegerea cazurilor de test s&au folosit urmtoarele euristici1
programele de cutare prezint erori atunci c!nd elementul cutat este primul sau
ultimul in structura de date4
de multe ori programatorii negliCeaz situaiile n care colecia prelucrat n program
are un numr de elemente neobinuit, de exemplu zero sau unu4
11
uneori, programele de cutare se comport diferit n cazurile1 numr de elemente din
colecie par, respectiv numr de elemente din colecie impar4 de aceea sunt testate
ambele situaii
oncluzii1
1. 3etul de cazuri de test a fost determinat numai pe baza specifica iei componentei i a
unor euristici $este vorba de experien a celui care efectueaz testele%, deci fr s se
cunoasc structura intern a componentei, care este tratat ca o Ecutie neagrF. 0ventuala
examinare a codului surs nu urmrete analiza fluxului datelor i a cilor de execuie, ci
doar identificarea variabilelor globale cu care componenta interacioneaz.
2. lasele de ec#ivalen se determin pe baza specifica iei.
*. 3e aleg drept cazuri de test eantioane din fiecare clas de ec#ivalen a datelor de
intrare. 0xperien a arat c cele mai utile date de test sunt acelea aflate la frontierele
claselor de ec#ivalen .
D. azurile de test alese verific componenta doar pentru un numr limitat de eantioane
din clasele de ec#ivalen ale datelor de intrare4 faptul c din testare a rezultat c ea
funcioneaz corect pentru un membru al unei clase nu este o garanie c va funciona
corect pentru orice membru al clasei.
,. 3e determin de asemenea clasele de ec#ivalen ale datelor de ieire i se aleg pentru
testare datele de intrare care conduc la date de ieire aflate la frontierele acestor clase.
H. .artiionarea n clase de ec#ivalen nu aCut la depistarea erorilor datorate secvenierii
datelor de intrare. 7n aceste cazuri este util experiena programatorului. Qeprezentarea
comportrii programului printr&o diagram de stri&tranziii poate fi folositoare n
determinarea secvenelor de date de intrare de utlizat n testarea programului.
"estele Ecutie neagrF, numite i teste funcionale sunt utile nu numai pentru
testarea programului. 0le pot fi utilizate $ca teste statice% pentru verificarea unei
specificaii intermediare fa de o specificaie de nivel superior.
E3lbiciunileF testelor funcionale1
12
- Bu este suficient s se verifice c programul satisface corect toate funciile
specificate4 unele proprieti interne, nespecificate, ca de exemplu timpul de rspuns,
nu sunt verificate4
- .rogramul este testat pentru Eceea ce trebuie s facF conform specificaiilor i nu i
pentru ceea ce face n plus, de exemplu pentru ca implementarea s fie mai eficient
sau pentru a facilita reutilizarea4
- 7n absena unui standard n privina specificaiilor formale, te#nicile de testare
functional sunt eterogene
Testarea structural
)cest tip de testare se bazeaz pe analiza fluxului controlului la nivelul
componentei testate. .rincipalul instrument folosit n analiz este graful program sau
graful de control. )cesta este un graf orientat, ale crui noduri sunt de dou tipuri1 noduri
care corespund Eblocurilor de instruciuni indivizibile maximaleF i noduri care
corespund instruciunilor de decizie. Rlocurile de instruciuni indivizibile maximale sunt
poriuni liniare maximale de instruciuni care se execut ntotdeauna n aceeai secven.
Aiecare bloc are un singur punct de intrare i un singur punct de ieire. )rcele reprezint
transferul controlului ntre blocurile(instruciunile componentei program.
Sraful program are un nod unic de intrare i un nod unic de ieire. Dac exist
mai multe puncte de intrare sau mai multe puncte de ieire, acestea trebuie s fie unite
ntr&unul singur$care se adaug suplimentar%. Bodul de intrare are gradul de intrare zero,
iar cel de ieire are gradul de ieire zero.
Aie urmtorul text de program1
f1<fopen$T.%4
f2<fopen$T.%4
fscanf$f1, F-fF, x%4
fscanf$f1, E-fF, U%4
z<+4
G#ile$xI<U%
9 x&<U4
z664
@
1*
fprintf$f2, E-dF, z%4
fclose$f1%4 fclose$f2%4
"extul este decupat n urmtoarele blocuri1
1. f1<fopen$T.%4
f2<fopen$T.%4
fscanf$f1, F-f, x%4
fscanf$f1, E-f, U%4
z<+
2. G#ile$xI<U%
*. x&<U4
z664
D. fprintf$f2, E-dF, z%4
fclose$f1%4
fclose$f2%4
Sraful de control este redat n figura "2.
3tart
1
2
xI<U
*
D
3top
Aigura "2
3e consider cile care ncep cu nodul de intrare i se termin cu nodul de ieire. "estarea
structural const n execuia componentei testate pentru date de intrare alese astfel nc!t
1D
s fie parcurse unele dintre aceste ci. Bu este necesar, i n general este imposibil, s se
execute toate cile de la intrare la ieire ale unui program sau ale unei componente
program. .rezena ciclurilor conduce la un numr foarte mare $deseori infinit% de ci. De
asemenea, anumite ci sunt ne&executabile.
"estele structurale favorizeaz evidenierea urmtoarelor tipuri de erori logice1
1. i absente n graful program & ca urmare a ignorrii unor condiii
$de exemplu1 test de mprire la zero%4
2. 3electarea unei ci necorespunztoare & datorit exprimrii
incorecte $de multe ori incomplete% a unei condiii4
*. )ciune necorespunztoare sau absent$de exemplu1 calculul unei
valori cu o metod incorect, neatribuirea unei valori unei anumite
variabile, apelul unei proceduri cu o list de argumente incorect,
etc.%.
Dintre acestea, cel mai simplu de depistat sunt erorile de tip *. .entru descoperirea lor
este suficient s se asigure execuia tuturor instruciunilor programului.
)legerea cilor de testat are loc pe baza unor Ecriterii de acoperireF a grafului de
control. Dintre acestea cele mai cunoscute sunt1
0xecuia tuturor instruciunilor
azurile de test se aleg astfel nc!t s se asigure execuia tuturor instruciunilor
componentei testate. )cesta este un criteriu de testare minimal. 0l nu este
ntotdeauna satisfctor. De exemplu, pentru testarea componentei cu graful de
mai Cos, pe baza criteriului execuiei tuturor instruciunilor, este suficient s se
aleag date de test care asigur execuia conditiei si a instruciuilor 71 i 72. Bu
se testeaz cazurile n care condiia are valoarea A);30. "ransferul controlului
pentru astfel de cazuri poate fi eronat.
A);30 "QU0
condiie
1,
71
Aigura "*.
"raversarea tuturor arcelor
azurile de test se aleg astfel nc!t s se asigure traversarea fiecrui arc al grafului
program cel puin pe o cale. .e baza acestui criteriu se va putea verifica dac transferul
controlului este corect pentru valoarea A);30 a condiiei, n exemplul de mai sus. 7n
acelai timp, criteriul nu impune traversarea mai mult de o dat a unui ciclu. )numite
erori apar numai atunci c!nd un ciclu este traversat de mai multe ori.
"raversarea tuturor cilor
.e baza acestui criteriu ar trebui ca testele s asigure traversarea tuturor cilor
componentei testate. .entru maCoritatea programelor nu se poate aplica acest criteriu,
deoarece numrul de ci de execuie este infinit. riteriul poate fi restricionat, de
exemplu asigur!nd traversarea tuturor cilor cu o lungime mai mic sau egal cu o
constant dat.
.roblema alegerii cazurilor de test const din trei subprobleme distincte1
- selectarea cilor de testat4
- alegerea datelor de test pentru execuia fiecrei ci selectate4
- determinarea rezultatelor care trebuie s se obin la fiecare test.
7n continuare prezentm o metod de alegere a datelor de test pe baza
criteriului traversrii tuturor arcelor grafului de control. 'etoda presupune parcurgerea
urmtoarelor etape1
1. 3e determin setul cilor de testat, , astfel nc!t1
a% c este o cale de la nodul de intrare la nodul de iesire4
b% fiecare arc din graful de control este cuprins ntr&o cale c
c% lung $c% < minima
1H
c
2. 3e determin predicatul fiecrei ci, c , Qc$7%, unde
7 < $i1, i2, T, in% este vectorul variabilelor de intrare4
*. .entru fiecare Qc$7%, c , se determin un set de atribuiri Vc pentru
variabilele de intrare care satisfac predicatul cii1
Qc$Vc% < true
)tunci setul datelor de test este1
D" < 9 Vc W c , Vc D7, Qc$Vc% < true @,
n
unde D7 < V DiK iar DiK este domeniul de valori al variabilei de intrare iK.
K<1
D. .entru fiecare Vc D", se determina valorile corecte ale variabilelor de iesire
E%e!plu
Aie urmatorul graf program 1
Aigura "D
Mbs1 testul v2Iv1 trebuie inlocuit cu v2Ii1.
1J
1% )legerea cailor 1
3e poate alege setul de ci 1
< 9c1, c2 @,
unde c1 < 91,2,*,D,,,*,H,J@
c2 < 91,2,*,H,J@
7n afara condiiilor menionate s&au mai avut n vedere urmtoarele criterii1
- alegerea unei ci care s nu conina ciclul
- alegerea unei ci care s conina ciclul, parcurg!ndu&l o singura dat, pentru ca
lungimea cii s fie minim.
2% Determinarea predicatelor de cale
M metod de determinare a predicatului unei ci const n concatenarea condiiilor de
ramificare de pe calea respectiv pe msura ce sunt nt!lnite atunci c!nd calea este
parcursa de la nodul de ieire pan la cel de intrare. "otodat, la nt!lnirea unei atribuiri, U
0, dac U face parte din expresia curent a predicatului, se substituie U cu 0.
7n unele cazuri, predicatul obinut printr&o singur parcurgere a unui ciclu este fals pentru
orice atribuire a variabilelor de intrare. Un astfel de caz corespunde unei ci
neexecutabile. 7n consecint se va alege un predicat n care ciclul este parcurs de dou
sau de mai multe ori.
onstruirea predicatelor de cale
Qc1 < v2 I i1
* se substituie v2 cu $v2 6 v*%
Qc1 < $v26 v*% I i1
,
Qc1 < $v26 $v*62%% I i1
D
Qc1 < $v26 v*62% I i1 X$v2 I i1%
*
Qc1 < $$v26 v*%6v*62% I i1 X$$v26 v*% I i1%
1L
2
Qc1 < $D I i1% X $1 I i1%
1
Qc1 < $D I i1% $i1 I< 1% $i1 I< +%
=<I
Qc1 < $1 =< i1 = D% . alea c1 este executat pentru orice valoare a lui i1 care satisface
acest predicat.
3tabilirea rezultatelor execuiei fiecrei ci pentru fiecare set de date de test ales, necesit
cunoaterea transformrii realizate de componenta analizat asupra datelor de intrare.
)ceasta rezult din specificaia componentei. 7n cazul de fa trebuie s se stabileasc ce
valoare trebuie sa aib iesirea e1 pentru fiecare valoare aleas pentru i1. .rogramul
reprezentat prin graful de control analizat calculeaz numarul maxim de termeni ai sumei
16*6,6T6$2C61%, C I< +, care pot fi adunati a.. suma lor s fie mai mica dec!t i1.
)stfel se poate verifica c pentru orice 1=< i1 =<D, e1 < 1, cci dac s&ar aduna doi
termeni, 16* < D, DIi1.
azul de test al cii c1 poate fi1 i1<2, e1 < 1.
alea c2 < 91,2,*,H,J@
Qc2 < v2 I i1
*
Qc2 < $v26 v*% I i1
2
Qc2 < + 6 1 I i1
1
Qc2 < $i1 = 1% $i1 I< +%
=<I
Qc2 < $+ =< i1 = 1% <I Qc2 < $i1 < +%
azul de test1 i1 < +, e1 < +.
E3labiciunileF testelor structurale sunt1
1N
- testele selectionate depind numai de structura programului4 ele trebuie recalculate la
fiecare modificare4 nu pot fi reutilizate eficient de la o versiune la alta
- testele selecionate acoper cazurile legate de ceea ce EfaceF componenta testat i nu
de ceea ce Etrebuie s facF4 astfel, dac un caz particular a fost uitat in faza de
implementare, testul structural nu releva aceasta deficien4 el trebuie deci completat
cu testul funcional. 'ai exact trebuie s se nceap cu testarea funcional care se
completez cu testarea structural.
Testele statistice
"estele statistice se efectueaza in timpul testarii de sistem.
3e numesc astfel testele n care datele de test se aleg aleator, dup o lege de probabilitate
care poate fi1
- uniform pe domeniul datelor de intrare al programului testat& aceste teste se mai
numesc teste statistice uniforme4
- similar cu distribuia datelor de intrare estimate pentru exploatarea programului Y
aceste teste se mai numesc teste statistice operaionale.
Qezultatele experimentale ale testelor statistice uniforme sunt inegale. .entru unele
programe s&au dovedit foarte eficiente, ele conduc!nd la descoperirea unor erori
nsemnate. .entru altele s&au dovedit ineficiente. M posibil explicaie ar consta n faptul
c ele asigur o bun acoperire n cazul programelor pentru care domeniile de intrare ale
cilor de execuie au o probabilitate comarabil. 0le nu acoper cile care corespund
tratrii excepiilor. De aceea trebuie completate cu teste folosind date de intrare n afara
domeniului intrrilor.
"estele statistice operaionale sunt n general teste de fiabilitate. .rin ele nu se urmrete
n general descoperirea de erori ci mai ales comportarea programului n timp. derile
observate n timpul acestor teste permit estimarea masurilor de fiabilitate, cum ar fi
'"RA $'ean "ime RetGeen Aailures%.
2+
21

You might also like