SlideShare a Scribd company logo
1 of 91
Download to read offline
Ingineria programării
12. Faza de testare (I)
Florin Leon
Universitatea Tehnică „Gheorghe Asachi” din Iași
Facultatea de Automatică și Calculatoare
http://florinleon.byethost24.com/curs_ip.htm
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
2
Make it idiot-proof and
someone will make a better idiot.
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Faza de testare (I)
1. Introducere
2. Tipuri de testare
3. Inspecțiile codului
4. Testarea de tip cutie neagră
5. Testarea de tip cutie albă
6. Testarea incrementală și neincrementală
7. Testarea top-down și bottom-up
8. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Faza de testare (I)
1. Introducere
2. Tipuri de testare
3. Inspecțiile codului
4. Testarea de tip cutie neagră
5. Testarea de tip cutie albă
6. Testarea incrementală și neincrementală
7. Testarea top-down și bottom-up
8. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
5
Verificare și Validare
 Verificare
 Construim corect produsul?
 Se referă la dezvoltarea produsului
 Validare
 Construim produsul corect?
 Se referă la respectarea specificațiilor, la utilitatea
produsului
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
6
Scopurile V & V
 Verificarea și validarea trebuie să stabilească
încrederea că produsul este potrivit pentru
scopul său
 Aceasta nu înseamnă că produsul este lipsit de
defecte
 Doar că produsul trebuie să fie suficient de bun
pentru utilizare
 Suficient de bun poate însemna... (slide-ul următor)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
7
Evaluarea unui produs
software
 Depinde de scopul produsului, de așteptările
utilizatorilor și factorii de piață
 Funcționalitatea programului
 Nivelul de încredere depinde de cât de critic este sistemul
pentru utilizatori
 Așteptările utilizatorilor
 Utilizatorii pot avea grade diferite de așteptări pentru
anumite tipuri de produse software
 Mediul comercial
 Lansarea rapidă pe piață a unui produs poate fi uneori mai
importantă decât găsirea defectelor în program
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8
 Evidențiază prezența erorilor și nu absența lor
 Este singura tehnică de validare pentru cerințe
non-funcționale, deoarece programul trebuie
lansat în execuție pentru a i se analiza
comportamentul
 Este utilizată de obicei alături de verificarea
statică pentru o siguranță cât mai mare
Testarea unui program
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
9
Terminologie (IEEE)
 Eroare
 O acțiune umană care are ca rezultat un defect în produsul
software
 Defect (engl. “fault”)
 Consecința unei erori în produsul software
 Un defect poate fi latent: nu cauzează probleme cât timp nu apar
condițiile care determină execuția anumitor linii de cod
 Defecțiune (engl. “failure”)
 Manifestarea unui defect: când execuția programului întâlnește
un defect, acesta provoacă o defecțiune
 Abaterea programului de la comportamentul așteptat
 “Bug”: termen colocvial utilizat deseori ca sinonim pentru „defect”
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
10
Testarea defectelor și
testarea de validare
 Testarea defectelor
 Teste proiectate să descopere prezența defectelor în
sistem
 Un test de succes este cel care descoperă un defect
 Testarea de validare
 Intenționează să arate că produsul nu îndeplinește
cerințele
 Un test de succes este cel care arată că o cerință nu
a fost implementată adecvat
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
11
Testarea și depanarea
 Testarea defectelor și depanarea (engl. “debugging”)
sunt procese distincte
 Testarea are ca scop stabilirea existenței defectelor
într-un program
 Depanarea are ca scop localizarea și repararea
erorilor corespunzătoare
 Depanarea implică formularea unor ipoteze asupra
comportamentului programului, corectarea defectelor
și apoi re-testarea programului
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
12
Asigurarea calității
 Testarea se referă la detectarea defectelor
 Asigurarea calității se referă la prevenirea lor
 Tratează procesele de dezvoltare menite să
conducă la producerea unui software de calitate
 Include procesul de testare a produsului
 Procesul de asigurare a calității este mai
general decât procesul de testare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Faza de testare (I)
1. Introducere
2. Tipuri de testare
3. Inspecțiile codului
4. Testarea de tip cutie neagră
5. Testarea de tip cutie albă
6. Testarea incrementală și neincrementală
7. Testarea top-down și bottom-up
8. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
14
Testarea unităților
 O unitate (sau un modul) se referă de obicei
la un element atomic (clasă sau metodă), dar
poate însemna și un element de nivel mai
înalt: bibliotecă, driver etc.
 Testarea unei unități se face în izolare
 Pentru simularea apelurilor externe se pot utiliza
funcții externe fictive (engl. “stubs”)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
15
Programe „schelă”
 De multe ori, sunt necesare așa-numitele „schele”,
adică programe special construite pentru stabilirea
mediului de test
 Numai când mediul este realizat se poate executa o
evaluare corectă
 Programul schelă stabilește stări și valori pentru structurile
de date și asigură funcții externe fictive
 De obicei, programul schelă nu are aceeași calitate ca
produsul software testat și adesea este destul de fragil
 O schimbare mică în modulul testat poate determina
schimbări importante în programul schelă
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
16
Testarea componentelor
 Testează interacțiunea mai multor unități
 Testarea este determinată de arhitectură
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
17
Cine face testarea?
 Există diferite păreri privind rolurile în testare
 Testarea unei componente cade în sarcina
programatorului acesteia și doar testarea
sistemului se face de o echipă diferită
 Testele sunt concepute pe baza experienței
programatorului
 Testarea unei componente se face de către o
persoană diferită, iar depanarea se face de către
programatorul inițial
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
18
Testele de regresiune
 engl. “regression tests”
 Testele valide generează un set de rezultate verificate, numit
standard de aur
 Testele de regresiune sunt utilizate la re-testare, după realizarea
unor modificări, pentru a asigura faptul că modificările nu au introdus
noi defecte în codul care funcționa bine anterior
 Pe măsură ce dezvoltarea continuă, sunt adăugate mai multe teste
noi, iar testele vechi pot rămâne valide sau nu
 Dacă un test vechi nu mai este valid, rezultatele sale sunt modificate
în standardul de aur, pentru a se potrivi situației curente
 Acest mecanism previne regresiunea sistemului într-o stare de
eroare anterioară
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
19
Testarea interfeței cu
utilizatorul
 Majoritatea aplicațiilor din zilele noastre au interfețe grafice cu
utilizatorul (GUI)
 Testarea interfeței grafice poate pune anumite probleme
 Cele mai multe interfețe, dacă nu chiar toate, au bucle de
evenimente care conțin cozi de mesaje de la mouse, tastatură,
ferestre etc.
 Asociate cu fiecare eveniment sunt coordonatele ecran
 Testarea interfeței cu utilizatorul presupune memorarea tuturor
acestor informații și elaborarea unei modalități prin care mesajele
să fie trimise din nou aplicației, la un moment ulterior
 De obicei, se folosesc scripturi pentru testare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Faza de testare (I)
1. Introducere
2. Tipuri de testare
3. Inspecțiile codului
4. Testarea de tip cutie neagră
5. Testarea de tip cutie albă
6. Testarea incrementală și neincrementală
7. Testarea top-down și bottom-up
8. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Inspecțiile codului
 engl. “code inspections”, “code reviews”
 Presupun citirea codului pentru a detecta erori
 Echipa de inspecție are în general 4 persoane:
 Moderatorul: un programator competent
 Programatorul: cel care a scris codul inspectat
 Proiectantul (designer-ul), dacă este o persoană
diferită de programator
 Un specialist în testare
21
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Activități
 Programatorul citește, instrucțiune cu
instrucțiune, logica programului
 Ceilalți participanți pun întrebări
 Programatorul însuși poate descoperi cele mai
multe erori
 Se caută în program cele mai întâlnite tipuri de
erori
 O listă de erori comune este prezentată în slide-ul următor
22
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
23
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Caracteristici
 Inspectorii detectează erorile, programatorul trebuie să
le corecteze
 Dacă sunt descoperite multe erori sau unele erori
necesită corecții substanțiale, moderatorul stabilește o
nouă inspecție după corectarea lor
 Erorile determinate pot conduce la modificarea
proiectării (design-ului)
 De obicei, durata unei sesiuni de inspecție este de
90-120 de minute, cu o rată de 150 de instrucțiuni pe oră
 Dacă programul este mai mare, se stabilesc mai multe sesiuni de
inspecție, organizate pe module
24
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Caracteristici
 Programatorul nu trebuie să fie defensiv, ci constructiv
 Nu trebuie să vadă inspecția ca pe un atac personal, ci ca pe o
modalitate de a crește calitatea muncii sale
 Rezultatele inspecției sunt confidențiale
 Programatorul primește reacții privind stilul de
programare, tehnicile și algoritmii folosiți
 Ceilalți participanți beneficiază de pe urma expunerii la
un alt stil de programare
 Identificarea timpurie a secțiunilor celor mai predispuse
la erori ajută la sporirea atenției acordate acestora în
faza de testare
25
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Faza de testare (I)
1. Introducere
2. Tipuri de testare
3. Inspecțiile codului
4. Testarea de tip cutie neagră
5. Testarea de tip cutie albă
6. Testarea incrementală și neincrementală
7. Testarea top-down și bottom-up
8. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
27
Testarea „cutie neagră”
 Se mai numește „testare funcțională”
 Se iau în considerare numai intrările într-un
modul și ieșirile dorite, conform specificațiilor
 Structura internă a modulului este ignorată
 Testarea exhaustivă nu este fezabilă
 Generarea aleatorie a cazurilor de test nu este
eficientă
 Optimul: detectarea unui număr maxim de
defecte cu un număr minim de cazuri de test
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
28
Clase de echivalență
 O clasă de echivalență (CE) este formată din
intrările pentru care comportamentul sistemului
este similar
 De exemplu: lucrul cu întregi  o clasă cu întregi
pozitivi, alta cu întregi negativi, eventual una cu 0
 Divizarea domeniului de intrare în clase de
echivalență
 Dacă programul rulează corect pentru o valoare din
clasă, va rula corect și pentru celelalte valori din clasă
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
29
Clase de echivalență pentru intrări
 De obicei, pentru fiecare condiție a unei
intrări, se consideră o clasă de echivalență
validă și mai multe clase de echivalență
invalide
 De exemplu: 0 < x < max
 CE validă: o valoare în intervalul (0, max)
 CE invalide: o valoare ≤ 0, respectiv o valoare ≥ max
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
30
Clase de echivalență pentru ieșiri
 Pentru fiecare tip de ieșire, se estimează ce
intrări pot provoca situațiile respective
 De exemplu, rata dobânzii pentru care profitul unei
investiții este pozitiv, negativ sau 0
 Deși sunt mai greu de identificat, cazurile de test
pentru clasele de ieșire pot indica defecte
suplimentare față de clasele de intrare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
31
Selecția cazurilor de test
 Strategia 1
 Fiecare test să acopere cât mai multe CE valide
 Câte un test pentru fiecare CE invalidă
 Strategia 2
 Un test să acopere cel mult o CE validă pentru
fiecare intrare
 Câte un test separat pentru fiecare CE invalidă
 Necesită mai multe cazuri de test
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
32
Exemplu
 Un program cu 2 intrări: un șir de caractere s de
lungime ≤ N și un întreg n
 Ieșirea: cele mai dese n apariții ale caracterelor lui s
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplu
 Strategia 1: un s cu lungimea mai mică decât N, conținând litere
mari, litere mici, cifre și caractere speciale și n valid (EQ1 – EQ6),
apoi câte un caz pentru IEQ1, IEQ2 și IEQ3
 Strategia 2: câte un caz pentru fiecare clasă de echivalență, de
exemplu un s cu cifre și n valid (EQ1, EQ6), apoi alte cazuri pentru
EQ2, ..., EQ5 și cazuri separate pentru IEQ1, IEQ2 și IEQ3
33
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
34
Analiza valorilor limită
 De multe ori, programele care funcționează corect pentru valorile
unei CE eșuează pentru valorile de la limita CE
 Intrarea pentru un caz de test se alege dintr-o CE la limita
acesteia
 „Cazuri extreme”
 Cazurile pentru CE invalide se aleg tot în apropierea limitei
 De exemplu: 0 ≤ x ≤ 1
 Cazuri de test valide: 0 și 1
 Cazuri de test invalide: -0.1 și 1.1
 Pentru o listă, trebuie testate primul și ultimul element
 Pentru CE de ieșire, se aleg intrări care determină o ieșire la
limita CE, respectiv în afara sa
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
35
Selecția cazurilor de test
 Pentru n intrări, fiecare cu un domeniu de
definiție
 Strategia 1
 Se selectează valori limită diferite pentru o variabilă
iar celelalte sunt menținute la valoarea nominală
 min – 1, min, min + 1, max – 1, max, max + 1
 Plus un caz în care toate cele n intrări sunt la valoarea
nominală
  6n + 1 cazuri de test
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
36
Exemplu
 Pentru 2 intrări X și Y sunt necesare 13 cazuri
de test
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
37
Selecția cazurilor de test
 Strategia 2
 Se încearcă toate combinațiile posibile
 6 valori de limită
 1 valoare nominală
  7n cazuri de test
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
38
Graful cauză-efect
 Tehnicile anterioare nu ajută la construirea
combinațiilor de teste
 Considerând toate combinațiile valide, pentru n condiții de
intrare vom avea 2n cazuri de test
 Graful cauză-efect determină selectarea
combinațiilor de intrare într-un mod sistematic
 Cauză: o condiție distinctă de intrare
 Efect: o condiție distinctă de ieșire
 Condițiile sunt binare (A / F) și pot fi combinate cu
operatorii ȘI, SAU, NEGAȚIE
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
39
Exemplu
negație
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
40
Tabelul de decizie
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Tipuri de defecte
 Defecte unimodale (engl. “single-mode faults”)
 Implică o singură condiție
 Program care nu tipărește corect pentru un anumit tip de imprimantă
 Program care nu calculează bine tarifele când călătorul este minor
 Program de taxare pentru telefoane care nu calculează corect pentru
apelurile spre o anumită țară
 Defecte multimodale (engl. “multi-mode faults”)
 Implică mai multe condiții
 Program care nu calculează bine tarifele când călătorul este minor și
călătorește la business class și nu stă un weekend la destinație
 Program de taxare pentru telefoane care nu calculează corect pentru
apelurile spre o anumită țară în timpul nopții
41
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
42
Testarea perechilor
 Pentru defecte unimodale
 Se folosesc strategiile de partiționare a claselor de echivalență
 Pentru n parametri cu m valori, numărul de teste în cazul cel mai
favorabil este m (putem testa toți parametrii într-un test, fiecare
cu valori diferite)
 Pentru defecte multimodale
 Testarea tuturor combinațiilor nu este fezabilă (nm cazuri de test)
 Studiile au arătat că majoritatea defectelor sunt indicate de
testarea perechilor de valori (majoritatea defectelor sunt
unimodale sau bimodale)
 Pentru n parametri cu m valori, numărul total de perechi este
m ∙ m ∙ n ∙ (n – 1) / 2
 Numărul de teste în cazul cel mai favorabil este însă m2
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
43
Exemplu
9 ∙ 3 = 27 combinații
9 cazuri de test
se evită acoperirea unei
perechi de mai multe ori
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
44
Cazuri speciale
 Numite și “error guessing”
 Depind de structurile de date și de experiența
testerului, pentru a detecta presupunerile
incorecte ale programatorului, cauzate în
general de specificațiile incomplete
 Exemple:
 La o împărțire, numitorul este 0
 Un fișier care trebuie citit este gol sau nu există
 Fișierul începe cu linii albe
 Vectorul este deja sortat
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
45
Testarea bazată pe stări
 Pentru aceleași intrări, sistemele cu stare produc
ieșiri diferite la momente de timp diferite
 Ieșirile depind și de starea internă, nu numai de intrări
 Starea depinde de intrările anterioare
 Modelul de stare conține:
 Stări: impactul cumulat al tuturor intrărilor anterioare
 Tranziții: schimbările stărilor ca răspuns la evenimente
 Evenimente: intrările sistemului
 Acțiuni: ieșirile sistemului
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
46
Selecția cazurilor de test
 Testarea bazată pe stări este o testare de tip
„cutie gri” (engl. “gray box”)
 Criterii:
 Testele trebuie să acopere toate tranzițiile din graf
 Trebuie să execute toate perechile de tranziții
adiacente (intrarea într-o stare și ieșirea din acea
stare)
 Trebuie să execute toate căile simple (care nu conțin
noduri repetate)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
47
Exemplu
Exemplu
Sistem de
sondaj pentru
studenți
• Un student
răspunde la
întrebări și apoi
vede rezultatele
sondajului
• Rezultatele se
actualizează doar
după 5 răspunsuri
• Baza de date poate
„cădea”
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
48
Testarea claselor
 Acoperirea completă a testelor unei clase implică:
 Testarea tuturor operațiilor (metodelor) unui obiect
 Setarea și interogarea tuturor atributelor (câmpurilor)
unui obiect
 Trecerea unui obiect prin toate stările posibile
 Presupune testarea tuturor combinațiilor de valori
pentru câmpuri
 Problemă asemănătoare cu testarea perechilor
 Moștenirea îngreunează proiectarea testelor de
clasă, întrucât entitățile care trebuie testate nu sunt
localizate
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
49
Testarea MM
 Testare „metodă-mesaj”
 În fiecare metodă, fiecare apel către altă metodă
trebuie testat cel puțin o dată
 Dacă o metodă apelează altă metodă de mai
multe ori, fiecare apel trebuie testat o singură
dată
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
50
Testarea perechilor de funcții
 engl. “function pair”
 Pentru toate secvențele posibile de execuții ale metodelor,
trebuie testate cele de lungime 2
 Acest lucru se face de obicei pe baza unui graf, care
precizează succesiunile posibile de apeluri
 Pentru un program cu operații grafice, exemple de perechi de
funcții pentru testare sunt:
 Crearea unui dreptunghi și apoi calcularea ariei
 Crearea a două sau mai multe dreptunghiuri și apoi calcularea ariei
 Crearea unui cerc și apoi crearea unui dreptunghi
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Faza de testare (I)
1. Introducere
2. Tipuri de testare
3. Inspecțiile codului
4. Testarea de tip cutie neagră
5. Testarea de tip cutie albă
6. Testarea incrementală și neincrementală
7. Testarea top-down și bottom-up
8. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
52
Testarea „cutie albă”
 Testarea „cutie neagră” tratează funcționalitatea unui
modul
 Testarea „cutie albă” (engl. “white box”) tratează funcțiile
sau metodele la un nivel scăzut: este testată fiecare
funcție
 Aceste teste se mai numesc teste “clear box” deoarece
toate detaliile sunt vizibile pentru test
 Testarea „cutie albă” vizează acoperirea diferitelor
structuri ale programului, de aceea se mai numește
„testare structurală”
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
53
Testarea fluxului de control
 Graful fluxului de control: G
 Noduri: blocuri de instrucțiuni executate împreună
 Arce: posibile transferuri de control
 Cale: secvență finită de noduri (n1, n2, ..., nk),
k > 1, astfel încât există un arc (ni, ni+1) oricare ar
fi ni , cu excepția lui nk
 Cale completă: o cale din nodul inițial (start) în
nodul final (exit)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
54
Acoperirea instrucțiunilor
 Necesită ca fiecare instrucțiune să fie
executată cel puțin o dată
 Se mai numește criteriul tuturor nodurilor (all-nodes)
 Nu este un criteriu foarte puternic
pentru cazul de
test {x = 0}, eroarea
rămâne nedetectată
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
55
Acoperirea ramurilor
 Necesită ca fiecare arc din graf să fie traversat cel puțin o dată
 Fiecare decizie trebuie evaluată ca A sau F
 Criteriul acoperirii ramurilor 100% se mai numește criteriul tuturor
arcelor (all-edges)
 Cramuri  Cinstrucțiuni (all-edges  all-nodes)
decizia poate fi
evaluată A sau F fără
a detecta eroarea
Funcția ar trebui să testeze că x este în intervalul [0,100].
Cazurile de test {x = 5, x = -5} evaluează decizia la A sau F
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
56
Acoperirea căilor
 Un test mai general este acoperirea tuturor căilor
(all-paths)
 Presupune executarea tuturor căilor posibile din graful
de control
 Ccăi  Cramuri (all-paths  all-edges)
 Dificultăți:
 Programele care conțin bucle au un număr infinit de căi
 Pot exista căi în graf pentru care să nu existe intrări
corespunzătoare astfel încât căile respective să fie executate
 Pentru un modul având complexitatea ciclomatică M,
se recomandă testarea a cel puțin M căi distincte
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
57
Testarea fluxului de control
 Niciuna din aceste metode nu este suficientă
pentru detectarea tuturor defectelor
 Dacă din program lipsește o cale necesară
pentru testarea unei condiții, chiar dacă sunt
testate toate căile existente, defectul nu va fi
descoperit
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
58
Testarea fluxului de date
 Graful def/use (definiție / utilizare)
 def: definirea unei variabile
 x = 5;
 c-use: utilizarea computațională
 a = x; read(x); write(x);
 p-use: utilizarea predicativă (într-o decizie)
 if (x > 0) …
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
59
Testarea fluxului de date
 Criterii:
 all-defs: pentru fiecare definiție trebuie să existe un
c-use sau un p-use
 all-p-uses: trebuie testate toate utilizările predicative
ale unei definiții
 all-c-uses: trebuie testate toate utilizările
computaționale ale unei definiții
 all-p-uses, some-c-uses
 all-c-uses, some-p-uses
 all-uses = all-p-uses + all-c-uses
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
60
Exemplu p-use se
reprezintă
pe arc
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
61
Exemplu
 all-edges:
 (1, 2, 4, 5, 6, 7, 8, 9):
y negativ
 (1, 3, 4, 5, 7, 9): y pozitiv
 Calea (1, 2, 4, 5, 6, 7, 9)
este nefezabilă: 1-2
înseamnă că y este negativ,
deci din 7 nu se poate
merge în 9
 Cazuri de test:
 {x = 3, y = 1}
 {x = 3, y = -1}
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
62
Exemplu
 all-defs:
 Presupune cel puțin
un c-use sau un p-use
 (1, 2, 4, 5, 6, 5, 6, 7, 8, 9)
 (1, 3, 4, 5, 6, 5, 6, 7, 9)
 Repetarea 5, 6 asigură
faptul că definițiile din
nodul 6 sunt și folosite
 Cazuri de test:
 {x = 3, y = 2}
 {x = 3, y = -2}
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
63
Relațiile dintre criterii
criteriu mai
puternic
criteriu mai
slab
de exemplu, all-paths  all-uses
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
64
Acoperirea testului
 Acoperirea testului este procentajul din produs verificat prin testare
 În mod ideal, o acoperire de 100% ar fi excelentă, însă este rareori
îndeplinită
 De obicei, un test cu o acoperire de 90% este simplă, însă ultimele
10% necesită o perioadă de timp semnificativă
 Exemplu: testarea BIOS-ului IBM în anii ’80
 Pentru creșterea performanțelor, a fost plasat într-un ROM și deci
patch-urile pentru eventuale defecte erau imposibile
 A necesitat testarea cu acoperire 100%
 S-a creat un mediu de test, mult mai mare decât BIOS-ul
 A apărut necesitatea testării mediului de test!
 A fost atinsă o acoperire de 100%, cu un cost foarte ridicat
 Alternativa: ROM + EPROM pentru patch-uri
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
65
Instrumente de acoperire
 engl. “coverage tools”
 Analizează codul sursă și generează un test pentru fiecare
alternativă a firelor de execuție
 Depinde de programator combinarea acestor teste în cazuri
semnificative care să valideze rezultatele fiecărui fir de execuție
 De obicei, instrumentul de acoperire este utilizat într-un mod
oarecum diferit: el urmărește liniile de cod executate într-un test și
apoi raportează procentul din cod executat în cadrul testului
 Dacă acoperirea este mare și liniile sursă netestate nu prezintă
mare importanță pentru calitatea generală a sistemului, atunci nu
mai sunt necesare teste suplimentare
 Exemple pentru programe .NET: Visual Studio (Test → Analyse
Code Coverage), NCover, PartCover, dotCover
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Visual Studio: testarea unităților
66
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Visual Studio: acoperirea codului
67
Nu sunt testate toate condițiile
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Faza de testare (I)
1. Introducere
2. Tipuri de testare
3. Inspecțiile codului
4. Testarea de tip cutie neagră
5. Testarea de tip cutie albă
6. Testarea incrementală și neincrementală
7. Testarea top-down și bottom-up
8. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
69
Ordinea modulelor
 Ordinea în care sunt combinate modulele pentru
a rezulta programul complet afectează:
 Forma cazurilor de test
 Tipurile de instrumente de testare utilizate
 Ordinea în care modulele sunt implementate și testate
 Costul generării cazurilor de test
 Costul depanării
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
70
Tipuri de integrare
 Integrarea neincrementală
 Modulele sunt testate separat și apoi integrate
simultan, continuându-se cu testarea sistemului
 Numită și model big-bang, deoarece timpul de testare
crește mult
 Integrarea incrementală
 Următorul modul care trebuie testat este combinat cu
modulele testate până la acel moment
 Poate fi top-down sau bottom-up
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
71
Module driver și stub
 Ambele tipuri de integrare
necesită pentru testare
module driver, care
simulează intrările, și/sau
module stub, din care se
pot apela funcții
 De exemplu: pentru B
 Modul driver: A
 Modul stub: E
A apelează funcții din B, C, D
B apelează funcții din E
D apelează funcții din F
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
72
Comparație
 Integrarea neincrementală
necesită 5 module driver și
5 module stub
 Integrarea incrementală
necesită:
 5 module driver și niciun
modul stub pentru abordarea
bottom-up
 5 module stub și niciun modul
driver pentru abordarea
top-down
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
73
Comparație
 Testarea incrementală detectează mai devreme incompatibili-
tatea interfețelor sau alte presupuneri incorecte din module
 În testarea neincrementală, modulele nu se „văd” decât la sfârșit
 Depanarea este mai ușoară în abordarea incrementală
 Un defect detectat la un moment dat este cauzat de adăugarea
ultimului modul
 În abordarea neincrementală, defectul ar putea fi oriunde (în orice
modul)
 Testarea incrementală este mai completă
 Modulele sunt testate nu numai izolat, ci și în combinație cu altele
 De exemplu, la testarea incrementală a lui B, deși modulele A sau E
au fost deja testate, prin evaluarea unor condiții din B pot apărea
erori nedetectate din A sau E
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
74
Comparație
 Abordarea neincrementală poate necesita aparent mai
puțin timp de calcul
 Execuția unui modul nu mai implică rularea altora
 Totuși, este nevoie de mai mult timp de dezvoltare pentru
construirea modulelor driver și stub
 Abordarea incrementală permite testarea în paralel a
unor module, la începutul activității
 Câștigurile pot fi semnificative pentru proiecte mari
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Faza de testare (I)
1. Introducere
2. Tipuri de testare
3. Inspecțiile codului
4. Testarea de tip cutie neagră
5. Testarea de tip cutie albă
6. Testarea incrementală și neincrementală
7. Testarea top-down și bottom-up
8. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
76
Testarea top-down
 Începe cu modulul de pe nivelul cel mai înalt
 Modulul următor trebuie să fie unul din modulele
subordonate unui modul deja testat
 Modulul B este subordonat lui A dacă A apelează
funcții din B
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
77
Exemplu
 Modulul A este modulul inițial
 Trebuie mai întâi scrise
module stub pentru B, C și D
 Scrierea modulelor stub nu
este banală
 Dacă rezultatele returnate de
acestea nu au sens, modulul
A poate să eșueze chiar și
fără să aibă vreun defect
 Se pot dezvolta mai multe
versiuni diferite ale
stub-urilor, fiecare cu
date de test fixe
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
78
Ordinea de testare
 După testarea lui A, un modul real înlocuiește
un stub
 După testarea modulului inițial, sunt posibile
mai multe secvențe de testare, de exemplu:
unele module se pot testa și în paralel
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
79
Pasul al doilea în testarea
top-down
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
80
Recomandări
 Modulele critice ale programului
trebuie testate cât mai devreme
 Modulele cu funcții de intrare-ieșire
(I/O) trebuie testate cât mai
devreme
 După adăugarea unui modul de
I/O, reprezentarea cazurilor de test
pentru modulul testat devine
identică cu aceea a programului
final
 De exemplu, dacă modulul G
conține funcții critice, iar modulele
I și J conțin funcții de I/O, o
secvență posibilă este:
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
81
Probleme
 Să presupunem că adăugăm modulul H
 Acesta este foarte „depărtat” de modulul de intrare J
 Analog, modulul E este foarte „depărtat” de modulul de ieșire I
 Este dificilă selectarea cazurilor de test pentru aceste module doar pe baza
intrărilor și ieșirilor sistemului
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
82
Probleme
 Pentru testarea unui modul (de exemplu A) pot fi necesare
mai multe versiuni ale stub-ului B
 Se poate decide ca A să fie testat parțial la început, urmând ca
restul de teste să fie făcut la adăugarea modulului B real
 Se poate întâmpla ca A să nu mai fie testat complet la momentul
respectiv (această situație trebuie evitată)
 Deoarece nivelurile superioare trimit de obicei resurse pentru
utilizare pe nivelurile inferioare, este greu de testat la început
dacă aceste resurse sunt corecte
 De exemplu, A trimite un fișier pentru K, dar până când K nu este
testat, nu se poate spune dacă fișierul a fost deschis cu atributele
corecte
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
83
Testarea bottom-up
 Începe cu modulele terminale (care nu apelează alte module)
 Modulul următor trebuie să fie unul pentru care toate
modulele subordonate au fost deja testate
 Pentru exemplul anterior, se începe cu E, J, G, K, L, I, serial
sau în paralel
 Se creează module driver pentru testarea funcțiilor
 Este necesar un singur modul driver pentru un modul anume,
care va apela iterativ funcțiile testate
 În general, crearea modulelor driver este mai ușoară decât
crearea modulelor stub
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
84
Exemplu
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
85
Problemă
 Programul funcțional nu există decât după
integrarea ultimului modul
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
86
Comparație
Testarea top-down
Testarea bottom-up
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
87
Metrici
 Efortul de testare
 Este un indicator al volumului de teste
 Un efort prea mic înseamnă evaluarea insuficientă a
produsului și deci o probabilitate mare ca produsul să fie
lansat cu defecte nedetectate
 Timpul calculator
 În general, la dezvoltarea unui produs software, timpul
calculator este mic la început, atinge un vârf maxim la
finalul implementării și testării iar apoi scade
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
88
 Doar testarea exhaustivă poate arăta că un
program nu are defecte
 Totuși, pentru programe de dimensiuni medii
sau mari, testarea exhaustivă este imposibilă
 Pentru selectarea testelor, se recomandă:
(slide-ul următor)
Recomandări
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Recomandări
 Testarea tuturor funcțiilor
accesate prin meniuri
 Testarea combinațiilor de funcții
accesate prin același meniu
 Când utilizatorul trebuie să
introducă date, testarea tuturor
funcțiilor implicate, cu intrări
corecte și incorecte
 Alegerea intrărilor care forțează
sistemul să genereze toate
mesajele de eroare
 Alegerea intrărilor care pot cauza
supraîncărcarea zonelor de
memorie alocate (engl. “buffer
overflow”)
 Repetarea de mai multe ori a testelor
cu aceleași intrări sau serii de intrări
 Forțarea generării de rezultate
invalide
 Forțarea rezultatelor calculelor să fie
prea mari sau prea mici
 Proiectarea de teste în care
parametrii unei metode apelate sunt
situați la extremele domeniilor lor de
definiție
 Testarea întotdeauna a parametrilor
de tip pointer cu valoarea nulă
 Varierea ordinii în care sunt activate
componentele în sistemele cu
memorie comună
89
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
90
Automatizarea testării
 Testarea este o fază costisitoare. Mediile automate
de testare asigură o serie de instrumente care
reduc timpul necesar și costurile de testare
 Aceste instrumente pot fi uneori dificil de integrat în
sistemele testate
 Pentru testarea interfeței cu utilizatorul, se
recomandă utilizarea de scripturi
 De exemplu, testele de tip Coded UI în Visual Studio,
care înregistrează o succesiune de acțiuni
 Datele de test pot fi generate după anumite modele
sau distribuții de probabilitate
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
91
Concluzii
 Verificarea și validarea sunt două lucruri diferite
 Verificarea arată conformarea produsului la specificații
 Validarea arată că produsul îndeplinește cerințele clientului
 Testarea poate indica prezența erorilor în sistem, nu
poate garanta lipsa erorilor
 Testarea unităților cade de obicei în sarcina
dezvoltatorilor, dar testarea sistemului trebuie să fie
responsabilitatea unei echipe diferite
 Instrumentele automate reduc timpul și costul fazei
de testare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

More Related Content

What's hot

6 verification tools
6 verification tools6 verification tools
6 verification toolsUsha Mehta
 
2019 2 testing and verification of vlsi design_verification
2019 2 testing and verification of vlsi design_verification2019 2 testing and verification of vlsi design_verification
2019 2 testing and verification of vlsi design_verificationUsha Mehta
 
11 static timing_analysis_2_combinational_design
11 static timing_analysis_2_combinational_design11 static timing_analysis_2_combinational_design
11 static timing_analysis_2_combinational_designUsha Mehta
 
defect tracking and management
defect tracking and management   defect tracking and management
defect tracking and management Manish Chaurasia
 
Deterministic Test Pattern Generation ( D-Algorithm of ATPG) (Testing of VLSI...
Deterministic Test Pattern Generation ( D-Algorithm of ATPG) (Testing of VLSI...Deterministic Test Pattern Generation ( D-Algorithm of ATPG) (Testing of VLSI...
Deterministic Test Pattern Generation ( D-Algorithm of ATPG) (Testing of VLSI...Usha Mehta
 
Software Quality Management
Software Quality ManagementSoftware Quality Management
Software Quality ManagementKrishna Sujeer
 
Testing strategies in Software Engineering
Testing strategies in Software EngineeringTesting strategies in Software Engineering
Testing strategies in Software EngineeringMuhammadTalha436
 
Requirements Based Testing
Requirements Based TestingRequirements Based Testing
Requirements Based TestingSSA KPI
 
10 static timing_analysis_1_concept_of_timing_analysis
10 static timing_analysis_1_concept_of_timing_analysis10 static timing_analysis_1_concept_of_timing_analysis
10 static timing_analysis_1_concept_of_timing_analysisUsha Mehta
 
Software Configuration Management (SCM)
Software Configuration Management (SCM)Software Configuration Management (SCM)
Software Configuration Management (SCM)Nishkarsh Gupta
 
Software quality assurance
Software quality assuranceSoftware quality assurance
Software quality assuranceAman Adhikari
 
Darshan Dehuniya - Resume - ASIC Verification Engineer (1)
Darshan Dehuniya - Resume - ASIC Verification Engineer  (1)Darshan Dehuniya - Resume - ASIC Verification Engineer  (1)
Darshan Dehuniya - Resume - ASIC Verification Engineer (1)Darshan Dehuniya
 
Test pattern Generation for 4:1 MUX
Test pattern Generation for 4:1 MUXTest pattern Generation for 4:1 MUX
Test pattern Generation for 4:1 MUXUrmilasSrinivasan
 
Timing Analysis
Timing AnalysisTiming Analysis
Timing Analysisrchovatiya
 

What's hot (20)

6 verification tools
6 verification tools6 verification tools
6 verification tools
 
2019 2 testing and verification of vlsi design_verification
2019 2 testing and verification of vlsi design_verification2019 2 testing and verification of vlsi design_verification
2019 2 testing and verification of vlsi design_verification
 
Testing
TestingTesting
Testing
 
11 static timing_analysis_2_combinational_design
11 static timing_analysis_2_combinational_design11 static timing_analysis_2_combinational_design
11 static timing_analysis_2_combinational_design
 
Introduction to Software Quality & its' Challenges
Introduction to Software Quality & its' ChallengesIntroduction to Software Quality & its' Challenges
Introduction to Software Quality & its' Challenges
 
defect tracking and management
defect tracking and management   defect tracking and management
defect tracking and management
 
Software Testing 4/5
Software Testing 4/5Software Testing 4/5
Software Testing 4/5
 
Deterministic Test Pattern Generation ( D-Algorithm of ATPG) (Testing of VLSI...
Deterministic Test Pattern Generation ( D-Algorithm of ATPG) (Testing of VLSI...Deterministic Test Pattern Generation ( D-Algorithm of ATPG) (Testing of VLSI...
Deterministic Test Pattern Generation ( D-Algorithm of ATPG) (Testing of VLSI...
 
Software Quality Management
Software Quality ManagementSoftware Quality Management
Software Quality Management
 
Testing strategies in Software Engineering
Testing strategies in Software EngineeringTesting strategies in Software Engineering
Testing strategies in Software Engineering
 
Requirements Based Testing
Requirements Based TestingRequirements Based Testing
Requirements Based Testing
 
10 static timing_analysis_1_concept_of_timing_analysis
10 static timing_analysis_1_concept_of_timing_analysis10 static timing_analysis_1_concept_of_timing_analysis
10 static timing_analysis_1_concept_of_timing_analysis
 
Software testing axioms
Software testing axiomsSoftware testing axioms
Software testing axioms
 
Reliability growth models
Reliability growth modelsReliability growth models
Reliability growth models
 
Istqb lesson 5
Istqb lesson 5Istqb lesson 5
Istqb lesson 5
 
Software Configuration Management (SCM)
Software Configuration Management (SCM)Software Configuration Management (SCM)
Software Configuration Management (SCM)
 
Software quality assurance
Software quality assuranceSoftware quality assurance
Software quality assurance
 
Darshan Dehuniya - Resume - ASIC Verification Engineer (1)
Darshan Dehuniya - Resume - ASIC Verification Engineer  (1)Darshan Dehuniya - Resume - ASIC Verification Engineer  (1)
Darshan Dehuniya - Resume - ASIC Verification Engineer (1)
 
Test pattern Generation for 4:1 MUX
Test pattern Generation for 4:1 MUXTest pattern Generation for 4:1 MUX
Test pattern Generation for 4:1 MUX
 
Timing Analysis
Timing AnalysisTiming Analysis
Timing Analysis
 

Similar to Faza de testare (I)

Faza de implementare
Faza de implementareFaza de implementare
Faza de implementareFlorin Leon
 
Faza de proiectare
Faza de proiectareFaza de proiectare
Faza de proiectareFlorin Leon
 
Aspecte conexe procesului de dezvoltare
Aspecte conexe procesului de dezvoltareAspecte conexe procesului de dezvoltare
Aspecte conexe procesului de dezvoltareFlorin Leon
 
Manual testing 1
Manual testing 1Manual testing 1
Manual testing 1Ion Griu
 
Sabloane de proiectare comportamentale (II)
Sabloane de proiectare comportamentale (II)Sabloane de proiectare comportamentale (II)
Sabloane de proiectare comportamentale (II)Florin Leon
 
Introducere in ingineria programarii
Introducere in ingineria programariiIntroducere in ingineria programarii
Introducere in ingineria programariiFlorin Leon
 
Sabloane de proiectare comportamentale (Ib)
Sabloane de proiectare comportamentale (Ib)Sabloane de proiectare comportamentale (Ib)
Sabloane de proiectare comportamentale (Ib)Florin Leon
 
Sabloane de proiectare creationale (I)
Sabloane de proiectare creationale (I)Sabloane de proiectare creationale (I)
Sabloane de proiectare creationale (I)Florin Leon
 
Sabloane de proiectare structurale (II)
Sabloane de proiectare structurale (II)Sabloane de proiectare structurale (II)
Sabloane de proiectare structurale (II)Florin Leon
 

Similar to Faza de testare (I) (11)

Faza de implementare
Faza de implementareFaza de implementare
Faza de implementare
 
Faza de proiectare
Faza de proiectareFaza de proiectare
Faza de proiectare
 
Aspecte conexe procesului de dezvoltare
Aspecte conexe procesului de dezvoltareAspecte conexe procesului de dezvoltare
Aspecte conexe procesului de dezvoltare
 
Manual testing 1
Manual testing 1Manual testing 1
Manual testing 1
 
Faza de analiza
Faza de analizaFaza de analiza
Faza de analiza
 
Sabloane de proiectare comportamentale (II)
Sabloane de proiectare comportamentale (II)Sabloane de proiectare comportamentale (II)
Sabloane de proiectare comportamentale (II)
 
Introducere in ingineria programarii
Introducere in ingineria programariiIntroducere in ingineria programarii
Introducere in ingineria programarii
 
Sabloane de proiectare comportamentale (Ib)
Sabloane de proiectare comportamentale (Ib)Sabloane de proiectare comportamentale (Ib)
Sabloane de proiectare comportamentale (Ib)
 
Sabloane de proiectare creationale (I)
Sabloane de proiectare creationale (I)Sabloane de proiectare creationale (I)
Sabloane de proiectare creationale (I)
 
Procese de dezvoltare sw
Procese de dezvoltare swProcese de dezvoltare sw
Procese de dezvoltare sw
 
Sabloane de proiectare structurale (II)
Sabloane de proiectare structurale (II)Sabloane de proiectare structurale (II)
Sabloane de proiectare structurale (II)
 

More from Florin Leon

Modele bazate pe energie
Modele bazate pe energieModele bazate pe energie
Modele bazate pe energieFlorin Leon
 
Retele neuronale profunde
Retele neuronale profundeRetele neuronale profunde
Retele neuronale profundeFlorin Leon
 
Regresia liniara, logistica, softmax
Regresia liniara, logistica, softmaxRegresia liniara, logistica, softmax
Regresia liniara, logistica, softmaxFlorin Leon
 
Clasificarea bazata pe ansambluri. Selectia trasaturilor
Clasificarea bazata pe ansambluri. Selectia trasaturilorClasificarea bazata pe ansambluri. Selectia trasaturilor
Clasificarea bazata pe ansambluri. Selectia trasaturilorFlorin Leon
 
Algoritmi de clasificare
Algoritmi de clasificareAlgoritmi de clasificare
Algoritmi de clasificareFlorin Leon
 
Algoritmi de grupare (clustering)
Algoritmi de grupare (clustering)Algoritmi de grupare (clustering)
Algoritmi de grupare (clustering)Florin Leon
 
Teoria jocurilor (II)
Teoria jocurilor (II)Teoria jocurilor (II)
Teoria jocurilor (II)Florin Leon
 
Teoria jocurilor (I)
Teoria jocurilor (I)Teoria jocurilor (I)
Teoria jocurilor (I)Florin Leon
 
Arhitecturi de agenti (II)
Arhitecturi de agenti (II)Arhitecturi de agenti (II)
Arhitecturi de agenti (II)Florin Leon
 
Arhitecturi de agenti (I)
Arhitecturi de agenti (I)Arhitecturi de agenti (I)
Arhitecturi de agenti (I)Florin Leon
 
Introducere in domeniul agentilor
Introducere in domeniul agentilorIntroducere in domeniul agentilor
Introducere in domeniul agentilorFlorin Leon
 
Sabloane de proiectare structurale (I)
Sabloane de proiectare structurale (I)Sabloane de proiectare structurale (I)
Sabloane de proiectare structurale (I)Florin Leon
 
Sabloane de proiectare creationale (II)
Sabloane de proiectare creationale (II)Sabloane de proiectare creationale (II)
Sabloane de proiectare creationale (II)Florin Leon
 
Limbaje de modelare. UML
Limbaje de modelare. UMLLimbaje de modelare. UML
Limbaje de modelare. UMLFlorin Leon
 
Complexitate si emergenta
Complexitate si emergentaComplexitate si emergenta
Complexitate si emergentaFlorin Leon
 
Invatarea cu intarire
Invatarea cu intarireInvatarea cu intarire
Invatarea cu intarireFlorin Leon
 
Retele neuronale (II)
Retele neuronale (II)Retele neuronale (II)
Retele neuronale (II)Florin Leon
 
Retele neuronale (I)
Retele neuronale (I)Retele neuronale (I)
Retele neuronale (I)Florin Leon
 
Rationament probabilistic
Rationament probabilisticRationament probabilistic
Rationament probabilisticFlorin Leon
 
Logica vaga (fuzzy)
Logica vaga (fuzzy)Logica vaga (fuzzy)
Logica vaga (fuzzy)Florin Leon
 

More from Florin Leon (20)

Modele bazate pe energie
Modele bazate pe energieModele bazate pe energie
Modele bazate pe energie
 
Retele neuronale profunde
Retele neuronale profundeRetele neuronale profunde
Retele neuronale profunde
 
Regresia liniara, logistica, softmax
Regresia liniara, logistica, softmaxRegresia liniara, logistica, softmax
Regresia liniara, logistica, softmax
 
Clasificarea bazata pe ansambluri. Selectia trasaturilor
Clasificarea bazata pe ansambluri. Selectia trasaturilorClasificarea bazata pe ansambluri. Selectia trasaturilor
Clasificarea bazata pe ansambluri. Selectia trasaturilor
 
Algoritmi de clasificare
Algoritmi de clasificareAlgoritmi de clasificare
Algoritmi de clasificare
 
Algoritmi de grupare (clustering)
Algoritmi de grupare (clustering)Algoritmi de grupare (clustering)
Algoritmi de grupare (clustering)
 
Teoria jocurilor (II)
Teoria jocurilor (II)Teoria jocurilor (II)
Teoria jocurilor (II)
 
Teoria jocurilor (I)
Teoria jocurilor (I)Teoria jocurilor (I)
Teoria jocurilor (I)
 
Arhitecturi de agenti (II)
Arhitecturi de agenti (II)Arhitecturi de agenti (II)
Arhitecturi de agenti (II)
 
Arhitecturi de agenti (I)
Arhitecturi de agenti (I)Arhitecturi de agenti (I)
Arhitecturi de agenti (I)
 
Introducere in domeniul agentilor
Introducere in domeniul agentilorIntroducere in domeniul agentilor
Introducere in domeniul agentilor
 
Sabloane de proiectare structurale (I)
Sabloane de proiectare structurale (I)Sabloane de proiectare structurale (I)
Sabloane de proiectare structurale (I)
 
Sabloane de proiectare creationale (II)
Sabloane de proiectare creationale (II)Sabloane de proiectare creationale (II)
Sabloane de proiectare creationale (II)
 
Limbaje de modelare. UML
Limbaje de modelare. UMLLimbaje de modelare. UML
Limbaje de modelare. UML
 
Complexitate si emergenta
Complexitate si emergentaComplexitate si emergenta
Complexitate si emergenta
 
Invatarea cu intarire
Invatarea cu intarireInvatarea cu intarire
Invatarea cu intarire
 
Retele neuronale (II)
Retele neuronale (II)Retele neuronale (II)
Retele neuronale (II)
 
Retele neuronale (I)
Retele neuronale (I)Retele neuronale (I)
Retele neuronale (I)
 
Rationament probabilistic
Rationament probabilisticRationament probabilistic
Rationament probabilistic
 
Logica vaga (fuzzy)
Logica vaga (fuzzy)Logica vaga (fuzzy)
Logica vaga (fuzzy)
 

Faza de testare (I)

  • 1. Ingineria programării 12. Faza de testare (I) Florin Leon Universitatea Tehnică „Gheorghe Asachi” din Iași Facultatea de Automatică și Calculatoare http://florinleon.byethost24.com/curs_ip.htm Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 2. 2 Make it idiot-proof and someone will make a better idiot. Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 3. Faza de testare (I) 1. Introducere 2. Tipuri de testare 3. Inspecțiile codului 4. Testarea de tip cutie neagră 5. Testarea de tip cutie albă 6. Testarea incrementală și neincrementală 7. Testarea top-down și bottom-up 8. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 4. Faza de testare (I) 1. Introducere 2. Tipuri de testare 3. Inspecțiile codului 4. Testarea de tip cutie neagră 5. Testarea de tip cutie albă 6. Testarea incrementală și neincrementală 7. Testarea top-down și bottom-up 8. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 5. 5 Verificare și Validare  Verificare  Construim corect produsul?  Se referă la dezvoltarea produsului  Validare  Construim produsul corect?  Se referă la respectarea specificațiilor, la utilitatea produsului Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 6. 6 Scopurile V & V  Verificarea și validarea trebuie să stabilească încrederea că produsul este potrivit pentru scopul său  Aceasta nu înseamnă că produsul este lipsit de defecte  Doar că produsul trebuie să fie suficient de bun pentru utilizare  Suficient de bun poate însemna... (slide-ul următor) Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 7. 7 Evaluarea unui produs software  Depinde de scopul produsului, de așteptările utilizatorilor și factorii de piață  Funcționalitatea programului  Nivelul de încredere depinde de cât de critic este sistemul pentru utilizatori  Așteptările utilizatorilor  Utilizatorii pot avea grade diferite de așteptări pentru anumite tipuri de produse software  Mediul comercial  Lansarea rapidă pe piață a unui produs poate fi uneori mai importantă decât găsirea defectelor în program Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 8. 8  Evidențiază prezența erorilor și nu absența lor  Este singura tehnică de validare pentru cerințe non-funcționale, deoarece programul trebuie lansat în execuție pentru a i se analiza comportamentul  Este utilizată de obicei alături de verificarea statică pentru o siguranță cât mai mare Testarea unui program Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 9. 9 Terminologie (IEEE)  Eroare  O acțiune umană care are ca rezultat un defect în produsul software  Defect (engl. “fault”)  Consecința unei erori în produsul software  Un defect poate fi latent: nu cauzează probleme cât timp nu apar condițiile care determină execuția anumitor linii de cod  Defecțiune (engl. “failure”)  Manifestarea unui defect: când execuția programului întâlnește un defect, acesta provoacă o defecțiune  Abaterea programului de la comportamentul așteptat  “Bug”: termen colocvial utilizat deseori ca sinonim pentru „defect” Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 10. 10 Testarea defectelor și testarea de validare  Testarea defectelor  Teste proiectate să descopere prezența defectelor în sistem  Un test de succes este cel care descoperă un defect  Testarea de validare  Intenționează să arate că produsul nu îndeplinește cerințele  Un test de succes este cel care arată că o cerință nu a fost implementată adecvat Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 11. 11 Testarea și depanarea  Testarea defectelor și depanarea (engl. “debugging”) sunt procese distincte  Testarea are ca scop stabilirea existenței defectelor într-un program  Depanarea are ca scop localizarea și repararea erorilor corespunzătoare  Depanarea implică formularea unor ipoteze asupra comportamentului programului, corectarea defectelor și apoi re-testarea programului Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 12. 12 Asigurarea calității  Testarea se referă la detectarea defectelor  Asigurarea calității se referă la prevenirea lor  Tratează procesele de dezvoltare menite să conducă la producerea unui software de calitate  Include procesul de testare a produsului  Procesul de asigurare a calității este mai general decât procesul de testare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 13. Faza de testare (I) 1. Introducere 2. Tipuri de testare 3. Inspecțiile codului 4. Testarea de tip cutie neagră 5. Testarea de tip cutie albă 6. Testarea incrementală și neincrementală 7. Testarea top-down și bottom-up 8. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 14. 14 Testarea unităților  O unitate (sau un modul) se referă de obicei la un element atomic (clasă sau metodă), dar poate însemna și un element de nivel mai înalt: bibliotecă, driver etc.  Testarea unei unități se face în izolare  Pentru simularea apelurilor externe se pot utiliza funcții externe fictive (engl. “stubs”) Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 15. 15 Programe „schelă”  De multe ori, sunt necesare așa-numitele „schele”, adică programe special construite pentru stabilirea mediului de test  Numai când mediul este realizat se poate executa o evaluare corectă  Programul schelă stabilește stări și valori pentru structurile de date și asigură funcții externe fictive  De obicei, programul schelă nu are aceeași calitate ca produsul software testat și adesea este destul de fragil  O schimbare mică în modulul testat poate determina schimbări importante în programul schelă Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 16. 16 Testarea componentelor  Testează interacțiunea mai multor unități  Testarea este determinată de arhitectură Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 17. 17 Cine face testarea?  Există diferite păreri privind rolurile în testare  Testarea unei componente cade în sarcina programatorului acesteia și doar testarea sistemului se face de o echipă diferită  Testele sunt concepute pe baza experienței programatorului  Testarea unei componente se face de către o persoană diferită, iar depanarea se face de către programatorul inițial Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 18. 18 Testele de regresiune  engl. “regression tests”  Testele valide generează un set de rezultate verificate, numit standard de aur  Testele de regresiune sunt utilizate la re-testare, după realizarea unor modificări, pentru a asigura faptul că modificările nu au introdus noi defecte în codul care funcționa bine anterior  Pe măsură ce dezvoltarea continuă, sunt adăugate mai multe teste noi, iar testele vechi pot rămâne valide sau nu  Dacă un test vechi nu mai este valid, rezultatele sale sunt modificate în standardul de aur, pentru a se potrivi situației curente  Acest mecanism previne regresiunea sistemului într-o stare de eroare anterioară Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 19. 19 Testarea interfeței cu utilizatorul  Majoritatea aplicațiilor din zilele noastre au interfețe grafice cu utilizatorul (GUI)  Testarea interfeței grafice poate pune anumite probleme  Cele mai multe interfețe, dacă nu chiar toate, au bucle de evenimente care conțin cozi de mesaje de la mouse, tastatură, ferestre etc.  Asociate cu fiecare eveniment sunt coordonatele ecran  Testarea interfeței cu utilizatorul presupune memorarea tuturor acestor informații și elaborarea unei modalități prin care mesajele să fie trimise din nou aplicației, la un moment ulterior  De obicei, se folosesc scripturi pentru testare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 20. Faza de testare (I) 1. Introducere 2. Tipuri de testare 3. Inspecțiile codului 4. Testarea de tip cutie neagră 5. Testarea de tip cutie albă 6. Testarea incrementală și neincrementală 7. Testarea top-down și bottom-up 8. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 21. Inspecțiile codului  engl. “code inspections”, “code reviews”  Presupun citirea codului pentru a detecta erori  Echipa de inspecție are în general 4 persoane:  Moderatorul: un programator competent  Programatorul: cel care a scris codul inspectat  Proiectantul (designer-ul), dacă este o persoană diferită de programator  Un specialist în testare 21 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 22. Activități  Programatorul citește, instrucțiune cu instrucțiune, logica programului  Ceilalți participanți pun întrebări  Programatorul însuși poate descoperi cele mai multe erori  Se caută în program cele mai întâlnite tipuri de erori  O listă de erori comune este prezentată în slide-ul următor 22 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 23. 23 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 24. Caracteristici  Inspectorii detectează erorile, programatorul trebuie să le corecteze  Dacă sunt descoperite multe erori sau unele erori necesită corecții substanțiale, moderatorul stabilește o nouă inspecție după corectarea lor  Erorile determinate pot conduce la modificarea proiectării (design-ului)  De obicei, durata unei sesiuni de inspecție este de 90-120 de minute, cu o rată de 150 de instrucțiuni pe oră  Dacă programul este mai mare, se stabilesc mai multe sesiuni de inspecție, organizate pe module 24 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 25. Caracteristici  Programatorul nu trebuie să fie defensiv, ci constructiv  Nu trebuie să vadă inspecția ca pe un atac personal, ci ca pe o modalitate de a crește calitatea muncii sale  Rezultatele inspecției sunt confidențiale  Programatorul primește reacții privind stilul de programare, tehnicile și algoritmii folosiți  Ceilalți participanți beneficiază de pe urma expunerii la un alt stil de programare  Identificarea timpurie a secțiunilor celor mai predispuse la erori ajută la sporirea atenției acordate acestora în faza de testare 25 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 26. Faza de testare (I) 1. Introducere 2. Tipuri de testare 3. Inspecțiile codului 4. Testarea de tip cutie neagră 5. Testarea de tip cutie albă 6. Testarea incrementală și neincrementală 7. Testarea top-down și bottom-up 8. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 27. 27 Testarea „cutie neagră”  Se mai numește „testare funcțională”  Se iau în considerare numai intrările într-un modul și ieșirile dorite, conform specificațiilor  Structura internă a modulului este ignorată  Testarea exhaustivă nu este fezabilă  Generarea aleatorie a cazurilor de test nu este eficientă  Optimul: detectarea unui număr maxim de defecte cu un număr minim de cazuri de test Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 28. 28 Clase de echivalență  O clasă de echivalență (CE) este formată din intrările pentru care comportamentul sistemului este similar  De exemplu: lucrul cu întregi  o clasă cu întregi pozitivi, alta cu întregi negativi, eventual una cu 0  Divizarea domeniului de intrare în clase de echivalență  Dacă programul rulează corect pentru o valoare din clasă, va rula corect și pentru celelalte valori din clasă Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 29. 29 Clase de echivalență pentru intrări  De obicei, pentru fiecare condiție a unei intrări, se consideră o clasă de echivalență validă și mai multe clase de echivalență invalide  De exemplu: 0 < x < max  CE validă: o valoare în intervalul (0, max)  CE invalide: o valoare ≤ 0, respectiv o valoare ≥ max Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 30. 30 Clase de echivalență pentru ieșiri  Pentru fiecare tip de ieșire, se estimează ce intrări pot provoca situațiile respective  De exemplu, rata dobânzii pentru care profitul unei investiții este pozitiv, negativ sau 0  Deși sunt mai greu de identificat, cazurile de test pentru clasele de ieșire pot indica defecte suplimentare față de clasele de intrare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 31. 31 Selecția cazurilor de test  Strategia 1  Fiecare test să acopere cât mai multe CE valide  Câte un test pentru fiecare CE invalidă  Strategia 2  Un test să acopere cel mult o CE validă pentru fiecare intrare  Câte un test separat pentru fiecare CE invalidă  Necesită mai multe cazuri de test Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 32. 32 Exemplu  Un program cu 2 intrări: un șir de caractere s de lungime ≤ N și un întreg n  Ieșirea: cele mai dese n apariții ale caracterelor lui s Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 33. Exemplu  Strategia 1: un s cu lungimea mai mică decât N, conținând litere mari, litere mici, cifre și caractere speciale și n valid (EQ1 – EQ6), apoi câte un caz pentru IEQ1, IEQ2 și IEQ3  Strategia 2: câte un caz pentru fiecare clasă de echivalență, de exemplu un s cu cifre și n valid (EQ1, EQ6), apoi alte cazuri pentru EQ2, ..., EQ5 și cazuri separate pentru IEQ1, IEQ2 și IEQ3 33 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 34. 34 Analiza valorilor limită  De multe ori, programele care funcționează corect pentru valorile unei CE eșuează pentru valorile de la limita CE  Intrarea pentru un caz de test se alege dintr-o CE la limita acesteia  „Cazuri extreme”  Cazurile pentru CE invalide se aleg tot în apropierea limitei  De exemplu: 0 ≤ x ≤ 1  Cazuri de test valide: 0 și 1  Cazuri de test invalide: -0.1 și 1.1  Pentru o listă, trebuie testate primul și ultimul element  Pentru CE de ieșire, se aleg intrări care determină o ieșire la limita CE, respectiv în afara sa Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 35. 35 Selecția cazurilor de test  Pentru n intrări, fiecare cu un domeniu de definiție  Strategia 1  Se selectează valori limită diferite pentru o variabilă iar celelalte sunt menținute la valoarea nominală  min – 1, min, min + 1, max – 1, max, max + 1  Plus un caz în care toate cele n intrări sunt la valoarea nominală   6n + 1 cazuri de test Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 36. 36 Exemplu  Pentru 2 intrări X și Y sunt necesare 13 cazuri de test Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 37. 37 Selecția cazurilor de test  Strategia 2  Se încearcă toate combinațiile posibile  6 valori de limită  1 valoare nominală   7n cazuri de test Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 38. 38 Graful cauză-efect  Tehnicile anterioare nu ajută la construirea combinațiilor de teste  Considerând toate combinațiile valide, pentru n condiții de intrare vom avea 2n cazuri de test  Graful cauză-efect determină selectarea combinațiilor de intrare într-un mod sistematic  Cauză: o condiție distinctă de intrare  Efect: o condiție distinctă de ieșire  Condițiile sunt binare (A / F) și pot fi combinate cu operatorii ȘI, SAU, NEGAȚIE Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 39. 39 Exemplu negație Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 40. 40 Tabelul de decizie Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 41. Tipuri de defecte  Defecte unimodale (engl. “single-mode faults”)  Implică o singură condiție  Program care nu tipărește corect pentru un anumit tip de imprimantă  Program care nu calculează bine tarifele când călătorul este minor  Program de taxare pentru telefoane care nu calculează corect pentru apelurile spre o anumită țară  Defecte multimodale (engl. “multi-mode faults”)  Implică mai multe condiții  Program care nu calculează bine tarifele când călătorul este minor și călătorește la business class și nu stă un weekend la destinație  Program de taxare pentru telefoane care nu calculează corect pentru apelurile spre o anumită țară în timpul nopții 41 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 42. 42 Testarea perechilor  Pentru defecte unimodale  Se folosesc strategiile de partiționare a claselor de echivalență  Pentru n parametri cu m valori, numărul de teste în cazul cel mai favorabil este m (putem testa toți parametrii într-un test, fiecare cu valori diferite)  Pentru defecte multimodale  Testarea tuturor combinațiilor nu este fezabilă (nm cazuri de test)  Studiile au arătat că majoritatea defectelor sunt indicate de testarea perechilor de valori (majoritatea defectelor sunt unimodale sau bimodale)  Pentru n parametri cu m valori, numărul total de perechi este m ∙ m ∙ n ∙ (n – 1) / 2  Numărul de teste în cazul cel mai favorabil este însă m2 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 43. 43 Exemplu 9 ∙ 3 = 27 combinații 9 cazuri de test se evită acoperirea unei perechi de mai multe ori Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 44. 44 Cazuri speciale  Numite și “error guessing”  Depind de structurile de date și de experiența testerului, pentru a detecta presupunerile incorecte ale programatorului, cauzate în general de specificațiile incomplete  Exemple:  La o împărțire, numitorul este 0  Un fișier care trebuie citit este gol sau nu există  Fișierul începe cu linii albe  Vectorul este deja sortat Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 45. 45 Testarea bazată pe stări  Pentru aceleași intrări, sistemele cu stare produc ieșiri diferite la momente de timp diferite  Ieșirile depind și de starea internă, nu numai de intrări  Starea depinde de intrările anterioare  Modelul de stare conține:  Stări: impactul cumulat al tuturor intrărilor anterioare  Tranziții: schimbările stărilor ca răspuns la evenimente  Evenimente: intrările sistemului  Acțiuni: ieșirile sistemului Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 46. 46 Selecția cazurilor de test  Testarea bazată pe stări este o testare de tip „cutie gri” (engl. “gray box”)  Criterii:  Testele trebuie să acopere toate tranzițiile din graf  Trebuie să execute toate perechile de tranziții adiacente (intrarea într-o stare și ieșirea din acea stare)  Trebuie să execute toate căile simple (care nu conțin noduri repetate) Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 47. 47 Exemplu Exemplu Sistem de sondaj pentru studenți • Un student răspunde la întrebări și apoi vede rezultatele sondajului • Rezultatele se actualizează doar după 5 răspunsuri • Baza de date poate „cădea” Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 48. 48 Testarea claselor  Acoperirea completă a testelor unei clase implică:  Testarea tuturor operațiilor (metodelor) unui obiect  Setarea și interogarea tuturor atributelor (câmpurilor) unui obiect  Trecerea unui obiect prin toate stările posibile  Presupune testarea tuturor combinațiilor de valori pentru câmpuri  Problemă asemănătoare cu testarea perechilor  Moștenirea îngreunează proiectarea testelor de clasă, întrucât entitățile care trebuie testate nu sunt localizate Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 49. 49 Testarea MM  Testare „metodă-mesaj”  În fiecare metodă, fiecare apel către altă metodă trebuie testat cel puțin o dată  Dacă o metodă apelează altă metodă de mai multe ori, fiecare apel trebuie testat o singură dată Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 50. 50 Testarea perechilor de funcții  engl. “function pair”  Pentru toate secvențele posibile de execuții ale metodelor, trebuie testate cele de lungime 2  Acest lucru se face de obicei pe baza unui graf, care precizează succesiunile posibile de apeluri  Pentru un program cu operații grafice, exemple de perechi de funcții pentru testare sunt:  Crearea unui dreptunghi și apoi calcularea ariei  Crearea a două sau mai multe dreptunghiuri și apoi calcularea ariei  Crearea unui cerc și apoi crearea unui dreptunghi Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 51. Faza de testare (I) 1. Introducere 2. Tipuri de testare 3. Inspecțiile codului 4. Testarea de tip cutie neagră 5. Testarea de tip cutie albă 6. Testarea incrementală și neincrementală 7. Testarea top-down și bottom-up 8. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 52. 52 Testarea „cutie albă”  Testarea „cutie neagră” tratează funcționalitatea unui modul  Testarea „cutie albă” (engl. “white box”) tratează funcțiile sau metodele la un nivel scăzut: este testată fiecare funcție  Aceste teste se mai numesc teste “clear box” deoarece toate detaliile sunt vizibile pentru test  Testarea „cutie albă” vizează acoperirea diferitelor structuri ale programului, de aceea se mai numește „testare structurală” Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 53. 53 Testarea fluxului de control  Graful fluxului de control: G  Noduri: blocuri de instrucțiuni executate împreună  Arce: posibile transferuri de control  Cale: secvență finită de noduri (n1, n2, ..., nk), k > 1, astfel încât există un arc (ni, ni+1) oricare ar fi ni , cu excepția lui nk  Cale completă: o cale din nodul inițial (start) în nodul final (exit) Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 54. 54 Acoperirea instrucțiunilor  Necesită ca fiecare instrucțiune să fie executată cel puțin o dată  Se mai numește criteriul tuturor nodurilor (all-nodes)  Nu este un criteriu foarte puternic pentru cazul de test {x = 0}, eroarea rămâne nedetectată Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 55. 55 Acoperirea ramurilor  Necesită ca fiecare arc din graf să fie traversat cel puțin o dată  Fiecare decizie trebuie evaluată ca A sau F  Criteriul acoperirii ramurilor 100% se mai numește criteriul tuturor arcelor (all-edges)  Cramuri  Cinstrucțiuni (all-edges  all-nodes) decizia poate fi evaluată A sau F fără a detecta eroarea Funcția ar trebui să testeze că x este în intervalul [0,100]. Cazurile de test {x = 5, x = -5} evaluează decizia la A sau F Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 56. 56 Acoperirea căilor  Un test mai general este acoperirea tuturor căilor (all-paths)  Presupune executarea tuturor căilor posibile din graful de control  Ccăi  Cramuri (all-paths  all-edges)  Dificultăți:  Programele care conțin bucle au un număr infinit de căi  Pot exista căi în graf pentru care să nu existe intrări corespunzătoare astfel încât căile respective să fie executate  Pentru un modul având complexitatea ciclomatică M, se recomandă testarea a cel puțin M căi distincte Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 57. 57 Testarea fluxului de control  Niciuna din aceste metode nu este suficientă pentru detectarea tuturor defectelor  Dacă din program lipsește o cale necesară pentru testarea unei condiții, chiar dacă sunt testate toate căile existente, defectul nu va fi descoperit Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 58. 58 Testarea fluxului de date  Graful def/use (definiție / utilizare)  def: definirea unei variabile  x = 5;  c-use: utilizarea computațională  a = x; read(x); write(x);  p-use: utilizarea predicativă (într-o decizie)  if (x > 0) … Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 59. 59 Testarea fluxului de date  Criterii:  all-defs: pentru fiecare definiție trebuie să existe un c-use sau un p-use  all-p-uses: trebuie testate toate utilizările predicative ale unei definiții  all-c-uses: trebuie testate toate utilizările computaționale ale unei definiții  all-p-uses, some-c-uses  all-c-uses, some-p-uses  all-uses = all-p-uses + all-c-uses Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 60. 60 Exemplu p-use se reprezintă pe arc Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 61. 61 Exemplu  all-edges:  (1, 2, 4, 5, 6, 7, 8, 9): y negativ  (1, 3, 4, 5, 7, 9): y pozitiv  Calea (1, 2, 4, 5, 6, 7, 9) este nefezabilă: 1-2 înseamnă că y este negativ, deci din 7 nu se poate merge în 9  Cazuri de test:  {x = 3, y = 1}  {x = 3, y = -1} Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 62. 62 Exemplu  all-defs:  Presupune cel puțin un c-use sau un p-use  (1, 2, 4, 5, 6, 5, 6, 7, 8, 9)  (1, 3, 4, 5, 6, 5, 6, 7, 9)  Repetarea 5, 6 asigură faptul că definițiile din nodul 6 sunt și folosite  Cazuri de test:  {x = 3, y = 2}  {x = 3, y = -2} Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 63. 63 Relațiile dintre criterii criteriu mai puternic criteriu mai slab de exemplu, all-paths  all-uses Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 64. 64 Acoperirea testului  Acoperirea testului este procentajul din produs verificat prin testare  În mod ideal, o acoperire de 100% ar fi excelentă, însă este rareori îndeplinită  De obicei, un test cu o acoperire de 90% este simplă, însă ultimele 10% necesită o perioadă de timp semnificativă  Exemplu: testarea BIOS-ului IBM în anii ’80  Pentru creșterea performanțelor, a fost plasat într-un ROM și deci patch-urile pentru eventuale defecte erau imposibile  A necesitat testarea cu acoperire 100%  S-a creat un mediu de test, mult mai mare decât BIOS-ul  A apărut necesitatea testării mediului de test!  A fost atinsă o acoperire de 100%, cu un cost foarte ridicat  Alternativa: ROM + EPROM pentru patch-uri Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 65. 65 Instrumente de acoperire  engl. “coverage tools”  Analizează codul sursă și generează un test pentru fiecare alternativă a firelor de execuție  Depinde de programator combinarea acestor teste în cazuri semnificative care să valideze rezultatele fiecărui fir de execuție  De obicei, instrumentul de acoperire este utilizat într-un mod oarecum diferit: el urmărește liniile de cod executate într-un test și apoi raportează procentul din cod executat în cadrul testului  Dacă acoperirea este mare și liniile sursă netestate nu prezintă mare importanță pentru calitatea generală a sistemului, atunci nu mai sunt necesare teste suplimentare  Exemple pentru programe .NET: Visual Studio (Test → Analyse Code Coverage), NCover, PartCover, dotCover Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 66. Visual Studio: testarea unităților 66 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 67. Visual Studio: acoperirea codului 67 Nu sunt testate toate condițiile Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 68. Faza de testare (I) 1. Introducere 2. Tipuri de testare 3. Inspecțiile codului 4. Testarea de tip cutie neagră 5. Testarea de tip cutie albă 6. Testarea incrementală și neincrementală 7. Testarea top-down și bottom-up 8. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 69. 69 Ordinea modulelor  Ordinea în care sunt combinate modulele pentru a rezulta programul complet afectează:  Forma cazurilor de test  Tipurile de instrumente de testare utilizate  Ordinea în care modulele sunt implementate și testate  Costul generării cazurilor de test  Costul depanării Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 70. 70 Tipuri de integrare  Integrarea neincrementală  Modulele sunt testate separat și apoi integrate simultan, continuându-se cu testarea sistemului  Numită și model big-bang, deoarece timpul de testare crește mult  Integrarea incrementală  Următorul modul care trebuie testat este combinat cu modulele testate până la acel moment  Poate fi top-down sau bottom-up Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 71. 71 Module driver și stub  Ambele tipuri de integrare necesită pentru testare module driver, care simulează intrările, și/sau module stub, din care se pot apela funcții  De exemplu: pentru B  Modul driver: A  Modul stub: E A apelează funcții din B, C, D B apelează funcții din E D apelează funcții din F Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 72. 72 Comparație  Integrarea neincrementală necesită 5 module driver și 5 module stub  Integrarea incrementală necesită:  5 module driver și niciun modul stub pentru abordarea bottom-up  5 module stub și niciun modul driver pentru abordarea top-down Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 73. 73 Comparație  Testarea incrementală detectează mai devreme incompatibili- tatea interfețelor sau alte presupuneri incorecte din module  În testarea neincrementală, modulele nu se „văd” decât la sfârșit  Depanarea este mai ușoară în abordarea incrementală  Un defect detectat la un moment dat este cauzat de adăugarea ultimului modul  În abordarea neincrementală, defectul ar putea fi oriunde (în orice modul)  Testarea incrementală este mai completă  Modulele sunt testate nu numai izolat, ci și în combinație cu altele  De exemplu, la testarea incrementală a lui B, deși modulele A sau E au fost deja testate, prin evaluarea unor condiții din B pot apărea erori nedetectate din A sau E Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 74. 74 Comparație  Abordarea neincrementală poate necesita aparent mai puțin timp de calcul  Execuția unui modul nu mai implică rularea altora  Totuși, este nevoie de mai mult timp de dezvoltare pentru construirea modulelor driver și stub  Abordarea incrementală permite testarea în paralel a unor module, la începutul activității  Câștigurile pot fi semnificative pentru proiecte mari Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 75. Faza de testare (I) 1. Introducere 2. Tipuri de testare 3. Inspecțiile codului 4. Testarea de tip cutie neagră 5. Testarea de tip cutie albă 6. Testarea incrementală și neincrementală 7. Testarea top-down și bottom-up 8. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 76. 76 Testarea top-down  Începe cu modulul de pe nivelul cel mai înalt  Modulul următor trebuie să fie unul din modulele subordonate unui modul deja testat  Modulul B este subordonat lui A dacă A apelează funcții din B Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 77. 77 Exemplu  Modulul A este modulul inițial  Trebuie mai întâi scrise module stub pentru B, C și D  Scrierea modulelor stub nu este banală  Dacă rezultatele returnate de acestea nu au sens, modulul A poate să eșueze chiar și fără să aibă vreun defect  Se pot dezvolta mai multe versiuni diferite ale stub-urilor, fiecare cu date de test fixe Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 78. 78 Ordinea de testare  După testarea lui A, un modul real înlocuiește un stub  După testarea modulului inițial, sunt posibile mai multe secvențe de testare, de exemplu: unele module se pot testa și în paralel Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 79. 79 Pasul al doilea în testarea top-down Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 80. 80 Recomandări  Modulele critice ale programului trebuie testate cât mai devreme  Modulele cu funcții de intrare-ieșire (I/O) trebuie testate cât mai devreme  După adăugarea unui modul de I/O, reprezentarea cazurilor de test pentru modulul testat devine identică cu aceea a programului final  De exemplu, dacă modulul G conține funcții critice, iar modulele I și J conțin funcții de I/O, o secvență posibilă este: Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 81. 81 Probleme  Să presupunem că adăugăm modulul H  Acesta este foarte „depărtat” de modulul de intrare J  Analog, modulul E este foarte „depărtat” de modulul de ieșire I  Este dificilă selectarea cazurilor de test pentru aceste module doar pe baza intrărilor și ieșirilor sistemului Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 82. 82 Probleme  Pentru testarea unui modul (de exemplu A) pot fi necesare mai multe versiuni ale stub-ului B  Se poate decide ca A să fie testat parțial la început, urmând ca restul de teste să fie făcut la adăugarea modulului B real  Se poate întâmpla ca A să nu mai fie testat complet la momentul respectiv (această situație trebuie evitată)  Deoarece nivelurile superioare trimit de obicei resurse pentru utilizare pe nivelurile inferioare, este greu de testat la început dacă aceste resurse sunt corecte  De exemplu, A trimite un fișier pentru K, dar până când K nu este testat, nu se poate spune dacă fișierul a fost deschis cu atributele corecte Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 83. 83 Testarea bottom-up  Începe cu modulele terminale (care nu apelează alte module)  Modulul următor trebuie să fie unul pentru care toate modulele subordonate au fost deja testate  Pentru exemplul anterior, se începe cu E, J, G, K, L, I, serial sau în paralel  Se creează module driver pentru testarea funcțiilor  Este necesar un singur modul driver pentru un modul anume, care va apela iterativ funcțiile testate  În general, crearea modulelor driver este mai ușoară decât crearea modulelor stub Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 84. 84 Exemplu Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 85. 85 Problemă  Programul funcțional nu există decât după integrarea ultimului modul Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 86. 86 Comparație Testarea top-down Testarea bottom-up Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 87. 87 Metrici  Efortul de testare  Este un indicator al volumului de teste  Un efort prea mic înseamnă evaluarea insuficientă a produsului și deci o probabilitate mare ca produsul să fie lansat cu defecte nedetectate  Timpul calculator  În general, la dezvoltarea unui produs software, timpul calculator este mic la început, atinge un vârf maxim la finalul implementării și testării iar apoi scade Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 88. 88  Doar testarea exhaustivă poate arăta că un program nu are defecte  Totuși, pentru programe de dimensiuni medii sau mari, testarea exhaustivă este imposibilă  Pentru selectarea testelor, se recomandă: (slide-ul următor) Recomandări Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 89. Recomandări  Testarea tuturor funcțiilor accesate prin meniuri  Testarea combinațiilor de funcții accesate prin același meniu  Când utilizatorul trebuie să introducă date, testarea tuturor funcțiilor implicate, cu intrări corecte și incorecte  Alegerea intrărilor care forțează sistemul să genereze toate mesajele de eroare  Alegerea intrărilor care pot cauza supraîncărcarea zonelor de memorie alocate (engl. “buffer overflow”)  Repetarea de mai multe ori a testelor cu aceleași intrări sau serii de intrări  Forțarea generării de rezultate invalide  Forțarea rezultatelor calculelor să fie prea mari sau prea mici  Proiectarea de teste în care parametrii unei metode apelate sunt situați la extremele domeniilor lor de definiție  Testarea întotdeauna a parametrilor de tip pointer cu valoarea nulă  Varierea ordinii în care sunt activate componentele în sistemele cu memorie comună 89 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 90. 90 Automatizarea testării  Testarea este o fază costisitoare. Mediile automate de testare asigură o serie de instrumente care reduc timpul necesar și costurile de testare  Aceste instrumente pot fi uneori dificil de integrat în sistemele testate  Pentru testarea interfeței cu utilizatorul, se recomandă utilizarea de scripturi  De exemplu, testele de tip Coded UI în Visual Studio, care înregistrează o succesiune de acțiuni  Datele de test pot fi generate după anumite modele sau distribuții de probabilitate Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 91. 91 Concluzii  Verificarea și validarea sunt două lucruri diferite  Verificarea arată conformarea produsului la specificații  Validarea arată că produsul îndeplinește cerințele clientului  Testarea poate indica prezența erorilor în sistem, nu poate garanta lipsa erorilor  Testarea unităților cade de obicei în sarcina dezvoltatorilor, dar testarea sistemului trebuie să fie responsabilitatea unei echipe diferite  Instrumentele automate reduc timpul și costul fazei de testare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm