Documente Academic
Documente Profesional
Documente Cultură
Coordonator, Absolvent,
Prof. univ. dr. Florin DUMITRIU Cristina CULER
2008
CUPRINS
INTRODUCERE.......................................................................................................................3
CAPITOLUL 1: ASPECTE GENERALE PRIVIND DEZVOLTAREA SISTEMELOR
INFORMAŢIONALE................................................................................................................4
1.1 Arhitectura sistemelor informaţionale.............................................................................4
1.2 Strategii ale definirii arhitecturii sistemului informaţional..............................................5
1.3 Strategii ale dezvoltării unui sistem informaţional........................................................8
1.3.1 Strategia descompunerii funcţionale (orientate-funcţii).........................................10
1.3.2 Strategia fluxurilor de date (orientate-proces).......................................................11
1.3.3 Strategii orientate spre informaţii (orientate-date)..................................................12
1.3.4 Strategii orientate-obiect........................................................................................13
1.4 Etapele realizării unui sistem (produs) informaţional....................................................15
1.5. Participanţi la dezvoltarea sistemelor informaţionale...................................................16
CAPITOLUL 2: FACTORI CARE INFLUENŢEAZĂ DEZVOLTAREA SISTEMELOR
INFORMAŢIONALE..............................................................................................................22
2.1 Influenţe şi beneficii ale utilizării CMMI (Capability Maturity Model Integration) în
îmbunătăţirea proceselor de lucru........................................................................................22
2.2 Gradul de schimbare .....................................................................................................25
2.2.1 Îmbunătăţire continuă vs. restructurare...................................................................25
2.2.2 Managementul schimbării.......................................................................................26
2.3 Factori referitori la utilizatori ce au influenţă asupra succesului dezvoltării sistemelor
informaţionale......................................................................................................................27
2.3.1 Factori referitori la utilizatori..................................................................................27
2.3.2 Analiza interacţiunii factorilor referitori la utilizatori .......................................29
2.4 Standarde şi calitate.......................................................................................................30
2.5 Utilizarea instrumentelor de tip CASE (Computer-Aided Sofware Engineering).........31
2.6 Dezvoltarea orientată-obiect a sistemelor .....................................................................32
2.7 Dezvoltarea “agilă” a sistemelor....................................................................................34
2.7.1 Principiile din spatele metodelor agile ...................................................................34
2.7.2 Compararea metodelor agile cu alte metode...........................................................35
2.7.3 Critici aduse metodelor agile .................................................................................37
2.8 Eşecul proiectelor de dezvoltarea a sistemelor informaţionale......................................37
2.8.1 Definirea noţiunii de eşec a proiectelor..................................................................38
2.8.2 Factori care cauzează eşecul dezvoltării sitemelor informaţionale.........................40
CAPITOLUL 3: INFLUENŢA TESTĂRII ASUPRA SUCCESULUI DEZVOLTĂRII
SISTEMELOR INFORMAŢIONALE....................................................................................41
3.1 Aspecte generale cu privire la organizarea testării........................................................42
3.2 Tehnici de testare...........................................................................................................44
3.2.1 Testare pre-implementare.......................................................................................45
2
3.2.2 Clasificarea tehnicilor de testare.............................................................................46
3.2.3 Testarea structurilor de control repetitive...............................................................48
3.2.4 Examinările şi execuţiile de probă..........................................................................49
3.3 Strategia testării sistemelor informaţionale...................................................................49
3.3.1 Testarea modulelor..................................................................................................50
3.3.2 Testarea integrării...................................................................................................51
3.3.3 Testarea la nivelul sistemului..................................................................................52
3.4 Alte tipuri de testare.......................................................................................................53
3.5 Testare manuală vs. testare automată.............................................................................53
3.5.1 Compararea testării manuale cu testarea automată.................................................54
3.5.2 Avantajele utilizării testării automate.....................................................................55
3.5.3 Procesul testării automate.......................................................................................56
3.5.4 Limitele testării automate.......................................................................................57
3.6 Documentarea testării....................................................................................................58
CAPITOLUL 4: TESTAREA UNITARĂ A CLASELOR JAVA FOLOSIND
UTILITARUL JUNIT..............................................................................................................61
4.1 JUnit – cadru de testare unitară regresivă......................................................................61
4.2 Crearea testelor utilizând JUnit......................................................................................62
4.3 Exemplu de testare folosind Junit .................................................................................65
4.4 Recomandări pentru realizarea testelor cu JUnit...........................................................77
CONCLUZII........................................................................................................................79
Bibliografie..........................................................................................................................81
INTRODUCERE
3
Următoarea secţiune prezintă câţiva dintre factorii cheie, care pot avea o importanţă
majoră în ceea ce priveşte succesul dezvoltării sistemelor informaţionale. Printre aceştia se
pot enumera: utilizarea CMMI (Capability Maturity Model Integration) în îmbunătăţirea
proceselor de lucru, gradul de schimbare ce este asociat cu implementarea unui nou proiect,
abilităţi ridicate cu referire la managementul schimbării, implicarea utilizatorilor în procesul
de dezvoltare, supravegherea respectării anumitor standarde de calitate, folosirea
instrumentelor de tip CASE (Computer-Aided Sofware Engineering) şi a metodelor “agile”,
dezvoltarea aplicaţiilor pe baza abordării orientate-obiect. Tot aici se va dezbate şi problema
eşecului proiectelor de dezvoltare a sistemelor informaţionale.
Al treilea capitol descrie unul din factorii esenţiali ai dezvoltării sistemelor, dar care
de multe ori este ţinut în umbră sau chiar trecut cu vederea: testarea. Pentru a caracteriza
acest concept s-au evidenţiat principalele tehnici de testare, strategiile ce pot fi adoptate, o
comparaţie între testarea manuală şi cea automată, precum şi documentele ce sunt necesare a
fi elaborate în decursul procesului de testare.
Ultima secţiune este constituită dintr-un studiu de caz pe tema testării unitare a
claselor Java folosind utilitarul Junit.
Dat fiind faptul că lumea se află intr-o continuă schimbare, firmele sunt stimulate să
caute mereu noi soluţii care să aibă menirea de a obţine informaţii cât mai eficient. Din
această cauză, sistemul informaţional trebuie să fie supus unor schimbări continue, fie că ele
sunt sub forma unor unor mici adaptări, unor modificări esenţiale sau chiar presupun
substituirea sistemului.
Necesitatea efectuării schimbărilor apare din unul din motivele: întregul sistem de
care aparţine face parte dintr-un plan major de modernizare, transformarea unor
funcţionalităţi de bază, decizia modificării obiectivelor strategice ale firmei, îmbunătăţirea
performanţelor sistemului, valorificarea beneficiilor aduse de tehnologiile de ultimă
generaţie.
4
Arhitectura sistemului informaţional reprezintă soluţia generică privitoare la
procesele de prelucrare a datelor ce trebuie să se realizeze şi modul de integrare a datelor şi
prelucrărilor. Această soluţie cadru este urmarea sintetizării răspunsurilor la următoarele
întrebări:
− Care sunt componentele sistemului informaţional?
− Cum sunt legate aceste componente şi cum interacţionează ele?
− Ce date se culeg?
− Unde se culeg datele, unde se stochează şi prelucrează?
− Ce date se transmit către diferitele componente ale sistemului informaţional?
Altfel spus, arhitectura reprezintă "soluţia constructivă" a sistemului informaţional şi
reflectă viziunea strategică managerială asupra modului în care organizaţia (firma) lucrează.
Sistemul informaţional global al firmei se descompune în subsisteme, fiecare dintre
acestea acoperind un domeniu de activitate distinct.
La rândul său, fiecare subsistem se descompune în aplicaţii fiecare dintre acestea
acoperind o activitate distinctă în cadrul domeniului. De exemplu, subsistemul informaţional
pentru domeniul comercial se va descompune în aplicaţii distincte pentru fiecare din
următoarele activităţi: aprovizionare, desfacere, marketing.
Procesul de descompunere continuă şi în pasul următor pentru fiecare aplicaţie se vor
defini proceduri realizând funcţii distincte în cadrul aplicaţiei (exemplu: proceduri pentru
dirijarea prelucrărilor, proceduri pentru actualizarea bazei de date, proceduri pentru
consultarea bazei de date). La rândul lor, procedurile se descompun în module. Acestea
cuprind secvenţe de cod realizând câte o funcţie distinctă în cadrul procedurii. De exemplu,
o procedură de actualizare a bazei de date va cuprinde: un modul pentru adăugare de
înregistrări, un modul de modificare a tuplurilor, un modul de ştergere a tuplurilor.
1
Stanciu V., Sisteme informaţionale de gestiune, Tribuna Economică Bucureşti, 1999, consultat pe
www.tribunaeconomica.ro în data de 22 martie 2008, la ora 15:33.
5
strategia ascendentă;
strategia mixtă.
Strategia top-down este cea mai răspândită modalitate de descriere a situaţiei
curente a organizaţiei prin care se urmăreşte determinarea cerinţelor informaţionale ale
unităţii. Se începe cu o analiză mai profundă a misiunii organizaţiei, a obiectivelor ei şi a
strategiei, pentru a stabili cu exactitate informaţiile necesare atingerii obiectivelor. Strategia
presupune o puternică implicare a top-managerilor.
Strategia descendentă (top-down) are la bază principiul modularităţii şi
constă în descompunerea succesivă a unui sistem complex de sus în jos pâna la un nivel de
module elementare. Descompunerea urmăreşte structura funcţională a sistemului şi se
finalizează în identificarea arborelui structurii sistemului cu definirea modulelor
funcţionale pe fiecare nivel ierarhic si a legăturilor dintre acestea oferind o descriere a
fiecărei componente a sistemului.
Prin această abordare, sistemul informaţional dobândeşte o structură ierarhic
modulară în care fiecare componentă îndeplineşte o anumită funcţionalitate şi va fi
coordonată în funcţionarea sa de componentele plasate la nivelul ierarhic imediat superior.
Rezultă că această strategie se aplică în cazul sistemelor informaţionale
complexe, vizând o arie largă de cuprindere (de exemplu: sistemul informaţional al
CCR, sistemul informaţional al unei bănci, sistemul informaţional al Ministerului Finanţelor,
etc).
Se asigură astfel realizarea unei soluţii globale, unitare la nivel conceptual pentru
întregul sistem, componentele acestuia urmând să fie proiectate si realizate independent
(pe baza unei planificări), priorităţile fiind fixate în funcţie de opţiunea beneficiarului sau
importanţei respectivelor componente şi conexiunilor necesare în cadrul sistemului global.
Pe măsura realizarii componentelor din arhitectura generală a sistemului
informaţional acestea se vor testa şi apoi integra în produsul final a cărui funcţionalitate va
fi de asemenea verificată. Se poate realiza trecerea în exploatare a componentelor finalizate
urmând ca integrarea acestora în sistemul informaţional global să se realizeze în timp.
Aplicarea unei astfel de strategii impune un efort deosebit atât în perioada de analiză
(fiind necesară o analiză complexă şi foarte amanunţită având în vedere complexitatea
6
proceselor informaţionale supuse informatizării) cât şi de proiectare şi realizare, ceea ce
impune eforturi financiare deosebite.
În procesul integrării componentelor în cadrul sistemului informaţional global nu vor
apărea probleme deosebite ca urmare a strategiei unitare de proiectare si realizare definită la
demararea proiectului. Integrarea se va realiza din treaptă în treaptă pornindu-se de la
componentele elementare (cu gradul cel mai mare de detaliere).
Sistem informaţional
Sursa: Prelucrare după Stanciu V., Sisteme informaţionale de gestiune, Tribuna Economică Bucureşti,
1999, consultat pe www.tribunaeconomica.ro în data de 22 martie 2008
Fig. 1.1 Ilustrarea strategiei descendente
7
reuşită.
Înţelegere mai bună Daca nu s-ar vedea unitatea de sus, ar creşte tendinţele de
abordare a unor componente izolate ale acesteia.
2
Lungu, I., Sabău, Gh., Bodea, C., Surcel, Tr., - Sisteme informaţionale pentru conducere, Ed. SIAJ,
1994.
8
Considerăm că dacă s-ar porni de la conceptul filosofic de
“Existenţă Fundamentală”, ceea ce DeMarco numea „forma solidului" - cu
trimitere la obiectele palpabile - ajungem la Substanţă, Energie,
Informaţie3. Informaţia este văzută de DeMarco, în 1982, ca fiind posibil de abordat prin
trei perspective specifice sistemelor informaţionale sau prin trei dimensiuni: date, funcţii,
comportament.
Datele sunt surprinse prin prisma structurii lor sub forma de atribute şi înseamnă,
de fapt, ceea ce sistemul are stocat şi-şi poate „reaminti" oricând despre fenomenele sau
procesele studiate. Ele reflectă structura statică a sistemului informaţional.
Funcţiile scot în evidenţă, în mod limitat, ceea ce face sistemul. Ele pot fi văzute
şi ca procese, întrucât elementele sistemului despre care se păstreaza datele de rigoare sunt
supuse unor transformări funcţionale, prin intermediul proceselor.
Comportamentul este invocat pentru a reda o altă modalitate de percepţie a
sistemului, tot limitată, pentru surprinderea stărilor comportamentale prin care acesta ar
trece, reliefându-se influenţa evenimentelor, ceea ce ar sugera dinamica lui.
Pornind de la aspectul tridimensional al sistemelor informationale, se poate afirma că
acestea pot fi axate pe una, două sau toate cele trei dimensiuni, ceea ce îndreptăţeşte pe
Whitmire4 să spună că, atunci când aplicaţiile sunt net dominate de una dintre cele trei
dimensiuni, ele sunt data-strong, function-strong sau control-strong. Tot el adaugă că, atunci
când dimensiunea dominantă, nu este clară, ele pot fi considerate aplicaţii hibride.
Preluând comportamentul hologramelor, la care însă nu face nici o referire, reţine că
obiectele luate individual păstrează caracteristicile întregii aplicaţii. Conceptul este
remarcabil deoarece, cât timp este posibilă tratarea unui singur obiect asa cum se poate trata
întreaga aplicaţie, rezultatele sunt deosebite.
În funcţie de elementul care stă la baza structurii sistemului informaţional şi implicit,
a abordării structurale, pot fi identificate mai multe strategii de dezvoltare a sistemelor
informaţionale – de la cele orientate pe funcţii sau procese şi până la cele orientate obiect.
3
Oprea, D., Meşniţă, G., Dumitriu, F., - Analiza sistemelor informaţionale, Editura Universităţii „Al. Ioan
Cuza", 2005, Iaşi, p. 181.
4
Whitmire, S.A, - Object-Oriented Design Measurement, John Wiley & Sons, Inc., New York, 1997, citat în
Oprea, D., Meşniţă, G., Dumitriu, F., - Analiza sistemelor informaţionale, Editura Universităţii „Al. Ioan Cuza",
2005, Iaşi, p.182.
9
1.3.1 Strategia descompunerii funcţionale (orientate-funcţii)
10
DF = Funcţii+ Subfuncţii + Interfeţe funcţionale
Metoda are ca puncte tari simplitatea, obţinerea destul de uşoară a cerinţelor
utilizatorului şi generarea de soluţii pe diferite niveluri de abstractizare (sistem, subsistem,
funcţie, subfuncţie).
Ca puncte slabe putem considera concentrarea eforturilor spre funcţii (ceea ce
conduce la culegerea multor date redundante), inexistenţa unor reguli precise de
descompunere şi evidenţierea anevoioasă a interacţiunilor non-ierarhice din sistemele
complexe.
Disfuncţionalităţile metodei au fost ameliorate prin soluţii ingenioase de tipul
coeziunii şi cuplării, introduse spre sfârşitul anilor 1980 de Page&Jones şi
Yourdon/Constantine.
sistemelor informaţionale, Editura Universităţii „Al. Ioan Cuza", 2005, Iaşi, p.183.
6
Coad, P., Yourdon, E. - Op cit, p. 22.
11
Cum metoda orientată pe procese are încă un mare grad de asemănare cu
descompunerea funcţională, criticile metodei descrise anterior se reportează şi în cazul de
faţă.
12
Două realizări remarcabile în domeniu au dat tonul acestei noi orientări în abordarea
sistemelor: modelarea datelor cu ajutorul diagramelor entitate-relaţie, de către Peter P. Chen
şi ingineria informaţiei, în viziunea lui James Martin.
Termenul „obiect", folosit în modelarea informaţiilor sau modelarea semantică a
datelor, este un simbol prin care se reprezintă una sau mai multe „ocurenţe” (cazuri) ale
„entităţilor” lumii reale.
Metoda este identificată prin următoarea ecuaţie7:
Modelarea informaţiilor = Obiecte + Atribute + Relaţii +
Supertipuri/Subtipuri + Obiecte asociative
Coad si Yourdon spun că şi în acest caz se poate vorbi despre existenţa a două
strategii. Strategia veche se bazează pe conceperea listei atributelor, gruparea lor în obiecte,
stabilirea de relaţii între „ocurenţe" (cazuri), folosirea supertipurilor/subtipurilor pentru
extragerea atributelor comune şi definirea obiectelor asociative pentru reliefarea relaţiilor
sigure. Noua strategie este destul de apropiată de precedenta, cu excepţia primului pas, care
îşi propune mai întâi să identifice obiectele lumii reale şi apoi urmează descrierea lor cu
ajutorul atributelor. Specialiştii apreciază salturile înregistrate însă, în acelaşi timp, fac
inventarul conceptelor inexistente, cum ar fi: servicii, mesaje, moştenire, structură.
7
Coad, P., Yourdon, E. - Op cit, p. 27.
13
declanşeaza operaţiuni ce determină evoluţia stărilor interne ale obiectelor. În acest fel se
obţine un plus de stabilitate în conceperea sistemelor informaţionale.
Ecuaţia ce caracterizează metoda, este redată în cele ce urmează8:
Orientat-Obiect = Clase şi Obiecte + Moştenire +
Comunicaţii prin mesaje
Conceptele de obiect şi clasă sunt interdependente: un obiect aparţine unei clase
(este o instanţă a clasei), iar o clasă este o grupare logică a obiectelor care au aceeaşi
structură şi un comportament similar. Un obiect este o abstractizare a datelor
elementare şi poate fi descris astfel9:
Obiect = Identitate + Comportament + Stare
Identitatea obiectului se realizează printr-un identificator al obiectului, care este
un atribut invariabil ce permite ca obiectul să fie referit independent de celelalte obiecte.
Identificatorul este generat de sistem la crearea obiectului.
Starea obiectului este o valoare care poate fi simplă (de exemplu, un literal) sau
structurată (de exemplu, o listă). In ultimul caz, ea poate fi compusă din valori simple,
referinţe la alte obiecte sau valori care ele însăşi sunt structurate.
Comportamentul unui obiect este definit printr-un set de operaţiuni ce-i pot fi
aplicate şi este descris în clasa căreia îi aparţine obiectul.
Concluzionând, se poate afirma că obiectul este o abstractizare a datelor elementare,
caracterizat printr-un identificator unic, invariabil, o clasă căreia îi aparţine şi o stare
reprezentată printr-o valoare simplă sau structurată.
Abordarea structurală specifică metodelor orientate-obiect capătă un caracter
conceptual mai accentuat, diminuând distanţa semantică ce există între modelul sistemului
şi realitate. Se realizează astfel o mai bună aplicare a abstractizării. De asemenea, cuplarea
redusă dintre obiecte şi coeziunea mare obţinută prin încapsulare şi polimorfism permit o
mai bună localizare a modificărilor, ceea ce determină un nivel redus al riscului efectelor
neaşteptate.
8
Coad, P., Yourdon, E. - Op cit, p. 30.
9
Bouzghoub, M., Gardarin, G., Velduriez, P. - Object Technology : Concepts and Methods, International
Thomson Computer Press, Boston, 1997, p. 15, citat în Oprea, D., Meşniţă, G., Dumitriu, F., - Analiza
sistemelor informaţionale, Editura Universităţii „Al. Ioan Cuza", 2005, Iaşi, p.187.
14
Indiferent de strategia utilizată în definirea arhitecturii trebuie ca această soluţie să
permită dezvoltarea ulterioară a sistemului informaţional prin crearea şi integrarea de noi
componente. O astfel de abordare conduce la definirea de arhitecturi deschise pentru
sistemele informaţionale. Numai astfel sistemul informaţional va putea evolua odată cu
activitatea organizaţiei asigurând suportul informaţional necesar procesului de conducere şi se va
putea totodată moderniza prin integrarea de noi soluţii IT.
Punctul de început al unui ciclu de viaţă a unui sistem informaţional este reprezentat
de decizia de realizare a unui nou SI mai performant, iar punctul final al ciclului de viaţă este
reprezentat de momentul deciziei de înlocuire a SI existent cu unul nou, mai bine adaptat
cerinţelor asigurând performanţe informaţionale, tehnice şi economice superioare.
Un sistem sau produs informaţional se realizează printr-un proces de proiectare ce
conţine mai multe etape a căror parcurgere conduce la atingerea scopului propus.
1. Analiza sistemului (produsului) informaţional
Analiza are ca obiect stabilirea cerinţelor ce trebuie avute în vedere în realizarea
proiectului. Acestea sunt determinate de:
Cerinţele utilizatorilor - obiectivele pe care urmează să le îndeplinească viitorul
sistem informaţional, criteriile de eficienţă, securitate, performanţă pe care acesta urmează să le
asigure;
Cerinţele sistemului - se stabilesc pornind de la cerinţele utilizatorilor şi vor
reprezenta prezentarea detaliată a rezultatelor pe care sistemul informaţional urmează să le
asigure. Se va evidenţia ce anume urmează să facă sistemul fără a se sugera în nici un fel
cum se va face acest lucru;
Cerinţele hardware şi software - evidenţiază ce urmează să facă produsul software şi
restricţiile sub care funcţionalitatea sa va fi asigurată.
2. Proiectarea sistemului (produsului) informaţional
Cuprinde două etape:
15
Proiectarea de ansamblu (generală) - în cadrul căreia se definesc soluţii cadru,
conceptuale privind viitorul sistem informaţional. În această etapă se stabileşte structura
sistemului informaţional, componentele şi interacţiunile dintre ele;
Proiectarea amănunţită (de detaliu) - în cadrul căreia se rafinează soluţia cadru,
având ca finalitate definirea soluţiei finale a sistemului informaţional;
În etapa de proiectare se realizează modelele conceptuale şi logice ale datelor şi
prelucrărilor.
3. Realizarea sistemului (produsului) informaţional
Se efectuează în trei etape, şi anume:
Realizarea propriu-zisă a aplicaţiei prin elaborarea, din modelul logic, a modelului
tehnic al datelor şi al prelucrărilor;
Testarea - se verifică dacă sistemul răspunde sau nu cerinţelor pentru care a fost
proiectat;
Integrarea componentelor şi testarea finală a sistemului - reunirea componentelor
în cadrul produsului final şi verificarea funcţionării lui în ansamblu.
4. Instalarea sistemului (produsului) informaţional
Instalarea presupune în primul rând achiziţionarea şi punerea în funcţiune a
calculatoarelor (reţelei de calculatoare) şi a software-ului de bază, urmărindu-se realizarea
arhitecturii alease pentru configurarea sistemului (centralizată sau descentralizată) după care,
sistemul (produsul) informaţional se va implementa şi retesta în condiţii reale de funcţionare.
Etapa se încheie cu acceptarea sistemului (produsului) informaţional de către beneficiar.
5. Exploatarea şi întreţinerea
Reprezintă utilizarea curentă a sistemului informaţional şi întreţinerea lui. După
exploatare se pot evalua rezultatele şi interveni acolo unde sunt necesare modificări.
6. Dezvoltarea sistemului (produsului) informaţional
Evaluarea finală a sistemului informaţional presupune şi analiza feed-back, ceea ce
duce la apariţia unor versiuni noi. Dezvoltarea produselor are în vedere realizarea şi
integrarea de module noi, care să îmbunătăţească şi / sau dezvolte funcţionalitatea şi
performanţele sistemului. Aceste servicii noi sunt de cele mai multe ori destul de costisitoare.
16
Dezvoltarea unui sistem informaţional implică participarea unei echipe, cu un număr
mai mic sau mai mare de membri, în funcţie de dimensiunea proiectului. Echipa este alcătuită
din: managerul de proiect, proiectanţii, programatorii, analiştii, specialiştii în domeniul luat
în considerare (între aceştia se includ reprezentanţii conducerii, beneficiarii proiectului,
utilizatorii etc. ).
Managerul de proiect este persoana responsabilă cu îndeplinirea obiectivelor
proiectului. Acesta este, de obicei, în contact cu beneficiarii sau finanţatorii proiectului şi
lucrează îndeaproape cu analiştii in stadiile incipiente ale proiectului. Analiştii sunt
concentraţi pe obţinerea detaliilor cu privire la ceea ce trebuie să facă sistemul, în timp ce
managerul de proiect este concentrat pe determinarea factorilor de succes şi pe susţinerea
procesului de instruire a persoanelor afectate cu privire la modul de funcţionare a proiectului
de dezvoltare a sistemului.
Managerul de proiect este o parte impulsionare şi o parte gestionare a problemelor din
cadrul proiectului. Rolul său este de a se asigura că proiectul merge înainte şi pentru asta
foloseşte o mare varietate de procese, întâlniri şi documentaţie menite să asigure progresul
continuu şi identificarea problemelor cât mai curând posibil.
Rolul managerului de proiect este de a fi capabil să observa amănuntele cât mai
consecvent posibil. De asemenea trebuie să aibă o imagine de ansamblu pentru a putea
evalua riscul şi acurateţea estimărilor temporale. Toate acestea necesită o oarecare reţinere şi
competenţe de bun ascultător. Reţinerea previne intervenţia prematură a managerului, iar
ascultarea asigură că problema reală este inţeleasă şi poate fi transmisă tuturor.
Analiştii au rolul de a capta, consolida şi comunica informaţiile de la specialiştii în
domeniu la restul echipei. Analiştii iau datele de intrare şi le transformă în ceva ce echipa de
implementare poate pricepe. Unul din factorii-cheie este clarificarea intenţiilor specialiştilor.
Analistul va petrece o perioadă îndelungată de timp punând întrebări de genul: „Ce vreţi să
spuneţi prin asta?” sau „Cum se potriveşte asta cu ceea ce discutam mai devreme?”.
Întrebările de genul acesta expun potenţiale diferenţe de semnificaţie între specialişti şi restul
echipei de implimentare. Şi mai important este faptul că aceste întrebări expun presupunerile
cu privire la logica afacerii care s-ar putea să nu fie exprimate clar sau să nu fie exprimate
deloc de către specialişti.
17
Analiştii sunt responsabili pentru identificarea şi documentarea cerinţelor precum şi
pentru rezolvarea cerinţelor conflictuale.
Specialiştii în domeniul luat în considerare sunt reprezentaţi de reprezentanţii
conducerii, beneficiarii proiectului, utilizatorii. Rolul de specialist în domeniu nu este un rol
pe care persoana aflată în centrul tehnologiei informaţionle să îl joace în mod normal, totuşi
acest rol este o parte importantă a procesului de dezvoltare. Specialiştii sunt cei care
furnizează informaţiile cu privire la ceea ce trebuie dezvoltat, ei oferă materialul brut pentru
procesul de dezvoltare, incluzând cerinţele sistemului şi cum vor fi acestea utilizate. Datele
lor de intrare descriu problema sau oportunitatea pe care proiectul o va rezolva în cele din
urmă.
Proiectanţii au rolul de a transforma cerinţele într-o structură care va deveni
prototipul pentru soluţia creată. Această conversie este bazată în principal pe modele
anterioare, în care proiectantul a fost implicat în trecut, fie prin documentare pentru a fi în
pas cu ultimile tehnici fie din experienţă proprie.
O importantă componentă a rolului proiectantului constă în motivarea şi ghidarea
liderilor proiectului. Aceştia trebuie să accepte structura, trebuie să ştie cum se potrivesc
piesele.
Programatorii sunt cei care transpun cerinţele sistemului sub forma procedurilor de
prelucrare, prin apelarea la tehnici şi principii specifice proiectării interfeţelor, bazelor de
date, programelor. Tot ei sunt cei care se ocupă de testarea si întreţinerea sistemului.
În Tabelul 1.2 sunt prezentate câteva puncte forte şi câteva neajunsuri presupuse de
îndeplinirea unui rol în cadrul dezvoltării unui sistem informaţional10.
Tabelul 1.2 Puncte tari şi puncte slabe în rolurile îndeplinite de participanţii la
dezvoltarea sistemelor informaţionale
Participant Bun Rău Urât
Vizibilitate ridicată – Limite stricte de timp – Oamenii şi interesele –
rolul implică raportarea rolul este crucial în conflictele de interese
în faţa conducerii momentul în care sunt dificil de
executive a unei proiectul se confruntă cu administrat
Manager de organizaţii astfel că are un grad ridicat de stress concomitent cu
10
Bogue R., „Anatomy of a Software Development Role: The Good, the Bad, the Ugly”,
http://www.projectmanagerplanet.com/tools/article.php/, accesat în 25 martie 2008, ora 19:30.
18
proiect posibilitatea de a cauzat de restricţiile de instruirea şi
demonstra o bună timp greu de îndeplinit; supravegherea
calitate a muncii în faţa Suprasolicitare – de cele activităţii echipei;
unor oameni importanţi; mai multe ori managerul Decizii neplăcute –
Rol cheie – poate avea se vede împărţit între mai câteodată este necesară
un mare impact asupra multe sarcini care se selectarea informaţiilor
succesului/eşecului suprapun si care necesită care vor fi incluse
proiectului în ansamblu; implicarea sa pentru a pentru menţinerea
Sentiment de împlinire putea fi duse la bun traiectoriei corecte a
– cu ocazia fiecărui pas sfârşit; proiectului sau optarea
înainte făcut în realizarea pentru lucrul peste
proiectului prin program în vederea
interacţiunea cu un mare respectării limitelor de
număr de persoane. timp ;
Rol cheie în definirea Competenţele Conflicte – sunt o
soluţiei – este cel care, cunoscătorilor în consecinţă normală a
încă de la demararea domeniu – nu toţi unei zile de lucru a unui
proiectului, poate să aibă cunoscătorii dispun de anlist;
oportunitatea de a calităţile pe care le “Ţap ispăşitor” – dacă
îndruma soluţia pe etalează, îngreunând un anlist îşi face bine
drumul cel bun; simţitor sarcinile treaba, totul merge
Interacţiune cu toată analistului. bine, în cazul în care
Analist echipa – are posibilitatea ceva lipseşte, cel mai
de a interacţiona cu toţi adesea, analistul este
cei implicaţi în proiect, învinovăţit.
inclusiv cei din afara
echipei de dezvoltare a
proiectului, adică oameni
cu poziţii înalte care pot
ajuta la construcţia unei
bune reputaţii şi a unei
19
cariere puternice
20
– din poziţia de percepţia conform căreia abundente – adeseori
programator se poate programatorii nu au parte apar conflicte de
foarte uşor urca pe scara de prea mult contact interese între
ierarhică; interpersonal, ei fiind respectarea termenelor
Stabilitate – retrogradaţi pe “tărâmul de finalizare a
programatorii pot deveni cubului”. produselor şi
Programator indispensabili pentru respectarea
organizaţiile în care standardelor de calitate.
activează, ei fiind printre
puţinii care ştiu ce fac şi
ştiu şi de ce o fac;
Rezolvarea de
probleme – acest rol
este antrenant deoarece
poate dezvolta abilităţi
de rezolvitor de
probleme atât pe durata
programării propriu-zise
cât şi pe durata testării.
21
CAPITOLUL 2: FACTORI CARE INFLUENŢEAZĂ
DEZVOLTAREA SISTEMELOR INFORMAŢIONALE
Succesul unui proiect poate fi măsurat prin cât s-a apropiat acesta de atingerea
obiectivelor, cu respectarea parametrilor referitori la buget şi termene. Aceste trei elemente:
performanţe, cost şi durată sunt cunoscute sub denumirea de tripla constrângere şi reprezintă
echilibrul pe care trebuie să-l urmărească orice proiect pentru a fi considerat de succes.
11
http://www.sei.cmu.edu/cmmi/general/index.html, accesat la data de 30 aprilie 2008, la ora 20:23.
22
Experienţa organizaţională în procesul de dezvoltare a sistemelor informaţionale
este de asemenea un factor de succes12. Modelul CMMI reprezintă o metodă de a măsura
această experienţă şi sortează nivelul de maturitate în dezvoltarea sistemelor a unei
organizaţii utilizând cinci nivele de la Iniţial la Optimizat.
Proces de Optimizat
îmbunătăţire continuă (5)
Proces Administrat
previzibil (4)
Proces
consistent, Definit
standard (3)
Proces Repetitiv
disciplinat (2)
Iniţial
(1)
Sursa: Prelucrare după Stair, R., Reynolds, G., Principles of Information Systems, Seventh Edition,
Thomson Course Technology, 2006, Boston p. 581
1. Iniţial. Acest nivel este tipic pentru o organizaţie fără experienţă în dezvoltarea
sistemelor şi a aplicaţiilor. Acest nivel are adesea un proces de dezvoltare ad-hoc sau chiar
haotic.
2. Repetitiv. Al doilea nivel urmăreşte costurile, programul şi funcţionalitatea
dezvoltării. Disciplina de a repeta dezvoltări anterioare de succes este la ea acasă.
3. Definit. Pe nivelul trei, organizaţiile folosesc proceduri definite şi documentate.
Toate proiectele realizate de organizaţie folosesc abordări standardizate de dezvoltare a
aplicaţiilor şi sistemelor. Standardele de programare sunt adesea folosite la acest nivel.
4. Administrat. La acest nivel, organizaţiile folosesc măsurători detaliate ale
procesului de dezvoltare a sistemului pentru a ajuta administrarea procesului şi ameliorarea
12
Stair, R., Reynolds, G., - Principles of Information Systems, Seventh Edition, Thomson Course Technology,
2006, Boston p. 581.
23
calităţii.
5. Optimizat. Este cel mai înalt nivel de experienţă şi maturitate. Îmbunătăţirea
permanentă este utilizată pentru a întări toate aspectele procesului de dezvoltare.
Organizaţiile situate la acest nivel iniţiază adesea proiecte inovatoare. Scopul este de a
optimiza toate ipostazele efortului depus în dezvoltarea sistemelor.
Multe organizaţii au investit în îmbunătăţirea proceselor de lucru prin utilizarea
CMMI. Multe dintre acestea au reuşit chiar să-şi depăşescă obiectivele de îmbunătăţire.
Există suficiente dovezi care să demonstreze ameliorarea proceselor prin influenţa asupra
performanţelor planificărilor şi a costurilor, asupra calităţii produselor, precum şi asupra
randamentului investiţiilor.
Rezultatele cantitative prezentate în următorul tabel provin de la un total de 35 de
organizaţii, dintre care mai multe sunt intreprinderi care au mai mult de o organizaţie
constituentă13.
Sursă: Preluare după Gibson, Diane L., Goldenson, Dennis R., Kost, Keith, Perfomance Results of
CMMI. Based Process Improvement, raport tehnic Software Engineering Institute, Carnegie Mellon, august
200614.
13
Gibson, Diane L., Goldenson, Dennis R., Kost, Keith, - Perfomance Results of CMMI. Based Process
Improvement, raport tehnic Software Engineering Institute, Carnegie Mellon, august 2006.
14
Notă: Aceste rezultate din tabel exprimă modificări survenite în decursul unor perioade variate de timp.
24
Categoria costurilor acoperă instanţele unde organizaţia a raportat schimbări în costul
final sau intermediar al produselor, schimbări în costul proceselor angajate să producă
produsele şi economii generale care pot fi atribuite îmbunătăţirii proceselor prin intermediul
modelelor. De asemenea include şi anticiparea ridicată a costurilor implicate şi alte măsuri
ale variaţiei. Categoria planificării cuprinde anticiparea şi reducerea timpului afectat
programului de lucru. Productivitatea include numeroşi indici bazaţi pe cantitatea de muncă
îndeplinită într-o anumită perioadă de timp. Îmbunătăţirea calităţii produselor se măsoară cel
mai adesea prin reducerea numărului de defecte. Satisfacţia clienţilor este o categorie ce
poate fi monitorizată prin intermediul sondajelor practicate în rândul clienţilor. Randamentul
investiţiilor poate fi exprimat prin mai multe metode15. Pe lângă diferenţele costuri-beneficii,
mai ţine cont şi de: valoarea prezentă netă, randamentul intern, perioadele de rambursare.
Gradul de schimbare asociat cu implementarea unui proiect este un factor major care
influenţează calitatea dezvoltării unui sistem. Raza de acţiune poate varia de la
implementarea unor mici îmbunătăţiri realizate sistemului existent până la o restructurare
majoră. Echipa de proiect trebuie să identifice unde anume se situează pe acest spectru al
schimbării.
15
El Emam, K., - The ROI from Software Quality. Auerbach Publications, Boca Raton, Florida 2005.
16
Stair, R., Reynolds, G., - Op. cit., p. 577.
25
Gradul
de risc
Gradul de schimbare
26
- impresia că noul sistem va genera mai multă muncă decât să o elimine;
- reticenţa de a lucra cu informaticieni;
- neliniştea că sistemul propus va afecta negativ structura organizaţiei;
- credinţa că sunt alte probleme mai importante decât cele rezolvate prin sistemul
propus sau că sistemul este dezvoltat de persoane care nu sunt familiare cu “modul în
care facem noi lucrurile”;
- indisponibilitatea de a învăţa noi abordări şi proceduri.
Prevenirea sau rezolvarea acestui tip de probleme necesită un efort coordonat din
partea acţionarilor, utilizatorilor, managerilor şi personalului dezvoltator. Un remediu ar
consta în discuţii simple cu toţi cei implicaţi cu privire la principalele lor griji. Conducerea
poate apoi să se ocupe cu eliminarea respectivele îngrijorări.
17
Ravichandran, T., Rai, A. - Total quality management in information systems development: Key constructs
and relationships, apărut în Journal of Management Information Systems, 2000, pp. 119-155.
18
Havelka, D., Conrad, K., Glassberg, B. - A project success model for information systems development, apărut
în Proceedings of Western Decision Sciences Institute Annual Meeting, Las Vegas, 2002.
27
Dispoziţia spre schimbare include dorinţa utilizatorilor de a încerca noi abordări
tehnologice ca şi suport pentru sistemul de lucru. Este general acceptat faptul că majoritatea
indivizilor au o tendinţă naturală de a se opune schimbării. Asta ar putea avea impact asupra
succesului proiectului prin insistenţa utilizatorilor ca noul sistem să funcţioneze în aceeaşi
manieră ca cel vechi.
Angajamentul reprezintă nivelul de importanţă pe care îl acordă utilizatorii afectaţi
îndeplinirii proiectului. Acesta reflectă nivelul de implicare emoţională şi psihologică în
proiect şi este de aşteptat să aibă influenţă directă asupra reuşitei prin determinarea duratei de
timp pe care sunt dispuşi utilizatorii s-o dedice proiectului. Cei care vor dori succesul
dezvoltării vor oferi documentaţie, cor răspunde la întrebări şi vor îndeplini orice alte
activităţi necesare.
Abilităţile de comunicare sunt definite ca abilităţile de scriere, vorbire şi ascultare a
participanţilor la proiectul de dezvoltare. Principalul motiv pentru participarea utilizatorilor
în dezvoltarea sistemelor este de a-şi transfera cunoştinţele. Fără un nivel adecvat al
abilităţilor de comunicare, interacţiunea dintre utilizatori poate fi dificilă, iar aceştia, deşi ar
fi dispuşi să furnizeze informaţiile necesare, nu sunt capabili să exprime cerinţele echipei
dezvoltatoare, altor utilizatori sau conducerii.
Cunoştinţele de utilizare a calculatorului definesc gradul de înţelegere pe care îl
posedă utilizatorii cu privire la calculatoare, software şi tehnologie în general. Dacă
utilizatorii sunt cunoscători în ceea ce priveşte calculatorul, comunicarea cu personalul
dezvoltator se poate îmbunătăţi dat fiind faptul ca ar putea înţelege o parte din jargonul
tehnic. De asemenea, pe măsură ce aceste cunoştinţe cresc, utilizatorii sunt mai dispuşi să
accepte noua tehnologie şi pot să arate mai puţină reticenţă şi sunt capabili să aibă nişte
perspective mai realiste cu privire la ceea ce se poate realiza folosind tehnologia
informaţională şi cu privire la cantitatea de timp şi bani necesară pentru proiectare,
construirea şi implementarea noilor aplicaţii.
Apartenenţa este definită ca fiind un ataşament psihologic la sistem sau la procesul
afacerii pentru care este dezvoltat sau implementat un nou sistem sau o nouă aplicaţie. Dacă
un utilizator cu un dezvoltat simţ al apartenenţei consideră că un sistem nou va determina ca
28
activităţile să fie mai eficiente şi mai rapide, atunci s-ar putea să crească angajamentul faţă
de proiect şi ar putea să aibă un impact pozitiv asupra acestuia. În schimb, dacă un utilizator
cu un dezvoltat simţ al apartenenţei la procesul de afaceri consideră proiectul ca o ameninţare
care generează o creştere a nivelului de muncă sau chiar pierderea postului de lucru, atunci
asta va determina o scădere a angajamentului faţă de proiect având o influenţă negativă
asupra succesului acestuia.
Participarea semnifică implicarea activă şi semnificativă a utilizatorilor actuali ai
aplicaţiei în procesul de dezvoltare. Aceasta include identificarea justă a utilizatorilor finali şi
a performanţelor acestora în îndeplinirea anumitor sarcini şi activităţi. Încă mai există
dezbateri cu privire la nivelul optim de participare a utilizatorilor. Noile tehnici, cum ar fi
programarea extremă, care minimalizează participarea, sunt sugerate ca fiind cele mai
productive metode de dezvoltare a sistemelor, în timp ce abordările socio-tehnice încă sunt
populare şi au mulţi apărători dedicaţi19.
Capacitatea de înţelegere a noului sistem reprezintă nivelul de cunoştinţe pe care
utilizatorii participanţi la procesul de dezvoltare îl au cu privire la procesele şi procedurile
curente, manuale sau bazate pe calculator, utilizate pentru a-şi efectua îndatoririle.
Utilizatorii cu un grad ridicat de înţeleger a sistemului actual sunt capabili să semnaleze
anumite probleme specifice sau zone ce ar necesita îmbunătăţiri în noul sistem. Pe de altă
parte, utilizatorii care nu au un grad ridicat de înţelegere a sistemului actual sau cum este
acesta relaţionat de alte operaţii ale afacerii nu vor putea să ofere detalii necesare pentru
automatizarea proceselor sau pentru eliminarea ieşirilor redundante din sistem.
Capacitatea de a înţelege nevoile înseamnă gradul de cunoştinţe pe care îl au
utilizatorii participanţi la procesul de dezvoltare în legătură cu informaţiile necesare pentru a-
şi îndeplini sarcinile. Asta include cunoştinţe cu privire la ieşiri şi la procesarea şi datele
necesare pentru a produce aceste ieşiri. Motivul principal pentru implicarea utilizatorilor în
procesul de dezvoltare este determinarea cerinţelor informaţionale necesare pentru executarea
activităţilor acestora. Pentru ca acest transfer de cunoştinţe să se petreacă, utilizatorii trebuie
să aibă o idee referitor la ceea ce înseamnă cerinţe informaţionale.
29
Următorul tabel prezintă factorii referitori la personalul utilizator si care pot să
influenţeze reuşita dezvoltării sistemelor informaţionale.
Abilităţile de comunicare
Apartenenţa
Participarea
Fiecare factor este redat atât pe orozontală cât şi pe verticală, fiind adăugat ca şi
“scop” succesul dezvoltării sitemului. Influenţa fiecărui factor asupra celorlalţi poate fi
cuantificată cu “+” (pentru o influenţă pozitivă), cu “-“ (pentru o influenţă negativă) sau cu
“0” (dacă nu există influenţă sau o distincţie evidentă).
30
O parte din problemele care contribuie la eşecul proiectelor de dezvoltare a
sistemelor, precum şi soluţiile acestora sunt prezentate în următorul tabel.
Factor Contramăsură
Rezolvarea problemei nepotrivite Stabilirea unei legături clare între proiect şi ţelurile
organizaţiei
Analiză şi definire deficitară a Ghidarea după abordări standardizate a dezvoltării
problemelor sistemelor
Comunicare insuficientă Comunicaţi, comunicaţi, comunicaţi
Proiectul este prea ambiţios Reducerea ariei de acoperire a proiectului numai
asupra celor mai importante oportunităţi
Lipsa susţinerii conducerii Identificarea managerului de top care are cel mai
multe de câştigat de pe urma succesului proiectului
şi recrutarea acestuia pentru a susţine proiectul
Lipsa implicării utilizatorilor şi a Identificarea şi recrutarea acţionarilor-cheie ca şi
conducerii participanţi activi la proiect
Proiectare nepotrivită sau greşită a Urmărirea unei abordări standardizate a dezvoltării
sistemului sistemelor
Lipsa standardelor Implementarea unui sistem de standarde
Implementare şi testare insuficientă Dedicarea unui timp suficient acestei activităţi
Utilizatorii nu sunt capabili să Dezvoltarea unui program riguros de instruire şi
folosească sistemul eficient alocarea de timp destul în program pentru executare
Lipsa grijii pentru întreţinere Includerea în justificarea originală a proiectului a
unor costuri pentru întreţinere
31
grad de rigoare şi standardizare în întregul proces de dezvoltare.
Avantajele şi dezavantajele instrumentelor de tip CASE sunt evidenţiate în următorul
tabel.
Tabelul nr. 2.4 Avantajele şi dezavantajele instrumentelor de tip CASE
Avantaje Dezavantaje
Producerea unor sisteme cu o mai lungă şi Producerea unor sisteme iniţiale care sunt mai
eficientă existenţă operaţională scumpe de construit şi de întreţinut
Producerea unor sisteme care îndeplinesc Necesitatea unor definiri extensive şi precise a
îndeaproape cerinţele şi nevoile utilizatorilor cerinţelor şi a nevoilor utilizatorilor
Producerea unor sisteme excelent Apariţia dificultăţilor în adaptare
documentate
Producerea unor sisteme care să aibă nevoie Necesitatea unei instruiri mai intense a
de mai puţină susţinere personalului de întreţinere
Producerea unor sisteme mai flexibile Posibilitatea unei integrări dificile cu sistemele
existente
32
analiştii de sistem pot să le modifice şi să le integreze cu alte module pentru a obţine noi
programe.
Dezvoltarea orientată-obiect urmăreşte un ciclu de viaţă foarte bine definit. Fazele
acestui ciclu pot fi, şi de cele mai multe ori sunt, completate prin multe repetiţii.
Dezvoltarea orientată-obiect a sistemelor implică, de obicei, următoarele:
♦ Identificarea potenţialelor probleme şi oportunităţi din cadrul organizaţiei
care ar putea fi potrivite pentru abordarea orientată-obiect. Acest proces este similar cu
analiza tradiţională a sistemului. În mod ideal, aceste probleme şi oportunităţi ar trebui să se
preteze la dezvoltarea programelor care pot fi construite prin modificarea modulelor de
program existente deja;
♦ Definirea tipului de sistem folositor utilizatorilor. Această investigare
semnifică definirea tuturor obiectelor care fac parte din mediul de lucru al utilizatorilor
(analiză orientată-obiect). Echipa care se ocupă de proiectarea orientată-obiect studiază
afacerea şi construieşte un model al obiectelor care aparţin afacerii (ex.: un client, o
comandă, o plată);
♦ Proiectarea sistemului. Acest proces defineşte toate obiectele din sistem şi
modul în care acestea interacţionează ( proiectare orientată-obiect). Proiectarea implică
dezvoltarea de modele logice şi fizice ale noului sistem prin adăugarea de detalii la modelul
obiectului aflat în analiză;
♦ Programarea sau modificarea modulelor. Această etapă a implementării ia
modelul obiectului început în analiză şi finalizat în proiectare şi îl transformă într-un set de
obiecte relaţionate în sistem. Limbajele de programare orientată-obiect sunt astfel proiectate
ca să permită programatorilor să creeze clase de obiecte pe calculator care să corespundă
obiectelor din procesul veritabil de afaceri. Obiectele cum ar fi: un client, o comandă, o plată
sunt redefinite ca obiecte de sistem – un ecran pentru client, un meniu de introducere a
comenzii, o iconiţă cu semnul dolarului. Apoi programatorii scriu noi module sau le modifică
pe cele existente pentru a produce programele dorite;
♦ Evaluarea realizată de utilizatori. Implementarea iniţială este evaluată de către
utilizatori şi îmbunătăţită. Sunt introduse scenarii şi obiecte suplimentare şi ciclul se repetă,
ca în final să fie disponibil spre folosire un sistem complet, testat şi aprobat;
33
♦ Revizuire şi modificare periodică. Sistemul complet şi operaţional este revizuit
la intervale regulate de timp şi modificat dacă este necesar.
21
Kent Beck, Mike Beedle, Arie van Bennekum, Alistair Cockburn, Ward Cunningham, Martin Fowler, James
Grenning, Jim Highsmith, Andrew Hunt, Ron Jeffries, Jon Kern, Brian Marick, Robert C. Martin, Steve Mellor,
Ken Schwaber, Jeff Sutherland şi Dave Thomas.
22
www.agilemanifesto.org, accesat în 29 aprilie 2008, la ora 12:32.
34
♦ discuţia faţă-în-faţă este cea mai bună metodă de a comunica;
♦ proiectele sunt construite în jurul unor indivizi motivaţi, care sunt de încredere;
♦ atenţie continuă spre excelenţă tehnică şi bună proiectare;
♦ simplitate;
♦ echipe auto-organizate;
♦ adaptare regulată la împrejurări în schimbare.
O parte din autorii ce au elaborat Manifestul pentru dezvolare agilă au lucrat în
continuare pentru a vedea ce principii manageriale vor putea fi necesare pentru a putea căpăta
o gândire agilă în managementul produselor şi a proiectelor. Astfel că, în 2005, au publicat
“Declaraţia de interdependenţă”23.
Cele şase principii au fost esenţiale pentru managementul modern al proiectelor (şi
managementul în general)24:
“Noi...
♦ îmbunătăţim randamentul investiţiilor, prin concentrarea pe un flux de
valoare continuu;
♦ oferim rezultate de încredere, prin implicarea clienţilor în interacţiuni
frecvente şi apartenenţă impărtăşită;
♦ ne aşteptăm la incertitudine, şi o administrăm prin iteraţii, anticipare şi
adaptare;
♦ dezlănţuim creativitatea şi inovaţia, prin recunoaşterea că indivizii sunt
sursa de valoare de bază şi crearea unui mediu unde ei pot face diferenţa;
♦ susţinem performanţa, prin evidenţa rezultatelor grupului şi
responsabilitate împărţită pentru eficacitatea echipei;
♦ îmbunătăţim eficacitatea şi siguranţa, prin strategii, procese şi practici
specifice situaţiei.
”
23
Larman, C.; Basili V. R., - Iterative and Incremental Development: A Brief History, IEEE Computer Society,
iunie 2003, p. 47-56.
24
http://www.agilealliance.com, accesat în data de 30 aprilie, la ora 14:33.
35
Metodele agile sunt adesea caracterizate ca fiind opusul metodelor situate în spectrul
“orientate pe plan” sau “disciplinate”. Această definire este înşelătoare deoarece ar însemna
că metodele agile sunt “neplanificate” şi ”indisciplinate”. O caracterizare mai precisă ar fi că
metodele se pot situa pe o scală de la “adaptativ” către ”predictiv”25. Metodele agile sunt
situate pe partea adaptativă a scalei.
Metodele adaptative se concentrează pe adaptarea rapidă la realitatea schimbătoare.
Când nevoile unui proiect se schimbă, o echipă adaptativă se schimbă şi ea. O echipă
adaptativă vaavea dificultăţi în descrierea exactă a ceea ce se va întâmpla în viitor. Cu cât
este data mai îndepărtată cu atât va fi mai vagă o metodă adaptativă cu privire la ce se va
întâmpla la respective dată. O echipă adaptativă poate raporta exact ce sarcini vor fi
îndeplinite săptămâna viitoare, dar numai ce cerinţe sunt planificate pentru luna următoare.
Metodele predictive, în schimb, se concentrează pe planificarea viitorului în detaliu.
O echpă predictivă poate raporta exact ce sarcini şi cerinţe sunt planificate pe durata
întregului proces de dezvoltare. Echipele predictive întâmpină dificultăţi în schimbarea
direcţiei. Planul este optimizat pentru direcţia originală şi schimbarea direcţiei poate duce la
inutilizarea unor sarcini îndeplinite şi refacerea lor diferit. Echipele predictive vor institui
adesea un comitet de control al schimbării pentru a se asigura că numai cele mai valoroase
schimbări sunt luate în considerare.
Majoritatea metodelor agile împărtăşesc cu alte metode iterative şi incrementale de
dezvoltare accentul pus pe construirea de aplicaţii difuzabile în perioade scurte de timp.
Dezvoltarea agilă diferă, totuşi, de alte metode de dezvoltare: în acest model perioadele de
timp sunt măsurate mai degrabă în săptămâni decât în luni şi munca este efectuată cu un grad
colaborativ ridicat.
Dezvoltarea agilă are foarte puţine în comun cu modelul “cascadă “ care este cel mai
predictiv model dintre toate. Principala problemă cu modelul “cascadă” o reprezintă
fragmentarea inflexibilă a unui proiect în stadii separate, astfel că angajamentele sunt luate de
devreme, dar reacţia la schimbarea cerinţelor este dificilă. Iteraţiile sunt scumpe.
25
Boehm, B.; Turner R., - Balancing Agility and Discipline: A Guide for the Perplexed, Addison-Wesley,
Boston, 2004, p. 165-194
36
Asta înseamnă că modelul “cascadă” este foarte posibil să fie nepotrivit dacă cerinţele nu
sunt bine înţelese sau este o probabiliotate ridicată ca aceste să se modifice pe parcursul
proiectului26.
Unele echipe agile folosesc modelul “cascadă” la scară mică, repetând întregul ciclu
”cascadă” la fiecare iteraţie27.
26
Sommerville, I., - Software engineering, 8th edition, Addison Wesley, Boston, 2007, p. 66f.
27
Ambler, S., - Scaling Scrum - Meeting Real World Development Needs, publicat în aprilie 2008, pe
http://www.drdobbsonline.net/architect/207100381.
28
Papadimoulis, A., - The Great Pyramid of Agile, publicat în 24 mai 2007 pe
http://thedailywtf.com/Articles/The-Great-Pyramid-of-Agile.aspx, accesat în data de 13 aprilie, la ora 23:14.
37
preveni orice ambiguitate cu privire la eşecul proiectelor de dezvoltare a sistemelor
informaţionale.
Eşecul, de obicei în raport cu proiectele care sunt întârziate sau depăşesc bugetul, se
defineşte ca fiind incapacitatea de a obţine pe deplin beneficiile aşteptate sau de a câştiga
acceptul şi susţinerea entuziastă a utilizatorilor şi a conducerii29.
Eşecul se descrie ca fiind un număr de evenimente care se petrec în cadrul proiectului
şi îl determină să nu respecte specificaţiile şi să-şi îndeplinească misiunea.
Nu este foarte corectă creare unei definiţii absolute a eşecului. Este mai plauzibil să
existe mai multe grade de eşec. Se pot identifica mai multe categorii de eşec30 prezentate în
tabelul următor.
Tabelul nr. 2.5 Categorii de eşecuri ale sistemelor informaţionale
Categorii de eşec Descrierea eşecului
Eşec în corespondenţă Sistemul informaţional nu îndeplineşte
obiectivele proiectate
Eşecul procesului Sistemul informaţional depăşeşte bugetul şi
restricţiile de timp
Eşecul interacţiunii Utilizatorii menţin o interacţiune scăzută sau
inexistentă cu sistemul informaţional
Eşecul aşteptărilor Sistemul informaţional nu se ridică la nivelul
aşteptărilor acţionarilor
Tipurile de eşec şi nivelul eşecului trebuie de asemenea definite clar deoarece eşecul
poate însemna diferite situaţii pentru diverse persoane şi organizaţii. În cadrul sistemelor
informaţionale pot exista eşecuri organizaţionale, tehnice sau umane. Nivelul la care poate să
apară eşecul variază în funcţie de grupul care decide cât valorează eşecul petru ei în termen
de valoare financiară şi competitivitate31.
29
Cannon, J.A., - Why IT Applications Succeed or Fail, Industry and Commercial Training, Vol. 26, No. 1,
1994, p. 10-15.
30
Yeo, K. T., - Critical failure factors in information system projects, International Journal for Project
Management, Vol. 20, No. 3, 2002, p. 241-246.
31
Goulielmos, M., - Outlining organisational failure in information systems development, Disaster Development
and Management Journal, Vol. 12, No. 4, 2003, pp. 319-327.
38
Eşecul dezvoltării sistemelor informaţionale se poate situa pe trei nivele: minor,
major sau critic32.
Eşecul de nivel unu este considerat minor pentru că proiectul final de dezvoltare încă
îşi îndeplineşte obiectivele şi este terminat.
Eşecul de nivel doi este major deoarece proiectul nu-şi îndeplineşte toate cerinţele şi
nu va fi încheiat în buget şi la timp. În acest caz apar două situaţii posibile: proiectul poate
continua şi să fie finalizat dar a depăşit timpul şi bugetul sau proiectul nu îşi va îndeplini
toate obiectivele, dar soluţia este utilizabilă.
Eşecul de nivel trei este critic şi proiectul nu-şi realizează nici o cerinţă şi nici un
obiectiv. Este foarte probabil să fie aruncat după ce a depăşit timpul şi bugetul şi să nu se
întrezărească nici o finalitate pentru respectivul proiect.
Nivelul eşecului
Nivelul unu Nivelul doi Nivelul trei
(minor) (major) (critic)
Profitabilitate Nu toate scopurile sunt Aruncat înainte de finalizare
Evaluări slabe realizate Incapacitatea dezvoltatorului
Tehnologie Soluţii complexe de a îndeplini cerinţele
neconvingătoare Lipsa planificării Consultarea cu clientul pe
Lipsa resurselor Lipsa implicării parcursul etapei de dezvoltare
Lipsa utilităţii utilizatorilor
Lipsa organizării Lipsa resurselor
proiectului Lipsa angajamentului
Transparenţa proiectului Aşteptări nerealiste
Lipsa susţinerii conducerii
Modificarea cerinţelor şi a
specificaţiilor
Depăşirea programului
Depăşirea bugetului
32
Lally G., - Understanding Information Technology System Project Failure, School of Computing, Dublin
Institute of Technology, 2004.
39
Lipsa apartenenţei şi a
responsabilităţii
Prea multe interese investite
Nivelele de eşec sunt cumulative şi nivelul trei nu poate fi atins fără să fi trecut prin
nivele unu şi doi de eşec. La nivelul unu echipa de proiect ar trebui să fie conştientă de ruta
descendentă pe care o ia proiectul şi ar trebui să fie dispuşi să răspundă eficient schimbării
din mediu care a produs eşecul de nivel unu. Dacă proiectul se deplasează către nivelul doi,
devine evident că se află în mare dificultate şi ajunge în pericolul de a fi anulat, căzând astfel
la nivelul trei.
33
McManus, J., Wood-Harper, T., - Understanding the Sources of Information Systems Project Failure,
Management Services, publicat în http://findarticles.com/p/articles/mi_qa5428/is_200710/ai_n21295900, 2007
40
- cerinţe definite inadecvat sau deficitar;
- proiectare tehnică necorespunzătoare;
- instrumente de dezvoltare improprii;
- documentaţie pentru utilizatori inadecvată;
- planificare deficitară a testării;
- suport tehnic redus.
Există o accepţiune generală cu privire la faptul ca greşelile sunt acceptabile, pe când
eşecul nu e. Eşecul este considerat o eroare absolută de pe urma căruia nu se mai poate
recupera. S-a ajuns la concluzia că succesul a fost în mare parte datorat creării planurilor
pentru situaţii neprevăzute şi alternarea abordărilor în cazul proiectelor cu un grad ridicat de
risc.
41
Testarea este ultima ocazie pentru revizuirea cerinţelor sistemului, a specificaţiilor de
proiectare şi a programelor sursă.
Testarea este adesea văzută ca o modalitate de identificare, pe cât posibil şi cu un
efort minim, dacă un sistem software are erori şi dacă realizează ceea ce s-a cerut.
Testarea este un termen mai general care face referire la două noţiuni: verificarea şi
validarea34. Verificarea reprezintă procesul de evaluare a sistemului sau a unei componente
a lui, pentru a se determina dacă o anumită funcţie a fost implementată corect, oferind
răspunsul la întrebarea: „A fost construit bine sistemul?”. Validarea poate fi definită ca
procesul de evaluare a sistemului sau a unei componente a lui, pentru a se determina dacă
sunt respectate cerinţele funcţionale identificate în faza de anliză, răspunzând la întrebarea:
„A fost construit sistemul care trebuie?”
Este aproape imposibil să testezi un sistem atât de meticulos încât să se poată pretinde
că nu mai are nici o eroare. Adeseori, încercarea de a corecta o eroare poate genera o mulţime
de alte erori, care la rândul lor trebuie corectate şi testate exhaustiv. Este mult mai realist să
ne gândim la testare ca la un proces de găsire a erorilor. Când s-a ajuns la un stadiu în care se
pare ca sistemul merge perfect, asta nu ne duce neapărat cu gândul că nu mai există erori, ci,
pur şi simplu, înseamnă că acestea nu au fost încă descoperite.
De asemenea este greu de stabilit dacă un sistem face ceea ce trebuie. Testarea unui
sistem informaţional nu poate decât să confrunte un anume set de programe cu nişte
specificaţii de cerinţe exprimate prin diagrame de tip informal. Deşi nu este cel mai adecvat
instrument, procesul de testare rămâne principala unealtă pe care o folosesc dezvoltatorii
pentru a verifica dacă sistemul a fost bine construit.
În general, testarea implică elaborarea planurilor testelor, stabilirea standardelor
testării, precum şi încadrarea întregii activităţi de testare în ciclul de viaţă al sistemelor, în
vederea asigurării completitudinii planurilor de testare a programelor.
O prezentare schematică a procesului de testare este evidenţiată în următoare figură.
34
Oprea, D., Meşniţă, G., Dumitriu, F., Proiectarea sistemelor informaţionAle, Editura Universităţii „Al. Ioan
Cuza", 2006, Iaşi, p. 305.
42
Stabilirea
subset al
rezultatelor
rezultate
datelor de
aşteptate
intrare
rezultatele
testării Documentele
Strategia Compararea
P testării rezultatelor
testării
subset al
rezultate
datelor de
obişnuite
intrare
P
Sursă: Prelucrare după van Vliet, H., - Software Engineering. Principles and Practices, John Wiley &
Sons, LTD, Chichester, 2000, p. 401.
Fig. nr. 3.1 Schema generală a procesului de testare
Prima activitate se referă la definirea strategiei testării, care are drept scop stabilirea
setului minim al datelor de test care să satisfacă cerinţele testării, cuantificate prin
intermediul criteriilor de acceptabilitate.
După stabilirea criteriilor de acceptabilitate, se va trece la generarea setului de teste
care să răspundă acestor criterii, adică a unui subset al datelor de intrare în P, unde P
reprezintă obiectul supus testării.
Odată definit setul de teste, se va trece la determinarea rezultatelor aşteptate, pentru
fiecare test în parte şi apoi la execuţia componentei P. În final, se realizează compararea
rezultatelor obţinute în urma execuţiei cu cele aşteptate, eventualele diferenţe semnalând
existenţa unor erori, ce vor fi transmise spre rezolvare proiectanţilor sau programatorilor
responsabili.
Datele de test au menirea de a fi utilizate pentru a verifica dacă programul executat se
comportă aşa cum se doreşte şi dacă produce rezultatele aşteptate. Ele pot fi incluse în mai
multe categorii:
♦ date valide, care ar trebui să fie normale pentru sistem. Testele din această
categorie includ, de asemenea, condiţiile de limită, cum ar fi date atipice, dar care se
încadrează în limitele sistemului;
♦ date invalide, care nu ar trebui introduse în mod normal în sistem;
43
♦ date care în sine sunt valabile, dar nu sunt acceptabile în starea lor curentă;
♦ date de testare a performanţelor sistemului, cum ar fi viteza de răspuns sau
manipularea unui volum mare de date.
Activitatea de testare este ghidată după anumite principii35:
1. testele trebuie concepute de o asemenea manieră astfel încât să urmărească
respecterea cerinţelor utilizatorilor;
2. testele trebuie planificate cu mult timp inainte de începerea activităţii de testare;
3. testarea trebuie să înceapă cu detaliile, desfăşurată la nivelul modulelor
componente;
4. testarea exhaustivă nu este posibilă;
5. testarea trebuie să fie realizată de persoane care nu au fost implicate în fazele
anterioare de dezvoltare a sistemului, dacă se doreşte ca această activitate să fie cât mai
eficientă;
6. testarea nu vizează numai produsul final, ci şi rezultatele fazelor intermediareale
dezvoltării sistemului.
Acest ultim principiu trebuie consolidat deoarece, în mod tradiţional, în procesul de
dezvoltare a sistemului a sistemelor informaţionale, testarea a fost lăsată până la ultimele
stadii ale proiectului. Totuşi, activităţile de testare sau de verificare a calităţii, pot, şi ar trebui
realizate pe parcursul întregului proces de dezvoltare. De asemenea, înainte de proiectarea şi
implementarea sistemului este necesară verificarea cerinţelor sistemului. Prin această
activitate se urmăreşte dacă36: cerinţele sunt detaliate suficient, astfel încât să permită
proiectarea şi implementarea lor; cerinţele nu intră în contradicţie unele cu altele.
44
În fazele incipiente ale dezvoltării37 (ex.: analiză şi proiectare) activităţile de testare
sunt menite să stabilească, pe cât posibil, dacă cerinţele utilizatorilor au fost complet înţelese.
Tipul de testare ce poate fi utilizat în această etapă este de natură diferită faţă de cel care este
efectuat în timpul şi după implementare. Înaintea implementării, sunt testate idei; în timpul şi
după implementare este testat cod.
Cerinţele
clientului
Elaborare
Validare cerinţe
Sistem
Verificare
operaţional
Specificaţii
Instalare şi
Validare
întreţinere
Proiectare
Sistem
Testare
funcţional
Specificaţii
Implementare
tehnice
Sursă: Prelucrare după Britton, C., Doake, J. - Software System Development: A Gentle Introduction,
Fourth Edition, MacGraw-Hill Education, Glasgow, 2006, p. 176.
37
Britton, C., Doake, J. - Software System Development: A Gentle Introduction, Fourth Edition, MacGraw-Hill
Education, Glasgow, 2006, p. 175.
45
Fig. nr. 3.2 Ciclul de viaţă al sistemului – variantă simplificată
38
Mosley, D.J., - The Handbookof MIS Application Software Testing, Yourdon Press, Englewood Cliffs, New
Jersey, 1993, citat în Oprea, D., Meşniţă, G., Dumitriu, F., Proiectarea sistemelor informaţionAle, Editura
Universităţii „Al. Ioan Cuza", 2006, Iaşi, p.308.
46
Cele două tehnici de clasificare sunt relativ redundante, în sensul că majoritatea
tehnicilor de testare manuală se regăsesc şi în categoria tehnicilor de testare statică, atât timp
cât, în general, tehnicile manuale nu implică execuţia programelor39, iar tehnicile de testare
automată presupun, de cele mai multe ori, execuţia programelor, deci ele sunt considerate
tehnici de testare dinamică.
În funcţie de sursele de de informaţii utilizate pentru generararea cazurilor de test se
remarcă două abordări cărora le corespund două categorii de tehnici de testare: tehnici tip
“cutia neagră” şi tehnici tip ”cutia albă”40.
Testarea tip “cutia neagră”, numită şi funcţională, nu ia în considerare detaliile
procedurale ale componentei testate, ci vizează funcţiile acesteia. Se vor alege date de test
pentru fiecare funcţie în parte şi de interes vor fi doar datele de intrare şi rezultatele aşteptate
pentru fiecare funcţie.
Testarea tip “cutia albă”, numită şi structurală, presupune concentrarea atenţiei asupra
detaliilor procedurale ale componentei testate, pentru a putea determina cazurile de test şi
datele de intrare necesare. Ea implică identificarea cazurilor de test care permit execuţia
tuturor ramurilor programului, derivate din structurile de control alternative şi/sau repetitive.
Prin urmare, se va defini câte un caz de test pentru fiecare ramură logică a programului.
Testarea tip “cutie albă” urmăreşte generarea cazurilor de test, astfel încât să fie
asigurată:
♦ execuţia fiecărei structuri de control alternative pe ambele ramuri;
♦ execuţia fiecărei structuri de control repetitive, atât la numărul minim, cât şi la
numărul maxim al iteraţiilor, dar şi a unui intermediar;
♦ verificarea valididităţii structurilor de date interne ale programelor.
Testarea de tip “cutie neagră” urmăreşte să răspundă la următoarele întrebări:
♦ cum poate fi testată funcţionalitatea aplicaţiei?
♦ cum pot fi testate performanţele aplicaţiei?
♦ ce volum de date şi ce rată a intrărilor poate accepta sistemul?
39
van Vliet, H., - Software Engineering. Principles and Practices, Second Edition, John Wiley & Sons, LTD,
Chichester, 2000, p. 399, Oprea, D., Meşniţă, G., Dumitriu, F., Proiectarea sistemelor informaţionAle, Editura
Universităţii „Al. Ioan Cuza", 2006, Iaşi, p.308.
40
Oprea, D., Meşniţă, G., Dumitriu, F. - Op cit., p. 309.
47
♦ ce efect va avea asupra modului de funcţionare a sistemului a anumită combinaţie a
datelor de intrare?
De ce ar fi totuşi necesare ambele tipuri de testare?
Pentru că, pe de o parte, testarea exhaustivă a programelor nu este posibilă, deci nu
este suficientă testarea tip “cutie albă”, iar pe de altă parte, multe erori apar atunci când se
proiectează şi se implementează condiţii sau structuri de control care privesc cazurile
speciale ale funcţiei tratate şi care nu fac parte din fluxul logic principal al programului, deci
nici testarea de tip “cutie neagră” nu este suficientă.
De reţinut este faptul că testarea tip “cutie alb㔺i testarea de tip “cutie neagră” sunt
complementare şi pentru ca o testare să fie de bună calitate ambele trebuie să fie utilizate.
48
Fig. nr. 3.3 Tipuri de structuri de control repetitive
41
Oprea, D. – Analiza şi proiectarea sistemelor informţionale economice, Editura Polirom, Iaşi, 1999, p. 481.
49
În cadrul demersului de dezvoltare a sistemelor informaţionale, este necesară
definirea unui cadru de desfăşurare a fazei de testare concretizat prin intermediul strategiei
testării sistemelor informaţionale ce cuprinde diverse metode de elaborare a cazurilor de test
şi urmăreşte o succesiune de paşi foarte clar stabiliţi.
Indiferent de cine o elaborează, strategia testării trebuie să prezinte următoarele
caracteristici:
♦ procesul de testare trebuie să aibă o traiectorie ascendentă, adică să înceapă de jos,
de la nivelul modulelor, şi să se termine printr-o validare a sistemului informaţional ca un
întreg;
♦ tehnicile de testare utilizate trebuie să fie adaptate astfel încât să fie cele mai
adecvate în momentul respectiv al testării;
♦ realizarea testării trebuie să fie făcută fie de o echipă independentă, în cazul
proiectelor de mare amploare, fie de membrii echipei de dezvoltare a sistemului, în cazul
proiectelor de o mai mică amploare.
50
controlul logic necorespunzător al execuţiei. Testarea modulelor se încheie cu analiza
valorilor limită.
Un modul nu este de sine-stătător, el fie este apelat de module situate pe un nivel
ierarhic superior, fie apelează module de pe nivele ierarhice inferioare, făcând astfel
imposibilă testarea dinamică. Pentru a preîntâmpina acest incovenient, pentru fiecare modul
testat, se vor concepe două tipuri speciale de module42: subordonate (stub modules) şi
director (drive module).
Un modul director este văzut ca un program principal al cărui rol constă în a simula
condiţiile normale de exploatare a programului în care va fi executat modulul testat. Un
modul subordonat are rolul de a înlocui un modul invocat de modulul testat, fiind un
subprogram care va avea aceeaşi interfaţă ca cel pe care îl inlocuieşt, va realiza un minim de
prelucrări, va semnala faptul că a fost apelat, după care va reda controlul modulului testat.
42
Oprea, D., Meşniţă, G., Dumitriu, F. - Op cit., p. 318.
51
nivelul ierarhic imediat inferior modulului principal ca apoi să se continue cu fiecare nivel
ierarhic.
Testarea de jos în sus presupune construirea şi testarea treptată a programului,
începând cu modulele depe ultimele niveluri ierarhice.
În practică, cel mai adesea, acestea abordări sunt utilizate împreună, prezentând
principalul avantaj de a reduce numărul de module director şi subordonate care trebuiesc
create.
43
Pressman, R. S., - Software Engineering. A Practitioner’s Approach, Fifth Edition, McGraw-Hill Publishing
Company, London, 2000, p. 483-485.
52
care îl vor folosi. De asemenea, este necesar ca testele concepute să fie astfel elaborate încât
să exerseze funcţiile aplicaţiei care sunt dirijate către utilizator.
În decursul testării de acceptare se parcurg, de obicei, două etape: testarea alfa şi
testarea beta.
Testarea alfa presupune utilizarea unor date nereale, dar reprezentative şi se
efectuează de către client la sediul producătorului, sub monitorizarea echipei de dezvoltare a
sistemului.
Testarea beta presupune utilizarea unor date reale şi se efectuează la sediul clientului,
fără a benficia de monitorizarea echipei de dezvoltare.
44
Britton, C., Doake, J. – Op. cit. , p. 179.
53
Testarea manuală, mult timp văzută ca singura soluţie de a descoperi eventualele
defecte, întârzie foarte mult lansarea pe piaţă a produsului şi induce cheltuieli semnificative
mai ales în cazul descoperirii efectelor laterale – atât în procesul dezvoltării unei aplicaţii cât
şi în cazul de schimbări ulterioare.
Totodată procedurile de testare manuală, prin natura lor limitată, nu reuşesc să
descopere toate defectele şi nu au nici o şansă să simuleze condiţii de utilizare simultană,
intensivă, a unei aplicaţii.
Există numeroase căi de a îmbunătăţi procesul de testare, una dintre cele mai eficiente
fiind testarea automată. Testele automate execută o secvenţă de acţiuni fără intervenţie
umană şi pot simula utilizarea unei aplicaţii în condiţii de simultaneitate ridicată. În general,
majoritatea produselor necesită să fie testate de mai multe ori, pe mai multe platforme
software şi hardware, ca şi după schimbările ulterioare sau la lansarea unei noi versiuni de
produs. Prin folosirea testării automate, costurile testărilor repetate se reduce aproape la zero.
Testarea manuală şi testarea automată sunt mai degrabă două procese diferite, decât
două căi diferite de a executa acelaşi proces: dinamica lor este diferită precum şi modul de a
releva erorile45.
Testarea manuală este mai folositoare în situaţiile în care este nevoie urgent de
rezultatele unor tipuri de teste specifice şi limitate, când se doreşte ca timpul de feedback să
fie foarte scurt, iar costurile să fie relativ mici. Cum îmbunătăţirea calităţii produsului
implică costuri adiţionale pentru găsirea erorilor şi gestionarea acestora până la repararea lor
definitivă, testarea manuală s-a dovedit a fi în timp extrem de costisitoare. Testarea manuală
pe scară largă presupune alocarea de resurse hardware şi umanedestul de mari, iar riscul să
apară erori este amplificat de factorul uman.
Testarea automată necesită un efort iniţial mai mare pentru planificarea, organizarea
şi producerea testului, criteriul principal în obţinerea de rezultate bune fiind planificarea
atentă, amănunţită şi precisă a acestuia.
45
Eftimescu, D., Ilioiu, A., Introducere în testarea automată, 25 martie 2002,
http://www.securenet.ro/ro/publications/doc/testarea_automata.pdf, accesat în data de 13 martie 2008, la ora
23:12.
54
O alternativă interesantă este aşa-numita testare parţială. Această soluţie este
combinaţie de jumătate testare manuală şi jumătate testare automată, aceasta din urmă fiind
folosită numai acolo unde se pot obţine beneficii maxime.
Testarea automată se doreşte a fi soluţia ideală pentru reducerea timpului de
dezvoltare şi a costurilor. O echipă de testeri poate să pornească uneltele de testare automată,
să le lase să ruleze şi în final să colecteze şi analizeze rezultatele. Timpul este astfel mai bine
organizat şi poate fi petrecut pentru izolarea şi raportarea erorilor.
55
♦ rezultate mai consistente datorită repetabilităţii testelor;
♦ compararea automată a rezultatelor.
46
Eftimescu, D., Ilioiu, A., - Introducere în testarea automată, publicat în 25 martie 2002,
http://www.securenet.ro/ro/publications/doc/testarea_automata.pdf, accesat în data de 13 martie 2008, la ora
23:12.
47
Pettichord, B.,- Success with test automation, versiune din 28 iunie 2001,
http://www.io.com/~wazmo/succpap.htm, accesat în data de 15 martie 2008, la ora 13:22.
56
Analiza
Planificare Testare funcţională rezultatelor
test regresivă
Monitorizare
Servicii performanţe
Managementul Managentul
cerinţelor defectelor
Diagnosticarea Generare
Identificarea
cauzelor advertismente
problemei
principale în timp real
Sursă: Preluare după Eftimescu, D., Ilioiu, A., - Introducere în testarea automată, publicat în 25
martie 2002, http://www.securenet.ro/ro/publications/doc/testarea_automata.pdf, accesat în data de 13 martie
2008, la ora 23:12.
Sunt multe lucruri pe care uneltele de testare automată nu le pot face şi este important
să se cunoască aceste limitări pentru a alege pe cea mai potrivită. Un sistem de testare
automată nu poate spune când ceva "arată bine" pe ecran sau când o poză sau fereastră nu
este bine încadrată. De asemenea un test automat nu poate decide dacă logica programului
are lipsuri funcţionale decât în măsura în care au fost definite complet cerinţele aplicaţiei
respective. Unele teste, mai ales pentru aplicaţii mici şi pentru aplicaţii care se concentrează
57
mai ales pe grafică şi nu pe business logic, sunt mult mai uşor realizabile de către operatorul
uman decât de către un computer. De aceea trebuie alcătuit un plan bine definit al procedurii
de testare, când, unde şi în ce condiţii este fiabilă introducerea automatizării.
Testarea automată nu va putea înlocui în întregime testarea manuală şi nici nu trebuie.
Tester-ii pot să observe cum un utilizator poate interacţiona cu produsul, în timp ce un sistem
de testare automată nu poate întotdeauna să prevadă aceste acţiuni sau să găsească cea mai
bună cale de a le testa. Dacă sunt bine folosite, programele de testare automată măresc
considerabil productivitatea asigurării calităţii (Quality Assurance), economisesc costuri,
măresc semnificativ consistenţa şi calitatea produsului şi ajută la optimizarea şi accelerarea
procesului de dezvoltare al unei aplicaţii. Deja în ţările cu tradiţie în dezvoltarea de software
există cerinţa ca toate produsele software din sectorul militar, medical, guvernamental şi
financiar să fie testate cu unul din sistemele recunoscute de testare automată, iar rapoartele
automate asupra felului cum a decurs testarea constituie baza acceptării unei aplicaţii de către
client48.
48
Isenberg, H.M., - The practical organization of automated software testing, http://www.automated-
testing.com/PATfinal.htm, accesat în data de 30 aprilie, la ora 14:20.
49
Standardul IEEE 829 privind documentarea testării aplicaţiilor, http://www.acutest.co.uk/acutest/ieee829,
accesat în data de 17 mai 2008, la ora 21:20.
58
♦ specificaţiile cazurilor de test convertesc condiţiile de test în cazuri de test prin
adăugarea de date reale, condiţii predefinite şi rezultate aşteptate. Cazurile de test pot fi
elaborate când proiectul de testare este complet. Un caz de test poate acoperi una sau mai
multe condiţii de test prezente în plan şi ar trebui să includă:
- date precise necesare pentru execuţia testului formate dintr-o combinaţie de date
de intrare şi date rezultate din aplicaţie şi sistem;
- date de ieşire şi rezultate aşteptate;
- condiţii predefinite care vor fi punctul de start pentru fiecare test. O
caracteristică (cerinţă) din plan poate fi testată în una sau mai multe cazuri de test, şi un caz
de test poate verifica una sau mai multe cerinţe. Scopul este ca un set de cazuri de test să
verifice fiecare caracteristicădin plan cel puţin o dată;
♦ proceduri de testare care descriu în termeni practici cum sunt executate testele.
Sunt dezvoltate atât din specificaţiile de proiectare a testelor cât şi din specificaţiile cazurilor
de test. Documentul cu proceduri descrie fizic cum anume va efectua tester-ul testele,
structura fizică necesară şi paşii pe care trebuie să-i urmeze procedura;
♦ raportul de transmitere a obiectelor de test specifică care obiecte sunt
disponibile pentru testare. Acest document oferă detalii cu privire la etapele anterioare ale
testării. Include numele persoanei responsabile pentru fiecare obiect, locaţia sa fizică şi
statutul.
Execuţia testării. Programul care prevede ce cazuri de test sunt rulate şi când este
definit în palnul de testare, în timp ce rezultatele sunt înregistrate în jurmalul testării şi în
raportul incidentelor.
♦ jurnalul testării este o revizie de ansamblu care înregistraeză detaliile testării în
ordine cronologică. Acest jurnal consemnează ce cazuri de test au fost efectuate, ordinea
executării lor şi rezultatele testelor. Rezultatele sunt fie teste promovate, adică rezultatele
actuale şi cele aşteptate sunt identice, fie eşuate atunci când există discrepanţe. Dacă există o
discrepanţă sau mai multe sunt elaborate sau actualizate rapoartele incidentelor şi le sunt
menţionate identităţile în jurnal. Această evidenţă este importantă pentru că permite
verificarea progresului testării precum şi pentru că oferă informaţii valoroase cu privire la
identificarea cauzelor incidentelor;
59
♦ raportul incidentelor inventariază detaliile cu privire la orice comportamente şi
evenimente neaşteptate care necesită investigare. Raportul constă în amănuntele incidentului,
cum ar fi: rezultatele aşteptate, când a eşuat şi orice dovadă care să ajute la rezolvarea lor.
Această evidenţă trebuie să includă, dacă e posibil, o evaluare a impactului incidentului
asupra testării.
Raportarea testării constă într-un raport sumar al testării care să rezumeze şi să
evalueze testele. Eventual, testarea va fi finalizată conform criteriilor specificate în planul de
testare. Asta se întâmplă atunci când succesul sau eşecul sistemului se decide pe baza
rezultatelor. Raportul sumar înregistrează această informaţie.
60
CAPITOLUL 4: TESTAREA UNITARĂ A CLASELOR JAVA
FOLOSIND UTILITARUL JUNIT
O unitate reprezintă cea mai mică parte testabilă a unei aplicaţii. În programarea
procedurală o unitate poate fi: un program individual, o funcţie, o procedură, o pagină web,
un meniu etc., în timp ce în programarea orientată-obiect cel mai mic unit este întotdeauna
reprezentat de o clasă, care poate fi o clasă de bază sau o superclasă, o clasă abstractă,
derivată sau o clasă- copil.
În industria de dezvoltare software pentru platforma Java, cel mai răspândit şi
acceptat cadru de lucru pentru testare rămâne în continuare JUnit. Popularitatea acestuia se
datorează următoarelor caracteristici:
♦ simplu de integrat în mediile de dezvoltare consacrate (prin dependenţe directe de
proiect sau, cel mai adesea, prin plug-in-uri dedicate – care furnizează şi console
specializate);
♦ se dovedeşte uşor de înţeles, învăţat şi aplicat;
♦ se bazează pe şabloane de proiectare consacrate şi familiarea programatorilor
pentru platforma Java.
Testarea regresivă reprezintă aceea testare făcută cu scopul de a determina dacă
modificările făcute cu scopul de a corecta defectele nu presupun defecte suplimentare50.
Elementele de testare unitară din JUnit furnizează instrumente de înregistrare şi
repetare a testelor, pentru ca testele unitare să poată fi repetate uşor mai târziu (de regulă
când se schimbă o parte din sistem), astfel încât dezvoltatorul să fie convins ca noile
modificări nu au stricat vechea funcţionalitate.
50
*** - Testarea Unitară în BlueJ, http://www.bluej.org/tutorial/testing-tutorial-romanian.pdf, accesat în data de
15 martie 2008, la ora 17:39.
61
Scopuri ale framework-ului JUnit:
♦ Framework-ul trebuie să ne ajute să scriem teste utile;
♦ Framework-ul trebuie să ne ajute să creăm teste care să-şi menţină valoarea în
timp;
♦ Framework-ul trebuie să ne ajute să minimizăm costurile prin reutilizarea codului.
Printre avantajele folosirii utilitarului JUnit se numără51:
- se îmbunătăţeşte viteza de scriere a codului, concomitent cu creşterea calităţii
acestuia, deoarece prin scrierea testelor unitare se micşorează timpul de depanare, permiţând
refactorizarea mai uşoară, cu depistarea imediată a eventualelor erori inserate în codul
modificat;
- clasele de test sunt uşor de scris şi modificat pe măsură ce codul sursă se măreşte,
putând fi compilate împreună cu codul sursă al proiectului. Compilatorul testează sintaxa
codului sursă, în timp ce clasele de test validează integritatea codului;
- clasele de test JUnit pot fi rulate automat (în suită), rezultatele fiind vizibile imediat.
Se pot crea ierarhii de suite de test, care pot fi testate împreună sau separat, în funcţie de
cerinţete proiectului;
- clasele de test măresc încrederea programatorului în codul sursă scris şi îi permit să
urmărească mai uşor cerinţele de implementare ale proiectului, putând constitui şi o parte a
documentaţiei finale transmise clientului;
- JUnit este un utilitar gratuit, iar testele JUnit sunt scrise în Java şi beneficiază de
portabilitatea acestuia.
JUnit a fost proiectat pe baza a două modele (patterns): modelul Command şi modelul
Composite.
O clasă TestCase este un obiect command şi orice clasă ce conţine metode de test
trebuie să subclaseze clasa TestCase. O clasă TestCase se compune dintr-un număr de
metode publice testXXX(). Pentru a verifica rezultatele aşteptate şi cele curente se va invoca
una dintre metodele assert().
51
*** - Testarea unitară a claselor Java folosind utilitarul JUnit, http://inf.ucv.ro/~pm/junit/, accesat la data de
25 martie 2008, la ora 14:20.
62
În tabelul următor se regăsesc explicaţii asupra metodelor assertXXX utilizate de
către JUnit.
63
Fig. nr. 4.1 Diagrama de clase a pachetului junit.framework
64
4.3 Exemplu de testare folosind Junit
/*
* Get autorul cărţii.
*@return Autorul cărţii.
*/
public String getAutor() {
return autor;
}
/*
65
* Get preţul cărţii.
*@return Preţul cărţii.
*/
public double getPreţ() {
return preţ;
}
/*
* Testează dacă 2 obiecte carte sunt egale.
*@param obj The object
*@return true if object are equals.
*/
public boolean equals(Object obj) {
if (obj instanceof Carte) {
Carte b = (Carte) obj;
return b.getTitlu().equals(titlu);
}
return false;
}
}
66
package cărţi;
import java.util.*;
/*
* Constructorul coşului.
*/
public Coş() {
items = new ArrayList();
}
/*
* Get preţtotal al itemilor din coş.
*@return Preţ total.
*/
public double getTotal() {
Iterator i = items.iterator();
double total = 0.00;
while (i.hasNext()) {
Carte carte = (Carte) i.next();
total = total + carte.getPreţ();
}
return total;
}
/*
* Adaugarea unui item la coş.
*@param carte Cartea de adaugat.
*/
public void addItem(Carte carte) {
items.add(carte);
}
/*
* Inlăturarea unui item din coş.
*@param carte Cartea de şters.
*@throws Exception If cartea not found to coş.
*/
public void removeItem(Carte carte) throws Exception
{
if (!items.remove(carte)) {
throw new Exception("Cartea nu a fost găsită.");
}
}
/*
* Numărarea itemilor din coş.
*@return Numărul itemilor.
*/ 67
public int getItemCount() {
return items.size();
Un exemplu de clasă de test pentru coşul de cumpărături este prezentat în cele ce
urmează.
package cărţi;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/*
* Clasa coşTest este un exemplu de clasa TestCase.
*@created 20 mai 2008
*/
public class coşTest extends TestCase {
/*
* Obiect de tipul Coş ce va fi testat.
*/
private Coş coş;
/*
* Obiect de tipul Carte ce va fi testat.
*/
private Carte carte;
/*
* Constructor pentru o instanţă coşTest cu numele specificat.
*@param name Nume test.
*/
public cosTest(String name) {
super(name);
}
/*
* Iniţializează obiecte de test. Se apelează înaintea fiecărei metode de test.
*/
protected void setUp() {
coş = new Coş();
carte = new Carte("Unit testing", "John Smith", 35.95);
coş.addItem(carte);
}
/*
* Distruge obiectele testate. Se apelează după fiecare metodă de test.
*/
protected void tearDown() {
coş = null;
}
68
/*
* Testare inserare cărti in coş.
*/
public void testCarteAdd() {
Carte carte = new Carte("Extreme machines", "Thomas
Manner", 46.95);
coş.addItem(carte);
double PreţTotal = this.carte.getPreţ() + carte.getPreţ();
assertEquals(PreţTotal, coş.getTotal(), 0.0);
assertEquals(2, coş.getItemCount());
}
/**
* Test golire coş.
*/
public void testEmpty() {
coş.empty();
assertTrue(coş.isEmpty());
}
/*
* Testare scoatere cărţi din coş.
*@throws Exception Dacă nu există acea carte în coş.
*/
public void testCarteRemove() throws Exception
{
coş.removeItem(carte);
assertEquals(0, coş.getItemCount());
assertEquals(0.0, coş.getTotal(), 0.0);
}
/*
* Testare scoatere carte inexistentă din coş.
*/
public void testCarteNotFound()
{
try {
Carte carte = new Carte("Unit test", "John Scott", 35.95);
coş.removeItem(carte);
fail("Trebuie să semnaleze o excepţie");
}
catch (Exception w) {
}
}
/*
69
* Asamblează şi returnează o suită de teste pentru toate metodele de test din clasa
* de test
*@return O clasă Test nenulă.
*/
/*
* Metoda Main.
*@param args Argumentele din linia de comandă.
*/
public static void main(String args[]) {
junit.textui.TestRunner.run(suite());
junit.swingui.TestRunner.run(coşTest.class);
}
}
Se observă că clasa cosTest este extinsă din clasa TestCase. S-a iniţializat în metoda
setUp() un obiect coş de clasă Coş şi un obiect carte de clasă Carte, care a fost adăugat
obiectului coş.
În metoda testCarteAdd() s-a testat adăugarea unei cărţi în coş folosind metoda
assertEquals(double expected, double actual, double delta), delta fiind diferenţa acceptată
pentru comparaţii între două valori de tip double, precum şi incrementarea numărătorului de
itemuri din coş cu metoda assertEquals(int expected, int actual).
Metoda testEmpty() testează golirea coşului după apelul metodei empty(). S-a utilizat
metoda assertTrue(boolean condition) care afişează un mesaj de eroare în cazul în care
condiţia este falsă.
Metoda testCarteRemove() testează operaţia de eliminare a unui obiect Carte din
coşul coş. Coşul are iniţial un obiect Carte (inserat prin metoda setUp()) care este eliminat
din coş cu metoda removeItem(). Se testează ca numărul de obiecte Book rămase să fie zero.
Metoda testCarteNotFound() testează inexistenţa în coş a unui obiect Carte care nu a
fost adăugat anterior, în caz de eroare se aruncă o excepţie prin apelul metodei fail().
JUnit furnizează atât o interfaţă text pentru utilizator, cât şi o interfaţă grafică, fiecare
indicând numărul de teste, erorile şi starea finală a testului.
Interfata text (junit.textui.TestRunner) afişează câte un punct pentru fiecare test
efectuat şi un OK dacă toate testele au fost trecute cu succes sau mesaje de eroare dacă unul
dintre teste a eşuat.
70
Fig. nr. 4.2 Mesajul afişat în consolă în cazul în care toate testele au fost trecute cu succes
Fig. nr. 4.3 Mesajul afişat în consolă în cazul în care unul din teste a eşuat
71
Fig. nr. 4.4 Fereastră afişată în cazul în care toate testele au fost trecute cu succes
În cazul în care unul din teste a eşuat, va apărea una din ferestrele următoare.
Fig. nr. 4.5 Fereastră afişată în cazul în care coşul cu cărţi este vid, deşi el trebuia să mai
conţină o carte
72
Fig. nr. 4.6 Fereastra afişată în cazul în care coşul conţine mai puţine cărţi decât se aşteaptă
Fig. nr. 4.7 Fereastra afişată în cazul în care coşul verificat nu este gol, deşi trebuia să fie
73
Fig. nr. 4.8 Fereastra afişată în cazul în care se încearcă înlăturarea unei cărţi inexistente în coş
Se pot crea suite de test ce includ o ierarhie de clase de test sau alte suite.
Etapele creării manuale a unei suite de test sunt:
♦ se creează o clasă cu numele AllTests;
♦ în aceasta clasă se construieste o metodă statică care va returna un obiect
TestSuite. Această metodă se implementează astfel:
- se creează un obiect TestSuite apelând constructorul de forma TestSuite (String);
TestSuite suităTeste = new TestSuite („Suită de teste”);
- se adaugă testele unei clase TestXXX, utilizând metoda addTestSuite(Class).
Această metodă va utliza reflexivitatea pentru a studia metodele clasei furnizate ca şi
parametru.
suităTeste.addTestSuite (Coş.class) ;
- se adaugă testele unei alte clase de teste, şi asa mai departe;
- metoda va returna obiectul astfel creat.
package cărţi;
import junit.framework.Test;
import junit.framework.TestSuite;
74
public class AllTests {
/**
* Asamblează şi returnează o suită de teste
* Se pot adăuga teste noi.
* @return O suită de teste.
*/
/*
* Lansează in execuţie suita de teste.
*/
public static void main(String args[]) {
junit.swingui.TestRunner.run(AllTests.class);
}
}
Ca şi variantă, se poate adăuga treptat câte o metodă de test.
package cărţi;
import junit.framework.Test;
import junit.framework.TestSuite;
/*
75
* Lansează in execuţie suita de teste.
*/
public static void main(String args[]) {
junit.swingui.TestRunner.run(AllTests.class);
}
}
Fig. nr. 4.9 Fereastra afişată pentru alegerea tipului de test dorit
76
Este preferabil să se creeze teste pentru toate metodele de care dispune clasa. Se
bifează metodele pentru care se vor crea teste.
În acest meniu apar şi metodele clasei Object. Dacă testarea vizează o clasă derivată,
atunci în acest meniu va apare şi clasa părinte a clasei care urmează să fie testată.
Fig. nr. 4.10 Meniul de selecţie a metodelor pentru care se vor crea teste
77
- se va verifica faptul că procesul de construire (build) al proiectului include
compilarea tuturor testelor, pentru a se asigura că testele apelează ultima variantă a codului
sursă;
- se va alterna scrierea codului sursă cu operaţii de testare pentru a se depista rapid
eventuale bug-uri;
- se vor scrie teste pentru zonele cu risc maxim de erori;
- dacă un bug este raportat în aplicaţia productivă, se va scrie un test care expune
acest bug;
- se vor scrie teste unitare înaintea scrierii codului si se va scrie cod nou numai când
un test eşuează.
78
CONCLUZII
79
Dezvoltarea sistemelor informaţionale trebuie percepută ca o schimbare
multidimensională de ordin social, deoarece ea include multiple aspecte culturale, morale,
politice şi sociale.
Un ţel de urmărit în cadrul procesului de dezvoltare a sistemelor informaţionale îl
reprezintă creare unor sisteme care să fie în permanentă evoluţie, care să poată fi adaptate,
sau chiar reinventate, astfel încât să întâmpine schimbările inevitabile care vor apărea,
mergând pe principiul că cerinţele nu trebuie pur şi simplu să fie rezolvate, ci trebuie să se
prevadă evoluţia lor.
Un parametru prin care poate fi cuantificat succesul unui proiect îl reprezintă măsura
în care s-a apropiat acesta de atingerea obiectivelor sale, dara cu respectarea parametrilor
referitori la buget şi durată. Aceste trei elemente: performanţe, cost şi durată sunt cunoscute
sub denumirea de tripla constrângere şi reprezintă echilibrul pe care trebuie să-l urmărească
orice proiect pentru a fi considerat de succes.
80
Bibliografie
Cărţi
1. Andone I., Mockler R. J., Dologite D. G., Ţugui Al., - Dezvoltarea sistemelor inteligente în
economie. Metodologie şi studii de caz, Editura Economică, Bucureşti, 2001.
2. Boehm, B.; Turner R., - Balancing Agility and Discipline: A Guide for the Perplexed,
Addison-Wesley, Boston, 2004.
3. Britton, C., Doake, J. - Software System Development: A Gentle Introduction, Fourth Edition,
MacGraw-Hill Education, Glasgow, 2006.
4. El Emam, K. The ROI from Software Quality. Auerbach Publications, Boca Raton, Florida
2005.
5. Fotache D., Hurbean L., - Soluţii informatice integrate pentru gestiunea afacerilor – ERP,
Editura Economică, Bucureşti, 1999.
6. Goulielmos, M., - Outlining organisational failure in information systems development,
Disaster Development and Management Journal, Vol. 12, No. 4, 2003.
7. Lally G., - Understanding Information Technology System Project Failure, School of
Computing, Dublin Institute of Technology, 2004.
8. Larman, C.; Basili V. R., - Iterative and Incremental Development: A Brief History, IEEE
Computer Society, iunie 2003.
9. Lungu I., Gh. Sabău, C. Bodea, Tr. Surcel, - Sisteme informaţionale pentru conducere, Ed.
SIAJ, 1994.
10. Munteanu A. - Auditul sistemelor informaţionale, Editura Polirom, Iaşi, 2001.
11. Oprea, D. – Analiza şi proiectarea sistemelor informţionale economice, Editura Polirom, Iaşi,
1999.
12. Oprea D., Airinei D., Fotache M., - Sisteme informţionale pentru afaceri, Editura Polirom,
Iaşi, 2002.
81
13. Oprea, D., Meşniţă, G., Dumitriu, F., - Analiza sistemelor informaţionle, Editura Universităţii
„Al. Ioan Cuza", 2005, Iaşi.
14. Oprea, D., Meşniţă, G., Dumitriu, F., Proiectarea sistemelor informaţionle, Editura
Universităţii „Al. Ioan Cuza", 2006, Iaşi.
15. Pressman, R. S., - Software Engineering. A Practitioner’s Approach, Fifth Edition, McGraw-
Hill Publishing Company, London, 2000.
16. Ravichandran, T., Rai, A. - Total quality management in information systems development:
Key constructs and relationships, apărut în Journal of Management Information Systems,
2000.
17. Sommerville, I., - Software engineering, 8th edition, Addison Wesley, Boston, 2007.
18. Stair, R., Reynolds, G., - Principles of Information Systems, Seventh Edition, Thomson
Course Technology, 2006, Boston.
19. Whitmire, S.A, - Object-OrientedDesign Measurement, John Wiley & Sons, Inc., New York,
1997.
20. Yeo, K. T., - Critical failure factors in information system projects, International Journal for
Project Management, Vol. 20, No. 3, 2002.
Referinţe Internet
1. Ambler, S., - Scaling Scrum - Meeting Real World Development Needs,
http://www.drdobbsonline.net/architect/207100381, accesat în aprilie 2008.
2. Bogue R., - Anatomy of a Software Development Role: The Good, the Bad, the Ugly,
http://www.projectmanagerplanet.com/tools/article.php/, accesat în 25 martie 2008.
3. Eftimescu, D., Ilioiu, A., Introducere în testarea automată, http://www.securenet.ro/ro/
publications/doc/testarea_automata.pdf, accesat în data de 13 martie 2008.
82
4. Gibson, Diane L., Goldenson, Dennis R., Kost, Keith, Perfomance Results of CMMI. Based
Process Improvement, raport tehnic Software Engineering Institute, Carnegie Mellon, august
2006, http://www.sei.cmu.edu/, accesat la data de 27 aprilie 2008.
5. Isenberg, H.M., - The practical organization of automated software testing,
http://www.automated-testing.com/PATfinal.htm, accesat în data de 30 aprilie 2008.
6. McManus, J., Wood-Harper, T., - Understanding the Sources of Information Systems Project
Failure, http://findarticles.com/p/articles/mi_qa5428/is_200710/ai_ n21295900, accesat în
data de 22 martie 2008.
7. Papadimoulis, A., The Great Pyramid of Agile, http://thedailywtf.com/Articles/The-Great-
Pyramid-of-Agile.aspx, accesat în data de 13 aprilie 2008.
8. Pettichord, B.,- Success with test automation, http://www.io.com/~wazmo/succpap.htm,
accesat în data de 15 martie 2008.
9. Richard, L.K., - Testing Requirements, www.gantthead.com, accesat în data de 19 mai 2008.
10. Stanciu V., Sisteme informaţionale de gestiune, Tribuna Economică Bucureşti, 1999,
www.tribunaeconomica.ro, accesat în data de 22 martie 2008.
11. Verton, D., - Senate votes to kill funds for antiterror data mining, Computerworld, 21 iulie
2003, accesat la www.computerworld.com, în data de 13 mai 2008.
12. *** - Testarea Unitară în BlueJ, http://www.bluej.org/tutorial/testing-tutorial-romanian.pdf,
accesat în data de 15 martie 2008.
13. *** - Testarea unitară a claselor Java folosind utilitarul JUnit, http://inf.ucv.ro/~pm/junit/,
accesat la data de 25 martie 2008.
14. ***http://www.acutest.co.uk/acutest/ieee829, accesat în data de 17 mai 2008.
15. ***http://www.agilealliance.com, accesat în data de 30 aprilie 2008.
16. ***www.agilemanifesto.org, accesat în 29 aprilie 2008.
17. ***http://facultate.regielive.ro/cursuri/contabilitate/proiectare_a_sistemelor_contabile-
11687.html, accesat în 15 februarie 2008.
18. ***http://www.sei.cmu.edu/cmmi/general/index.html, accesat la data de 30 aprilie 2008.
83