Documente Academic
Documente Profesional
Documente Cultură
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 CD-ROM 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 :
Testorii 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:
Organizare disciplinat a procesului/dezvoltare i testare matur a procesului de
producie.
Responsabilii i Managerii de proiect induc o linie bine trasat n scopul urmririi
exacte a procesului de producie.
1
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)
2
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 puii, 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 v-om 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. Softul nu execut ceva ce specificaiile spun c trebuie s execute.
2. Softul execut ceva ce specificaiile spun c nu trebuie s execute.
3. Softul execut ceva ce n specificaii nu este menionat.
4. Softul nu execut ceva ce specificaiile nu menioneaz dar ar trebui s
menioneze.
5. Softul este greu de neles, greu de folosit, lent sau se vede c nu a fost proiectat
corect.
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.
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.
6. Trebuie s aib tact i s fie bun diplomat. El este cel care aduce vetile rele
programatorului.
7. Trebuie s fie perseverent. Erorile gsite nu totdeauna sunt vizibile i uneori sunt
greu de descris. Testorul trebuie s-i poat expune punctul de vedere i s poat
demonstra necesitatea fixrii i posibil corectrii erorilor gsite.
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.
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 pe 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.
5
aceleai pesticide de fiecare dat insectele devin imune la ele i chiar mai puternice dect
au fost. Pentru a gsi erori noi e nevoie de teste noi.
6. Nu toate erorile gsite vor fi corectate.
O realitate trist atestrii este, c dup ce s-a lucrat destul de mul i greu pentru a
depista erorile, nu toate din ele sunt fixate i corectate. eii echipelor de testare trebuie s
fac compromisuri i s ia decizii bazate pe riscuri n ceea ce privete fixarea anumitor
erori.
Acest lucru are motive serioase:
Nu este suficient timp pentru aceasta.
ntr-adevr nu este o eroare.
Este prea riscant de fixat( fixarea ei poate provoca mai multe erori).
Nu are nici o valoare.
Procesul de luare a deciziilor fa de fixarea erorilor i implic pe testori, managerii de
proiect i pe programatori i fiecare are opinia lui fa de eroarea respectiv ns nimeni nu
tie cine are dreptate, aa c decizia luat este bazat pe anumite riscuri (exemplu
Procesorul Intel Pentium)
7. E greu de spus cnd o eroare e o eroare ...
n afar de acele afirmaii care alctuiesc definiia erorii testorii pot apela i la opinia
altor persoane poate chiar a clientului, ce reprezint pentru el o eroare i i poate formula
propria definiie a erorii.
8. Specificaiile produselor nu sunt niciodat definitive.
Industria software se dezvolt foarte rapid. n acelai timp produsele soft devin tot mai
complexe, iar termenii de predare mai scurte din cauza concurenei. Aceste dou aspecte
sunt n conflict permanent i rezultatul conflictului este schimbarea constant a
specificaiilor. Un alt motiv este perfecionarea unui product care a fost scos pe pia cu
ceva timp n urm specificaiile au fost rescrise, dar nu conin i funcionalitile vechi ale
produsului.
9. Testorii nu sunt cei mai populari membri ai echipei de proiect.
Ne amintim de scopul unui testor. Cteva sfaturi utile pentru testori:
Gsii erorile ct mai devreme. Toi vor fi mulumii dac o s gsii erorile
serioase cu dou luni, dar nu cu o zi nainte de sfritul perioadei de testare.
Temperai-v entuziasmul. Ct de bucuros nu ai fi c ai gsit o eroare critic, fii
diplomat cnd i-o spui programatorului.
un plan de aciune.
Planul de aciune se numete metodologie de dezvoltare. Dezvoltarea unui anumit
program const ntr-un set de pai ce se fac pentru a-l realiza. Lund n considerare tipul
pailor ce se efectueaz se creeaz un model de lucru, ce poate fi aplicat unei serii mai
9
largi de proiecte. Acesta este motivul pentru care planul de aciune este numit model: el
poate fi privit ca un ablon al dezvoltrii de programe. n timpul dezvoltrii programelor sa constatat c exist anumite tipuri de activiti care trebuie fcute la un moment dat:
ntreinerea: Dup ce programul este livrat clientului, mai devreme sau mai
trziu sunt descoperite defecte sau erori ce trebuie reparate. De asemenea, pot aprea
schimbri n specificaiile utilizatorilor, care vor diverse mbuntiri. ntreinerea const
n gestionarea acestor probleme.
Se poate constata uor c aceste activiti sunt n strns legtur cu cele patru faze
ale ingineriei programrii: analiza, proiectarea, implementarea i testarea.
Metodologii generice
n acest paragraf, vor fi prezentate trei categorii importante de metodologii:
secvenial, ciclic i hibrid. n metodologia secvenial (cascad), cele patru faze
urmeaz una alteia ntr-o modalitate serial. n metodologia ciclic (spiral), fazele sunt
10
constituit din sistem. O sarcin nemonoton vine n contradicie cu sistemul realizat deja
i trebuie eliminat dac nu este absolut necesar pentru succesul sistemului.
Odat ce o component este terminat i acceptat de echip, schimbrile asupra sa
sunt ngheate. Componenta va fi schimbat numai dac modificrile sunt absolut necesare
iar echipa este dispus s ntrzie lucrul la restul sistemului pentru a le efectua.
Schimbrile trebuie s fie puine la numr, bine justificate i documentate.
Etapele principale ale metodei sunt: schia de principiu, prototipul, versiunile
alfa/beta i produsul final.
n prima etap, schia de principiu, echipele lucreaz simultan la toate fazele
problemei. Echipa de analiz sugereaz cerinele. Echipa de proiectare le discut i trimite
sarcinile critice de implementare echipei de implementare. Echipa de testare pregtete i
dezvolt mediul de test n funcie de cerine. Echipa de implementare se concentreaz
asupra sarcinilor critice, care n general sunt cele mai dificile. Aceast abordare
contrasteaz cu practica curent de realizare mai nti a sarcinilor simple. Totui,
majoritatea produselor care urmeaz acest model eueaz. Odat ce componentele critice
au fost realizate, sistemul este gata de a face tranziia ctre stadiul de prototip. Unul din
scopurile aceste etape este de a se convinge echipele c o soluie poate fi gsit i pus n
practic.
n cea de a doua etap, de prototip, cerinele i documentul cerinelor sunt ngheate.
Schimbrile n cerine sunt nc permise, ns ar trebuie s fie foarte rare i numai dac
sunt absolut necesare, deoarece modificrile cerinelor n acest stadiu al proiectului sunt
foarte costisitoare. Este posibil totui ajustarea arhitecturii, pe baza noilor opiuni datorate
tehnologiei. Dup ce sarcinile critice au fost terminate, echipa de implementare se poate
concentra pe extinderea acestora, pentru definirea ct mai multor aspecte ale aplicaiei.
Unul din scopurile acestei etape este de a convinge persoanele din afara echipelor c o
soluie este posibil.
Acum produsul este gata pentru lansarea versiunilor alfa i beta. Arhitectura este
ngheat, iar accentul cade pe implementare i asigurarea calitii. Prima versiune lansat
se numete n general alfa. Produsul este nc imatur; numai sarcinile critice au fost
implementate la calitate ridicat. Numai un numr mic de clieni sunt n general dispui s
accepte o versiune alfa i s-i asume riscurile asociate. O a doua lansare reprezint
versiunea beta. Rolul su este de a convinge clienii c aplicaia va fi un produs adevrat i
de aceea se adreseaz unui numr mai mare de clieni.
Cnd o parte suficient de mare din sistem a fost construit, poate fi lansat n sfrit
produsul. n aceast etap, implementarea este ngheat i accentul cade pe asigurarea
calitii. Scopul este realizarea unui produs competitiv. n produsul final nu se accept
erori critice.
Avantaje
Metodologia ecluz recunoate faptul c oamenii fac greeli i c nici o decizie nu
trebuie s fie absolut. Echipele nu sunt blocate ntr-o serie de cerine sau ntr-o arhitectur
imobil care se pot dovedi mai trziu inadecvate sau chiar greite. Totui, pentru
respectarea termenelor limit, metodologia impune date de ngheare a unor faze. Exist
timp suficient pentru corectarea greelilor decizionale pentru atingerea unui nivel suficient
de ridicat de ncredere. Se pune mare accent pe comunicarea ntre echipe, ceea ce reduce
cantitatea de cod inutil la care ar trebui s se renune n mod normal. Metodologia ncearc
14
s mute toate erorile la nceputul procesului, unde corectarea, sau chiar renceperea de la
zero a lucrului, nu sunt foarte costisitoare.
Dezavantaje
Metodologia presupune asumarea unor responsabiliti privind delimitarea etapelor
i nghearea succesiv a fazelor de dezvoltare. Ea presupune crearea unui mediu de lucru
n care acceptarea responsabilitii pentru o decizie care se dovedete mai trziu greit s
nu se repercuteze n mod negativ asupra individului. Se dorete de asemenea schimbarea
atitudinii echipelor fa de testare, care are loc nc de la nceput, i fa de comunicarea
continu, care poate fi dificil, ntruct cele patru faze reprezint perspective diferite
asupra realizrii produsului.
Metodologii concrete
Metodologia cascad
Metodologia cascad, propus de Barry Boehm, este una din cele mai cunoscute
exemple de metodologie de ingineria programrii. Exist numeroase variante ale acestui
proces. ntr-o variant detaliat, metodologia cascad cuprinde urmtoarele etape:
Acesta este modelul dup care de obicei sistemele sunt dezvoltate n practic. De
asemenea, reordonarea fazelor s-a dovedit a fi sub-optimal. Exist o mare atracie pentru
acest model datorit experienei, tradiiei n aplicarea sa i succesului pe care l-a implicat.
O sarcin complex este mprit n mai muli pai mici, ce sunt mai uor de administrat.
Fiecare pas are ca rezultat un produs bine definit (documente de specificaie, model, etc.)
Modelul cascad cu feedback propune remedierea problemelor descoperite n pasul
precedent. Problemele la pasul i care sunt descoperite la pasul i + 3 rmn neremediabile.
Un model realist ar trebui s ofere posibilitatea ca de la un anumit nivel s se poat reveni
la oricare dintre nivelele anterioare.
Dezavantajul principal al modelului n cascad apare deoarece clientul obine o
viziune practic asupra produsului doar n momentul terminrii procesului de dezvoltare.
De asemenea, modelul nu are suficient putere descriptiv, n sensul c nu integreaz
activiti ca managementul resurselor sau managementul configuraiei. Aceasta face
dificil coordonarea proiectului.
Dup cum am menionat la prezentarea metodologiei generice secveniale, i
modelul cascad impune nghearea specificaiilor foarte devreme n procesul de
dezvoltare pentru a evita iteraiile frecvente (rentoarcerile n fazele anterioare atunci cnd
n faza curent s-au detectat erori: n timpul analizei se descoper erori de specificaii, n
timpul implementrii se descoper erori de specificaii/proiectare etc., astfel nct procesul
poate implica multiple secvene de iteraii ale activitilor de dezvoltare). nghearea
prematur a cerinelor conduce la obinerea unui produs prost structurat i care nu execut
ceea ce dorete utilizatorul. Conduce de asemenea la obinerea unei
documentaii neadecvate deoarece schimbrile intervenite n iteraiile frecvente nu
sunt actualizate n toate documentele produse.
Metodologia spiral
Metodologia spiral, propus tot de Boehm, este un alt exemplu bine cunoscut de
metodologie a ingineriei programrii. Acest model ncearc s rezolve problemele
modelului n cascad, pstrnd avantajele acestuia: planificare, faze bine definite, produse
intermediare. El definete urmtorii pai n dezvoltarea unui produs:
studiul de fezabilitate;
analiza cerinelor;
implementarea.
Modelul n spiral recunoate c problema principal a dezvoltrii programelor este
riscul. Riscul nu mai este eliminat prin aseriuni de genul: n urma proiectrii am obinut
un model corect al sistemului, ca n modelul cascad. Aici riscul este acceptat, evaluat i
se iau msuri pentru contracararea efectelor sale negative. Exemple de riscuri:
n timpul unui proces ndelungat de dezvoltare, cerinele noi ale clientului sunt
ignorate;
gestionarea riscului: analiza i rezolvarea situaiilor de risc;
21.
Lansarea produsului
Procesul ncepe n centrul spiralei. Fiecare ciclu terminat reprezint o etap. Pe
msur ce spirala este parcurs, produsul se maturizeaz. Cu fiecare ciclu, sistemul se
apropie de soluia final. Dei este considerat ca un exemplu generic pentru metodologia
ciclic, metoda are i elemente secveniale, puse n eviden de evoluia constant de la o
etap la alta.
Prototipizarea
O problem general care apare la dezvoltarea unui program este s ne asigurm c
utilizatorul obine exact ceea ce vrea. Prototipizarea vine n sprijinul rezolvrii acestei
probleme. nc din primele faze ale dezvoltrii, clientului i se prezint o versiune
funcional a sistemului. Aceast versiune nu reprezint ntregul sistem, ns este o parte a
sistemului care cel puin funcioneaz.
Prototipul ajut clientul n a-i defini mai bine cerinele i prioritile. Prin
intermediul unui prototip, el poate nelege ce este posibil i ce nu din punct de vedere
tehnologic. Prototipul este de obicei produs ct mai repede; pe cale de consecin, stilul de
programare este de obicei (cel puin) neglijent. ns scopul principal al prototipului este de
a ajuta n fazele de analiz i proiectare i nu folosirea unui stil elegant.
Se disting dou feluri de prototipuri:
de aruncat (throw-away);
evoluionar.
n cazul realizrii unui prototip de aruncat, scopul este exclusiv obinerea unei
specificaii. De aceea nu se acord nici o importan stilului de programare i de lucru,
punndu-se accent pe viteza de dezvoltare. Odat stabilite cerinele, codul prototipului este
aruncat, sistemul final fiind rescris de la nceput, chiar n alt limbaj de programare.
n cazul realizrii unui prototip evoluionar, scopul este de a crea un schelet al
aplicaiei care s poat implementa n prim faz o parte a cerinelor sistemului. Pe msur
ce aplicaia este dezvoltat, noi caracteristici sunt adugate scheletului existent. n contrast
cu prototipul de aruncat, aici se investete un efort considerabil ntr-un design modular i
extensibil, precum i n adoptarea unui stil elegant de programare.
Aceast metod are urmtoarele avantaje:
mil;
Modificrile aduse codului sunt integrate continuu (de cteva ori pe zi);
planificarea,
analiza
proiectarea,
Planificarea testelor
Planificarea testelor se realizeaz n strns legtur cu planificarea derulrii
proiectului. n faza de planificare a proiectului pentru testare se aloc resurse,
specificndu-se bugetul i perioada de timp n care se va derula testarea. Pe baza acestora
se realizeaz planificarea detaliat a procesului de testare.
Planificarea testrii are scopul de a determina ce s testeze i ct s testeze, astfel
nct procesul de testare s se ncadreze n limitele resurselor alocate. n urma planificrii
testrii rezult planul de test, un document pe baza cruia se desfoar celelalte faze ale
testrii. n aceast faz se identific i obiectivele testrii.
Planul de test este un document important, fiind utilizat ca baz pentru desfurarea
ntregului proces de testare. n plus, trebuie identificate i sursele de risc n testare.
Planificarea testrii poate s nceap din momentul n care au fost elaborate cerinele
aplicaiei software. n planul de test sunt descrise:
aria de cuprindere;
responsabilitile fiecrui membru al echipei de testare;
resursele umane necesare;
desfurarea n timp a testelor;
descrierea i configurarea mediului specific aplicaiei;
lista echipamentelor care trebuie achiziionate;
crearea i managementul datelor de test;
criteriile de acceptare a testelor.
Deoarece este foarte dificil s se stabileasc momentul n care se va ncheia testarea,
n planul de test se specific o serie de criterii care constituie o baz pentru determinarea
finalizrii testrii.
Analiza testelor
n etapa de analiz se identific urmtorii pai:
21
Procedurile de test identific toi paii necesari pentru executarea cazurilor de test
specifice.
Rularea testelor
Faza de rulare a testelor are ca intrri planul de test i orarul execuiei procedurilor
de test, mediul de test fiind pregtit corespunztor. Ieirile fazei de execuie a testelor sunt
rezultatele testelor, leciile nvate i orarul modificat al testelor. Execuia modulelor se
realizeaz n conformitate cu planul de test. Procedurile de test descriu intrrile i ieirile
ateptate dup execuie.
n aceast etap din cadrul procesului de testare sunt rulate secvenele de test.
Execuia secvenelor de test se realizeaz pe ct posibil n mediul specific aplicaiei iar
dac nu este posibil, acest mediu este simulat.
Rezultatele execuiei secvenelor de test sunt evaluate pentru a determina dac
produsul a trecut testul cu succes. Evaluarea rezultatelor testelor se face de ctre o
persoan sau un instrument automat, care pe baza specificaiilor determin dac rezultatele
execuiei testelor sunt corecte sau nu.
Rezultatele execuiei testelor se vor memora ntr-o baz de date care conine i alte
informaii referitoare la aplicaia software realizat.
Execuia i evaluarea testrii de integrare necesit noi secvene de test pe msur ce
se adaug module n cadrul structurii programului care se testeaz. Aprobarea de ctre
beneficiar a rapoartelor testrii de modul i ale testrii de integrare constituie ncheierea
acestor faze.
n execuia i evaluarea testrii de sistem, beneficiarul aplicaiei se implic mai mult
dect n celelalte faze. n mod asemntor, acesta trebuie s semneze raportul de test
pentru a considera ncheiat aceast faz de testare.
23
Aceast metod presupune testarea mai nti a modulelor de pe cel mai de jos nivel
al ierarhiei programului, apoi se continu n sus cu testarea celorlalte module. Metoda de
testare ascendent necesit construcia de programe conductoare pentru a iniializa mediul
i pentru a apela modulele.
26
Testarea de sistem
Dac ne-am convins de funcionarea mpreun a elementelor la nivel de module, se
trece la etapa urmtoare verificarea funcionalitii sistemului ca un tot ntreg.
Activitatea poart numele de testarea sistemului.
Testarea sistemului se impune din cauza c multe criterii ale testrii de module i
testrii de integrare genereaz seturi de cazuri de test nereprezentative pentru condiiile
reale de operare. Astfel testarea la aceste nivele este puin probabil s depisteze erori ale
interaciunii cu ntregul sistem ori probleme de mediu.
Testarea sistemului servete la nlturarea dezechilibrului prin concentrarea asupra
comportamentului ntregului sistem/produs precum este definit de scopul dezvoltrii
proiectului sau programului, ntr-un mediu de lucru reprezentativ. De obicei acesta este
realizat de o echip independent. Independena asigur obiectivitatea evalurii
sistemului, care se bazeaz pe specificaiile scrise, i nu pe codul produsului soft.
n modelul -V, comportarea adecvat a sistemului se documenteaz n specificaia
funcional, care definete ce trebuie construit pentru a satisface cerinele sistemului.
Specificaia funcional trebuie s conin definiiile ambelor cerine ale sistemului
funcionale i non-funcionale.
O cerin funcional este o cerin ce specific o funcie obligatorie a sistemului sau
a unei componente a sistemului. De ex., ai vrea s fie posibil programarea unui zbor pe
un website al unei companii turistice, n timp ce verifici on-line contul, dac ai suficiente
mijloace bneti pentru a plti pentru zbor.
Aceste cerine fundamentale furnizeaz detalii n baza crora se va dezvolta
aplicaia.
Testarea non funcional a sistemului examineaz aspectele importante, dar
influeneaz direct funciile pe care le ndeplinete sistemul. Acestea sunt nite cerine
generice (universale), care ar putea fi aplicate mai multor sisteme. n ex. de mai sus, de
pild ai vrea ca ambele sisteme s rspund apelului nostru (implicaiilor) ntr-un timp
rezonabil. Tipic aceste cerine vor aprecia ca normale ambele operaiuni la fel i
comportamentul sistemului n circumstane excepionale.
Astfel cerinele non-funcionale explic comportamentul aplicaiilor n practic.
Exemple de cerine non-funcionale:
Instabilitatea - proceduri de instalare.
Interoperabilitatea - execuia aplicaiei n diferite medii de lucru.
Stabilitatea - posibilitatea de a face schimbri n sistem.
Performana - comportamentul normal, ateptat.
ncrcarea ( loading) - comportamentul sistemului cnd resursele sunt ncrcate la
maxim.
Portabilitatea - utilizarea pe diferite platforme.
Capacitatea de recuperare - restabilirea sistemului dup ncheerea
necorespunztoare a execuiei.
Fiabilitatea - capacitatea softului de a-si pstra funcionalitilor dup o perioad de
timp.
Utilizabilitatea - simplitatea de comunicare a utilizatorului cu sistemul.
28
Testarea static
Capitolul prezint o introducere n una dintre cele mai importante arii ale testrii tehnicile statice de testare. Tehnicile statice testeaz software fr a-l executa. Totui
prezint importan prin abilitatea de a depista erorile i defectele nainte de executarea
codului, n primele etape ale desfurrii proiectului, facilitnd i reducnd din cheltuielile
necesare pentru depistarea i corectarea aceleiai greeli ntr-o etap mai avansat.
Tehnicile de inspecie (review) se axeaz pe tehnicilor statice. Astfel n acest capitol vom
cerceta diferite tipuri de inspecie i concordana lor cu procesul de testare definit n cap.2.
Capitolul trateaz i analiza static a codului dezvoltat, considerat o tehnic de
examinare a codului fr activarea lui pentru a identifica problemele actuale sau
poteniale. Testarea static e deseori imposibil de realizat manual, astfel vom cerceta
tipurile testrii statice care solicit anumite mijloace (instrumente). Ne vom axa pe
tehnicile testrii statice, mijloacele caracteristice tipului de testare sunt descrise n alt
capitol. (cap.6)
Verificarea i testarea
Revizuirea este o examinare sistematic a documentului de ctre una sau dou
persoane care au ca obiectiv detectarea i nlturarea erorilor. ncredinarea reexaminrii
primei variante a documentului colegilor e cel mai simplu exemplu de revizuire i care de
obicei scoate la iveal o mulime de erori anticipate.
Revizuirea se aplic documentelor scrise sau tiprite: documente ca specificaiile
cerinelor, design-urile sistemului, codul, test-planurile i cazurile de test. Revizuirea
reprezint prima form de testare posibil n perioada de dezvoltare a soft-ului. Testarea
documentelor ce conin specificaii prin revizuirea lor la etapa iniial a ciclului de
nfiinare a soft-ului favorizeaz detectarea defectelor nainte de a fi incluse n codul surs.
Astfel reducnd din efortul i cheltuielile necesare pentru nlturarea defectelor, acelai
defect detectat de o testare dinamic va solicita un extra cost pentru re-crearea i testarea
codului defect, diagnosticarea sursei defectului, corectarea problemei i rescrierea codului
pentru eliminarea defectelor. Inspecia codului conform standardelor de dezvoltare poate
preveni apariia defectelor la executarea testului. Dar i n aceste cazuri, dac codul a fost
scris nu se pot evita unele cheltuieli.
Pe lng economisirea timpului i a finanelor exist i alte avantaje ale depistrii
timpurii a defectelor n perioada de dezvoltare:
31
Poate fi mbuntit productivitii i reducerea limitelor temporale deoarece
corectrile defectelor ntr-o etapa incipient vor asigura c produsul este clar i
neambiguu. Aceasta ar trebui s-l ajute pe dezvolttor s se mite mai repede n procesul
de scriere a codului. De asemenea, dac defectele s-au nlturat nainte ca proiectul s
devin cod se vor detecta i fixa mai puine erori pe parcursul executrii testului.
Defectele cerinelor-de ex. cerinele sunt ambigue sau au unele elemente lips.
Procesul de revizuire
Procesele de revizuire variaz vizibil n dependen de gradul de formalitate - cnd
formalitatea se asociaz cu nivelul structurii i documentarea cu activitatea. Unele tipuri
de reexaminare au caracter informal, pe cnd altele sunt foarte formale. Stabilirea gradului
de formalitate se bazeaz pe combinarea urmtorilor factori:
Maturitatea procesului de dezvoltare: cu ct acesta este mai matur cu att
revizuirea este mai formal.
Cerinele legale sau reglementare. Acestea se folosesc la administrarea activitii de
dezvoltare a soft-ului n anumite industrii, obligator n ariile de strict-securitate ca
de exemplu semnalizarea cilor ferate.
Necesitatea unei proceduri de audit. Procesele formale de revizuire asigur
posibilitatea unei retrospective a procesului de dezvoltare a soft-ului. Nivelul
formalitii tipului de analiz static utilizat ne poate ajuta s stabilim nivelul
procesului de audit.
Revizuirea poate avea o varietate de obiective, iar termenul obiectiv de revizuire
semnific scopul principal al revizuirii. Obiectivele revizuirii includ:
Detectarea defectelor.
nelegerea..
Generarea discuiilor.
Deciziile luate n consens.
32
33
impuntor de informaie poate fi mprit mai bine la o ntlnire dect prin citirea
paginilor de ctre utilizatori.
Pregtirea individual: munca efectuat individual de fiecare participant naintea
ntrunirii, care presupune citirea documentelor surs, consemnarea potenialelor
defecte, ntrebri i comentarii. Aceasta este principala surs i poate fi constrns
de timp, participanii primesc 2 ore pentru a-i definitiva pregtirea.
ntrunirea de revizuire: aceasta poate include discuiile referitoare la orice defect
gsit. Inspecia, un tip de revizuire mai formal, va documenta rezultatele.
Participanii edinei pot doar nota defectele care urmeaz s fie corectate de autor.
De asemenea pot face recomandri pentru corectarea defectelor .Determinarea
abordrii se bazeaz pe unul sau pe toi factorii de mai jos:
* Timpul disponibil (dac dispunem de puin timp ntrunirea poate doar colecta
defectele).
* Cerinele autorului (dac autorul accept ajutor la corectarea defectelor).
* Tipul revizuirii (n cazul inspeciei se permite doar colectarea nu exist nici o
discuie.)
Refacerea: dup ntrunirea de revizuire autorul va avea mai multe defecte de
corectat, corectarea defectelor se numete refacere. Autorul va nltura problemele
depistate i va confirma necesitatea rectificrii.
Continuarea: liderul reexaminrii va verifica dac defectele acceptate au fost
localizate i va determina de ct timp a fost nevoie pentru revizuire i ct de multe
defecte au fost depistate. Acesta va mai verifica criteriile de ieire (pentru inspecie)
pentru a garanta ndeplinirea lor.
Rolurile i responsabilitile
Rolul revizorilor rezid n cercetarea documentelor din perspectiva oferit; aceasta
include utilizarea listei. Pentru identificarea defectelor se poate folosi o list bazat pe
perspective particulare (utilizatorul, mecanicul, testerul sau operatorul) sau una mai
general (ca problemele tipice ale cerinelor).
n afar de acestea procesul de revizuire definete el singur roluri specifice i
responsabiliti care trebuie ndeplinite pentru revizuirea formal:
Managerul: el decide ce trebuie de revizuit (dac nu era definit nc), se
asigur dac timpul alocat n planul proiectului va fi suficient pentru toate
activitile de reexaminare necesare, i determin dac au fost realizate
obiectivele analizei. Managerul nu se implic n procesul actual de
revizuire dect n cazul cnd poate aduga ceva important, de exemplu dac
el posed cunotine tehnice importante pentru activitatea respectiv.
Moderatorul: e cunoscut uneori ca liderul revizorilor. E persoana care
dirijeaz reexaminarea unui document sau a unui set de documente,
planific activitatea, realizeaz ntrunirea i cele ce urmeaz. Dac e
necesar, el va media ntre diferite puncte de vedere i deseori de el depinde
succesul aciunilor rmase.La fel va realiza decizia final despre ce trebuie
inclus n documentul de informare.
Autorul: Autorul este cel care a scris sau persoana responsabil de
dezvoltarea documentului care trebuie revizuit. Autorul va prelua n diferite
instane responsabilitatea de a localiza i aproba greeala.
35
Tipurile de revizuire
Un singur document poate fi supus mai multor tipuri de revizuire: de ex. o revedere
informal poate precede o analiz tehnic, sau depinde de gradul de risc , revizia tehnic
sau inspecia se poate aplica naintea controlului mpreun cu cumprtorul.
Fiecare tip de revizuire are caracteristicile sale. Am identificat 4 tipuri de analiz care
definesc gradul de formalitate. Acestea sunt cunoscute ca :
1. Revizuire neoficial ( cea mai puin formal). Caracteristici:
Nu exist un proces oficial care ar motiva revizuirea.
Revizuirea ar putea fi documentat, dar nu se cere aceasta; multe reexaminri
neoficiale nu se documenteaz.
Se pot produce unele modificri (depinde de revizor) pentru eficacitatea
revizuirii, de ex. revizorul nu posed abiliti tehnice, doar este mputernicit
s verifice repede i s asigure semnificaia documentului.
Scopul principal const n depistarea defectelor, i aceasta este o modalitate
necostisitoare pentru a nregistra unele beneficii.
Revizuirea poate fi implementat de o pereche de programatori ( cnd unul
verific codul celuilalt) sau de o abordare tehnic de revizuire a codului i
design-ului.
2. Analiza codului. Caracteristici:
ntrunirea e condus de ctre autorul documentului care va fi revizuit i
prezentat de colegii autorului, membri ai aceluiai grup.
Sesiunile de revizuire sunt finisate deschis i pot varia n practic de la
informale la formale.
Pregtirea de ctre revizori nainte de edina de analiz, raportul produsului
de revizuire ori lista cu cele depistate, i ntrevederea cu grefierul sunt aciuni
opionale, care se ndeplinesc uneori.
36
37
Orice defect depistat e binevenit i exprimat obiectiv, iar liderul revizor se asigur
c problemele persoanelor i aspectele psihologice sunt tratate adecvat. ( ex. o
experien pozitiv pentru autor i ceilali participani).
Tehnicile de revizuire (formale i informale) trebuie s fie potrivite pentru nivelul
i tipul softului testat i pentru revizori (aceasta este foarte important n inspectri).
Trebuie folosite checklist-le sau rolurile, pentru a spori efectivitatea de depistare a
defectelor; de ex. la o inspecie roluri ca funcionar data entry sau arhitect tehnic
pot fi solicitate la reexaminarea unui document particular.
Suportul managerial este esenial pentru un proces reuit de revizuire (prin
acordarea timpului necesar revizuirii adecvat programului).
Mai pot fi utilizate n testarea static i urmtoarele metrici:
Numrul defectelor depistate.
Timpul necesar revizuirii/ inspeciei Procentajul bugetului utilizat/ economisit pentru proiect.
n exemplarul su original referitor la inspeciile sale n 1976, Michael Fagan de la
IBM, care a dezvoltat Metodele de Inspectare Fagan, a raportat 23% progres n coding
productivity (n productivitatea codrii) datorit inspeciei. Succesul poate fi obinut prin
mai multe modaliti, totui trebuie mai nti de respectat parametrii care asigur atingerea
succesului i mai important trebuie s se fac raportarea lor unui auditoriu larg.
Acest capitol trateaz un subiect destul de complex - tehnicile de design ale testelor.
ncepem prin familiarizarea cu unii termeni cheie i procesul fundamental de creare a
unei suite de teste pentru executare. Capitolul cerceteaz 3 categorii de tehnici de design
ale testelor: specification - based, structure - based i experience - based. Pentru fiecare
caz sunt explicate tehnicile specifice i exemplificate modalitile de utilizare. n final
discutm despre selectarea tehnicilor.
40
Ms.
Hyde-Wide
Wilfred
42
Aplicabilitate
Metoda cutiei negre poate fi aplicat la toate nivelele de dezvoltare a softului
dezvoltare de uniti, de integrare, de sistem i de acceptare.
Trecnd de la modul spre subsistem i apoi spre sistem, cutia devine mai mare, cu
intrri i ieiri tot mai complexe, dar abordarea rmne aceeai. De asemenea, odat cu
creterea cantitii, suntem forai spre abordarea cutiei negre, deoarece sunt prea multe ci
n cadrul produsului soft de testat pentru a efectua testarea cutiei albe.
Dezavantaje
Utiliznd metoda cutiei negre, tester-ul niciodat nu poate fi sigur a cta parte din
produsul soft a fost testat. n pofida iscusinei i silinei tester-ului, unele ci de execuie
pot rmne neexercitate. Spre exemplu, care este probabilitatea ca tester-ul s aleag un
caz de test care s descopere aceast trstur?
if (name=="Lee" && employeeNumber=="1234" &&
employmentStatus=="RecentlyTerminatedForCause") {
send Lee a check for $1,000,000;
}
Pentru a gsi fiece defect folosind metoda cutiei negre, tester-ul ar trebui s creeze
toate combinaiile posibile de date de intrare, att corecte, ct i incorecte. Acest tip
complet de testare a intrrilor este aproape ntotdeauna imposibil. Se poate alege doar o
submulime (deseori o submulime foarte mic) de combinaii ale datelor de intrare.
n cartea sa Arta testrii produselor soft (The Art of Software Testing), Glenford
Myers ofer un excelent exemplu de zdrnicie a testrii complete: Cum ai testa temeinic
un compilator? Prin scrierea fiecrui program corect sau incorect posibil.
Problema este substanial mai serioas n cazul sistemelor care trebuie s memoreze
evenimente anterioare. (de ex. care memoreaz starea lor). n cazul acestor sisteme, nu
doar fiece intrare posibil trebuie testat, ci i fiecare secven posibil de intrri posibile.
Chiar dac nu putem testa totul, metoda formal a cutiei negre direcioneaz testerul s aleag submulimi de teste care sunt att eficiente, ct i efective n gsirea
defectelor.
46
Avantaje
Chiar dac nu putem testa totul, metoda formal a cutiei negre direcioneaz testerul s aleag submulimi de teste care sunt att eficiente, ct i efective n gsirea
defectelor. Astfel, aceste submulimi vor gsi mai multe defecte dect un numr echivalent
de teste create la ntmplare. Metoda cutiei negre ajut la maximizarea restituirii investiiei
testrii.
Nu pot fi angajai
Pot fi angajai doar cu jumtate de norm
Pot fi angajai cu termen complet de munc
Nu pot fi angajai *
* Not: Dac ai identificat vreo problem legat de aceste cerine, nu-i f griji. Ele
sunt scrise n acest mod cu un anumit scop i vor fi corectate n capitolul urmtor.
Ar trebui s testm modulul pentru urmtoarele vrste: 0, 1, 2, 3, 4, 5, 6, 7, 8, ..., 90,
91, 92, 93, 94, 95, 96, 97, 98, 99? Dac am avea foarte mult timp (i nu ne-ar deranja
ameitoarea repetiie i am fi pltii pe or), desigur, am putea. Dac programatorul ar fi
implementat acest modul cu urmtorul cod, ar trebui s testm fiece vrst. (Dac nu ai o
pregtire n domeniul programrii, nu-i f griji. Aceste exemple sunt simple. Doar citete
codul i vei nelege.)
If (applicantAge == 0) hireStatus="NO";
If (applicantAge == 1) hireStatus="NO";
Dac un test nu capteaz un neajuns, probabil nici celelalte nu-l vor capta.
Aceast abordare presupune desigur existena unei specificri care definete
variatele clase de echivalen pentru testare. De asemenea, ea presupune c programatorul
nu a fcut nimic ciudat, de tipul:
If (applicantAge >= 0 && applicantAge <=16)
hireStatus="NO";
If (applicantAge >= 16 && applicantAge <=18)
hireStatus="PART";
48
O alt abordare de proiectare este proiectarea defensiv. n acest caz modulul este
proiectat s accepte orice intrare de date. Dac precondiiile corespunztoare sunt
ndeplinite, modulul va realiza postcondiiile sale corespunztoare. Dac precondiiile
corespunztoare nu sunt ndeplinite, modulul va anuna apelantul prin returnarea unui cod
de eroare sau prin lansarea unei excepii (n dependen de limbajul de programare
utilizat). Aceast notificare este, de fapt, o alt postcondiie a modulului. Conform acestei
abordri, am putea defini testarea defensiv: o abordare ce testeaz att n cazul precondiiilor obinuite, ct i a celor neobinuite.
Cum influeneaz acest lucru clasa de echivalen? Trebuie s testm folosind intrri
ca -42, FRED i &$#!@? n cazul n care folosim proiectarea dup contract i testarea
dup contract, rspunsul este Nu. Dac folosim proiectarea defensiv i respectiv testarea
defensiv, rspunsul este Da. ntrebai proiectanii ce abordare folosesc. Dac ei rspund
contract sau defensiv, deja vei ti ce fel de testare s foloseti. Dac rspund
Poftim?! aceasta nseamn c ei nu se gndesc la felul n care modulele interacioneaz
ntre ele. Ei nu se gndesc la contractele cu pre-condiii i post-condiii. Testarea de
integrare se ateapt s fie sursa primar de defecte i va fi mult mai complex i va
consuma mai mult timp dect cel preconizat.
Paii de folosire a testrii claselor de echivalen este simpl. Mai nti, clasele de
echivalen sunt identificate. Apoi, un caz de test este creat pentru fiece clas de
echivalen. n cazul dispunerii de timp i bani, pot fi create cazuri de teste adiionale
pentru fiecare clas de echivalen. Cazurile de teste adiionale pot crea impresia de mai
mare siguran, dar ele rareori gsesc defecte pe care primul test nu le-a gsit.
Diferite date de intrare necesit diferite tipuri de clase de echivalen. S
considerm patru posibiliti. S presupunem o filosofie de testare defensiv pentru
testarea intrrilor att corecte, ct i incorecte. Testarea datelor de intrare incorecte este
deseori o enorm surs de defecte.
Dac o introducere de date reprezint un interval continuu de valori, atunci exist de
obicei o clas de valori corecte i dou clase de valori incorecte, una inferioar clasei
valide, alta superioar. S considerm exemplul Companiei Goofy Mortgage (GMC). Ei
vor scrie ipoteci pentru persoanele cu venit ntre $1000/lun i $83 333/lun. Orice sum
sub $1000/lun nu se calific. Orice sum peste $83 333/lun nu are nevoie de GMC,
poate plti prin bani lichizi.
Pentru o intrare valid puntem alege suma de $1 342/lun. Pentru intrri incorecte
putem alege sumele de $123/lun i $90 000/lun.
Dac o condiie de intrare ia valori discrete ntr-un interval de valori posibile, exist
n mod normal o clas corect i dou incorecte. GMC ar scrie o singur ipotec pentru
una din 5 case. (E doar vorba de Goofy!). Zero sau cteva case nu reprezint o intrare
justificat, la fel ca i ase sau mai multe case. Nici valorile fracionale sau decimale aa ca
2 sau 3,14159 nu sunt valide.
51
Venit anual
$5 000
Rezultat
Corect
Fiecare din aceste valori de date se afl n limita corect, deci ar fi de ateptat ca
sistemul s funcioneze corect i cazul de test s raporteze Trecut cu succes.
Folosirea unei abordri similare pentru valorile incorecte este tentant.
Tabelul 2: Un caz de test cu valori de date incorecte. Aceasta nu este o abordare
potrivit.
Venit lunar
Numr de locuine
Aplicant
Tipurile locuinelor
Rezultat
$100
8
Parteneriat
Cas de lemn
Incorect
Dac sistemul accept aceast intrare drept valid, evident c sistemul nu valideaz
cele patru cmpuri de intrare corespunztor. Dac sistemul respinge aceast intrare drept
incorect, aceasta se poate ntmpla ntr-un mod n care tester-ul s nu poat determina
care cmp este respins. De exemplu:
EROARE: 653X-2.7 INTRARE INCORECT
n multe cazuri, erorile unui cmp de intrare pot anula sau masca erori n alt cmp
astfel ca sistemul s-l accepte drept corect. O abordare mai bun este cea n care valorile
incorecte sunt testate pe rnd spre a verifica dac sistemul le detecteaz corect.
Tabelul 3: O mulime de cazuri de teste schimbnd valori incorecte pe rnd.
Venit lunar Numr de locuine
Aplicant
Tipurile locuinelor
Rezultat
$100
1
Persoan
Cas de familie
Incorect
$1 342
0
Persoan
Codomeniu
Incorect
$1 342
1
Corporaie
Apartament
Incorect
$1 342
1
Persoan
Cas de lemn
Incorect
52
Nu se angajeaz
Se angajeaz numai pe baza part-time
Se angajeaz pe baza full-time
Nu se angajeaz
53
Observai problema limitelor fiecrei clase. Vrsta "16" este inclus n dou clase
de echivalen diferite (la fel 18 i 55). Prima regul spune c nu se angajeaz persoane de
16 ani. A doua regul spune c persoane de 16 ani pot fi angajate pe baza part-time.
Testarea valorilor de la limite se focuseaz pe limite pentru c acolo sunt foarte
multe defecte ascunse. Testerii experimentai observa problema aceast foarte des. Testerii
neexperimentai pot avea o intuiie c greelile pot aprea cel mai des la limite. Defectele
acestea pot fi n cerine (precum e prezentat mai sus) sau n codul ce urmeaz:
If (VirstaAplicant >= 0 && VirstaAplicant <=16)
angajareStatut="NU";
If (VirstaAplicant >= 16 && VirstaAplicant <=18)
angajareStatut="PART";
If (VirstaAplicant >= 18 && VirstaAplicant <=55)
angajareStatut="FULL";
If (VirstaAplicant >= 55 && VirstaAplicant <=99)
angajareStatut="NU";
Desigur, greeala pe care o comit programatorii este codarea condiiei de inegalitate
nepotrivit. Scrierea > (mai mare ca) n locul (mai mare ca sau egal) este un exemplu.
Cea mai eficient modalitate de a gsi aceste defecte, sau n cerine sau n cod, este
prin verificare. Probabil asta e ceea ce a avut n vedere organizaia de angajare:
015
1617
1854
5599
Nu se angajeaz
Se angajeaz numai pe baza part-time
Se angajeaz pe baza full-time
Nu se angajeaz
Dar vrsta -3 i 101? Observai c cerinele nu specific cum aceste valori trebuie
tratate. Noi am putea ghici dar "ghicirea cerinelor" nu este o practic acceptabil.
Codul ce implementeaz regulile corecte este:
If (VirstaAplicant >= 0 && VirstaAplicant <=15)
angajareStatut="NU";
If (VirstaAplicant >= 16 && VirstaAplicant <=17)
angajareStatut="PART";
If (VirstaAplicant >= 18 && VirstaAplicant <=54)
angajareStatut="FULL";
If (VirstaAplicant >= 55 && VirstaAplicant <=99)
angajareStatut="NU";
Valorile interesante pe i lng limite n acest exemplu sunt {-1, 0, 1}, {15, 16, 17},
{17, 18, 19}, {54, 55, 56}, i {98, 99, 100}. Alte valori, ca {-42, 1001, FRED, %$#@} pot
fi incluse n dependen de precondiiile documentate ale modulului.
Tehnic
54
Paii pentru utilizarea testrii valorilor de la limite sunt simpli. n primul rnd, se
identific clasele de echivalen. n al doilea rnd, se identific limitele fiecrei clase de
echivalen. n al treilea rnd, se creeaz cazurile de test pentru fiece valoare alegnd un
punct pe limit, un punct apropiat mai jos de limit, i un punct apropiat mai sus de limit.
"Mai jos" i "mai sus" sunt termeni relativi i depind de valoarea unitilor de date. Dac
limita este 16 i unitatea este "integer" atunci punctul "de jos" este 15 i punctul "de sus"
este 17. Dac limita este $5.00 i unitatea este "dolari i ceni US" atunci punctul de jos
este $4.99 i cel de sus este $5.01. Pe de alt parte, dac valoarea este $5 i unitatea este
"dolari US" atunci punctul de jos este $4 i cel de sus este $6.
Observai c un punct apropiat mai sus de limit poate fi n alt clas de echivalen.
N-are nici-un sens de dublat testul. Analogic poate fi adevrat i punctul apropiat mai jos
de limit.
Desigur, se poate de creat cazurile de test adugtoare mai departe de limitele (n
cadru claselor de echivalen) dac avei resursele. Precum era discutat n capitolul
precedent, aceste cazuri de test adugtoare pot crea situaii de disconfort, dar ele rar
descoper defecte adiionale.
Testarea valorilor de la limite este mult mai adecvat cnd datele de intrare
formeaz un ir continuu de valori. Revenind din nou la Goofy Mortgage Company, care
sunt limitele valorii interesante? Pentru venit lunar limitele sunt $1,000/lun i
$83,333/lun (presupunnd uniti dolarii US).
Rar vom avea timp pentru crearea testelor individuale pentru fiece valoare de la
limit. Mai des vom crea cazuri de test ce testeaz un numr de cmpuri de intrare
simultan.
Tabelul 5: Un set de cazuri de test ce conin combinaiile valorilor valide (pe limite)
i puncte incorecte (n afara limitei).
Venit lunar Numrul de
Rezultat
Descrierea
locuine
$1,000
1
Valid
min venit, min locuine
$83,333
1
Valid
max venit, min locuine
$1,000
5
Valid
min venit, max locuine
$83,333
5
Valid
max venit, max locuine
$1,000
0
Incorect
min venit, mai puin min locuine
$1,000
6
Incorect
min venit, mai mult max locuine
$83,333
0
Incorect
max venit, mai puin min locuine
$83,333
6
Incorect
max venit, mai mult max locuine
$999
1
Incorect
Mai puin min venit, min locuine
$83,334
1
Incorect
Mai mult max venit, min locuine
$999
5
Incorect
Mai puin min venit, max locuine
$83,334
5
Incorect
Mai mult max venit, max locuine
Fixarea " venitului lunar" pe axa x i "numrul de locuine" pe axa y arat "poziiile"
punctelor datelor de testare.
Regula p
Condiii
Condiia -1
Condiia -2
Condiia - m
Aciune
Aciune-1
Aciune-2
Aciune - n
Condiiile 1 - m sunt condiii variate de intrare. Aciunile 1 n sunt aciuni ce ar
trebui s fie luate n dependen de diferite combinaii a condiiilor de intrare. Fiece regul
definete o combinaie unic a condiiilor ce rezult n executarea (arderea) aciunilor
asociate cu regula ceea. Observai c aciunile nu depind de ordinea n care condiiile sunt
evaluate, dar numai de valorile lor. (Toate valorile se consider a fi disponibile simultan.)
De asemenea, aciunile nu depind de condiiile specificate, sau de orice condiii de intrare
precedent sau starea sistemului.
Posibil un exemplu concret va clarifica concepiile. O companie de asigurare auto
ofer reduceri pentru oferi cstorii i-sau studeni buni. S ncepem cu reguli. Urmtorul
tabel de decizie are 2 condiii, fiece din ei ia valorile Da sau Nu.
57
Da
Da
Da
Nu
Nu
Da
Nu
Nu
Da
Da
Da
Nu
Nu
Da
Nu
Nu
60
25
50
Aciuni
Reducere ($)
Tabelele de decizie pot specifica mai mult de o aciune pentru fiecare regul. Din
nou, aceste reguli pot fi unice sau pot fi mprite.
Tabel 9: Un tabel de decizie cu aciuni multiple.
Regula 1
Regula 2
Regula 3
Regula 4
Condiii
Condiie-1
Da
Da
Nu
Nu
Condiie-2
Da
Nu
Da
Nu
Aciune-1
Execut X
Execut Y
Execut X
Execut Z
Aciune-2
Execut A
Execut B
Execut B
Execut B
Aciuni
n aceast situaie, alegerea cazurilor de test este simpl - fiecare regul (coloana
vertical) devine un caz de test. Condiiile specific date de intrare i aciunile specific
rezultatele ateptate.
58
n timp ce exemplele precedente folosesc simple condiii binare, condiii pot fi mult
mai complexe.
Tabel 10: Un tabel de decizie cu condiii ce nu sunt binare.
Regula 1
Regula 2
Regula 3
Regula 4
Condiii
Condiie-1
01
110
10100
1001000
Condiie-2
<5
6 or 7
>7
Aciune-1
Execut X
Execut Y
Execut X
Execut Z
Aciune-2
Execut A
Execut B
Execut B
Execut B
Aciuni
n aceast situaie alegerea cazului de test este puin mai complex - fiecare regul
(coloana vertical) devine un caz de test unde valorile alese trebuie sa satisfac condiiile.
Alegnd valorile corespunztoare noi trebuie s crem urmtorele cazuri de test:
ID Caz de Test
TC1
TC2
TC3
TC4
Dac sistemul sub test are reguli complexe de business, i dac analitii sau
designerii nu au documentat aceste reguli n aceast form, ar trebui s acumuleze aceast
informaie i s-o reprezinte n form de tabel de decizie. Motivul este simplu.
Comportamentul sistemului dat este reprezentat n aceast form complet i compact i
cazurile de test pot fi create direct din tabelul de decizie.
n testare, se creeaz cel puin un caz de test pentru fiecare regul. Dac condiiile
regulii sunt binare, un singur test pentru fiecare combinaie este suficient. Pe de alt parte,
dac o condiie este un ir de valori se consider testarea att pe limita de sus ct i pe cea
de jos. n acest caz noi unim ideea Testrii Valorii de la Limite cu Testarea Tabelelor de
Decizii.
Se creeaz cel puin un caz de test pentru fiecare regula.
Pentru a crea un tabel de cazuri de test simplu se schimb titlurile rndului i
coloanei:
Tabel 12: Un tabel de decizie convertit la un tabel de caz de test.
Caz de Test1 Caz de Test2 Caz de Test3 Caz de Test4
Valori de intrare
59
Execut X
Execut A
Execut Y
Execut B
Execut X
Execut B
Execut Z
Execut B
Aplicarea i Limitrile
Testarea tabelelor de decizii poate fi folosit oricnd sistemul cere implementarea
regulilor complexe din business, cnd aceste Reguli pot fi reprezentate ca o combinaie de
condiii i cnd aceste condiii au aciuni discrete asociate cu ele.
cerc care semnific starea, condiia. Starea este doar ceea ce se spune c este:
sistemul este static, ntr-o condiie stabil care se va schimba datorit unor evenimente
de diferit natur. De ex. televizorul este inclus pn nu-l deconectai. Un ceas
multifuncional v va arta ora dac nu schimbai regimul.
Al doilea simbol reprezint tranziia, ex. schimbarea dintr-o stare n alta.
obligatoriu ) starea iniial va avea dou sgei incidente n ea. Deseori starea iniial e
evident i nu se reprezint grafic.
Dac avem diagrama tranziiei strlor unui sistem, putem analiza comportamentul
lui pentru a vedea ce se ntmpl la tranziia de la o stare la alta.
Tranziia este cauzat de un eveniment i poate genera rezultate i/ sau schimbri ale
strii. Un eveniment e ceva care provoac schimbarea. Acesta poate fi o resurs (input)
pentru sistem , sau ceva din interiorul sistemului care se schimb, ca un cmp din baza de
date mbuntit (being updated).
n unele cazuri un eveniment genereaz un rezultat, n altele evenimentul schimb
starea interioar a sistemului fr a genera un rezultat, iar uneori un eveniment poate cauza
un rezultat i o schimbare a strii. Ce se ntmpl la fiecare schimbare se poate deduce
mereu din diagrama tranziiei strii.
Exemplu. Un sistem pentru rezervarea biletelor de avion.
61
Evenimentul
giveInfo
payMoney
print
giveTicket
cancel
Aciunea
startPayTimer
-----
Starea urmtoare
Made
null
null
null
null
62
null
PayTimerExpires
--
Made
Made
Made
Made
Made
Made
giveInfo
payMoney
print
giveTicket
cancel
PayTimerExpires
-------
Paid
Paid
Paid
Paid
Paid
Paid
giveInfo
payMoney
print
giveTicket
cancel
PayTimerExpires
--Ticket
-Refund
--
Paid
Paid
Ticketed
Paid
Can-Cust
Paid
Ticketed
Ticketed
Ticketed
Ticketed
Ticketed
Ticketed
giveInfo
payMoney
print
giveTicket
cancel
PayTimerExpires
----Refund
--
Ticketed
Ticketed
Ticketed
Used
Can-Cust
Ticketed
Used
Used
Used
Used
Used
Used
giveInfo
payMoney
print
giveTicket
cancel
PayTimerExpires
-------
Used
Used
Used
Used
Used
Used
giveInfo
payMoney
print
giveTicket
cancel
PayTimerExpires
-------
giveInfo
payMoney
print
giveTicket
cancel
PayTimerExpires
-------
Can-NonPay
Can-NonPay
Can-NonPay
Can-NonPay
Can-NonPay
Can-NonPay
Can-Cust
Can-Cust
Can-Cust
Can-Cust
Can-Cust
Can-Cust
null
Made
Paid
Made
Made
Can-Cust
Can- NonPay
Can-NonPay
Can-NonPay
Can-NonPay
Can-NonPay
Can-NonPay
Can-NonPay
Can-Cust
Can-Cust
Can-Cust
Can-Cust
Can-Cust
Can-Cust
Crearea unei diagrame pentru un produs soft mare este o sarcin enorm. Posibil,
vei testa doar o poriune din ntregul produs, astfel nct crearea unei diagrame ar fi o
sarcin rezonabil. Odat finisat diagrama, o vei putea privi dintr-o parte spre a vedea
toate strile i cile spre i din acestea. Dac V-ai ndeplinit munca bine, va fi o imagine
de groaz!
Dac ai fi avut timp infinit, ai fi dorit s testai fiecare cale din soft, nu doar fiecare
linie ce conecteaz dou stri, ci oricare set de linii, nainte i napoi, iar i iar.
Exact cum ai nvat i pentru partiionarea pe clase de echivalen, trebuie s
reducei enorma mulime de posibiliti la o mulime de cazuri de test de mrimi lucrative.
Sunt 5 modaliti de a o face:
Vizitai fiecare stare cel puin o dat. Nu conteaz cum o s ajungei acolo, dar
fiecare stare trebuie testat.
Testai tranziiile din stare n stare care par a fi cele mai comune sau des utilizabile.
Sun subiectiv i este, dar trebuie s se bazeze pe cunotinele acumulate efectund
testarea prin metoda cutiei negre pe baza specificaiilor produsului. Unele scenarii vor fi
mai des folosite de ctre utilizatori dect altele. Vrei ca acelea s funcioneze!
Testai cele mai puin comune ci dintre stri. Este foarte probabil s fi fost scpate
din vedere de ctre designerii i programatorii produsului. Putei fi primul care le va
ncerca.
Testai toate strile de eroare i de ntoarcere din stri de eroare. Deseori, condiiile
de eroare sunt dificil de creat. Frecvent, programatorii scriu coduri pentru a trata erorile
specifice, dar nu pot testa ei nii codul. Sunt frecvente cazurile, cnd erorile nu sunt
tratate adecvat, cnd mesajele de eroare sunt incorecte, sau softul nu se restabilete
adecvat dup depirea erorii.
Testai tranziiile arbitrare ale strilor. Dac avei o diagram imprimat a strilor,
aruncai cu darts n ea i ncercai s v micai de la unele puncte nimerite spre altele.
Dac avei timp s facei ceva mai mult, citii Capitolul 15, Testarea automat i
instrumente de testare, pentru informaii despre automatizarea testrii tranziiilor arbitrare
ale strilor.
Atunci cnd un document este ncrcat ntr-un editor, precum un procesor de texte
sau program de desenare, o variabil intern de stare numit flagul documentului murdar
este tears i soft-ul este n starea curat. Soft-ul se va afla n aceast stare att, ct nu
sunt efectuate schimbri n document. Ea poate fi vizionat i parcurs, starea rmnnd
aceeai. De ndat ce este tiprit ceva, sau documentul este modificat n oricare mod, softul i schimb starea n murdar.
Dac o tentativ de nchidere sau ieire din program are loc cnd acesta se afl n
starea curat, ea se va termina normal. Dac documentul este murdar, utilizatorii vor
recepiona un mesaj n care se ntreab dac ar dori s-i salveze lucrarea nainte de
prsire a aplicaiei.
Unele aplicaii sunt att de sofisticate, nct dac se va efectua o schimbare ce
,murdrete documentul, apoi un retur (undo) pentru a-l restabili la condiia original,
soft-ul i va restabili starea de curat i utilizatorul nu va fi ntrebat dac vrea s-i
salveze lucrarea n cazul unei eventuale ieiri din program.
Tot ce a fost discutat pn aici privind testarea strilor a fost ceea ce face parte din
testarea to pass. Dvs. revedei aplicaia, schiai strile, ncercai multe posibiliti valide,
asigurndu-v c strile i tranziiile funcioneaz. Partea opus a acestui lucru este, exact
ca n cazul testrii datelor, gsirea cazurilor de test n care soft-ul va eua. Exemple de
astfel de cazuri sunt condiiile de maraton, repetare, stres i ncrcare.
Condiii de maraton i temporizare rea
Majoritatea sistemelor de operare actuale, fie pentru calculatoare personale sau
echipament specializat, pot efectua multitasking. Prin multitasking se subnelege c
sistemul de operare (SO) a fost proiectat s poat rula procese separate concurent. Aceste
procese pot fi aplicaii separate, cum ar fi spreadsheet (tabel de format mare) i email, sau
pot fi pri componente ale unui i acelai program, precum imprimarea de fond,
concomitent cu permisiunea de a dactilografia caractere noi ntr-un procesor de texte.
Proiectarea unui SO cu multitasking nu este un exerciiu trivial, precum i
proiectarea aplicaiilor ce ar profita de multitasking este o sarcin dificil. ntr-un mediu
cu adevrat multitasking, softul nu poate da crezare la nimic. El trebuie s manevreze o
eventual ntrerupere n orice moment, s fie capabil s ruleze concurent cu orice altceva
n sistem, s partajeze resurse precum memoria, discul, comunicaiile i alte echipamente.
Rezultatele a toate acestea sunt probleme de condiii de maraton. Acestea apar
atunci cnd dou sau mai multe evenimente se aliniaz i induc confuzie soft-ului care nu
se atepta s fie ntrerup chiar n mijlocul unei operaii ale sale.
Cu alte cuvinte, aceasta este temporizare rea. Termenul condiie de maraton vine
chiar de la ceea ce Dvs. v-ai nchipui drept ntrecere ntre aplicaii pentru a ajunge la fini,
fr a ti care va ajunge nti.
Testarea condiiilor de maraton este greu de planificat, dar putei avea un nceput
bun dac privii la fiecare stare de pe harta de tranziie a strilor i v gndii cam care ar
putea fi influenele externe a cror influen ar putea ntrerupe starea. Luai n considerare
ce ar putea face starea dac datele folosite nu sunt pregtite sau sunt n proces de
schimbare la momentul n care sunt necesitate. Ce s-ar ntmpla dac dou sau mai multe
arce sau linii conectoare apar exact n acelai moment?
Iat cteva exemple de situaii care ar putea expune la condiii de maraton:
65
Aplicaii
Testarea Cutiei Transparente poate fi folosit la toate nivelele de dezvoltare a
aplicaiei ca sistem, a integrrii i a sistemului nsi. Metoda este egalat cu testrile
aplicaiilor efectuate de programatori i este apreciat ca una precis.
Testarea Cutiei Transparente este mai mult dect testare de cod este testare de cale.
n general, sunt testate cile din modul. Dar putem folosi aceeai tehnic pentru testarea
legturilor ntre module i ntre subsisteme, chiar i n interiorul sistemelor.
Dezavantaje: Testarea Cutiei Transparente are cteva dezavantaje:
1. Numrul cilor de executare poate fi att de mare nct nu pot fi testate toate.
ncercarea de a testa toate caile de executare prin metoda Cutiei Transparente este la fel
inutil ca i testarea tuturor combinaiilor de date de intrate prin metoda Cutiei Negre.
2. Testarea structural poate s nu detecteze erori sensibile ca:
67
y x2
cazurile x 0, y 0 i x 2, y 4 .
3. Testarea Cutiei Transparente presupune c fluxul de control este corect (ori
aproape corect). Atta timp ct testele sunt bazate pe cile existente, cele inexistente nu
pot fi descoperite i testate prin aceast metod.
4. Testerul trebuie s aib abiliti de a nelege i de a evalua ST (softul testat). Din
nefericire muli programatori de astzi nu au aceste caliti.
Avantaje: Cnd se folosete testarea Cutiei Transparente, programatorul poate fi
sigur c toate cile existente a programului supus testrii au fost identificate i testate.
Instruciunea Add se executa de un miliard de ori (1000 x 1000 x 1000). Fiecare cale
unic merita s fie testat.
2. Unele ci specifice pot pur i simplu s lipseasc din modul. Orice ncercare de a testa
modulul pe cile existente, nu le va gsi niciodat pe cele inexistente.
if (a>0) doCrestere();
if (a==0) doEgal();
// lipsete condiia - if (a<0) doDescrestere();
3. Pot exista i defecte n procesarea unui cod dint-un modul chiar i atunci cnd
instruciunea n sine este corect.
//code actual (incorect)
a=a+1;
//code corect
a=a-1;
4. Modulul se poate executa corect pentru aproximativ toate datele intrate, i greit doar
pentru citeva.
int div(int a, int b){
return a/b;
68
Bloc de Decizie
Un punct de decizie este locul din modul unde fluxul se poate schimba. Majoritatea
punctelor de decizie sunt binare i implementate de instruciunile if-then-else. Blocurile
decizionale multilaterale sunt implementate de instruciunile case. Ele sunt reprezentate
grafic prin cercuri cu o intrare dar cu multiple ieiri.
Punct de jonciune
Un punct de jonciune este atunci cnd fluxurile se reunesc.
q=1;
b=2;
c=3;
if(a==2){x=x+2;}
else {x=x/2;}
p=q/r;
if(b/c>3){z=x+y;}
Nivelurile de Acoperire
n Testarea Fluxului de Control, sunt definite diferite nivele de acoperire. Prin acoperire
numim procentajul de cod care a fost testat din tot ntregul cod care a fost dat spre testare.
Aici definim acoperirea la un numr de diferite nivele.(Nota: aceste nivele de acoperire nu
sunt prezentate n ordine, de aceea n unele cazuri este mai uor s definim un nivel de
acoperire mai superior dup care s definim unul cu nivel de acoperire mai inferior n
termene celui superior.)
Nivel 1
Cel mai inferior nivel de acoperire este 100% acoperire de instruciuni(n
unele cazuri 100% este czut i se refer doar la acoperire de instruciuni). Aceasta
nseamn c fiecare instruciune din modul este executat sub test cel puin odat. Ct timp
acest lucru pare un scop rezonabil, multe defecte pot fi scpate cu acest nivel de acoperire.
Considerm acest fragment de cod:
70
if (a>0) {x=x+1;}
if (b==3) {y=0;}
n timp ce un singur caz este suficient pentru a testa toate liniile de cod n acest
modul(intrrile a=6, b=3), este aparent c acest nivel de acoperire v-a lsa multe ci netestate. Astfel, acoperirea de instruciuni n general nu este un nivel acceptabil de testare.
Dei acoperirea de instruciuni este cel mai inferior nivel de acoperire, poate fi
greu de implementat n practic. Deseori modulele au pri de cod care este executat
numai n cazuri excepionale memorie mic, disc plin, file-uri ne-citite, pierdere de
conexiuni, etc. Programatorii pot ntlni dificulti sau chiar imposibiliti de a simula
aceste circumstane i acel cod care genereaz aceste probleme v-a rmnea ne-testat.
Nivel 0
Actual exist un nivel de acoperire sub 100% acoperire de instruciuni. Acest
nivel este definit ca testeaz ce ai de testat; las utilizatorii s testeze restul. Nenumrate
corporaii au folosit aceast metod de testare. Legat de acest nivel de acoperire, Boris
Beizer a scris testnd mai puin dect 100% acoperire de instruciuni, pentru noile
software este imoral i ar trebui condamnate. ... n caz c nu m-am exprimat clar, ...
codurile ne-testate intr-un sistem este stupid i iresponsabil.
71
Nivel 2
Urmtorul nivel de acoperire este 100% acoperire de decizii numit i
acoperire de ramuri. La acest nivel sunt create attea cazuri de testare nct s evalueze
toate ieirile deciziilor Adevrat i Fals mcar odat. Folosindu-ne de cazul precedent,
aceasta poate fi ndeplinit prin dou cazuri(a=2,b=2 i a=4,b=3).
Pentru a fi adevrata prima condiie intrrile trebuie s fie a>0 i c=1. A doua condiie
cere ca b=3 sau d<0.
n prima condiie dac valoarea lui a este setat n 0 pentru a fi testat codul, dup
care c==1 o parte din condiie nu va fi testat. (n majoritatea limbajelor de programare a
doua condiie nici nu va fi evaluat.) Urmtorul nivel de acoperire este 100% acoperire
condiii. La acest nivel sunt scrise attea teste nct fiecare instruciune condiional s
aib ieire ADEVARAT i FALS i sunt testate cel puin odat. Acest nivel de acoperire
poate fi atins n dou cazuri (a>0,c=1, b=3,d<0 i a0,c1,b3,d0). Acoperirea de
condiii este de obicei mai bun dect acoperirea de decizie, deoarece fiecare condiie
individual este testat mcar odat, n timp de acoperirea de decizie poate fi ndeplinit
fr testarea fiecrei condiii.
Nivel 4
Considerm aceast situaie:
if(x&&y) {InstructiuneConditionata;}
// nota: && indica i logic
v-a executa niciodat. Existnd aceast combinaie ca mai sus, s fie ct mai complet
100% Decizie / Condiie, acoperirea poate fi selectat. La acest nivel, cazurile testate
sunt create pentru fiecare condiie i fiecare decizie.
Nivel 5
Ca s fie ct mai complet, considerm c un compilator al limbajelor de
programare evalueaz, de fapt, condiiile multiple dintr-o decizie. Folosim aceste
cunotine pentru a crea cazuri de teste flexibile 100% multipl acoperire de condiie.
if (a>0 && c==1) {x=x+1;}
if (b==3 || d<0) {y=0;}
// not a: || inseamna OR logic
va fi evaluat ca:
c=1,
c=1,
c1,
c1,
b=3,
b=3,
b3,
b3,
d<0
d0
d<0
d0
73
74
75
77
78
Testarea structurat convoc crearea unui caz de test pentru fiecare din aceste
drumuri. Acest set de teste garanteaz att acoperirea pe instruciuni ct i pe ramuri.
Seturile de ci de baz nu sunt neaprat unice.
Aplicabilitate i limite
Testarea fluxului de control este piatra de temelie la testarea unitilor. Trebuie
folosit pentru toate modulele de cod care nu pot fi suficient testate prin verificri i
inspecii. Limitrile sunt c programatorul (persoana ce testeaz) trebuie s aib capaciti
de programare pentru a nelege codul i fluxul de control. n plus, testarea fluxului de
control poate consuma mult timp datorit tuturor modulelor i cilor de baz care cuprind
sistemul.
79
//
//
//
//
//
//
//
//
//
80
81
82
gaf major
acceptabil
corect, forma normal
- acceptabil
- probabil eroare de programare
eroare de programare
gaf major
acceptabil
probabil eroare de programare
acceptabil
corect. Forma normal
n efectuarea unei analize statice asupra acestui model a fluxului de date au fost
descoperite urmtoarele probleme:
x: definete definete
y: ~ folosete
y: definete distruge
z: ~ distruge
z: distruge folosete
z: distruge distruge
Din nefericire, n timp ce testarea static poate detecta multe erori la fluxurile de
date, nu le poate gsi pe toate. S consideram urmtoarele situaii:
Matricele sunt colecii de elemente de date care mpart acelai nume i tip. De
exemplu: int obiect [100];
definete o matrice denumit obiect constnd din 100 elemente ntregi. n C, C++ i
Java elementele individuale sunt definite obiect [0], obiect [1], obiect [2] etc. Matricele
sunt definite i distruse ca o unitate, dar elementele individuale ale matricei sunt utilizate
individual. De cele mai multe ori, programatorii se refera la obiectul [j] unde j se schimb
n mod dinamic n timp ce programul se execut. n cazul general, analiza static nu poate
determina dac regulile definete utilizeaz distruge au fost urmate ntocmai, dect
dac fiecare element este considerat n mod individual.
84
Managementul testrii
Acest capitol constituie o introducere n procesul de organizare a testrii i de
conducere a procesului de testare n cadrul unor organizaii. Privirea general asupra
acestei activiti nu va respecta modalitatea de organizare a testrii pentru o structur
specific. Totui problema este important pentru orice organizaie i trebuie studiat de
toi.
Vom ncepe cu fenomenul corelaiei dintre risc i testare, vom prezenta detaliat
subiectul planificrii i controlul testului, astfel vom identifica cum independena ajut
procesului de testare. O arie esenial n dirijarea procesului de testare este perceperea
diferitor roluri i sarcini asociate testrii, aa ca liderul testului i testorul.
Un capitol nu poate cuprinde toat informaia necesar pentru a oferi posibilitatea
unui cititor s devin liderul testului n practic sau managerul testului, dar intenionm s
85
v oferim informaia general necesar pentru a nelege variatele ipostaze ale rolurilor n
dirijarea testului
Riscul i testarea
Nu se poate de discutat despre managementul testrii nainte de a vorbi despre risc
i influena lui asupra proceselor fundamentale ale testrii. Dac nu ar exista riscul unor
posibile reacii adverse n dezvoltarea software sau hardware, atunci nu vor fi necesare
testrile. Cu alte cuvinte, dac nu ar exista defecte, nu ar exista teste.
Riscul poate fi definit ca un eveniment, hazard, situaie inacceptabil.
Riscul un factor care poate rezulta dintr-o consecin negativ, de obicei
exprimat ca impact sau probabilitate. ntr-un proiect liderul testului va folosi riscul n 2
modaliti diferite: riscul proiectului i riscul produsului. n ambele cazuri riscul poate fi
calculat ca:
Nivelul riscului = probabilitatea de manifestare a riscului * impactul n caz de
nregistrare.
Riscurile proiectului
La conducerea unui proiect de testare, un test lider va utiliza riscurile proiectului
pentru a dirija capacitatea de livrare.
Riscurile proiectului includ:
Problemele furnizrii:
* Nereuita persoanei a treia s distribuie la timp sau deloc.
* Problemele contractuale, ca satisfacerea criteriului de acceptare.
Factorii organizatorici :
* Lipsa abilitilor i personalului.
* Problemele personale i de instruire.
* Problemele politice, ca schimbarea administraiei i reorganizarea care vor afecta
resursele proiectului.
Problemele care i mpiedic pe testori s-i comunice cerinele sale i rezultatele
testrii.
Eecul de a continua la un nivel jos testarea i revizuirea:
* Lipsa aprecierii avantajelor testrii.
Problemele specialitilor:
* Probleme n definirea corect a cerinelor.
* Proporiile pe care le pot realiza cerinele n restriciile proiectului.
* Calitatea echipei de proiectare, dezvoltare i testare.
Pentru fiecare risc identificat ar trebui stabilite probabilitatea ( ansa ca riscul s se
realizeze) i impactul ( ce se va ntmpla n caz de manifestare a riscului), precum
identificarea i administrarea oricrei aciuni rezolvate ( aciuni pentru reducerea
posibilitii de apariie a riscului, sau reducerea impactului riscului dac s-ar nregistra).
Deci, de ex. dac s-a identificat un risc a treia persoan suplinitoare poate deveni falit n
timpul dezvoltrii, managerul testului va revizui raportul suplinitorului i poate decide c
probabilitatea aceasta este medie ( 3 pe scara de la 1 la 5, 1fiind un risc sporit i 5 redus ).
Impactul asupra proiectului, dac se va ntmpla va fi mare ( 1 utiliznd aceast scar).
Deci, nivelul riscului este 3x1=3. Astfel cu ct este mai mic numrul, cu att este mai mare
riscul. 3 fiind aria de risc medie, liderul testului va trebui s hotrasc ce aciuni de
ameliorare s ntreprind n ncercarea de a stopa riscul care devine realitate. Aceasta poate
86
vor determina orice activitate non-testare care ar putea fi realizat pentru a reduce
riscurile, ex. de a desfura procese de instruire a designerilor cu puin experien.
Testarea bazat pe risc se realizeaz n baza cunotinelor colective i pespicacitatea
acionarilor, testerilor, designerilor, tehnicienilor, reprezentani ai businessului i a oricrei
persoane care tie soluia pentru a determina riscurile i nivelele testrii la care pot aprea
aceste riscuri.
Pentru a se asigura c ansa de nereuit a produsului s-a minimizat, activitile
manageriale asigur o abordare organizat:
Verificarea continu a ce poate merge greit (riscuri). Periodic pe toat perioada de
elaborare, trebuie realizat revizuirea regulat a riscurilor existente i cutarea altora.
Determinarea riscului important de cercetat (probabilitate x impact). Ca i progresul
proiectului, datorit activitilor de reducere a riscului se poate reduce din importan sau
pot disprea ambele.
Implementarea aciunilor referitoare la acest risc (aciuni de reducere).
Testarea susine identificarea noilor riscuri ale proiectului prin revizuirea continu a
riscurilor proiectului distribuite pe parcursul ciclul de dezvoltare. Ajut la determinarea
riscului primordial de redus prin acordarea prioritilor. Poate diminua incertitudinile
despre risc, de ex. prin testarea unui component i verificarea dac nu conine defecte. Prin
desfurarea testelor specifice se poate de verificat alte strategii care se refer la risc, aa
ca contingency plans ( planurile ntmpltoare) .
Testarea este o activitate de control al riscului care asigur feedback-ul despre
riscul rmas n produs prin estimarea eficacitii nlturrii defectului stringent i prin
revizuirea eficacitii planurilor ntmpltoare.
Organizarea testrii
Organizarea testrii i independena
Testarea independent este cea care se realizeaz de cineva diferit de dezvolttorul
codului testat. Rmnnd independent, e posibil mbuntirea eficacitii testrii, dac se
implementeaz corect.
Oamenii pot comite greeli, de la simple greeli ortografice sau utilizarea greit a
sintaxei la erori fundamentale n mijlocul unui document pe care l scriem. Problema
const n aceea c noi ca autori percepem mai greu propriile greeli dect ceilali care vin
n contact mai puin direct cu documentul. Aceasta este o problem complicat n lumea
dezvoltrii software, din cauza diferitor viziuni ale testerilor i dezvolttorilor. O
ngrijorare c toi comitem greeli este c, la aceast etap, se neglijeaz prin prerea c
ceea ce a fost produs, e ceea ce a fost solicitat. Testerul, ns se va conduce de opinia c tot
ce se supune testului conine erori i va cuta minuios s depisteze i s localizeze pe
acestea. Iat prin ce se face testarea independent important, pentru c e cu adevrat
dificil pentru un autor s-i identifice propriile greeli, pe cnd pentru alii pare mai
simplu. Exist mai multe opiuni pentru multe nivele de independen. n general, cu ct
mai distanat este testerul de produsul testat cu att mai mare este nivelul de independen.
Fig.5.1 indic rolurile cele mai comune i gradul de independen pe care le presupun.
Gradul de
independen
Nivelul
1
Rolul
Dezvolttorul
88
2
3
4
5
6
Strategiile de testare
Abordarea testului sau strategia de testare definete cum se va implementa testul.
Strategia de testare poate reflecta testarea pentru o ntreag organizaie, o program de
lucru sau un proiect individual. Poate fi:
dezvoltat devreme n perioada de dezvoltare, care e cunoscut ca preventiv - n
aceast manier procesul de proiectare a testelor este iniiat ct mai devreme posibil n
perioada de dezvoltare pentru a mpiedica introducerea greelilor n soluia final.
91
lsat pn exact la nceputul executrii testului, care este cunoscut ca reactiv aceasta se ntmpl cnd testul este ultima etap de dezvoltare i nu este iniiat pn cnd
proiectarea i codificarea nu au fost completate - cteodat identificat ca metoda cascad,
de ex. toate etapele de dezvoltare snt consecutive, urmtoarea nu poate ncepe pn la
definitivarea aproape complet a celei anterioare).
Exist multe abordri i strategii care pot fi utilizate:
Strategia analitic care ca i tehnicile risk - based testeaz ariile cu risc sporit (vezi
mai trziu o privire general a tehnicilor risk - based).
Abordarea model - based ca testarea stohastic care utilizeaz informaii statistice
despre defectele omise (aa ca sigurana modelelor dezvoltate) i utilizarea (profilul
operaional).
Abordarea metodic, ca failure - based (inclusiv ghicirea erorilor i asaltarea
defectelor), check-list based i bazat pe calitatea caracteristicilor.
Abordarea conform standardelor, stabilite de industria specific standardelor aa ca
The Railway Signaling Standarts (care stabilete nivelele de testare) sau MISRA (care
definete cum s proiectezi, s construieti i s testezi sigur software pentru motor
industry).
Process compliant approaches (abordarea conform procesului), care ader la
procesul de dezvoltare cu o varietate de metodologii sau cu strategiile tradiionale cascad.
Abordri dinamice i euristice, ca testarea de explorare (vezi cap.4), unde testele
sunt mai reactive la evenimente dect este prevzut, i cnd executarea i evaluarea
reprezint sarcini concurente.
Abordarea consultativ, ca acelea unde acoperirea testului este condus de
indicaiile i ghidarea tehnologiei i /sau de experii din domeniul businessului din echipa
de testare sau din exterior.
Abordarea regression - averse include reutilizarea materialele de testare existent,
automatizarea vast a testelor funcionale regresive i a test suitelor standarde.
Diferite abordri pot fi combinate dac e nevoie. Deciziile de tipul cum i de ce
trebuie combinate depind de circumstanele care prevaleaz la moment n proiectul dat. De
ex. o organizaie poate utiliza ca ceva standard metodele agile (active), dar n unele situaii
structura efortului testului poate utiliza o abordare bazat pe risc pentru a se asigura c
testarea este orientat corect. Abordarea necesar se indic de standarde. De ex. acele
utilizate n motor industry indicate de MISRA, sau la discreia acelor care dezvolt
metodele i strategiile. Cnd se accept discreia se recomand considerarea contextului i
scenariului.
De aceea la definirea strategiilor ori abordrilor se respect urmtorii factori:
Riscul de euare a proiectului, de ex. costul eecului va fi foarte mare. (mediu de
strict securitate ).
Abilitatea i experiena persoanelor referitoare la tehnicile, mijloacele i metodele
propuse. Nu exist justificare de a implementa componente sofisticate, abordarea sau
strategiile technique - driven cnd unica resurs disponibil de testare snt utilizatorii de
afaceri care nu au pregtire tehnic.
Obiectivele testrii i sarcina echipei de testare, ex. dac obiectivele se axeaz doar
pe depistarea celor mai serioase defecte.
Aspectele reglementatoare, aa ca regulamentele interne i externe pentru
dezvoltarea procesului, ex. The Railway Signaling standarts care oblig un anumit nivel al
calitii testrii.
92
Natura produsului i a afacerii. De ex. diferite abordri snt necesare pentru testarea
acoperirii telefoanelor mobile i pentru testarea unei operaii bancare on-line.
5
6
7
8
10
11
12
13
14
15
16
Particularitile
netestabile
Exit criteria
Exit criteria snt utilizate pentru a determina momentul de definitivare a activitii
de testare sau cnd ar trebui s nceteze. Ele pot fi definite pentru toate activitile testului,
ca planificarea, specificarea i executarea ca un tot ntreg, sau la un anumit nivel al testului
pentru specificarea testului precum i executarea.
Exit criteria trebuiesc incluse n planurile relevante ale testului. Iat unele criterii
tipice de ieire:
Toate testele prevzute au fost realizate.
ndeplinirea unui anumit nivel de acopere a cerinelor.
Nu au fost ignorate prioritile i defectele.
Orice arie de risc a fost completamente testat, fr a lsa mcar un risc ct de
nesemnificativ.
Costul - cnd bugetul a fost epuizat.
Cele prevzute de plan au fost realizate, ex. data realizrii a fost respectat i
produsul poate fi livrat. Acesta este cazul millennium testing (ea trebuia definitivat
nainte de miezul nopii de 31 decembrie 1999), sau e legat de legislaia guvernamental.
Exit criteria trebuiesc acceptate ct de devreme posibil n ciclul de dezvoltare.
Totui ele pot fi i deseori supuse schimbrilor de control, astfel detaliile proiectului devin
mai bine nelese i deci abilitatea de a ndeplini criteriile este mai bine perceput de cei
responsabili de distribuire.
Estimarea testrii
Programa descrie 2 abordri de estimare a testului, metrics-based (bazat pe
metric) i expert-based (bazat pe experi). Aceste 2 abordri se deosebesc radical, prima
este bazat pe date, iar cealalt este o abordare puin cam subiectiv.
Abordarea metrics - based
Aceast abordare se manifest n baza datelor adunate dintr-un proiect anterior
similar.
Datele de tipul respectiv includ:
Numrul condiiilor testului.
Numrul test cazurilor scrise.
Numrul test cazurilor executate.
Timpul necesar pentru a dezvolta test cazurile.
Timpul necesar pentru rularea test cazurilor.
Numrul defectelor depistate.
Numrul ntreruperilor mediului i durata aproximativ a fiecreia.
95
Experii n business.
Dezvolttorii.
Arhitecii tehnici.
Analitii i designerii.
Oricine care posed cunotine despre aplicaia care urmeaz a fi testat sau
sarcinile implicate n proces.
Exist mai multe modaliti de utilizare a acestora.
Iat 2 exemple:
Rezultatele concise
Evaluarea
Sumarul aciunilor
8.
Aprobrile
Obiectivele pentru testare snt corect stabilite (dac snt realizabile, dac nu
de ce?)
Managementul incidentului
Un incident este un eveniment neplanificat care impune investigarea n continuare.
n activitatea testrii aceasta se transform n ceva unde rezultatul actual se deosebete de
cel scontat.
Incidente se isc la orice etap a ciclului de dezvoltare a software, de la revizuirea
bazelor testului (cerinele, specificaii) la specificarea i executarea testului.
Managementul incidentelor, conform IEEE 1044 ( Standardele de Clasificare ale
Anomaliilor Software) este procesul de recunoatere, investigaie, aciunile ntreprinse i
aranjarea (nlturarea) incidentelor. Aceasta presupune nregistrarea incidentelor,
clasificarea i identificarea impactului. Procesul de dirijare a incidentului asigur c
incidentele snt deplasate de la recunoatere la rectificare, i n final prin retestare la
99
Concluziile i recomandrile.