Documente Academic
Documente Profesional
Documente Cultură
1.1 Generalități
În cadrul testării de module se realizează certificarea celor mai mici unități software
care pot fi compilate şi editate independent. În programarea clasică un modul este un subprogram
(funcţie sau procedură). În cadrul programelor orientate obiect, cea mai mică unitate testabilă
este clasa.[1]
Testarea de module se concentrează asupra verificarii interfeţelor modulelor, structurilor
de date locale, condiţiilor de limite, căilor independente şi căilor de tratare a erorilor.
Deoarece modulele nu sunt programe de sine stătătoare, este necesar să se construiască
programe sau funcţii care să ajute la testarea de module.
Testarea de integrare este o tehnică sistematică de constituire a structurii programului
prin gruparea componentelor în paralel cu testarea aspectelor legate de interfaţă dintre
componente. Testarea de integrare se realizează într-o manieră neincrementală sau incrementală.
Testarea neincrementală (big-bang testing) constă în integrarea componentelor din
gruparea tuturor modulelor dintr-o dată, urmată de testarea întregului ansamblu. Acest tip de
integrare nu este recomandată, deoarece corectarea erorilor va fi greu de realizat.
Testarea incrementală presupune construirea structurii programului pas cu pas şi
testarea ansamblului obţinut. Un element important în execuţia testului este secvenţa în care
modulele trebuie sa fie testate. Astfel, testarea se realizează ascendent (bottom-up), descendent
(top-down) sau mixt.
Metoda de testare ascendentă (buttom-up testing) presupune testarea mai întâi a
modulelor de pe cel mai jos nivel al ierarhiei programului, apoi se continuă în sus cu testarea
celorlalte module. Metoda de testare ascendentă necesită construcţia de programe conducătoare
pentru a iniţializa mediul şi pentru a apela modulele. Programele de pe nivelul de sus, care de
obicei sunt critice, sunt testate ultimele. În timp sunt descoperite erori care pot influienţa multe
module care au fost deja testate. După corecţia erorilor este necesar ca toate modulele de pe
nivelurile de jos să fie testate regresiv.
În metoda testării descendente (top-down testing), modulul din vîrful ierarhiei de
programe este testat primul, procesul de testare continuând cu modulele de pe nivelurile
inferioare. Metoda de testare descendentă necesită construcţia de module vide asociate
subprogramelor care nu sunt disponibile. Avantajul acestei metode este că dacă este descoperită
o eroare în modulele de pe nivelurile înalte, impactul va fi asupra modulelor de pe nivelurile de
jos care nu au fost încă implementate, deci refacerea modulelor de pe nivelurile inferioare poate
fi evitată.
În cadrul metodei mixte, testarea urmează mai întâi metoda descendentă. Modulele
selectate de pe nivelurile inferioare sunt testate utilizînd metoda ascendentă. Această flexibilitate
permite preluarea avantajelor metodelor ascendentă şi descendentă. În cele mai multe produse
program, metoda mixtă este cea mai potrivită modalitate de abordare.
Pe masură ce sunt adaugate noi module în cadrul testarii de integrare, apar schimbări în
aplicaţie, care pot să modifice comporatmentul structurii obţinute anterior. În acest context este
executată testarea de regresie, prin care se re-testează noua structură obţinută, utilizînd o parte
din testele utilizate în etapa precedentă de integrare.
Testarea de validare are loc după ce toate erorile de interfaţă descoperite în cadrul
testării de integrare au fost corectate. Testarea de validare se încheie cu succes atunci cînd
funţionalitatea produsului program este în conformitate cu cerinţele beneficiarului. Pentru
testarea de validare se utilizează o serie de teste funcţionale pentru a confirma faptul că produsul
program se comportă conform cerinţelor.
În cadrul testării de validare se regăsesc testările alfa şi beta. Testarea alfa este realizată
la firma care produce produsul program, beneficiarul fiind acela care conduce testele. Testarea
beta este realizată la beneficiari şi utilizatori finali. Aceştea primesc o versiune a produsului
program, versiune apropiată de cea finală şi o utilizează în scopul descoperirii erorilor şi a
problemelor de performanţă şi funcţionalitate. Problemele apărute în cadrul acestei testări sunt
raportate firmei care a realizat aplicaţia. După ce perioada acordată pentru testarea beta s-a
terminat, toate erorile apărute sunt corectate, urmînd să se realizeze versiunea finală a produsului
program.
După ce a avut loc testarea produsului program, intervine testarea de sistem, prin care
se testează întregul sistem în care produsul program este o parte componentă a acestuia. Testarea
de sistem presupune rularea unor teste diferite, astfel incît să fie examinate toate caracteristicile
sistemului.
Un tester bun trebuie să poată folosi diferiţi termeni pentru a descrie ce s-a intamplat
cand a eşuat softul. In continuare este dată o listă cu termenii folosiţi:
1. Defect (Defect)
2. Excepţie (Variance)
3. Eşec (Failure)
4. Problemă (Problem)
5. Eroare (Error)
6. Incident (Incident)
7. Anomalie (Anomaly)
8. Inconsistenţă (Inconsistency)
9. Aparenţă (Feature)
11. Bug
Care dintre aceşti termeni vor fi folosiţi pentru descrierea erorilor ţine doar de cultura
companiei şi de stadiul la care a fost descoperită eroarea.
De obicei orice eroare software este numită „bug”, însă acest termen nu poate fi
acceptat cand se completează diferite rapoarte despre testarea softului. Erorile software apar cand
una sau mai multe dintre următoarele afirmaţii sunt adevărate:
1. Softul nu execută ceva ce specificaţiile spun că trebuie să execute.
2. Softul execută ceva ce specificaţiile spun că nu trebuie să execute.
3. Softul execută ceva ce in specificaţii nu este menţionat.
4. Softul nu execută ceva ce specificaţiile nu menţionează dar ar trebui să menţioneze.
5. Softul este greu de inţeles, greu de folosit, lent sau se vede că nu a fost proiectat corect.
Această definiţie a erorilor acoperă o mare parte de probleme, de aceea testerii folosesc
aceste reguli pentru a identifica diferite tipuri de probleme in aplicaţiile software.
Poate fi surprinzător, dar cel mai mic procent de erori sunt cele provenite de
programare. Cele mai multe erori sunt cauzate de deficienţele din specificaţie (≈ 60%), uneori
specificaţia pur şi simplu nu este scrisă. Alte motive – specificaţia nu este descrisă in detaliu, a
fost modificată constant şi nu a fost adusă la cunoştinţa intregii echipe de dezvoltare. Altă sursă
de erori este etapa de proiectare (≈ 30%), cauzele apariţiei erorilor aici sunt similare cu cele din
specificaţii ( modificări, comunicarea rea etc.). Relativ puţine (uneori sub 15%) sunt erorile
directe de programare. Ele pot apărea din cauza complexităţii softului, a documentaţiei
insuficiente (in special in codul care a fost modificat), a timpului insuficient planificat pentru
programare sau a erorilor de proiectare. Uneori programatorii nu inţeleg corect cerinţele ori
cerinţele nu sunt formulate bine.
Erorile depistate şi fixate in faza de scriere a specificaţiilor nu costă practic nimic, cele
care nu au fost depistate inainte de faza implementării şi testării pot ajunge la sute de dolari.
Dacă insă clientul a găsit defecte după livrarea şi lansarea produsului, costul erorilor poate creşte
de la mii la milioane de dolari. Deci costul erorilor poate creşte exponenţial avansand in procesul
de producţie de la specificare pană după livrare.
Testarea automată nu este mereu avantajoasă. Sunt multe cazuri unde testarea manuală
este mai indicată. De exemplu dacă interfața grafică a unei aplicații va fi schimbată des, testele
automate tot trebuie modificate. În unele cazuri nu este timp suficient pentru testarea automată.
Pentru perioadele scurte de testare, testarea manuală e indicată. Când programul trebuie finisat
într-un termen foarte restrâns si teste automate nu sunt, atunci testarea manuală e soluția cea mai
bună.
Testarea automată se doreşte a fi soluţia ideală pentru reducerea timpului de dezvoltare
şi a costurilor. O echipă de testeri poate să pornească uneltele de testare automată, să le lase să
ruleze şi în final să colecteze şi analizeze rezultatele. Timpul este astfel mai bine organizat şi
poate fi petrecut pentru izolarea şi raportarea bug-urilor.
Testarea manuală şi testarea automată sunt mai degrabă două procese diferite, decât
două căi diferite de a executa acelaşi proces: dinamica lor este diferită precum şi modul de a
releva bug-urile. Testarea manuală este mai folositoare în situaţiile în care este nevoie urgent de
rezultatele unor tipuri de teste specifice şi limitate, când se doreşte ca timpul de feedback să fie
foarte scurt, iar costurile să fie relativ mici.
Cum îmbunătăţirea calităţii produsului implică costuri adiţionale pentru găsirea bug-
urilor şi gestionarea acestora până la repararea lor definitivă, testarea manuală s-a dovedit a fi în
timp extrem de costisitoare. Testarea manuală pe scară largă presupune alocarea de resurse
hardware şi umane destul de mari, iar riscul să apară erori este amplificat de factorul uman.
Testarea automată necesită un efort iniţial mai mare pentru planificarea, organizarea şi
producerea testului, criteriul principal în obţinerea de rezultate bune fiind planificarea atentă,
amănunţită şi precisă a acestuia.
O alternativă interesantă este aşa-numita "testare parţială". Această soluţie este o
combinaţie de jumătate testare manuală şi jumătate testare automată, aceasta din urmă fiind
folosită numai acolo unde se pot obţine beneficii maxime.