Documente Academic
Documente Profesional
Documente Cultură
Introducere
Testarea software o privire de ansamblu. Scopul acestei prelegeri este de a face mai clare urmtoarele
aspecte ale testrii software:
Impactul erorilor software asupra vieii noastre
Ce prezint erorile software i care este cauza apariiei lor
Cine sunt testorii i care este rolul lor n procesul de elaborare a softului
n secolul XXI nu ne putem imagina viaa fr produse software. Majoritatea populaiei sunt
posesori de calculatoare personale. Tehnologiile informaionale s-au infiltrat n toate domeniile activitii
umane. Mergnd la cumprturi putem primi mpreun cu o cutie de margarin sau de cereale un CDROM gratis cu un joc video sau cu muzic. Muli dintre noi nu pot petrece o zi fr Internet. Aplicaiile
software au nlocuit funcionarii n diverse ramuri, astfel avnd un impact enorm asupra vieii i activitii
umane. Pentru a asigura calitatea i sigurana aplicaiilor software se pune un accent deosebit pe testarea
acestor din urm. Testarea de software a devenit o profesie tehnic foarte important. Urmtoare exemple
pot ilustra foarte bine necesitatea testrii software.
Dezvoltarea aplicaiilor software implic o serie de activiti, n care posibilitatea erorii umane este
foarte ridicat. Testarea este un element cheie n procesul de dezvoltare, i reprezint o ultim
recapitulare a specificaiilor, design-ului i codului. Un studiu al Institutului de Testare Software (Software
Testing Institute), relev urmtoarele :
Testerii implicai n industria software sunt mai muli dect n orice alt industrie (43%)
Testarea software este executat mai degrab n cadrul departamentelor de programare (44%),
dect n cadrul unui departament orientat exclusiv pe testare (39%)
Doar 4% din productorii software supui acestui studiu prevd nfiinarea unui departament
orientat exclusiv pe testare.
Testarea software, prin definiie, urmrete focalizarea pe procesul de identificare a posibilelor erori
de program, erori care ar putea avea un impact negativ asupra produsului, i prin urmare asupra clienilor.
Satisfacia clienilor este cheia reuitei oricrei afaceri, i asta nu mai este o necunoscut.
Aceasta presupune c produsul oferit s fie de calitate ridicat, i s nu produc erori n timpul
utilizrii de ctre client. Calitatea ridicat nu poate fi obinut doar cu ajutorul unei echipe de programatori
de excepie. Este deja bine tiut faptul c orict de bine pus la punct ar fi produsul dezvoltat, acesta
conine totui erori.
Implicarea testrii n procesul de producie aduce urmtoarele avantaje:
1.1.
fiabilitate siguran
2. Racheta Ariane 5
- Autodistrugere dup o defeciune la 40 s de la lansare (1996)
Cauza: conversia 64-bit float 16-bit int genereaz o excepie de depire netratat n programul
ADA
Cost: 500 milioane dolari (racheta), 7 miliarde dolari (proiectul)
Analiz retrospectiv
principala cauz: reutilizarea nejudicioasa de software
cod preluat de la Ariane 4, fr reanalizare corespunztoare:
3. Eroarea din procesorul Intel Pentium
Eroare n unitatea de mprire cu virgula mobila, 1994
Cost: cca. 400 milioane dolari
Analiz ulterioar
Circuitul putea fi verificat formal
- demonstrare automat de teoreme [Clarke, German & Zhao]
- cu structuri speciale de date pentru reprezentarea nmulirii/mpririi [Bryant & Chen]
Accentul a fost pus pe componente mai complexe (unitatea de execuie, coerena memoriei
cache)
Eroarea software
Din exemplele de mai sus se poate vedea impactul erorilor software asupra noastr. Erorile pot fi
catastrofice, cnd provoac pierderi de viei omeneti sau pot fi nite inconveniene dac este vorba de
exemplu de un joc pe calculator. Majoritatea erorilor sunt mult mai complicate dect par la prima vedere.
Sunt ns i erori simple, subtile despre care nu se poate cu siguran de spus, dac este o eroare adevrat
sau nu.
Un testor bun trebuie s poat folosi diferii termeni pentru a descrie ce s-a ntmplat cnd a euat
softul. n continuare este dat o list cu termenii folosii:
1.
Defect (Defect)
2.
Excepie (Variance)
3.
Eec (Failure)
4.
Problem (Problem)
5.
Eroare (Error)
6.
Incident (Incident)
7.
Anomalie (Anomaly)
8.
Inconsisten (Inconsistency)
9.
Aparen (Feature)
10.
Neajuns (Fault)
11.
Bug
Care dintre aceti termeni vor fi folosii pentru descrierea erorilor ine doar de cultura companiei i de
stadiul la care a fost descoperit eroarea. Dac ne uitm n dicionar, observm c toate aceste cuvinte se
deosebesc foarte puin, unele fiind chiar sinonime.
De obicei orice eroare software este numit bug, ns acest termen nu poate fi acceptat cnd se
completeaz diferite rapoarte despre testarea softului. n cadrul acestui curs vom folosi termenul: eroare
software.
nainte de a formula definiia erorii software avem nevoie de un termen de reper: specificaia
produsului software.
Specificaia produsului este un acord al echipei de dezvoltare software, n care este definit: cum ar
trebui el s fie, cum este ntr-adevr, ce trebuie s fac i ce nu trebuie s fac acest produs.
Definiie. Erorile software apar cnd una sau mai multe dintre urmtoarele afirmaii sunt adevrate:
1.
2.
3.
4.
5.
Aceast definiie a erorilor acoper o mare parte de probleme, de acea testorii folosesc aceste reguli
pentru a identifica diferite tipuri de probleme n aplicaiile software.
1.2.
Poate fi surprinztor, dar cel mai mic procent de erori sunt cele provenite de programare. Cele mai
multe erori sunt cauzate de deficienele din specificaie ( 60%), uneori specificaia pur i simplu nu este
scris. Alte motive specificaia nu este descris n detaliu, a fost modificat constant i nu a fost adus la
cunotina ntregii echipe de dezvoltare. Alt surs de erori este etapa de proiectare ( 30%), cauzele
apariiei erorilor aici sunt similare cu cele din specificaii ( modificri, comunicarea rea etc.). Relativ
puine (uneori sub 15%) sunt erorile directe de programare. Ele pot aprea din cauza complexitii
softului, a documentaiei insuficiente (n special n codul care a fost modificat), a timpului insuficient
planificat pentru programare sau a erorilor de proiectare. Uneori programatorii nu neleg corect cerinele,
sau cerinele nu sunt formulate bine.
1.3.
Costul erorilor.
Erorile depistate i fixate in faza de scriere a specificaiilor nu cost practic nimic, cele care nu au
fost depistate nainte de faza implementrii i testrii pot ajunge la sute de dolari. Dac ns clientul a gsit
defecte dup livrarea i lansarea produsului, costul erorilor poate crete de la mii la milioane de dolari.
Deci costul erorilor poate crete exponenial avansnd n procesul de producie de la specificare pn
dup livrare.
1.4.
Un testor nu trebuie s fie numaidect un programator, cunotinele din diferite domenii (economie,
nvmnt, aviaie, medicin, culinrie, construcii ) pentru care sunt dezvoltate produse software vor
fi de un imens ajutor pentru un testor.
1.5.
Psihologia testrii
Testarea software este o disciplin tehnic, ns ea implic importante consideraii economice i
psihologice.
Ideal ar fi testarea tuturor combinaiilor posibile ale intrrilor i ieirilor programului. n cele mai
multe cazuri ns aceasta este imposibil, deoarece chiar i un program simplu poate avea sute i chiar mii
de combinaii ale intrrilor i ieirilor. Crearea cazurilor de test pentru toate aceste combinaii este destul
de nepractic, pentru aceasta este nevoie de resurse umane i financiare enorme, mai mult ca att procesul
poate dura timp ndelungat. Plus la aceasta mai trebuie de luat n consideraie i viziunea testorului fa de
crearea unui test de succes. Atitudinea testorului fa de produs este de asemenea foarte important.
Pentru ca procesul de testare s nu se transforme ntr-o goan haotic dup erori este benefic de respectat
unele principii ale testrii pe care le-a artat practica testrii i timpul i de cunoscut nite tehnici de
testare, pentru a sistematiza acest proces.
Definiii ale testrii
O cauz important a calitii proaste a produselor soft este definirea incorect a procesului de
testare. De exemplu se spune c:
1. Testarea e procesul de a demonstra c programul nu are erori (or acest lucru este imposibil
folosind doar testarea)
sau
2. Scopul testrii este de a arta c produsul este performant i funcioneaz corect
sau
3. Testarea este procesul prin care se demonstreaz c produsul face ceea ce trebuie s fac
Aceste definiii nu sunt rele doar c sunt cam pe dos. Este cunoscut c aciunea de testare a unui
program se deosebete de celelalte faze prin care acesta trece (specificare, proiectare, programare) prin
caracterul su n aparen "demolator". ntr-adevr, n timp ce alte faze au o esen constructiv, testarea
are n aparen un caracter mai degrab distructiv, deoarece scopul acestei aciuni este de a pune n
eviden proasta funcionare a produsului obinut. Din punct de vedere psihologic programatorul trebuie s
adopte n aceasta etap o atitudine "dumnoas" fa de creaia sa i s-i expun defectele.
Esena procesului este fr ndoial tot constructiv, scopul su fiind de a pune n operare real un produs
la parametrii prevzui.
Deci cele mai adecvate definiii ale testrii ar fi:
1. Testarea e procesul prin care se execut un program cu intenia de a gsi erori (Myers) sau mai
mult ca att:
2. Testarea este utilizata pentru a semnala prezena defectelor unui program, fr a garanta absena
lor( Dijkstra).
3Un test de succes (test concludent) e acela care descoper (i localizeaz) o eroare.
Principii ale testrii (Myers)
Continund ideea acestei teme observm c cea mai important problem n testare este cea
psihologic. Reieind din aceasta pot fi formulate nite principii ale testrii.
Principiul 1: Un caz de test trebuie sa defineasc neaprat ieirea sau rezultatul dorit.
Formularea acestui principiu este bazat pe psihologia uman. Dac rezultatul corect nu este
predefinit , ansa c orice rezultat va fi interpretat ca corect este destul de mare. Avem aici fenomenul
Vedem ceea ce dorim s vedem. Cu alte cuvinte noi subcontient ateptm rezultatul corect. O cale de
combatere a acestui fenomen este ncurajarea examinrii detaliate a tuturor ieirilor. Conform acestui
principiu un caz de test trebuie s fie compus din:
1. Descrierea instanei unui program.
2. Descrierea precis a rezultatului sau a ieirii programului pentru aceast instan.
Principiul 2: Un programator ar trebui s evite i s testeze propriul program.
Orice scriitor cunoate, sau cel puin trebuie s cunoasc, c este o idee nu prea bun s-i corecteze i
s-i redacteze singur manuscrisele. Iari este vorba de un fenomen psihologic. Autorul nu dorete s
descopere erori n propria lucrare. Dup ce programatorul a lucrat constructiv la designul i scrierea
programului este foarte dificil s ia o atitudine distructiv fa de propria oper. Plus la aceasta
programatorul subcontient nu dorete s gseasc erori de teama criticii din partea clientului sau
beneficiarului. n afar de aceast problem psihologic mai este una important: Programul poate avea
erori din cauza nenelegerii de ctre programator a sarcinii puse sau a specificaiei produsului. Astfel
programatorul va transmite aceleai nenelegeri i testelor executate. Aceasta nu nseamn c
programatorul nu trebuie sub nici o form s-i testeze propriul program, ns testarea de ctre o alt
persoan va fi mai eficient. Acest principiu nu poate fi aplicat i depanrii. Acest proces este mai bine
efectuat de ctre programatorul care a codificat programul.
Principiul 3: Companiile de programare nu ar trebui s-i testeze produsele proprii.
Argumentele acestui principiu sunt similare cu cele de la principiul precedent. Aici pot avea loc
probleme de planificare: produsul trebuie livrat la timp, orice ntrziere cost bani. Este destul de dificil ca
o companie s fie obiectiv fa de calitatea propriului produs. Grupul de testori ar trebui s fie altul dect
cel de dezvoltare, iar ntreinerea unui departament de testare este destul de costisitoare i nu orice
companie poate s-i permit aceasta.
Principiul 4: Fiecare rezultat al testului trebuie examinat foarte minuios.
Acesta este probabil cel mai evident principiu. Ct de minuios nu ar fi fcut testarea este posibil s
se strecoare diferite erori. Erorile depistate ntr-un stagiu tardiv de testare deseori se dovedesc a fi cele
omise n stadii incipiente de testare.
Principiul 5: Cazurile de test trebuie s fie scrise att pentru condiii de intrare valide ct i pentru
cele invalide i neateptate.
Este normal tendina de testare a produsul pentru date valide de intrare, neglijnd datele incorecte.
Este ns forte important comportamentul produsului cnd sunt introduse date incorecte sau ilegale. Acest
principiu nu poate fi neglijat atunci cnd sunt elaborate cazurile de test.
Principiul 6: Trebuie testat c produsul face ce trebuie i nu face ce nu trebuie.
Putem considera acest principiu ca un corolar al principiului precedent. Programele trebuie supuse i
examinate pentru efecte neateptate. Mai ales astfel de teste trebuie elaborate pentru produsele cu
destinaie financiar.
Principiul 7: Trebuie de pstrat i refolosit cazurile de test.
Acest principiu este important i este respectat de specialitii n testare. Orice produs poate fi
mbuntit i dac dorim s vedem dac schimbrile nu au avut un efect negativ asupra altor componente
ale sistemului atunci este bine de a testa cu testele vechi noul produs. Astfel se testeaz integritatea i
funcionalitatea produsului. Refolosirea cazurilor de test este binevenit i atunci cnd au fost corectate
unele erori deja gsite. Pstrarea testelor i refolosirea lor dup modificri n produs poart denumirea de
testare regresiv (regression testing).
Principiul 8: Nu se planific procesul de testare presupunnd c nu vor fi gsite erori.
Este o greeal a managerilor de proiect cnd se folosete o definiie incorect a testrii. De exemplu:
Testarea e procesul prin care se demonstreaz c produsul este performant i funcioneaz corect n
locul Testarea e procesul prin care se execut un program cu intenia de a gsi erori
Principiul 9: Probabilitatea de a gsi erori ntr-un fragment de cod este proporional cu numrul de
erori deja gsite.
Dac avem de exemplu un program din dou module A i B i n modulul A au fost gsite cinci erori
iar n B numai una, i dac modulul A nu a fost supus intenionat unui test riguros, atunci acest principiu
ne spune c probabilitatea c n modulul A vor fi gsite mai multe erori dect n modulul B este destul de
mare. La prima vedere acest principiu nu are prea mult sens, ns este un fenomen prezent n majoritatea
programelor.
Principiul 10:Testarea este un lucru extrem de creativ i intelectual.
Este probabil adevrat c creativitatea cerut la testarea produselor serioase depete creativitatea
cerut n proiectarea acestora. Este clar c este imposibil de testat un produs suficient pentru a demonstra
absena erorilor n acest produs. Metodologia pe care o vom studia n cadrul cursului va fi de un mare
folos la elaborarea unui numr rezonabil de cazuri de test, ns aceast metodologie cere un nivel nalt de
creativitate a testorului.
1.6.
Axiomele testrii.