250 likes | 416 Views
Testarea sistemelor de calcul ş i a re ț elelor. Testarea White-Box. Capitolul 6. Prezentare general ă. Implic ă accesul la codul surs ă al programului testat. Se mai numesc şi tehnici de testare bazat ă pe cod , structural ă , glass box , clear box
E N D
Testarea sistemelor de calcul şi a rețelelor TSCR -curs- Ionescu Augustin-Iulian
Testarea White-Box Capitolul 6 TSCR -curs- Ionescu Augustin-Iulian
Prezentare generală • Implică accesul la codul sursă al programului testat. • Se mai numesc şi tehnici de testare bazată pe cod, structurală, glass box, clear box • Idea fundamentală este aceea de a executa fiecare porțiune de cod cel puțin odată. • Corectitudinea rezultatului poate fi stabilită numai pe baza analizei specificațiilor. • Sunt utilizate ȋn special de dezvoltatorii de cod care-şi testează propriile programe. • Principalele tehnici white box sunt: • acoperirea instrucțiunilor; • acoperirea ramurilor; • testarea condițiilor • testarea condițiilor de ramificare; • testarea combinațiilor condițiilor de ramificare; • acoperirea căilor. TSCR -curs- Ionescu Augustin-Iulian
Acoperirea instrucțiunilor • Se mai numeşte şi acoperire C0. • Urmăreşte executarea tuturor instrucțiunilor din unitatea testată ȋn scopul depistării unor zone de cod mort, care nu pot fi accesate; • Primul pas ȋl reprezintă generarea grafului controlului fluxului; • Fiecare grup de instrucțiuni executate secvențial fără ramificări formează un nod al grafului deoarece, neexistand ramificări, execuția primei instrucțiuni din grup garantează execuția celorlalte. • Controlul fluxului este reprezentat prin arce orientate. TSCR -curs- Ionescu Augustin-Iulian
Acoperirea instrucțiunilor (exemplu) Pentru a trece prin toate nodurile, laturile grafului vor trebui traversate ȋn următoarea ordine: a, b, f, g, h, d, e Criteriul de completitudine a testului: Acoperirea_instrucțiunilor = (număr_instrucțiuni_executate/număr_total instrucțiuni)*100% Este cel mai slab dintre testele white-box deoarece poate lăsa nedetectate multe defecte. TSCR -curs- Ionescu Augustin-Iulian
Acoperirea ramurilor • ceea ce interesează este parcurgerea tuturor ramurilor din graful controlului fluxului; • atenția este concentrată pe parcurgerea tuturor deciziilor atât pentru valoarea TRUE cât şi pentru valoarea FALSE; • ȋn cazul unei instrucțiuni IF trebuie testate atât ramura THEN cât şi ELSE; • ȋn cazul instrucțiunilor CASE se testează toate variantele posibile; • ȋn cazul ciclărilor, se testează obligatoriu trecerea prin corpul ciclului dar şi ȋntoarcerea la prima instrucțiune a ciclului. • Exemplu: • se observă că ȋn testul din exemplul precedent ramurile c, i, k nu au fost testate; • pentru a acoperi şi aceste ramuri, este necesar să mai fie executate următoarele teste: • a, b, c, d, e; • a, b, f, g, i, h, d, e; • a, k, e. TSCR -curs- Ionescu Augustin-Iulian
Acoperirea ramurilor • Apare o anumită redundanță datorită necesității de a parcurge anumite ramuri ȋn cadrul mai multor teste, dar acest lucru nu poate fi ȋn general evitat; • Acoperirea_ramurilor = (Numărul_ramurilor_testate/Numărul_total_al_ramurilor)*100% • Este un criteriu mai bun decât acoperirea instrucțiunilor deoarece garantează şi acoperirea acestora, dar prețul de cost este mai mare. • Permite testarea tuturor condițiilor simple dar nu implică neapărat testarea condițiilor complexe. TSCR -curs- Ionescu Augustin-Iulian
Testarea condițiilor pe ramură • Permite testarea unor condiții de ramificare complexe prin testarea fiecărei condiții atomice. • Princondiție complexăȋnțelegem o condiție formată din mai multe expresii relaționale (condiții atomice) reunite prin operatori logici: 5<=nota_lab AND 5<=nota_examen 5<=nota AND nota<=10 TSCR -curs- Ionescu Augustin-Iulian
Testarea condițiilor pe ramură if (5<=nota_lab && 5<=nota_examen) Conditia 1: 5<=nota_lab Conditia 2: 5<=nota_examen Cazuri de test pentru acoperirea ramurilor Cazuri de test pentru testarea condițiilor pe ramură TSCR -curs- Ionescu Augustin-Iulian
Acoperirea căilor • Parcurgerea tuturor ramurilor grafului de control sau testarea condițiilor nu sunt suficiente atunci când obiectul testat conține repetiții sau cicluri. • Ocaleeste o secvență continuă de ramuri din graful de control, de obicei de la intrarea ȋn program până la ieşirea din program. • Acoperirea căilor implică diverse posibilități de a parcurge codul testat. • Acoperirea căilor consideră dependența ȋntre ramuri, când parcurgerea unei ramuri conduce ȋnapoi la ȋnceputul altei ramuri, ȋn timp ce ȋn acoperirea ramurilor fiecare ramură este privită independent. • O ramură poate face parte din mai multe căi. • Un atribut important care se poate evalua din graful de control este complexitatea ciclomatică, calculată cu formula lui McCabe: V(G)=E-N+2 unde: E – numărul ramurilor din graf; N – numărul nodurilor grafului. TSCR -curs- Ionescu Augustin-Iulian
Acoperirea căilor • Complexitatea ciclomatică este o masură a aşa numitelor căi independente prin graf. • Această valoare ne indică de obicei limita superioară a numărului de cazuri de test necesare acoperirii ramurilor/deciziilor. • Căile independente se determină printr-un proces iterativ, pornind de la o cale cât mai simplă şi introducând apoi noi ramuri până când toate ramurile au fost folosite. TSCR -curs- Ionescu Augustin-Iulian
Acoperirea căilor (exemplu) double calculate_price( double baseprice, double specialprice, double extraprice, int extras, double discount) { double addon_discount; double result; if(extras>=3) addon_discount=10; else if(extras>=5) addon_discount=15; else addon_discount=0; if(discount>addon_discount) addon_discount=discount; result=baseprice/100.0*(100-discount) + specialprice + extraprice/100.0*(100-addon_discount); return (result); } TSCR -curs- Ionescu Augustin-Iulian
Acoperirea căilor (exemplu) V(G)=14-12+2=4 a-b-c-j-k-l-n a-b-c-j-m-n a-d-e-f-i-j-m-n a-d-g-h-i-j-m-n TSCR -curs- Ionescu Augustin-Iulian
Acoperirea căilor (exemplu) //testcase 01 price=calculate_price(10000.00, 2000.00, 1000.00,3,0); test_ok=test_ok&&(abs(price-12900.00)<0.01); a, b, c, j, m, n //testcase 02 price=calculate_price(25500.00, 3450.00, 6000.00,6,0); test_ok=test_ok&&(abs(price-12900.00)<0.01); a, b, c, j, m, n acoperire_ramuri=6/14*100%=43% //testcase 03 price=calculate_price(10000.00, 2000.00, 1000.00,0,10); test_ok=test_ok&&(abs(price-12900.00)<0.01); a, d, g, h, i, j, k, l, n //testcase 04 price=calculate_price(25500.00, 3450.00, 6000.00,6,0); test_ok=test_ok&&(abs(price-12900.00)<0.01); a, b, c, j, k, l, n acoperire_ramuri=12/14*100%=86% Observație! Ramurile e şi f nu pot fi testate deoarece nu este posibil ca simultan extras<3 şi extras>=5. TSCR -curs- Ionescu Augustin-Iulian
Utilizarea fluxului de date • Spunem căo variabilă este definităȋntr-o instrucțiune dacă i se asignează o valoare sau i se modifică valoarea. • Exemplu: nota=(4*nota_lab+6*nota_examen)/10; • Această instrucțiune se noteazădef pentru variabila nota. • Spunem căo variabilă este utilizatăȋntr-o instrucțiune dacă valoarea ei este folosită pentru calculul valorii unei variabile sau pentru luarea unei decizii. • Exemple: nota=(4*nota_lab+6*nota_examen)/10; c-use pentru nota_lab • if (nota_lab<5) p-use pentru nota_lab • Calea dintre definirea unei variabile şi utilizarea ei se numeşte cale def-use. TSCR -curs- Ionescu Augustin-Iulian
Utilizarea fluxului de date • Pot fi identificate mai multe variante de testare a segmentelor de cale din fluxul de date: • toate def • toate p-use • toate c-use/unele p-use • toate p-use/unele c-use • toate use • toate căile def-use TSCR -curs- Ionescu Augustin-Iulian
Utilizarea fluxului de date 1USE dbSecretariat04_05 2 GO 3 DECLARE @Nume varchar(35),@Initiala varchar(8),@Prenume varchar(35),@Sex char(1),@DataNastere datetime 4 DECLARE cursDatePersonale CURSOR FOR SELECT NumeStudent,InitialaStudent,PrenumeStudent,Sex,DataNastere FROM tblStudent 5--utilizarea cursorului 6 OPEN cursDatePersonale 7 FETCH NEXT FROM cursDatePersonale INTO @Nume ,@Initiala ,@Prenume ,@Sex ,@DataNastere 8WHILE @@FETCH_STATUS=0 BEGIN 9PRINT (' ADEVERINTA') 10PRINT (' ') 11PRINT (' ') 12PRINT ('Prin prezenta se adevereste ca'+' '+@Nume+' '+@Initiala+‘'+@Prenume+' este student') 13PRINT ('al facultatii de Automatizari,Calculatoare si Electronica') 14PRINT (' ') 15PRINT (' ') 16PRINT (' '+CONVERT(char(10), GETDATE(),103)+' 17 DECAN') 18 PRINT (' Prof. dr. ing. Bobasu Eugen’) 19 PRINT (' ') 20PRINT (' ') 21FETCH NEXT FROM cursDatePersonale INTO @Nume, @Initiala, @Prenume, @Sex, @DataNastere 22 END 23CLOSE cursDatePersonale 24 DEALLOCATE cursDatePersonale 25 GO TSCR -curs- Ionescu Augustin-Iulian
Utilizarea fluxului de date 1 2 3 4 5 6 7@Nume ,@Initiala ,@Prenume ,@Sex ,@DataNastere def @@FETCH_STATUSdef 8@@FETCH_STATUSp-use 9 10 11 12@Nume,@Initiala,@Prenumec-use 13 14 15 16GETDATE()def,c-use 17 18 19 20 21 @Nume, @Initiala, @Prenume, @Sex, @DataNastere def @@FETCH_STATUSdef 22 23 24 25 TSCR -curs- Ionescu Augustin-Iulian
Utilizarea fluxului de date Tabel pentru @nume Tabel pentru @@FETCH_STATUS Tabel pentru @prenume Tabel pentru @initiala TSCR -curs- Ionescu Augustin-Iulian
Testarea ciclurilor • Dacă ciclul are de la 0 la n iterații, cazurile de test dezvoltate vor fi: • 0 iterații; • o iterație; • două iterații; • k iterații k<n; • n iterații • n+1 iterații (dacă este posibil). • Dacă ciclul are de la n1 la n2 iterații, se va testa şi pentru k=n1-1. • Dacă este posibil, se va testa şi pentru n2+1. • Se vor avea ȋn vedere şi valori negative ale variabilei de ciclare. TSCR -curs- Ionescu Augustin-Iulian
Testarea mutațiilor • Se consideră ca bază pentru generarea datelor de test şi pentru evaluarea eficienței testării, defectele care ar putea să aparăȋn componenta testată. • Sunt luate ȋn considerare două ipoteze de lucru: • Ipoteza programatorului competent. Programatorii sunt profesionişti, cunosc limbajele utilizate şi scriu programe aproape perfecte. Apar doar puține erori simple. • Efectul de cuplare. Se consideră că testele suficient de puternice pentru a pune ȋn evidență toate programele care diferă de programul testat doar prin erori simple, vor face fațăşi detectării unor erori complexe. • Testarea mutațiilor are ca punct de plecare: • codul original al compnentei testate; • cazurile de test asociate; • rezultatele testului. TSCR -curs- Ionescu Augustin-Iulian
Testarea mutațiilor • Vom numi mutant orice program obținut din cel original prin modificarea unui operand, a unei constante sau a numelui unei variabile. • Testul original se aplică mutantului. • Dacă se obține un rezultat diferit de cel obținut cu programul original, defectul a fost detectat şi spunem cămutantul a fost ucis. • Dacă mutantul produce aceleaşi rezultate ca şi programul original, testul trebuie completat cu alte date de test pentru a ȋncerca să omorâm mutantul. • Există situații ȋn care nu există nici un caz de test prin care să putem distinge programul original de mutant. În acest caz spunem că cele două programe sunt echivalente. • Fie P un program şi Pi un mutant neechivalent al lui P. Se spune că un set de teste T este corespunzător pentru mutații dacă pentru orice Pi există un caz de test tT astfel ȋncât Pi(t)P(t). TSCR -curs- Ionescu Augustin-Iulian
Testarea mutațiilor • Măsura ȋn care un set de teste T este adecvat mutațiilor pentru programul P se calculează cu relația: • MS(P,T)=număr_mutanți_ucişi/(număr _total_mutanți - număr_mutanți _echivalenți) • Varianta prezentată mai sus reprezintătestarea tare a mutațiilor. • Dacă se iau ȋn considerare numai anumite elemente afectate de mutații, se spune că avem o testare slabă a mutațiilor. TSCR -curs- Ionescu Augustin-Iulian
Ordonarea parțiala a criteriilor de testare TSCR -curs- Ionescu Augustin-Iulian
? TSCR -curs- Ionescu Augustin-Iulian