Sunteți pe pagina 1din 7

Ministerul Educației, Culturii și Cercetării

Universitatea Tehnică a Moldovei


Facultatea Calculatoare, Informatică și Microelectronică
Departamentul Ingineria Software și Automatică

Raport
Lucrarea de laborator nr.4
Disciplina: Testarea Software.
Tema: Metode de testare a programelor. Metoda cutiei transparente de testare a
programelor

A elaborat st. gr. TI-172 : Turculet Victor


A verificat asistent universitar : Rusu Cristian

Chișinău 2020
Scopul lucrării:
Obținerea deprinderilor de proiectare a cazurilor de testare. Familiarizare cu algoritmul
McCave și tehnica White-Box.

Obiectivele lucrării:
- Înțelegerea noțiunii de caz de testare;
- Înțelegerea metodologiei de dezvoltare a aplicației:
 dezvoltarea condusă de cod;
 dezvoltarea bazată pe cod.
- Formarea competențelor de partiționare în criterii de acoperire;
- Utilizarea graficului fluxului de date.

Mersul lucrării:
Cu cât este mai complexă structura codului, cu atât este mai dificil de înțeles, e mai probabil să
conțină defecte, va fi mai dificil de actualizat, va dura mai mult timp realizarea lui, și va fi mai dificil
de reutilizat.
Numărul complex ciclomatic al lui McCabe (CCN) măsoară numărul de căi liniare
independente prin graful programului.
C=E−N +2∗P, unde
- E – numărul de muchii al grafului;
- N – numărul de noduri;
- P – numărul de noduri care conțin puncte de ieșire din graful de control.
-
I. Complexitatea ciclomatica si schema logica

def lab_3():
result = ''
volum = 0
l_1, l_2,h = 4, 3, 5
if l_1 and l_2 and h > 0:
result = 'Figura '
if l_1 == l_2:
if h > l_1:
result += 'alungita'
volum = l_1 * l_2 * h
elif h < l_1:
result += 'scurta'
volum = l_1 * l_2 * h
result += ' cu baza patrata'
elif l_1 == l_2 == h:
result += ' este paralelipiped'
volum = l_1 ** 3
else:
result += ' este un paralelipiped dreptunghic'
volum = l_1 * l_2 * h
else:
print( 'nu are volum')
return

print(f'{result} cu volumul de = {volum} l')


lab_3()

Graful fluxului de control este prezentat în figura 1.

Figura 1. Graful fluxului de control.

Conform grafului din figura 1, putem evalua următoarele valori ale parametrilor de complexitate
ciclomatică.
E = 24 (muchii).
N = 21 (noduri).
P = 1 (puncte de ieșire din program)
C=E−N +2∗P=24−21+2∗1=5

II. Verificam cazurile


TC1 cand exista l_1, l_2, h
TC2 l_1 == l_2
TC3 h> l_1
TC4 H<l_1
TC5 l_1 == l_2 == h
TC6 nu exista l_1 sau l_2 sau h<1

Cazuri Datele de intrare Rezultatul obţinut Rezultatul aşteptat


de test
TC1 4, 3 ,5 Figura este un Figura este un paralelipiped
paralelipiped dreptunghic dreptunghic cu volumul de = 60
cu volumul de = 60 l l
TC2 6, 6, 5 Figura scurta cu baza Figura scurta cu baza patrata cu
patrata cu volumul de = volumul de = 180 l
180 l
TC3 6, 6, 8 Figura alungita cu baza Figura alungita cu baza patrata
patrata cu volumul de = cu volumul de = 288 l
288 l
TC4 6, 6, 2 Figura scurta cu baza Figura scurta cu baza patrata cu
patrata cu volumul de = volumul de = 72 l
72 l
TC5 10 10 10 Figura este paralelipiped Figura este paralelipiped cu
cu volumul de = 125 l volumul de = 125 l
TC6 4, 5 , 0 nu are volum nu are volum

Raspunsuri la intrebari de control:


1.1 Genereaza teste bazat pe structura intern˘a a codului
Alte denumiri: glass box, clear box, open box
Terminologie alternativa
testare comportamentala (black-box) / structurala (white-box)
Comparat¸ie:
– black-box: la orice nivel / white-box: mai ales la nivel de modul
– white-box: modificarea codului ⇒ modificarea testelor
– white-box: ussureaza detectarea erorilor de codare,
dar nu poate detecta erori de omisiune (in cod sau specificatii)
1.2 Acoperirea codului - criteriu pentru a m˘asura dac˘a un set de teste e adecvat

1.3 branch coverage (decision coverage)


Testeaz˘a fiecare valoare posibil˘a a unei decizii (true/false) Def. mai precis˘a: testeaz˘a ¸si
fiecare intrare/ie¸sire din program in general, implic˘a acoperirea instruc¸tiunilor (fiecare
instruc¸tiune e pe o ramur˘a; v. excep¸tie mai jos) in categoria deciziilor / ramificatiilor se
includ: instructiuni switch/case (ramifica¸tii multiple) generarea de excep¸tii
Aten¸tie: func¸tii sau efecte laterale ˆın expresii de decizie
if (a && (b || f(x, y))
nu executa f dac˘a a ¸si b sunt adev˘arate

1.4 condition coverage


O condi¸tie e o expresie boolean˘a elementar˘a dintr-o decizie
Necesit˘a teste pentru fiecare valoare posibil˘a a fiec˘arei condi¸tii Aparent mai complex˘a
decˆat decision coverage, dar NU o include!
Exemplu:
if (x > 5 && y == 3) { /* ceva cod */ }
Dou˘a teste: x = 6, y = 2 ¸si x = 4, y = 3 genereaz˘a toate valorile posibile (
T ¸si F, respectiv F ¸si T) Dar ˆın ambele cazuri, decizia urmeaz˘a ramura “fals”

1.5 statement coverage (line coverage, basic block coverage)


Teste suficiente pentru a executa fiecare instructiune de program Criteriu evident necesar
(cod neexecutat = cod netestat)
De regul˘a evident ¸si insuficient

char a[5], *s = NULL; if (len < 5)


s = a;
*s = ’t’;
Un test cu len = 4 acoper˘a toate instruc¸tiunile; nu g˘ase¸ste eroarea

2. Ciclul de viață a unui defect poate include următoarele stări:


1. Nou (New): Când un defect este înregistrat și afișat pentru prima dată i se atribuie starea NOU;
2. Asignat (Assigned): După ce testerul a afișat defectul, liderul de echipă aprobă faptul că defectul
este autentic și îl atribuie dezvoltatorului respectiv sau echipei de dezvoltatori. Defectul primește
statutul ASIGNAT;
3. Deschis (Open): În acestă stare dezvoltatorul începe analiza defectului și lucrează la corectarea
lui;
4. Corectat (Fixed): Când dezvoltatorul a efectuat modificările necesare în cod și a verificat
modificările atunci defectului i se poate atribui statutul CORECTAT și este transmis echipei de
testare;
5. Retestare în așteptare (Pending retest): După remedierea defectului, dezvoltatorul transmite
codul modificat pentru retestare testerului. Aici codul este în așteptarea sfârșitului celorlalte teste.
Prin urmare, statutul său este în așteptarea retestării.
6. Retestare (Retest): La această etapă testerul retestează codul modificat pentru a verifica dacă
defectul a fost corectat sau nu.
7. Verificat (Verified): După retestare dacă defectul nu mai este prezent în software, se aprobă că
defectul este corectat și modifică starea în "verificat".
8. Redeschis (Reopen): Dacă defectul rămâne prezent după ce dezvoltatorul a modificat codul
testerul redeschide defectul atribuindu-i statutul ”Redeschis” și se reiau pașii de la început;
9. Închis (Closed): Dacă defectul nu se mai reproduce după ce dezvoltatorul a modificat codul
testerul îi atribuie statutul ”Închis”;
10. Dublat (Duplicate): Dacă defectul se repetă de două ori sau două defecte au aceiași descriere
atunci i se atribuie statutul ”Dublat”;
11. Respins (Rejected): Dacă dezvoltatorul consideră că defectul nu este autentic, el îl respinge.
12. Amânat (Deffered): Defectul cu statutul ”Amânat” va fi corectat în următoarele versiuni, aceasta
se poate întâmpla din mai multe motive, spre exemplu prioritatea acestuia este joasă și nu
afectează funcționalitățile principale ale produsului.
13. Nu este defect (Not a bug): Acest statut se atribuie defectelor atunci când ele nu de fapt nu
modifică funcționalitățile softului, de exemplu schimbarea culorii unui text sau poziția unui buton
pe ecran.

3. • Analiza cerințelor
• Proiectarea arhitecturală
• Proiectarea detaliată
• Implementarea (Scrierea codului)
• Integrarea componentelor
• Verificarea și Validarea (Testarea)
• Mentenanța (Întreținerea)

4. a) cascada
b) modelul spirala
c) Modelul V
d) Prototipizarea
Concluzii:
Complexitatea ciclomatică a lui McCabe este o metrică simplă și intuitivă care ne
permite să obținem rezultate fiabile la nivelul funcției. Nu acoperă toate tipurile de
complexitate software, dar ne permite să identificăm în mod clar funcții cu o mulțime
de bucle, declarații de selecție și switch/case.