Table of Contents

Black Box Testing

Definiții (AM)

* Structură Program * Programul ce trebuie testat pentru care sursele nu sunt disponibile, ci doar interfața de acces (binarul, o interfața implementată de clasa testată, etc). Intrări * un set de intrări ce vor fi trimise programului pentru execuție. Intrările nu trebuie neapărat să fie niște fișiere ci pot fi niște apeluri de funcții sau un alt program ce simulează un utilizator al interfeței grafice. Ieșiri * pentru fiecare intrare se definește un set de ieșire posibile cu care se testează ieșirea programului. În multe din cazuri ieșirea e deterministică și trebuie doar comparate ieșirea programului cu ieșirea așteptă, iar în alte cazuri este necesară scrierea unui program * Cum testezi un program care la intrare primește un string pe care vrea să îl parseze în numar intreg * o utilă o funcție care face conversia invers * limitele inferioare și superioare * câteva constante mici (0, -1, 1) * câteva constante mari * întregi negativi * caractere invalide (de exemplu, pentru baza 10 nu putem avea A) * numere care au 0 in fata (dar excesiv de lungi gen: 00000000000000000000000000000666) * același lucru pentru diferite baze (dacă sunt suportate) float * ca mai sus, dar în principal trebuie ținut cont de valorile speciale definite in standardul IEEE 754 * -0.0 != 0.0 * Nan, -Nan * inf, -inf un șir de caractere * limbajul acceptat (ala LFA) un vector * se aplica cazurile de la numere intregi (pentru 1 element) * 0 elemente, 1 element, 2 elemente, 5 elemente, numar maxim de elemente * caractere de despartire elemente/invalide

Boundary testing - RD (teorie), MB (exemple)

Boundary testing sau boundary value analysis este o metodă de proiectare a suitelor de teste pentru cazurile în care se folosesc valori la limita acceptată de program. În general accentuează testarea “corner case”-urilor. Unele teste care fac parte din suita boundary testing sunt “stress tests”.

În general, boundary value analysis se realizează în doi pași: # identificarea claselor de echivalență # proiectarea suitelor de test

Primul pas înseamnă de obicei, partiționarea valorilor posibile în clase valide și invalide. Spre exemplu, un program care primește valori pozitive până în 99, va avea trei clase: * clasa validă (0 ⇐ n ⇐ 99) * prima clasă invalidă (n < 0) * a doua clasă invlidă (n > 99)

Al doilea pas înseamnă proiectarea unei suite de teste care vor selecta anumite valori care să verifice reacția programului la valori valide sau invalide. Dacă un program primește valori în domeniul [-999,999], atunci o suită posibilă de test ar fi: * testare valoare validă -999 * testare valoare validă 999 * testare valoare invalidă -1000 * testare valoare invalidă 1000

În general, testele trebuie să includă prima și ultima valoare posibilă. De asemenea, se recomandă testarea de condiții extreme de intrare sau ieșire (valori foarte mici, foarte mari, invalide etc.)

Problemele pe care le detectează boundary testing sunt, de obicei: * folosirea incorectă a operatorilor relaționali (mai mic, mai mare etc.) * folosirea de valori constante inițializate incorect * erori de calcul care ar putea realiza overflow sau wrap-around în cazul conversiei între diverse tipuri de date

Exerciții

* Definiți o funcție (pseudocod) care primește două argumente indexul unei luni și indexul zilei în acea lună și întoarce un tuplu reprezentând următoarea zi (index lună, index zi) sau (-1, -1) la eroare. (ianuarie este 1, decembrie este 12). * Cum va arăta un test pentru verificarea corectitudinii funcției de mai sus? * O funcție are următoare signatură boolean check_range(unsigned long count, unsigned long max). count reprezintă numărul de dublu cuvinte (32 de biți) de stocat într-o zonă de memorie iar max reprezintă numărul maxim de octeți (8 biți) care poate fi stocat în acea zonă. Funcția verifică dacă se pot aloca count dublu cuvinte și întoarce true la succes și false la insucces. Cum va arăta acea funcție? * Ce cazuri de test veți folosi pentru verificarea corectitudinii funcției de mai sus? * Definiți o funcție care primește ca argumente 3 valori întregi cuprinse între 0 și 200 și întoarce true sau false după cum cele trei valori pot reprezenta lungimea laturilor unui triunghi. * Ce cazuri de test veți folosi pentru verificarea corectitudinii funcției de mai sus?

* Boundary testing isn't guessing at numbers * boundary values software testing * Boundary Value Testing * Boundary Value Testing Example * Boundary Value Analysis

Metrica - LG (teorie) AC (exemple)

* use-case coverage (variante de utilizare testate) spre deosebire de white box unde era code coverage * error coverage * domeniul de intrare testat * util * valori posibile (probabile) corecte incorecte * inutil * valori neașteptate