Documente Academic
Documente Profesional
Documente Cultură
Este etapa in care se construieste solutia problemei. Rezultatul este un model fizic al viitorului
sistem, care este descris in Documentul de Proiectare Arhitecturala.
Cerintele din documentul Cerintelor Software sunt alocate unor componente ale viitorului sistem.
Rezulta un set de subsisteme/componente interconectate. Arhitectura software rezulta printr-un
proces iterativ de descompunere a cerintelor.
Documentul de proiectare arhitecturala trebuie sa specifice rolul fiecarei componente, cerintele
care i-au fost alocate, interfata de comunicare cu celelalte componente ale sistemului.
In etapa de proiectare arhitecturala se intocmeste Planul Testelor de Integrare.
1. Procesul: obtinerea modelului de proiectare arhitecturala
1. Abordare descendenta:
Fiecare subset de cerinte Si este descompus in subseturi mai simple, Si1, Si2, .. care sunt
alocate unor subsisteme ale subsistemului SAi: SAi1, SAi2,..
Un modul de proiectare poate fi: modul functional (functie, procedura), clasa, componenta, in
functie de metoda de proiectare folosita: functionala sau orientat obiect.
2. Abordare ascendenta
Centrata pe reutilizare
Este o structura ierarhica alcatuita din subsisteme interconectate, fiecare subsistem fiind
alcatuit dintr-un set de module interconectate sau din alte subsisteme, s.a.m.d.
Diagrama de structura
usurinta intelegerii
Principii de modularizare:
Proiectarea de detaliu
se incurajeaza reutilizarea
1.
Un nume prin care poate fi referit. Prin atribuirea de nume sabloanelor de proiectare se
2.
aplicat sablonul.
3.
Descrierea solutiei. Sunt descrise elementele care compun proiectul, relatiile dintre ele,
responsabilitatile si colaborarile.
4.
2.
Ce realizeaza sablonul
3.
4.
responsabilitatile lor.
8.
9.
10.
Exemplu de cod.
12.
descris, care sunt diferentele, cu care alte sabloane ar trebui utilizat acesta.
<6
>1
mic
1.TESTAREA PROGRAMELOR
Un test const n execuia programului pentru un set de date de intrare convenabil ales, pentru
a verifica dac rezultatul obinut este corect.
Un caz de test este un set de date de intrare mpreun cu datele de ieire pe care programul ar
trebui s le produc. Cazurile de test se aleg astfel nct s fie puse n eviden, dac este
posibil, situaiile de funcionare necorespunztoare.
Testarea este activitatea de concepie a cazurilor de test, de execuie a testelor i de evaluare a
rezultatelor testelor, n diferite etape ale ciclului de via al programelor.
Testarea n vederea verificrii programului folosete date de test alese de participanii la
procesul de dezvoltare a programului. Ea este efectuat la mai multe nivele: la nivel de unitate
funcional, de modul, de subsistem, de sistem.
Testarea n vederea validrii programului, numit i testare de acceptare, are drept scop
stabilirea faptului c programul satisface cerinele viitorilor utilizatori. Ea se efectueaz n
mediul n care urmeaz s funcioneze programul, deci folosindu-se date reale. Prin testarea de
acceptare pot fi descoperite i erori, deci se efectueaz i o verificare a programului.
2. Testarea pe parcursul ciclului de via al unui program.
2.1. Testele "unitare"
Testarea unui modul este realizat de programatorul care implementeaz modulul. Toate
celelalte teste sunt efectuate, de persoane care nu au participat la dezvoltarea programului.
Scopul testarii unui modul este de a se stabili ca modulul este o implementare corecta a
specificatiei sale (conforma cu specificatia sa).
In cursul testarii unui modul, modulul este tratat ca o entitate independent, care nu necesit
prezena altor componente ale programului. Testarea izolat a unui modul ridic dou probleme:
-
Modulele prin care se simuleaz modulele apelate de modulul testat se numesc module "ciot"
(n englez, "stub") . Un modul "ciot" are aceeai interfa cu modulul testat i realizeaz n mod
simplificat funcia sa.
Cazurile de apel ale modulului testat de ctre celelalte module ale programului sunt
simulate n cadrul unui "modul driver". Modulul driver apeleaz modulul testat furnizndu-i ca
date de intrare datele de test ale modulului. Datele de test pot fi generate de modulul driver, pot
fi preluate dintr-un fiier sau furnizate de testor ntr-o manier interactiv.
Se ncepe prin testarea modulului principal, apoi se testeaz programul obinut prin integrarea
modulului principal i a modulelor direct apelate de el, etc. Metoda presupune implementarea
unui singur modul "driver" (pentru modulul principal) i a cte unui modul "ciot" pentru fiecare alt
modul al programului.
Integrarea descendent poate avea loc pe parcursul unei implementri descendente a
programului. Modulul principal este testat imediat ce a fost implementat, moment n care nu au
fost nc implementate modulele apelate de el. De aceea, pentru testare este necesar s se
implementeze module "ciot". In continuare, pe msur ce se implementeaz modulele de pe
nivelul ierarhic inferior, se trece la testarea lor folosind alte module ciot, .a.m.d. In fiecare pas
este nlocuit un singur modul "ciot" cu cel real.
Avantajele testrii de sus n jos
1. Erorile de proiectare sunt descoperite timpuriu, la inceputul procesului de integrare, atunci
cnd sunt testate modulele principale ale programului. Aceste erori fiind corectate la nceput,
se evit reproiectarea i reimplementarea majoritii componentelor de nivel mai cobort, aa
cum se ntmpl cnd erorile respective sunt descoperite la sfritul procesului de integrare.
2. Programul obtinut este mai fiabil caci principalele module sunt cel mai mult testate.
3. Prin testarea modulelor de nivel superior se poate considera c sistemul n ansamblul su
exist dintr-o faza timpurie a dezvoltrii i deci se poate exersa cu el n vederea validrii
cerinelor; acest aspect este de asemenea, foarte important n privina costului dezvoltrii
sistemului.
Dezavantajele testrii de sus n jos
1. Este necesar s se implementeze cte un modul "ciot" pentru fiecare modul al programului,
cu excepia modulului principal.
2. Este dificil de simulat prin module "ciot" componente complexe i componente care conin n
interfa structuri de date.
3. n testarea componentelor de pe primele nivele, care de regul nu afieaz rezultate, este
necesar s se introduc instruciuni de afiare, care apoi sunt extrase, ceea ce presupune o
nou testare a modulelor.
Aceste dezavantaje pot fi reduse aplicand tehnici hibride, de exemplu, folosind n locul
unor module "ciot", direct modulele reale testate. Integrarea nu trebuie sa fie strict
descendenta. De exemplu, experienta arata ca este foarte util sa se nceapa prin integrarea
modulelor de interfa utilizator. Aceasta permite continuarea integrrii n condiii mai bune de
observare a comportrii programului.
Unele programe trateaz datele de intrare n mod secvenial. n aceste cazuri se pot detecta
erori n program testndu-l cu diverse combinaii ale intrrilor n secven. Metoda de
partiionare n clase de echivalen nu ajut n alegerea unor astfel de combinaii. Numarul de
combinaii posibile este foarte mare chiar i pentru programe mici. De aceea nu pot fi efectuate
teste pentru toate combinaiile. n aceste cazuri este esenial experiena celui care alctuiete
setul de cazuri de test. Testarea "cutie neagr" este favorizat de existena unei specificaii
formale a componentei testate.
In alegerea cazurilor de test s-au folosit urmtoarele euristici:
programele de cutare prezint erori atunci cnd elementul cutat este primul sau ultimul in
structura de date;
de multe ori programatorii neglijeaz situaiile n care colecia prelucrat n program are un
numr de elemente neobinuit, de exemplu zero sau unu;
uneori, programele de cutare se comport diferit n cazurile: numr de elemente din colecie
par, respectiv numr de elemente din colecie impar; de aceea sunt testate ambele situaii
Concluzii:
1. Setul de cazuri de test a fost determinat numai pe baza specifica iei componentei i a unor
euristici (este vorba de experiena celui care efectueaz testele), deci fr s se cunoasc
structura intern a componentei, care este tratat ca o cutie neagr. Eventuala examinare a
codului surs nu urmrete analiza fluxului datelor i a cilor de execuie, ci doar identificarea
variabilelor globale cu care componenta interacioneaz.
2. Clasele de echivalen se determin pe baza specificaiei.
3. Se aleg drept cazuri de test eantioane din fiecare clas de echivalen a datelor de intrare.
Experiena arat c cele mai utile date de test sunt acelea aflate la frontierele claselor de
echivalen.
4. Cazurile de test alese verific componenta doar pentru un numr limitat de eantioane din
clasele de echivalen ale datelor de intrare; faptul c din testare a rezultat c ea funcioneaz
corect pentru un membru al unei clase nu este o garanie c va funciona corect pentru orice
membru al clasei.
5. Se determin de asemenea clasele de echivalen ale datelor de ieire i se aleg pentru
testare datele de intrare care conduc la date de ieire aflate la frontierele acestor clase.
Programul este testat pentru ceea ce trebuie s fac conform specificaiilor i nu i pentru
ceea ce face n plus, de exemplu pentru ca implementarea s fie mai eficient sau pentru a
facilita reutilizarea;
-
sunt eterogene
3.2 Testarea structural
Acest tip de testare se bazeaz pe analiza fluxului controlului la nivelul componentei
testate. Principalul instrument folosit n analiz este graful program sau graful de control.
Acesta este un graf orientat, ale crui noduri sunt de dou tipuri: noduri care corespund
blocurilor de instruciuni indivizibile maximale i noduri care corespund instruciunilor de
decizie. Blocurile de instruciuni indivizibile maximale sunt poriuni liniare maximale de
instruciuni care se execut ntotdeauna n aceeai secven. Fiecare bloc are un singur punct
de intrare i un singur punct de ieire. Arcele reprezint transferul controlului ntre
blocurile/instruciunile componentei program.
Graful program are un nod unic de intrare i un nod unic de ieire. Dac exist mai multe
puncte de intrare sau mai multe puncte de ieire, acestea trebuie s fie unite ntr-unul
singur(care se adaug suplimentar). Nodul de intrare are gradul de intrare zero, iar cel de ieire
are gradul de ieire zero.
Se consider cile care ncep cu nodul de intrare i se termin cu nodul de ieire. Testarea
structural const n execuia componentei testate pentru date de intrare alese astfel nct s
fie parcurse unele dintre aceste ci. Nu este necesar, i n general este imposibil, s se
execute toate cile de la intrare la ieire ale unui program sau ale unei componente program.
Prezena ciclurilor conduce la un numr foarte mare (deseori infinit) de ci. De asemenea,
anumite ci sunt ne-executabile.
Testele structurale favorizeaz evidenierea urmtoarelor tipuri de erori logice:
1. Ci absente n graful program - ca urmare a ignorrii unor condiii
(de exemplu: test de mprire la zero);
2. Selectarea unei ci necorespunztoare - datorit exprimrii
incorecte (de multe ori incomplete) a unei condiii;
3.
incorect, neatribuirea unei valori unei anumite variabile, apelul unei proceduri cu o list de
argumente incorect etc.).
Dintre acestea, cel mai simplu de depistat sunt erorile de tip 3. Pentru descoperirea lor este
suficient s se asigure execuia tuturor instruciunilor programului.
Alegerea cilor de testat are loc pe baza unor criterii de acoperire a grafului de control. Dintre
acestea cele mai cunoscute sunt:
Execuia tuturor instruciunilor
Cazurile de test se aleg astfel nct s se asigure execuia tuturor instruciunilor
componentei testate. Acesta este un criteriu de testare minimal. El nu este ntotdeauna
satisfctor.
Traversarea tuturor arcelor
Cazurile de test se aleg astfel nct s se asigure traversarea fiecrui arc al grafului
program cel puin pe o cale. Pe baza acestui criteriu se va putea verifica dac transferul
controlului este corect pentru valoarea FALSE a condiiei, n exemplul de mai sus. In acelai
timp, criteriul nu impune traversarea mai mult de o dat a unui ciclu. Anumite erori apar numai
atunci cnd un ciclu este traversat de mai multe ori.
Traversarea tuturor cilor
Pe baza acestui criteriu ar trebui ca testele s asigure traversarea tuturor cilor
componentei testate. Pentru majoritatea programelor nu se poate aplica acest criteriu,
deoarece numrul de ci de execuie este infinit. Criteriul poate fi restricionat, de exemplu
asigurnd traversarea tuturor cilor cu o lungime mai mic sau egal cu o constant dat.
b)
testele selectionate depind numai de structura programului; ele trebuie recalculate la fiecare
ceea ce trebuie s fac; astfel, dac un caz particular a fost uitat in faza de implementare,
testul structural nu releva aceasta deficien; el trebuie deci completat cu testul funcional. Mai
exact trebuie s se nceap cu testarea funcional care se completez cu testarea structural.
Testele statistice
Testele statistice se efectueaza in timpul testarii de sistem.
Se numesc astfel testele n care datele de test se aleg aleator, dup o lege de probabilitate
care poate fi:
-
uniform pe domeniul datelor de intrare al programului testat- aceste teste se mai numesc
activitate;
Demonstratii formale: pot fi aplicate pentru anumite aspecte ale sistemului daca se
Documentul de cerinte sotware este verificat fata de documentul de cerinte utilizator, conform
sectiunii SR din planul de verificare si validare.
1. Revizii
O revizie este o intrunire in timpul careia un produs sau set de produse este prezentat
personalului care participa la proiect, managerilor, utilizatorilor, clientilor sau altor persoane
interesate, pentru comentarii sau aprobare.
o
Revizii
tehnice
Prezentari
(walkthroughs)
Audituri.
Componenta echipei de revizie difera in functie de faza din ciclul de viata in acre are loc
revizia. Astfel, din echipa pot face parte: Utilizatori, Conducatori de proiect, Ingineri software,
Membri ai achipei de asigurare a calitatii, Experti independenti
Inainte de intrunire:
o
Autorul studiaza problemele care i-au fost transmise si intocmeste un raspuns care
In timpul intrunirii:
Se discuta fiecare problema transmisa si se stabileste starea sa:
o
Actiune: cu specificarea pers resp si data pana la care documentul tre completat
participa la intrunire.
Inainte de intrunire
o
In timpul intrunirii
o
Obiectivul unui audit este de a verifica faptul ca produsele si procesele software sunt in
conformitate cu standardele, specificatiile si procedurile stabilite.
Exemple de audituri de rutina sunt cele fizice si functionale efectuate inainte de livrarea
unui software
Audituri ne-uzuale pot fi initiate de clientul care primeste software-ul sau de echipa de
Inspectiile software pot fi utilizate pentru detectarea defectelor in proiectul de detaliu inainte
de codare si in cod inainte de testare
Sunt eficiente. Pot fi detectate peste 50% din numarul total de defecte introduse in timpul
dezvoltarii
Conformitatea
Grafuri de control
Instructiunile de decizie cu mai multe predicate trebuie sa fie separate in predicate simple inainte
de masurarea complexitatii ciclomatice. De exemplu, decizia if(A.and.B.andC)then.. trebuie
separata in 3 decizii simple.
Metoda de testare structurala: complexitatea ciclomatica a unui modul sa fie limitata la 10.
Studiile arata ca erorile se concentreaza in module cu complexitati mai mari ca aceasta limita.
intotdeauna in timpul codarii. Modulele care depasesc aceasta limita trebuie sa fie reproiectate.
2. Complexitatea ciclomatica totala
Complexitatea ciclomatica totala a unui program se obtine insumand complexitatile ciclomatice
ale modulelor sale.
apeluri de module externe. Caile ramase sunt necesare pentru a testa interfetele modulului.
4. Complexitatea proiectarii unui ansamblu de module
S0 = iv1 + iv2 .. + ivn
unde iv1, iv2, ivn sunt complexitatile de proiectare ale modulelor din ansamblu.
5. Complexitatea integrarii
Complexitatea integrarii unui ansamblu de N module, notata de McCabe cu S1,
Este definita astfel:S1 = S 0 - N + 1
Figura urmatoare reda o diagrama de structura prin care se ilustreaza cum trebuie evaluata S1
cunoscand doar conditiile de apel ale fiecarei componente, adica fluxul controlului.
Dreptunghiurile corespund componentelor de proiectare iar sagetile marcheaza fluxul
controlului. Prin romb se indica un transfer al controlului conditional:
componenta
Intelegerea modulelor cu un numar mare de parametri cere mai mult timp si efort.
Modificarea modulelor cu un numar mare de parametri poate avea efecte asupra altor
module.