Documente Academic
Documente Profesional
Documente Cultură
C12 Testarea Sistemelor Software
C12 Testarea Sistemelor Software
Testarea software determin dac un sistem software este gata de livrare i estimeaz nivelul de performan al acestuia. Testarea furnizeaz o baz pentru interaciunea cu persoanele implicate n proiect. Creterea complexitii sistemelor software a dus la o cretere a bugetului alocat acestei faze din procesul de dezvoltare al unui proiect (ntre 30 i 50%). O mare parte a efortului necesar realizrii sistemelor software este alocat dezvoltrii modelelor de testare i a aplicaiilor de testare automat. Testarea este procesul execuiei programului cu scopul de a pune n eviden erorile. Detectarea erorilor este scopul principal al testrii. n acelai timp, prezint interes att dezvoltarea unor seturi de date de test adecvate care s conduc la activarea erorilor precum i modalitile de alocare a timpului necesar testrii, n special n sistemele de mare complexitate. n mod obinuit, spunem c un sistem software eueaz atunci cnd nu ndeplinete cerinele impuse. Funcionarea defectuoas poate fi rezultatul unuia dintre urmtoarele motivele: Specificaiile sunt greite sau unele cerine ale clienilor nu sunt specificate; Specificaiile pot conine cerine care nu pot fi implementate cu softul disponibil; Proiectarea sistemului poate fi greit. Implementarea codului are defecte; unii algoritmi sunt greit sau incomplet implementai. Experiena acumulat de-a lungul timpului n domeniul testrii software a dus la elaborarea unor politici de testare. Spre exemplu, Myers (1976) a propus urmtoarele reguli de baz pentru realizarea testrii sistemelor software: Se determin momentul n care se oprete testarea; Responsabilitatea testrii programului revine unui tester, nu celui ce realizat programul; Se descriu rezultatele ateptate pentru fiecare caz de test; Se scriu cazuri de test pentru condiii de intrare valide i nevalide; Se verific rezultatele fiecrui test. Testarea se atribuie celor mai creative persoane din echip Pentru proiectele complexe, specificaiile de test pentru sistem i pentru acceptarea acestuia nu trebuie scrise de ctre analiti, proiectani i programatori care au lucrat la proiectul respectiv (pentru sistemele mici i medii e acceptabil ca aceste specificaii s fie scrise de ctre cei ce dezvolt sistemul) ci de ctre utilizatorii sistemului. Testarea software cuprinde o multitudine de strategii de testare. n general, metodele de testare sunt specializate, n sensul c cele mai multe proiecte creeaz propriile metode de testare depinznd de produsul respectiv. Metodele de testare dinamic presupun executarea programului folosind aa numitele date de test. Datele de test se construiesc conform cerinelor funcionale specificate iar rezultatele furnizate de program se compar cu cele prezentate n specificaii. Metodele de testare static cuprind verificarea programului, analiza anomaliilor, inspecia codului. Verificarea programului necesit specificarea precondiiilor la intrare i a postcondiiilor la ieire. Analiza anomaliilor caut eventuale comportri anormale ale programului (spre exemplu, poriuni de cod care nu sunt executate niciodat). Scopul testrii statice este de a analiza sistemul software i de a deduce operaiile sale curente ca o consecin logic a deciziilor de proiectare. Aceast modalitate de testare nu necesit execuia programului.
Testarea white box (cutie alb). Aceast abordare presupune inspectarea structurii codului modulelor software. Testarea black box se mai numete testare funcional. Punctul de plecare este fie o specificaie, fie codul. n cazul codului, datele de test trebuie s permit verificarea funcionalitii programului. Testerul nu este interesat de modul n care este implementat programul respectiv, ci de modul n care acesta furnizeaz rspunsul dorit. Testarea white box, cunoscut i sub numele de testare structural, presupune analizarea implementrii programului (modulului). Se verific executarea corect a tuturor cilor i ramurilor codului programului testat. n tabelul 1 se prezint cteva metode de testare ce fac parte din cele dou mari categorii prezentate mai sus, metode ce vor fi prezentate pe larg n seciunile ulterioare. Tabelul 1 Clasificarea formelor de testare
Dinamic Testare funcional Testare aleatoare Testare pe domenii Graf cauz-efect Testare structural Testare computaional Testare pe domenii Testare ci Generare date Analiza schimbrilor Inspectare cod Verificare program Execuie simbolic Analiz anomalii
Static
Verificare specificaii
n cazul testrii sistemelor software exist i probleme ce nu in de tehnic. Spre exemplu, se pot pune urmtoarele ntrebri: Cine face testarea? Testarea poate fi realizat de un programator care a fost implicat n scrierea codului? Se apeleaz la un tester independent, se schimb poriuni de cod ntre membrii aceleiai echipe sau se las testarea n seama utilizatorului final? Fiecare dintre alternativele propuse are argumente pro i contra. O alt problem fundamental este legat de durata activitilor de testare, cnd apar dou puncte de vedere cel puin contradictorii care trebuie luate n considerare. Primul este al proiectanilor care fac tot posibilul pentru a realiza un produs fr defecte. Cel de-al doilea este al managerilor de proiect care iau n considerare constrngerile de timp impuse proiectului. nainte de a intra ntr-o prezentare mai detaliat a diferitelor variante de testare, este important precizarea pailor principali care intervin n orice schem de testare. Etapele principale ale unei scheme de testare
Selectai ce trebuie msurat (cuantificat) de testul respectiv. nainte de realizarea testului, trebuie identificate scopurile acestuia. Scopurile pot fi diferite (spre exemplu, testarea fiabilitii, testarea completitudinii cerinelor). Decidei cum facei testarea a ceea ce trebuie testat. Dup ce ai stabilit ce este de testat, trebuie s decidei cum realizai testele relevante. Dezvoltai cazurile de test. Pentru tipurile de testare deja acceptate, trebuie creat o colecie de cazuri de test (situaii de test) pentru antrenarea sistemului supus testrii. Determinai rezultatele ateptate ale testului respectiv. Executai cazurile de test. Comparai rezultatele obinute cu cele ateptate.
Tabel 2
Testare Component Integrare Definiie Se verific implementarea elementelor software (ex. Funcii, module). Componentele software i hardware sunt combinate i testate pn la integrarea ntregului sistem Se testeaz sistemul integrat Se verific dac rezultatele testelor satisfac criteriile de acceptare ale clienilor Scop Logica programului este complet i corect. Componentele funcioneaz conform proiectrii. Obiectivele proiectrii sunt satisfcute
Sistem Acceptare
Proiectul software este o entitate complet n concordan cu cerinele operaionale. Obiectivele clienilor sunt satisfcute
3. Activiti de test
n cadrul testrii software se pot delimita urmtoarele activiti cheie: Elaborarea planului de testare Proiectarea testului Stabilirea cazurilor de test Determinarea procedurii de testare Executarea testului Realizarea raportului de testare Planul de testare trebuie s precizeze scopul, tipul abordrii, resursele necesare i un orar al activitii de testare. Este necesar de asemenea identificarea surselor i nivelelor de risc i stabilirea persoanele ce realizeaz testarea. Planificarea testrii poate ncepe din momentul n care cerinele sistemului sunt complete. Este dificil determinarea momentului n care se oprete testarea. Din acest motiv trebuie introduse criterii pentru a stabili dac un test este complet sau nu. Proiectarea testului rafineaz abordarea propus n planul de testare. n aceast etap se identific principalele caracteristici ce trebuie testate i se definesc cazurile de test asociate. Este recomandat ca proiectarea testelor s se fac pentru o testare de regresiune (testele executate anterior s poat fi repetate la un punct ulterior n procesul de dezvoltare i ntreinere). Cazurile i procedurile de test se construiesc n faza de implementare. Se urmrete realizarea unei colecii de cazuri de test ct mai redus care s poat duce la ndeplinirea scopurilor propuse. Cazurile de test bine realizate au o mare probabilitate de a detecta erorile. Procedura de testare identific toi paii necesari operrii sistemului i rulrii cazurilor de test ce implementeaz proiectul de test obinut n etapa anterioar. Executarea testului ncepe la nivel de componente i continu cu testarea la integrare, testarea sistemului i testarea de acceptare. Raportul de testare rezum toate ieirile testului i subliniaz discrepanele detectate. Activitile de testare se distribuie de-a lungul ntregului ciclu de via al produsului.
considerare a testelor n funcie de modalitatea n care acestea devin accesibile proiectantului. Testele funcionale sunt utilizate pentru a rula codul cu intrri nominale pentru care valorile ateptate sunt disponibile. Pentru aceste intrri sunt cunoscute de asemenea condiiile la limit. Spre exemplu, pentru a testa funcional nmulirea matricelor se vor lua n considerare matrice al cror produs este dinainte cunoscut. Testele de performan ajut la determinarea unor performane ale sistemului cum ar fi timpul de execuie al unor pri de cod i timpul de rspuns (n cazul sistemelor ncorporate). Scopul acestui tip de testare const n identificarea punctelor slabe ale sistemului software, cuantificarea neajunsurilor n scopul unei viitoare mbuntiri. Testele la stres sunt proiectate pentru a urmri comportarea sistemului atunci cnd acesta cedeaz. Acest tip de testare evalueaz limitrile sistemului software. Testele structurale sunt folosite pentru a verifica logica intern a sistemului. Testele pe componente se efectueaz asupra modulelor individuale, proceduri i funcii. Testele la integrare sunt proiectate pentru a testa comportarea sistemului pe msur ce se adaug modulele componente. Testarea interfeelor are ca obiectiv detectarea erorilor cauzate de interfeele dintre obiecte. Pot aprea urmtoarele tipuri de erori: utilizare greit a interfeei (parametri cu un alt tip sau ntr-o alt ordine dect sunt specificai n interfa), nelegerea greit a interfeei (presupuneri greite legate de ce ar trebui s fac o component), erori de timing (au loc n sistemele n timp real care folosesc memorie partajat sau transmitere de mesaje).
Un set de cazuri de test pentru testarea derivat din sintax conine expresii ce verific regulile de mai sus. Un exemplu de expresie mpreun cu regula corespunztoare este dat n figura urmtoare.
<expresie>::=<expresie>+<termen> | <expresie>-<termen>| <termen> <termen>::=<termen>+<factor>| <termen>/<factor>| <factor> <factor>::=<identificator>| (<expresie>) <identificator>::=a|b\c|d|e|...| z
5.2 Testarea bazat pe tabele de decizie Aceast form de testare prezint interes atunci cnd cerinele produsului software sunt formulate cu ajutorul regulilor de decizie de tipul if-then. Exemplele care se preteaz la acest tip de testare sunt sistemele bazate pe reguli. O regul este de forma:
If cond1 and cond2 and cond3 and ... condn then actiune
Un tabel de decizie este compus dintr-un numr de coloane ce conin toate situaiile de test. Partea superioar a coloanei conine condiiile ce trebuie satisfcute. Partea de jos a tabelului specific aciunile care au loc dac sunt satisfcute condiiile din regul. Un exemplu de tabel de decizie este prezentat n figura 3.
Condiii ... Condiia i ... Aciuni ... Aciunea j ... 1 1 0 0 1 0
Figura 4. Rezervor de lichid n plus, se adaug o aciune de avertizare n momentul n care senzorul 2 furnizeaz rezultate eronate. Tabelul de decizie complet are 22 = 4 coloane (figura 5A). Dac nu intereseaz mesajele de avertizare n caz de eroare, se poate reduce dimensiunea tabelului de decizie aa cum se poate observa n figura 5B. n general, pentru n condiii se va ajunge la 2n combinaii, deoarece fiecare coloan a tabelului trebuie folosit cel puin o dat. Prin urmare vor exista 2n cazuri de test. Se observ c i pentru valori mici ale lui n, tabelul de decizie ajunge la dimensiuni mari. Aceast cretere exponenial se explic prin faptul c nu au fost luate n considerare constrngerile ntre variabilele din condiii, constrngeri ce presupun limitri fizice i conceptuale ntre variabile. A treia coloan din tabelul de decizie din figura 5B poate fi astfel eliminat.
n seciunea urmtoare vom prezenta metoda de testare bazat pe grafuri cauz efect care elimin neajunsul major al metodei bazate pe tabele de decizie, i anume creterea exponenial a dimensiunii tabelelor odat cu creterea numrului de reguli.
S1 S2 Deschide valv ieire Deschide valv intrare Trimite mesaj eroare 0 0 1 0 1 0 0 0 0 1 0 0 0 1 0 1 1 1 0 0 Condiii S1 S2 Deschide valv ieire Deschide valv intrare Trimite mesaj eroare 0 0 0 1 1 0 0 0 1 Condiii 1 1 0 Aciuni
Aciuni
Figura 5A. Tabel de decizie complet Figura 5B. Tabel de decizie redus
Graful cauz-efect este prezentat n figura 6. Nodurile intermediare realizeaz operatorii logici and i or. Simbolul de negare stabilete faptul c efectul are valoarea de adevr true doar dac nodul asociat este false. Graful cauz-efect ajut la determinarea cazurilor de test corespunztoare. Aceste cazuri de test se obin parcurgnd n sens invers (de la efect la cauz) poriuni din graful prezentat n figura 6. dac spre exemplu suntem interesai n determinarea cauzelor efectului E3 se urmrete poriunea de graf prezentat n figura 7.
cauzelor
Se observ c C2, C3 i C4 determin E3, n timp ce cauza C1 nu influeneaz E3. Cauza C1 poate fi privit drept o condiie de tip nu conteaz, ce va fi notat cu x. Aceast observaie reduce dimensiunea tabelului de decizie corespunztor. Coloana din tabelul de decizie care va fi folosit la generarea cazurilor de test este: C
1
C
2
C
3
C
4
Dac nu se iau n considerare condiiile de tip nu conteaz, poriunea rezultat din tabelul de decizie va conine 21 = 2 coloane ce implic o enumerare a valorilor cauzei C1. Tabelul de decizie corespunztor grafului cauz-efect al unui ATM const n cinci coloane cu un numr substanial de condiii de tip nu conteaz (figura 8). Dac nu ignorm aceste condiii, va rezulta un tabel cu 24 = 16 coloane. C1 0 1 x x 1 C2 0 x 1 1 x C3 x 0 1 1 1 C4 x x 0 1 1 E1 1 0 0 0 0 E2 0 1 0 0 0 E3 0 0 1 0 0 E4 0 0 0 1 0 E5 0 0 0 0 1 Figura 8. Tabel de decizie ATM
n general, dac se dorete generarea unui tabel de decizie redus, se va adopta un mecanism de tip backtracking pentru traversarea unui graf de la efecte spre cauze (Ghezzi et al., 1991): La parcurgerea invers a unui nod or a crui ieire este true se vor utiliza doar combinaii de intrri care au valoarea de adevr true. Dac, spre exemplu, avem trei cauze (a, b, c) ce afecteaz un nod de tip or a crui ieire este true, se vor considera doar combinaiile <a=true, b=false, c=false>, <a=false, b=true, c=false>, <a=false, b=false, c=true>. La parcurgerea invers a unui nod and a crui ieire este false se vor utiliza doar combinaii de intrri care au doar o singur valoare false. Pentru exemplul precedent, se vor considera combinaiile <a=false, b=true, c=true>, <a=true, b=false, c=true>, <a=true, b=true, c=false>.
n grafurile cauz-efect pot fi introduse constrngeri suplimentare ntre intrri, cum ar fi cele de tipul a implic b. Acestea reduc numrul cazurilor de test deoarece unele combinaii de intrri nu vor mai fi luate n considerare n procedura de testare.
provenind din E1 i cealalt din E2 (vezi figura 9). Se testeaz cile x > y i x < y . Cazul x = y , care este parte a clasei de echivalen E2, are o probabilitate nul de a fi testat, deci nu va fi selectat niciodat pentru testare. Cu toate acestea, cazul la limit x = y prezint interes i din acest motiv, se poate prevedea o cale de realizare.
7. Testarea exhaustiv
Testarea exhaustiv face parte din metoda de testare black box. Cu toate c este impracticabil, ea furnizeaz o imagine asupra complexitii procesului de testare. Un test exhaustiv trebuie s arate c programul funcioneaz corect pentru toate intrrile posibile. Cnd ne referim la intrri trebuie s avem n vedere i aspectele hardware ale realizrii codului. Exemplu. Se consider ecuaia de gradul doi de forma ax 2 + bx + c = 0 , unde a, b, c sunt
parametrii ecuaiei. Din punct de vedere funcional, programul transform spaiul tridimensional al parametrilor (a, b, c) ntr-un spaiu bidimensional al rdcinilor ecuaiei (r1, r2). Testarea exhaustiv pleac de la reprezentarea intern a parametrilor. Dac presupunem c reprezentarea intern este pe 16 bii, pentru fiecare intrare vom avea 216 cazuri de test. Considernd toate cele trei intrri, vom avea n final 248 cazuri de test ce trebuie executate, ceea ce este nefezabil.
8. Testarea structural
Testarea structural presupune dezvoltarea de cazuri de test ce iau n considerare structura codului (logica intern). Exist mai multe categorii de testarea structural, funcie de ct de complet trebuie s fie procesul de testare i de restriciile de timp.
Testarea la nivel de instruciune este o form de testare primar, care necesit executarea fiecrei instruciuni cel puin o dat. Exemplu. Se consider urmtoarea poriune de cod care se presupune c determin modulul lui y.
begin if (y 0) then y = 0-y; abs = y; end;
Cazul de test y = 0 este suficient pentru a testa toate instruciunile din poriunea de cod prezentat. Este evident faptul c aceast form de testare nu detecteaz o eroare evident a codului i anume aceea c nu se calculeaz de fapt modulul numrului y.
Testarea la nivel de ramur. Cazurile de test sunt alese astfel nct fiecare ramificaie a codului s fie executat cel puin o dat. Exemplu. Dac ne referim la instruciunea anterioar, cazurile de test y = 0 i y = 4 sunt suficiente pentru a executa ambele variante ale blocului de decizie. Pentru y = 0 abs = 0 . Pentru
8
y = 4 abs = 4 , ceea ce indic o eroare. Indiscutabil, aceast metod de testare conduce la detectarea
erorilor.
Testarea la nivel de ramur/condiie. Fiecare ramur trebuie parcurs cel puin o dat i toate combinaiile posibile ale condiiilor de decizie trebuie executate. Exemplu. Se consider instruciunea:
if ((x<val_1) && (y>val_2)){z=calculeaza_1(x,y); else z= calculeaza_2(x,y);}
S considerm cazurile de test x = 4, y = 10 , x = 6, y = 12 . n primul caz, blocul de decizie returneaz false i atunci se execut o ramur a codului, iar n cel de-al doilea caz, blocul de decizie returneaz true i atunci se execut cealalt ramur a codului. Se observ faptul c, dac o eroare este asociat cu o condiie compus dintr-un bloc de decizie, ea rmne nedetectat. Din acest motiv, testarea trebuie completat cu verificarea tuturor subcondiiilor ce apar n blocul de decizie. Deoarece n exemplul prezentat avem dou subcondiii n blocul de decizie, trebuie adugate dou perechi suplimentare de teste i anume (true, false) respectiv (false, true).
Observaie. Dac fiecare subcondiie este privit ca o intrare singular, atunci acest tip de testare este analog testrii exhaustive, n condiii necesitnd 2n cazuri de test. n cazul n care n crete, testarea poate deveni nefezabil. Testarea la nivel de cale. Criteriul de acoperire a cilor consider toate cile logice dintr-un program i duce la cazuri de test care verific programul de-a lungul fiecrei astfel de ci. Acest criteriu poate deveni impracticabil, mai ales n situaiile n care programul are un numr mare de ci. Cu toate acestea, este o metod de testare folosit, mai ales pentru c permite detectarea defectelor nedescoperite prin testarea la nivel de ramur. Exemplu. Se consider schema logic din figura 10.
Dac se urmrete o testare la nivel de ramur se pot alege urmtoarele cazuri de test:
x = 1, y = 5 , x = 0, y = 12
Aceste dou cazuri de test acoper toate ramurile schemei logice (vezi figura 11), dar execuia lor corect nu garanteaz lipsa erorilor. S considerm situaia n care la un anumit moment x = 0 . n acest moment raportul y / x eueaz. Acest scenariu nu a fost luat n considerare prin cazurile de test anterioare. Figura 10. Exemplu de schem logic
Testarea la nivel de cale evit situaia prezentat anterior. Se pot considera urmtoarele cazuri de test:
x = 1, y = 5 ; x = 2, y = 15 ; x = 0, y = 7 ; x = 0, y = 13 .
Observaie. Se observ c i n cazul unui exemplu relativ simplu, numrul de ci ce trebuie parcurse este mai mare dect numrul ramurilor. Din cauza complexitii principiului acoperirii cilor este esenial numrarea cilor dintr-un program. n cazul lipsei buclelor, numrul cilor este determinat de numrul de noduri de decizie i de distribuia lor. Cele dou extreme ale numrului de ci dintr-un graf se pot observa n exemplul din figura 12. n cazul n care se unesc ramurile, blocurile de decizie sunt stivuite unele peste altele (figura 12a). Unirea ramurilor poate duce la 2n ci posibile. Numrul maxim de ci dintr-un graf este deci 2n . n cazul n care nu se face unirea ramurilor exist n + 1 ci posibile (vezi figura 12b), deci: n + 1 numr de ci 2n Este de remarcat faptul c i n cazul valorilor mici pentru n, ntre cele dou limite exist o diferen semnificativ. Pentru a micora aceast diferen se poate face o descompunere a grafului original n pri mai mici i se determin extremele separat. S considerm spre exemplu un graf cu 6 noduri de decizie. n acest caz limitele ar fi 7 i 64. Dac se mparte graful original n trei pri, fiecare coninnd 2 noduri, limitele pentru fiecare parte ar fi 3 i 4. Numrul de ci de testat n graful original este cuprins ntre 27(= 3*3*3) i 64(= 4* 4* 4) .
10
(b) ramuri neunite (a) ramuri unite Figura 12. Cazuri de acoperire a cilor n cazul grafurilor ce conin bucle, acoperirea cilor va fi restricionat la bucle ce sunt traversate doar o singur dat. Utiliznd aceast abordare, se poate transforma orice graf cu o bucl la unul fr nici o bucl. Ideea este de a mpri orice nod, s zicem A, care este nod terminal al unei ci cu reacie n A i A. Noul nod este conectat cu nodul final sau cu orice alt nod de mai jos. Construciile de baz ale programrii structurate pot fi transformate n grafuri fr bucle (figura 13). Enumerarea cilor va fi dat de sumele produselor limitelor grafului fr bucle. Exemplu. S considerm graful din figura 14. Se pornete cu frontierele care fac parte din toate
cile posibile. Acestea sunt, evident, a i h. Atunci: FGC = aFGC h , unde FGC este funcia de generare a cii iar este funcia de generare a cii pentru sub-graful dintre B i E. n continuare se construiete funcia de generare a cii pentru , FGC:
FGC = de + bFGC ,
unde semnul + se folosete pentru operaia sau. Pentru sub-graful cu nodurile C, B, E i E se obine: FGC = f + cbf . Revenind la expresia original se obine:
11
FGC = aFGCh = a(de + bFGC )h = a(de + b(f + cbf ))h = adeh + abfh + abcbfh
Figura 14. Conversia unui graf ntr-un graf echivalent fr bucle Se poate observa c numrul de ci poate crete foarte mult, mai ales pentru poriunile de cod cu fluxuri de control semnificative. Acest fapt limiteaz aplicabilitatea acestei metode de testare. Criteriul de testare a cilor nu poate detecta toate defectele, deoarece se bazeaz pe faptul c specificaiile software sunt transformate cu exactitate n cod. Lipsa unor elemente ngreuneaz semnificativ testarea.
9. Testarea regresiv
Scopul acestei metode de testare este de crea posibilitatea repetrii testelor n momentul n care apare o modificare a produsului software. Exist dou activiti principale ale testrii regresive: Stabilirea unui test (sau a unei serii de teste) pentru reluare. Regula este s se mearg pe teste puternice (i anume acele teste cu nivel mare de acoperire). Compararea ieirilor noi cu cele vechi (de baz) pentru a fi siguri c nu exist schimbri nedorite. Pentru testarea regresiv efectiv, trebuie realizate prelucrri suplimentare ale seriilor de test. Eficacitatea testrii regresive se exprim n termenii urmtoarelor condiii: (a) ct de grea este construirea i meninerea seriilor de test i (b) ct de fezabil este sistemul de testare regresiv.
Inspectrile sunt activiti realizate de o echip experi care verific proiectul sau codul cu scopul de a identifica erorile. Au fost propuse n 1976 de Fagan i au fost dezvoltate de IBM. O inspectare conine cinci pai principali: Privirea de ansamblu asupra documentelor ce trebuie inspectate Pregtirea. Participanii ncearc s neleag documentul n detaliu. Tipurile de erori i frecvena acestora gsite n inspeciile recente sunt utile pentru ca atenia s se concentreze asupra ariilor predispuse n msur mai mare la erori
12
Inspectarea. Pentru nceput, un participant parcurge codul mpreun cu echipa de inspecie, asigurndu-se c fiecare problem este acoperit i c fiecare ramur e parcurs cel puin o dat. Fiecare participant continu cu propria list de verificare. Scopul este de a gsi i documenta erorile, nu de a le nltura. Liderul echipei de inspecie (moderatorul) are ca sarcini pregtirea raportului scris i asigurarea unei rezolvri potrivite Refacerea. Erorile i problemele din raportul scris sunt rezolvate Continuarea. Moderatorul se asigur c toate problemele ridicate au fost rezolvate. Toate rezolvrile trebuie verificate pentru a fi siguri c nu au fost introduse noi erori. n cazul n care mai mult de 5% din materialul inspectat a fost refcut, echipa se reunete pentru o nou inspectare. Echipa responsabil cu inspectarea este format n general din 3-6 persoane. Spre exemplu, dac se inspecteaz proiectul, echipa va conine un moderator, un proiectant, un dezvoltator i un tester. Fiecare inspecie trebui s utilizeze o list de verificare a defectelor poteniale (cum ar fi corespondena ntre specificaii i proiectare, ntre parametrii actuali i cei formali ai interfeelor, compatibilitatea softului cu hardware-ul disponibil etc.). Rezultatele inspeciei sunt nregistrate funcie de nivelul de severitate i tip. Pentru ca inspecia s aib succes ea trebuie s aib un caracter iterativ. n cazul inspectrii codului activitile au scopul de a descoperi erorile obinuite sau pe cele provenind din clase specifice cum ar fi: Variabile neiniializate; Salturile n interiorul buclelor; Bucle fr condiie de terminare; Indexarea vectorilor n afara limitelor; Nepotriviri ntre parametrii actuali i cei formali. Trecerea rapid prin cod presupune organizarea unor ntlniri de lucru pentru analizarea unui produs software, unui modul de cod, unui plan de testare etc. Aciunea este condus de un persoan ce face o prezentare a produsului ce trebuie analizat. Erorile sunt nregistrate de un coordonator. Grupul de lucru se concentreaz pe detecia erorilor, nu pe corecia lor. n general, o astfel de echip este format din urmtorii membri: un prezentator al problemelor ce trebuie revzute, un coordonator al echipei de lucru, un secretar ce se ocup cu pregtirea tuturor materialelor necesare, un reprezentant al persoanelor ce se ocup cu ntreinerea produsului, o persoan responsabil cu ndeplinirea standardelor interne i un reprezentant al clientului.
Demonstraiile de corectitudine se bazeaz pe observaia c orice poriune de cod (program) este un obiect formal, n timp ce orice specificaie poate fi realizat printr-o metod formal. Aceasta nseamn c se pune accentul pe echivalena dintre program i specificaii. Echivalena poate fi pus n eviden printr-o demonstraie matematic. Execuia simbolic utilizeaz simboluri n locul valorilor numerice, adic se bazeaz pe clase de date. Pentru a ilustra esena acestei idei s considerm urmtorul exemplu:
x = 7*y; if (x>a) then a = a+x-3 else y = sin(x/2); b = x+a*y;
n figura 15 literele mari cum ar fi X sau Y semnific valori simbolice, acestea corespunznd variabilelor originale utilizate n cod). S presupunem c la nceputul execuiei simbolice, x = X i a = A . Prima instruciune duce la X = 7 * Y . Celelalte variabile rmn neschimbate. Blocul de decizie poate fi activat pe oricare din cele dou direcii (comparaia 7 * Y > A poate fi adevrat sau fals). Vom selecta unul din cele dou fire de execuie ca un triplu de forma:
<valori variabile simbolice, cale de execuie, condiie>
13
Figura 16. Strategia top-down de Figura 17. Strategia bottom-up de testare a sistemului testare a sistemului Plecnd de la strategiile de proiectare se pot defini urmtoarele strategii de testare la integrare: Testarea bottom-up pleac de la module detaliate i se extinde spre nivele mai nalte ale ierahiei; aceast testarea necesit drivere. Testarea top-down - pornete de la modulul de pe cel mai nalt nivel i necesit substitute. Testarea big-bang - modulele se integreaz ntr-un singur pas iar testarea se face asupra ntregului sistem. Testarea n straturi suprapuse - combin testarea bottom-up i top-down definind un anumit strat int n ierarhia modulelor; modulele inferioare stratului int se testeaz printr-o abordare bottom-up iar cele superioare printr-o metod top-down.
Observaie. Exist situaii n care unele module nu sunt testate separat la testrile bottom-up i topdown.
14
Exemplu. Pentru a ilustra aceste idei de testare, s considerm o ierarhie simpl de module ca n figura 18.
n figura 19 sunt prezentate clasele de testare la integrare pentru Figura 18. Ierarhie de module exemplul anterior. software
Testare bottom-up
Testare top-down
Testare big-bang
Testare n straturi Stratul de test este situat ntre A i (B, C, D) Figura 19. Exemple de testri la integrare
15