cuprins - profs.info.uaic.roadiftene/licenta/dizertatie2014_ciofumirela.pdf · suficient de...

47
- 5 - Cuprins Introducere ............................................................................................................................ - 7 - 1. Introducere în Agile ....................................................................................................... - 8 - 1.1 Waterfall (metodologia în cascadă sau tradiţională) ................................................... - 8 - 1.2 Prototipul .............................................................................................................. - 10 - 1.3 Modelul în spirală................................................................................................. - 10 - 1.4 Agile ..................................................................................................................... - 12 - 1.5 Agile vs Waterfall pro şi contra ........................................................................ - 14 - 1.6 Ce alegem ............................................................................................................. - 15 - 2. Metode încadrate în categoria Agile ............................................................................ - 17 - 2.1 Scrum ........................................................................................................................ - 18 - 2.1.1 Roluri în Scrum ............................................................................................. - 19 - 2.2 Extreme programming (XP) ................................................................................. - 21 - 2.2.1 Termeni folosiţi în Extreme Programming......................................................... - 21 - 2.2.2 Avantaje şi dezavantaje ...................................................................................... - 23 - 2.3 Test Driven Development .................................................................................... - 24 - a. Adaugarea unui nou test ....................................................................................... - 24 - b. Rularea testelor scrise anterior ............................................................................. - 25 - c. Implementarea funcţionalităţii ............................................................................. - 25 - d. Rularea testelor scrise la primul pas ..................................................................... - 25 - e. Refactorizarea codului.......................................................................................... - 25 - 2.4 Continuos Integration ........................................................................................... - 27 - a. Integrarea trebuie făcută măcar zilnic .................................................................. - 27 - b. Trebuie să existe un singur server de control al versiunilor ................................. - 27 -

Upload: others

Post on 08-Sep-2019

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 5 -

Cuprins

Introducere ............................................................................................................................ - 7 -

1. Introducere în Agile ....................................................................................................... - 8 -

1.1 Waterfall (metodologia în cascadă sau tradiţională) ................................................... - 8 -

1.2 Prototipul .............................................................................................................. - 10 -

1.3 Modelul în spirală................................................................................................. - 10 -

1.4 Agile ..................................................................................................................... - 12 -

1.5 Agile vs Waterfall – pro şi contra ........................................................................ - 14 -

1.6 Ce alegem ............................................................................................................. - 15 -

2. Metode încadrate în categoria Agile ............................................................................ - 17 -

2.1 Scrum ........................................................................................................................ - 18 -

2.1.1 Roluri în Scrum ............................................................................................. - 19 -

2.2 Extreme programming (XP) ................................................................................. - 21 -

2.2.1 Termeni folosiţi în Extreme Programming ......................................................... - 21 -

2.2.2 Avantaje şi dezavantaje ...................................................................................... - 23 -

2.3 Test Driven Development .................................................................................... - 24 -

a. Adaugarea unui nou test ....................................................................................... - 24 -

b. Rularea testelor scrise anterior ............................................................................. - 25 -

c. Implementarea funcţionalităţii ............................................................................. - 25 -

d. Rularea testelor scrise la primul pas ..................................................................... - 25 -

e. Refactorizarea codului.......................................................................................... - 25 -

2.4 Continuos Integration ........................................................................................... - 27 -

a. Integrarea trebuie făcută măcar zilnic .................................................................. - 27 -

b. Trebuie să existe un singur server de control al versiunilor ................................. - 27 -

Page 2: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 6 -

c. Build-ul să fie testabil automat............................................................................. - 27 -

d. Existenţa unei maşini de integrare ....................................................................... - 27 -

e. Testele să se facă pe o copie identică a maşinilor de producţie ........................... - 28 -

f. Deploymentul automat ......................................................................................... - 28 -

2.5 Kanban ................................................................................................................. - 30 -

3. Estimarea în Agile ....................................................................................................... - 32 -

2.1 Estimarea pe zile ....................................................................................................... - 33 -

2.2 Estimarea folosind puncte ......................................................................................... - 34 -

4. Aplicaţia Scrum Planner pentru managementul estimărilor ........................................ - 36 -

4.1 Problema.................................................................................................................... - 37 -

4.2 Soluţia propusă ..................................................................................................... - 38 -

4.3 Aplicaţia Scrum Planner............................................................................................ - 39 -

4.3.1 Termeni folosiţi .................................................................................................. - 39 -

4.3.2 Skills – calităţile dezvoltatorului software .................................................... - 40 -

4.3.3 Productivity index (indexul de productivitate) ............................................. - 41 -

4.3.4 Estimated Hours şi Real Hours ..................................................................... - 42 -

4.3.5 Auto-atribuirea .............................................................................................. - 43 -

4.3.6 Tehnologii folosite ........................................................................................ - 48 -

4.3.7 Dezvoltări viitoare ........................................................................................ - 48 -

Concluzie ............................................................................................................................ - 49 -

Bibliografie ......................................................................................................................... - 50 -

Page 3: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 7 -

Introducere

Această lucrare îşi propune să sintetizeze metodologiile de dezvoltare software

încadrate în categoria Agile, care se bucură în ziua de astăzi de o creştere continuă în

popularitate în rândul companiilor de pe piaţa IT. Lucrarea descrie punctele comune şi

punctele diferite ale fiecărei metodologii în parte, precum şi recomandări pro şi contra

folosirii lor în diverse proiecte, în procesul de dezvoltare software.

Prin lucrare nu se doreşte incurajarea unui anumit tip de metodologie în detrimentul

celorlalte, ci sublinierea faptului că ele pot fi folosite împreună pentru a obţine cele mai

bune rezultate în procesul de dezvoltare. Lucrarea incurajează cunoaşterea acestor

metodologii şi recomandă alegerea uneiasau mai multe în funcţie de proiectul care va fi

dezvoltat, luând în calcul recomandările prezentate.

În lucrare se propune un nou mod de abordare a estimărilor în echipele Agile, contrar

frameworkurilor şi aplicaţiilor de estimare care există pe piaţă în ziua de azi, respectiv

estimarea relativă la resursele folosite, şi anume programatorii.

Deoarece fiecare programator, în funcţie de experienţă şi alti factori, va rezolva

anumite taskuri într-un interval diferit de timp faţă de un alt programator, cu un alt nivel

de experienţă şi cunoaţtere a tehnologiilor, aplicaţia propusă, Scrum Planner, oferă o

imagine diferită estimărilor, în funcţie de programatorul care va rezolva taskul. De

asemenea propune un algoritm de atribuire automată a taskurilor, astfel ca întârzierile

intr-un proiect să fie minimizate.

Ideea poate fi extinsă şi la altfel de echipe IT, pretându-se foarte bine şi echipelor de

testare, care lucrează în acelaşi timp cu echipele de dezvoltare, deoarece aceleaşi diferenţe

între un junior şi senior, de exemplu, vor exista şi în echipele de testare.

Page 4: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 8 -

1. Introducere în Agile

Una dintre primele probleme care apar la inceputurile unui nou proiect software este

discuţia despre ce metodologie de dezvoltare se va folosi. Acest aspect este o decizie

suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil

sau chiar imposibil sa fie schimbată în decursul proiectului, fără a afecta planificarea

iniţială. Astfel, se remarcă mai multe categorii mari de metodologii de dezvoltare

software:

a. Waterfall

b. Prototipul

c. În spirală

d. Agile

Dintre acestea, cele mai folosite în ziua de astăzi ar fi Waterfall şi Agile, cu tendinţa

metodologiei Agile de a câştiga teren faţă de clasicul Waterfall, celelalte reprezentând o

pondere mai mică în ingineria software, fiind în schimb folosite în alte domenii.

1.1 Waterfall (metodologia în cascadă sau tradiţională)

Se remarcă printr-un proces iterativ linear, cu un număr fixat de etape, în care startul

unei etape are loc numai dupa terminarea etapei anterioare si nici una din etape nu va fi

repetată ulterior.

Prima prezentare conţinând etape similare a fost ţinută in 1956 de către Herbert

Benington, în cadrul Simpozionului pentru metode de programare avansată. În care acesta

descria procesul folosit pentru dezvoltarea proiectului SAGE (Semi Automated Ground

Environment), proiect pentru apărarea aeriană automata a Americii de Nord.

Prima prezentare formală a procesului a avut loc de fapt mult mai târziu, în 1970, într-

un articol al cărui autor a fost Winston Royce, acesta nefolosind termenul „waterfall” în

prezentarea sa. Royce l-a prezentat ca pe un model intens folosit, care este greşit si

nefuncţional.

Page 5: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 9 -

Termenul de „waterfall” sau „cascadă” a apărut mai târziu, datorită definiţiei etapelor,

în stil „top-down”, fără elemente repetitive, ca o cascadă care mereu merge în jos, iterativ,

niciodată nu urcă şi nu repetă etapele anterioare.

În general, etapele sunt mai multe sau toate din lista următoare, ca în Figura 1 de mai

jos [13]:

- Analiza cerinţelor împreună cu clientul

- Designul sau arhitectura sistemului

- Implementarea proiectului, alcătuită din 2 subetape:

o Scrierea codului de către dezvoltatori, din care rezultă proiectul software

o Integrarea părţilor componente în sistemul nou sau existent

- Verificarea sistemului, care include testarea si rezolvarea eventualelor defecte

- Instalarea proiectului software pentru client

- Mentenanţa

Figura 1: Etapele metodologiei Waterfall

Page 6: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 10 -

Acestui tradiţional model de dezvoltare i s-au adăugat modele modificate de-a lungul

anilor, în funcţie de necesităţile de moment, păstrând totuşi neschimbate conceptele de

bază.

1.2 Prototipul

Acest modelul de dezvoltare implică definirea iniţială a unui model sau tipar, numit

prototip, după care se va ghida întreg procesul de dezvoltare software, şi care poate fi

folosit în testare sau ca demonstraţie pentru client [8].

Modelul acesta a fost derivat din Waterfall, în acele cazuri când cerinţele iniţiale nu

sunt foarte clare. În timpul procesului de construire a acestui model, clientul va oferi

feedback din când în când, acest fapt conducând la obţinerea acestui prototip. Având

confirmarea de la client la terminarea construcţiei acestui prototip, este posibilă editarea

unui document de specificaţii. Folosind acesta, se poate începe dezvoltarea software a

produsului final, folosind în general Waterfall.

1.3 Modelul în spirală

Modelul spirală combină aspecte ale modelului Waterfall şi Prototip. De unde îi vine

şi numele, în acest tip de metodologie software procesele vor fi aşezate în formă de

spirală, ca în Figura 2 [14]:

Page 7: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 11 -

Figura 2: Cadranele modelului în spirală

Această metodologie a fost descrisă pentru prima oară de către Barry Boehm în 1986.

Este folosită în general în sistemele cu grad ridicat de risc. În general, fiecare buclă a

spiralei reprezintă o fază a dezvoltării, iar fiecare fază va fi alcătuită din 4 paşi [7],

descrişi mai jos:

1. Se determină obiectivele (unde trebuie să se ajungă) şi constrângerile datorate

costurilor, tehnologiei disponibile etc.

2. Se analizează riscurile şi alternativele. Orice problemă legată de tehnologie se va

soluţiona pe parcursul acestei faze. Scopul principal este minimizarea riscurilor

ulterioare.

3. Se realizează dezvoltarea software şi testarea, dacă este cazul. În acest pas este

posibilă folosirea unei alte metodologii de dezvolate, cum ar fi Waterfall.

4. Se planifică faza următoare.

Page 8: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 12 -

1.4 Agile

Datorită greutăţilor întâmpinate în timpul dezvotării proiectelor folosind „waterfall”, a

fost prezentată in 2001 o metodologie numită generic „Agilă”, bazată pe etape

incrementale si repetitive, în care cerinţele se dezvoltă pe parcurs, având suportul întregii

echipe şi de asemenea axându-se pe colaborarea intensă între membrii echipei.

Termenul „agile” a fost prezentat în 2001 de către autorii „Agile Manifesto” [1], o

proclamaţie a unor valori cheie si principii de dezvoltare, care are 17 semnatari.

Cele 4 valori [1] cheie prezente în Manifesto încurajează:

1. Indivizii si interacţiunea dintre ei faţă de unelte si procese

2. Software funcţional peste documentaţie foarte completă si complexă

3. Colaborarea cu clientul peste negocierea de contracte

4. Reacţie la schimbare în schimbul urmăririi unui plan

Cele 12 principii [1] ale Agile sunt:

1. Satisfacerea dorinţelor clientului încă de la inceputurile proiectului si livrarea

continuă de muncă de calitate

2. Împărţirea sarcinilor mari în componente mici care se pot rezolva rapid

3. Recunoaşterea faptului că munca de calitate rezultă din echipe independent organizate

4. Alocarea de mediu şi suport necesar indivizilor motivaţi si increderea că aceştia işi

pot duce munca la bun sfârşit

5. Crearea de procese care promovează efortul susţinut

6. Menţinerea unui ritm constant al muncii

7. Adaptarea rapidă la cerinţe care se schimbă, chiar şi spre sfârşitul proiectului

8. Realizarea unor şedinţe zilnice a membrilor echipei împreuna cu cei responsabili de

business pe tot parcursul proiectului

9. La intervale regulate, nevoia echipei de a reflecta cum pot deveni mai buni în ceea ce

fac şi schimbarea comportamentului pentru realizarea acestuil lucru

10. Măsurarea progresului prin cantitatea terminată din proiect

11. Incercarea constantă de a atinge perfecţiunea

Page 9: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 13 -

12. Valorificarea schimbărilor pentru avantaje competitive

Figura 3: Agile Manifesto – pagina principală [1]

După cum se poate observa, aceste principii sunt foarte generale si se pot folosi

practic în mult mai multe domenii, nu doar în dezvoltarea de software, iar autorii acestui

manifest doresc introducerea si familiarizarea mai multor industrii cu aceste concepte

utile si principii.

O parte din aceşti autori au decis formarea „alianţei Agile” [2], o organizaţie non

profit care promovează şi astăzi devoltarea Agile, conform principiilor si regulilor de mai

sus. Deşi iniţial nu foarte cunoscută, metodologia a inceput să prindă contur pe parcursul

ultimilor ani, în 2005 fiind publicat un addendum la Agile Manifesto, numit „Declaraţia

de Independenţă”, un set de 6 principii de management în dezvoltarea agilă de software,

iar în 2009 a fost publicat „Software Craftmanship Manifesto”, un ghid extins pentru

Page 10: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 14 -

dezvoltare agilă, care se concentrează pe calităţile codului şi proiectului final, decât pe

partea financiară rezultată din proiectele software.

Figura 4: Agile Alliance logo [2]

1.5 Agile vs Waterfall – pro şi contra

Deşi încep sa fie din ce in ce mai populare, metodologiile Agile nu au luat total locul

metodologiilor tradiţionale si cel mai probabil pe viitor vor fi folosite ambele în proporţii

variabile.

Printre calităţile Agile putem număra în primul rând flexbilitatea şi capacitatea de

schimbare, chiar foarte târziu în procesul de dezvoltare [6]. Modelul este extrem de

flexibil, inginerii software lucrând la module mici, discutând continuu cu clientul, şi cu

certitudinea că acele module vor fi de calitate şi asa cum se asteaptă clientul în momentul

în care sunt livrate. Benficiile cele mai mari ale Agile se pot vedea atunci când imaginea

de final nu este foarte bine definitiă şi clientul vede pe parcurs ce anume doreşte,

clarificându-se foarte mult cerinţele cu cât proiectul se apropie de sfârşit. În acelaşi timp,

acest model încurajează foarte mult comunicarea, atat client-dezvoltator, cât şi in cadrul

echipei de dezvoltare, mici module fiind lucrate de programatori simultan şi integrate la

sfârşit.

Dezavantajele acestei metologii ar fi dificultatea estimării atat a timpului, cât şi a

bugetului final, datorită lipsei unui plan concret total al proiectului. De asemenea,

Page 11: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 15 -

comunicarea intensivă descrisă mai sus poate consuma suficient de mult timp, probabil

mai mult decât în metoda Waterfall [4], dar în acest caz avantajele sunt mai importante

decat dezavantajele.

Waterfall vine şi ea cu o serie de avantaje, printre care numărăm un plan clar de lucru

la inceputul proiectului şi posibilitatea unei estimări mai acurate [4]. Timpul de lucru si

bugetul sunt mult mai bine planificate, ceea ce este de obicei pe placul clienţilor.

Deoarece se pune accent pe documentare si planificare, înlocuirea unui individ în timpul

procesului de dezvoltare nu este foarte dificilă, o persoană nouă putând cu uşurinţă să ia

locul altcuiva în timpul procesului de dezvoltare.

Pe de altă parte, dezavantajele acestei metode numără rigiditatea si lipsa de

flexibilitate pe parcursul întregului proces. Etapele sunt bine fixate de la inceput, estimate

destul de exact, iar schimbările în timpul procesului pot fi foarte dificile şi necesită

eforturi considerabile. De asemenea, în cazul metodologiei clasice tradiţionale de tip

cascadă, testarea de orice fel are loc destul de târziu în cadrul proiectului, ceea ce face ca

soluţionarea problemelor majore găsite să necesite timp şi buget, de multe ori în afara

celor planificate iniţial.

1.6 Ce alegem

Alegerea unei metodologii la începutul proiectului poate fi dificil, întrucât este clar că

nici una nu este potrivită pentru toate cazurile şi toate tipurile de proiecte. Susţinătorii

ambelor metodologii vor exista mereu şi asta deoarece fiecare are avatanje considerabile

şi se poate plia pe anumite tipuri de proiecte mai bine decât opusa ei.

În general, Waterfall tinde să fie mai utilă atunci când se estimează multe schimbări

pe parcursul proiectului, când se cunoaşte bugetul clientului de la început şi ceea ce se

doreşte a se obţine prin proiect este foarte clar. Este mai potrivită în cazul proiectelor

foarte mari, care se întind pe o durată mare de timp şi implică echipe mari, în care multă

interacţiune cu clientul ar încetini foarte mult procesul, sau echipe distribuite în mai

multe ţări, eventual cu fuse orare foarte diferite.

Page 12: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 16 -

Agile tinde să fie potrivită pentru proiecte mai mici, cu tendinţe de schimbare pe

parcurs, echipe mai mici şi independente, de obicei localizate în acelaşi loc.

În multe cazuri, procesul de dezvoltare începe Waterfall, ca imagine de ansamblu, şi

continuă Agile pe diverse module mai mici, în momentul când apare nevoia de detalii

insuficient descrise de cerinţe sau omise. Nu există vreo abordare lege, ci se alege în

funcţie de proiect, echipă şi experienţa pe aceste metodologii a membrilor ei.

Page 13: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 17 -

2. Metode încadrate în categoria Agile

Există multe metode de dezvoltare clasificate ca fiind Agile, majoritatea fiind bazate

pe interacţiune intensă între membrii echipei şi adaptabilitate crescută la schimbările ce

au loc pe parcursul dezvoltării proiectului.

Majoritatea metodelor se bazează pe împărţirea proiectului în mici module, uşor de

dezvoltat şi gestionat fără planificarea lor intensivă. Modulele se dezvoltă în iteraţii,

uneori numite sprinturi, care pot dura de la o săptămână până la două luni, dar preferabil

cât mai puţin pentru a avea certitudinea livrării unui produs calitativ, precum şi a lăsa loc

shimbărilor rapide ce pot avea loc. În timpul acestor iteraţii, este esenţială colaborarea

între membrii echipei, pentru a fi siguri că se realizează în mod corect toate etapele

dezvoltării: planificarea, analiza cerinţelor, arhitectura modulului, implementarea,

testarea.

O caracteristică destul de comună a metodelor Agile este prezenţa unor şedinţe

zilnice, în care fiecare membru al echipei descrie ce a făcut în ziua anterioară, ce are de

făcut în continuare şi ce probleme întâmpină, pentru ca ceilalţi mebri al echipei să îl poată

eventual ajuta şi ghida spre soluţionarea problemelor.

Este necesar ca echipele să fie alcătuite din indivizi cu diferite responsabilităţi pentru

a putea fi atinse toate punctele anterioare. De asemenea este necesară prezenţa în

permanenţă a unui reprezentant al clientului la şedinţele ce au loc în cadrul echipei de

dezvoltatori sau posibilitatea contactării acestuia în permanenţă, pentru a confirma cu

aceştia cerinţele necesare şi a clarifica problemele decizionale care s-ar putea ivi.

Sfârşitul unui sprint nu are ca scop livrarea unui produs final, ci mai degrabă livrarea

unor funcţionalităţi cu un număr redus de defecte (buguri).

Metodele descrise în continuare nu sse folosesc independent, ci împreună, pentru a

asigura calitatea unui proiect dezvoltat Agile.

Page 14: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 18 -

2.1 Scrum

Scrum este o metodă de dezvoltare Agile si management de proiect bazată pe

flexibilitate la schimbări si planificare iniţială minimală. Procesul Scrum se realizează în

scurte iteraţii numite sprinturi, care durează până la patru săptămâni. Fiecare sprint începe

cu o sedinţă scurtă de planificare şi se finalizează cu un review. Ideea principală este de a

lăsa dezvoltatorilor posibilitatea de a se auto planifica, întrucât ei sunt cei mai in măsură

să estimeze si să realizeze corect livrarea şi de asemenea de a rezolva problemele pe

măsură ce acestea apar. În momentul de faţă este cea mai des folosită metodă din

categoria Agile, de sine stătătoare sau în combinaţie cu altele.

Scrum se bazează pe echipe complexe, independente si care se pot organiza singure

[9]. În loc să existe un team-leader care să ia decizii singur, deciziile sunt lăsate la

latitudinea echipei. Ei vor decide impreună sarcinile ce le va realiza fiecare membru în

parte şi cum se rezolvă problemele apărute pe parcurs. Toţi sunt responsabili în aceeaşi

măsură de progresul sprintului şi rezultatul final.

La inceputul sprintului, membri echipei fac o listă cu user-story-urile care se pot

realiza şi livra la sfarşit (aşa numitul sprint-backlog, care reprezintă o parte componentă

din product-backlog, totalul user story-urilor care se vor livra la final), apoi, de comun

acord, acestea se împart. Zilnic au loc alte şedinţe (scrum zilnic), în care fiecare membru

va lua cuvântul pentru a prezenta ce a realizat în ziua anterioară, ce mai are de făcut şi ce

eventuale probleme întâmpină. Taskurile se pot reîmpărţi în cazul în care unele durează

mai mult şi altele mai puţin decât estimate, pentru a realiza terminarea lor până la sfârşitul

sprintului. Aceste şedinţe sunt foarte importante în Scrum şi ar trebui realizate cu

regularitate, deoarece astfel toţi membri echipei vor fi puşi la curent cu statusul

proiectului, progresul si probleme ivite, dar se realizează şi sincronizarea taskurilor

membrilor. Aceste şedinţe nu ar trebui să dureze mai mult de 15 minute.

La sfârşitul unui sprint se va realiza o demonstraţie a livrării împreună cu un

reprezentant al clientului şi echipa de dezvoltatori. Astfel se poate primi feedback de către

client şi rezolva problemele apărute, precum şi schimbarea anumitor specificaţii dacă este

necesar.

Page 15: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 19 -

De asemenea tot la sfârşitul sprintului, se face un o retrospectivă cu toţi membri

echipei, pentru a se observa ce a mers bine, ce a mers prost si cum se poate îmbunătăţi

modul de lucru în sprintul viitor.

Figura 5 – Procesul Scrum împreună cu rolurile aferente [19]

2.1.1 Roluri în Scrum

Există 3 roluri fundamentale în Scrum (Product Owner, Scrum Master, Membru al

echipei), care asigură realizarea corectă şi completă a ciclului Scrum, şi câteva roluri

secundare [9]:

a. Product Owner

Product Ownerul lucrează în strânsă legătură cu clientul şi este responsabil de

comunicarea cu echipa de dezvoltatori si explicarea acestora viziunea clientului asupra

proiectului. El reprezintă interesele clientului prin descrierea cerinţelor şi prioritizarea lor

Page 16: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 20 -

corectă. În general, în marile companii, acest rol are şi responsabilităţile unui Project

Manager, acest lucru neafectând responsabilităţile lui principale în dezvoltarea Scrum

b. Scrum Master

Scrum Masterul se asigură că procesul Scrum este urmat cu stricteţe si nu există

impedimente care ar putea afecta livrarea la sfârşitul sprintului. El este cel care motivează

în permanenţă echipa de dezvoltatori şi se asigură că problemele sunt rezolvate rapid şi

eficient. Este oarecum similar cu un team-leader şi se află ca mediator între echipa de

dezvoltatori şi Product Owner.

c. Membru al echipei

Echipa este responsabilă de livrarea la timp şi calitativă a produsului software. În

scrum, echipele sunt mixte, adică sunt alcătuite din ingineri software, analişti, arhitecţi,

programatori, testeri, designeri. Fiecare dintre aceşti membri particpă la sedinţele zilnice

şi ia parte la luarea de decizii. Echipa este autonomă, fără a fi nevoie de prezenţa unui

team-leader.

d. Roluri secundare

Printre rolurile secundare se numără Stakeholders (părţile interesate) – clienţii, care au

interes în finalizarea produsului, reprezentaţi de către Product Owner, şi utilizatorii finali,

care sunt cei cărora li se adresează produsul.

Page 17: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 21 -

2.2 Extreme programming (XP)

Această metodologie se bazează pe livrări rapide în cicluri scurte, orientată foarte

mult pe codul scris. Din acest motiv foloseşte tehnici ca pair-programming, unit testing pe

tot codul, code review în mod extensiv, şi se asează pe păstrarea clarităţii si simplităţii în

cod. Comunicarea între membrii echipei şi client este incurajată foarte mult.

Deşi la prima vedere pare foarte similară ca metodologie cu Scrum, între cele doua

există şi diferenţe notabile [10]:

o Sprinturile Scrum sunt până la 4 săptămâni, în XP se preferă iteraţiile mai scurte, de

până la 2 săptămâni

o În Scrum nu se permit modificări în timpul sprintului, iar şedinţa de sprint planning

este făcută pentru a se decide asupra unei liste de taskuri ce trebuie livrată la sfârşitul

sprintului; XP permite modificări în timpul sprintului, interschimbări ale unor taskuri

cu altele care ar avea aceeaşi durată, atâta timp cat taskurile care se vor scoate nu au

fost începute deja

o În Scrum, prioritizarea sprinturilor este făcută în general de căter Product Owner, dar

echipa realizează prioritizarea in cadrul sprintului; în XP, clientul este cel care

prioritizează orice task din cadrul sprintului, echipa nu poate lua decizii în acest caz

o Scrum este o metodologie mai generală, nu încurajează nici un fel de tehnică de

programare; XP în schimb este bazată pe folosirea diverselor tehnici care ajută la

obţinerea unei calităţi superioară a codului, cum ar fi unit-testing şi testarea automată,

şabloane de proiectare, refactorizare, pari programming, standarde de coding.

2.2.1 Termeni folosiţi în Extreme Programming

Extreme programming conţine o listă de termeni, mai precis de bune practici, pentru

ca metolodogia de dezvoltare să poată fi considerată ca făcând parte din această

categorie, printre care se numără:

o Test Driven Development, explicat pe larg în capitolul următor

o Continuous integration, explicat într-un capitol viitor

Page 18: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 22 -

o Standarde de coding, printre care se numără respectarea notaţiilor, regulilor de

coding, Clean coding şi principiile SOLID

o Ritm sustenabil, cea ce înseamnă că intreaga echipă trebuie să muncească în

acelaşi ritm, care este de obicei unul alert

o Refactoring, adică fiecare dezvoltator are obligaţia îmbunătăţirii codului

existent în momentul când lucrează la un task

o Codul ca proprietate colectivă, respectiv toţi dezvoltatorii trebuie să cunoască

toate parţile din proiect, nu se împart pe module

o Planning game, care este o sedinţă de planificare, făcută la inceputul

sprintului. Nu se fac şedinţe zilnice, dar, dat fiind faptul că sprinturile sunt scurte, o

astfel de şedinţă va avea loc o data la 1-2 săptămâni. Uneori, în această şedinţă se

foloseşte planificare de tip poker, descrisă în capitolul următor

o Pair-programming, concept cheie care de obicei diferenţiază extreme

programming de alte metodologii, reprezintă munca în grupuri de căte doi, în cazul

întâmpinării unor probleme mai complexe. În alte metodologii de dezvoltare, acest tip

de programare se foloseşte pentru ca un membru nou al echipei să fie familiaizat mai

uşor cu proiectul, învăţănd de la un membru mai experimentat

o Metafora sistemului, care reprezintă viziunea comună iniţială a echipei faţă de

cum trebuie proiectul să arate şi să se comporte

o Design simplu, pentru ca sistemul să poată fi extins cu uşurinţă

o Testarea la nivel de client, pentru a-i oferi acestuia produsul conform

cerinţelor sale

o Livrări scurte şi dese (1-2 săptămâni)

Page 19: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 23 -

Figura 6 – Termenii de bază în Extreme Programming [20]

2.2.2 Avantaje şi dezavantaje

Avantajele acestei metode Agile sunt clare: produsul livrat este de o calitate

superioară, bugurile sunt puţine, schimbările în proiect sunt făcute exact atunci când este

nevoie şi clientul supervizează evoluţia prin prioritizarea taskurilor. Dezavantajele ar

număra faptul ca nu fiecare echipă se pretează la acest tip de metodologie, deoarece este

nevoie de programatori care să fie bine pregătiţi şi cu o experienţă clară în spate. Este

dificil pentru programatorii juniori sau pentru inidivizii noi veniţi să se integreze cu toate

tehnicile de dezvoltare folosite în XP şi să ţină pasul cu ceilalţi. Echipa trebuie să fie în

acest caz cât mai stabilă, deoarece este dificilă inlocuirea oamenilor. De asemenea, este

complicat de implementat XP în echipe foarte mari [11].

Page 20: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 24 -

2.3 Test Driven Development

Test Driven Development (TDD) este o tehnică de programare bazată pe scrierea de

teste automate, pentru a avea siguranţa unui cod lipsit de defecte în procent cât mai mare,

acest lucru favorizând o mentenaţă uşoară şi lipsită de probleme majore.

Faţă de metodele trasiţionale de programare, în TDD este necesar ca testele să fie

scrise înaintea codului, iar codul să fie scris în asa fel încât la sfârşit toate testele se vor

finaliza cu succes. TDD este înrudit cu Extreme Programming, fiind folosit uneori ca

tehnică de programare în cadrul unei echipe XP.

În general, Test Driven Development este alcătuit din mai multe faze, ca în figura de

mai jos [15]:

a. Adaugarea unui nou test

Fiecare funcţionalitate nouă începe cu scrierea a unuia sau mai multor teste. Bazându-

se pe cerinţe şi cunoscând foarte bine use-case-urile, un developer va scrie teste ca să

acopere întreaga funcţionalitate, aşa cum va fi ea văzută de către utilzatorul final. Acest

detaliu, de a scrie testele înaintea implementării noi funcţionalităţi va face dezvoltatorul

Page 21: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 25 -

să cunoască foarte bine cerinţele înaintea scrierii codului, ceea ce va ridica considerabil

calitatea codului şi va îmbunătăţi aria de acoperire a sa.

b. Rularea testelor scrise anterior

În acest pas este extrem de omportant ca testele noi scrise să eşueze. Astfel,

dezvoltatorul se asigură că sunt îndeplinite următoarele condiţii:

- Funcţionalitatea nouă nu există deja

- Testul este valid

În caz contrar, se va repeta primul pas şi se va investiga ce anume a fost greşit.

c. Implementarea funcţionalităţii

În aces pas, singurul scop este scrierea de cod care va face testele să fie terminate cu

succes. Nu este esenţială atenţia la calitatea codului, este importantă viteza cu care noua

funcţionalitate este scrisă. Acest pas trebuie să dureze cât mai puţin.

d. Rularea testelor scrise la primul pas

În acest pas, spre deosebire de pasul al II-lea, testele trebuie să treacă. În caz contrar,

până cand nu trec toate testele, dezvoltarul se va întoarce la pasul anterior, repetându-l

împreună cu pasul curent, în ciclu, până când toate testele trec.

e. Refactorizarea codului

Având certitudinea faptului că noua funcţionalitate este complet implementată şi în

conformitate cu cerinţele, aces pas se asigură de calitatea codului. Codul va fi refactorizat,

respectând tehnicile moderne de ingineria programării. Acest pas se realizează

conconmitent cu pasul anterior, pentru a avea certitudinea că refactorizarea nu cauzează

defecte în funcţionalitatea existentă.

Toate etapele de mai sus se vor repeta ori de câte ori este necesar, până la sfârşitul

proiectului. Acest tip de dezvoltare determină o mare calitate a codului scris şi se asigură

că defectele sunt descoperite şi reparate cât mai devreme în procesul de dezvoltare.

Venind cu aceste beneficii, acest model de dezvoltare vine şi cu un defect considerat

Page 22: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 26 -

adesea major, şi anume faptul că procesul este îndelungat şi costisitor, fiind mai potrivit

uneori pentru proiectele de mică anvergură şi cu module slab cuplate între ele.

În acest tip de dezvoltare, există câteva reguli „best-practice”, care ajută la obţinerea

unei calităţi superioare a TDD şi implicit, a proiectului final. Printre ele se numără:

o Testele şi codul sursă trebuie să fie separate în proiect şi pe disc, pentru a nu se

incurca şi a crea claritate în cod

o Este esenţial ca testele să pice prima oară cand sunt scrise, în mod contrar fiind

nefolositoare pentru cazul dat

o Numele testelor trebuie să fie clare şi să reflecte întocmai asteptările

o Codul duplicat trebuie şters la fiecare refactoizare

o Orice refactorizare, oricăt de mică, trebuie să fie urmată de rularea suitei de

teste

o Codul nou trebuie scris doar atunci cănd un test pică; în caz contrar, ceea ce

trebuie făcut este o refactorizare

o În primă fază, codul care trebuie scris pentru ca testul să treacă trebuie să fie

cât de simplu posibil

o Trebuie sa se elimine dependeţele între teste: în orice ordine ar rula, testele

trebuie să aibă aceelaşi comportament

o Testele trebuie să fie rapide, în caz contrar există riscul să se treacă cu vederea

testele lente şi astfel va exista funcţionalitate netestată sau testată insuficient

Page 23: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 27 -

2.4 Continuos Integration

Integrarea continuă este un proces de dezvoltare software prin care codul comis de

către dezvoltatori pe un server de control al versiunilor trece prin diverse etape, pentru a

asigura calitatea integrării în mod constant. Integrarea codului se poate face prin mai

multe metode, iar în Continuos Integration este necesar ca acest lucru să fie făcut de mai

multe ori pe zi.

Printre principiile acestui proces se numără:

a. Integrarea trebuie făcută măcar zilnic

Atunci cand dezvoltatorii comit codul pe serverul de control al versiunilor, este

preferabil să existe taskuri care rulează un build automat după fiecare check-in al fiecărui

dezvoltator, dar, dacă acest lucru nu este posibil, se recomandă ca această procedura să se

facă măcar o dată pe zi. În acest mod erorile de integrare pot fi detectate şi corectate

rapid, înainte ca acestea să se adune şi să creeze probleme în lanţ.

b. Trebuie să existe un singur server de control al versiunilor

Chiar şi în cazul frecvent în care se lucrează cu diverse versiuni ale aceluiaşi proiect,

este esenţial să existe o versiune principală şi taskuri automate care să faca eventualele

merge-uri între versiuni, pentru a le aduce la nivel similar. Existenţa mai multor copii ale

aceluiaţi proiect, nelegate între ele, lasă loc de multe erori umane, care sunt greu de

depistat şi rezolvat ulterior.

c. Build-ul să fie testabil automat

Este foarte util ca, după ce buildul a fost realizat în urma unui check-in al unui

dezvoltator, să fie rulate toate testele automate care existau dinainte, pentru a asigura

calitatea codului noi introdus, cât şi pentru a fi siguri că funcţionalitatea existentă nu a

fost afectată în vreun fel de către noul cod.

d. Existenţa unei maşini de integrare

Este preferabil ca fiecare build automat să beneficieze de o maşină separată pentru

integrare, în care eventualele probleme ale integrării automate să fie rezolvate apoi

Page 24: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 28 -

manual, înainte să se facă un deployment pe maşinile de test. În acest caz se evită

diversele neconcordanţe între maşinile de development şi maşinile de test, dar în acelaşi

timp se optimizează timpul pierdut pentru refacerea deploymentului pe maşinile de test,

în cazul în care acesta nu a reuşit de prima oară.

e. Testele să se facă pe o copie identică a maşinilor de producţie

Acest punct este esenţial, deoarece se doreşte reproducerea defectelor din producţie cu

cât mai multă acurateţe. Acest lucru înseamnă copierea bazelor de date si serviciilor din

producţie cât mai des, recomandabil zilnic, de către taskuri automate.

f. Deploymentul automat

Deploymentul automat uşurează foarte mult munca dezvoltatorilor. Ideal ar fi să

existe taskuri care realizează deployment automat pe toate maşinile de integrare şi testare,

eventual şi în producţie. Eventualele greşeli de integrare pot fi apoi rezolvate manual, dar

un proces automat minimizează existenţa erorilor umane.

Continuous Deployment este un concept similar cu Continuous Integration, diferenţa

fiind scopul acestuia. Continuos Deployment se referă la livrarea în producţie a acelor

părţi din proiect care au respectat o parte din paşii de mai sus: au trecut buildul şi testele

automate. Aces lucru înseamnă că mereu se va livra software calitativ, fără a fi afectate

funţionalităţile deja existente, iar livrările se vor face foarte frecvent. De asemenea,

livrarile vor avea un grad scăzut de risc şi vor putea fi adaptate foarte rapid la cerinţele

clientului.

Page 25: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 29 -

Figura 7 – Proces ciclic complex de Continuos Integration [18]

Page 26: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 30 -

2.5 Kanban

Metodologia Kanban provine de la Toyota – sistemul JIT (just-in-time), şi se axează

pe eliminarea efectului de dop de sticlă (bottleneck), prin optimizarea procesului de

producţie în orice domeniu. Deşi tehnologia construcţiilor de maşini nu are foarte multe

similarităţi cu ingineria software, procesul Kanban a fost bine primit în ultima vreme şi se

regăseşte printre metodologiile Agile.

Se presupune că un proces de dezvoltare software trebuie să meargă continuu şi

uniform. Dar frecvent vor apărea acele blocaje numite bottleneck, ca de exemplu: testerii

au capacitatea de a testa 5 bug-uri pe săptămână, dar dezvoltatorii sunt capabili să fixeze

10 buguri pe săptămână. În acest caz, testerii vor fi cei care creează blocajul [12].

Testerilor li se vor acumula volume imense de muncă şi inevitabil, produţia va fi

încetinită, clientul va fi nemulţumit etc. Din păcate, blocaje similare se pot întâmpla la

momente diferite oricăror roluri din procesul de dezvoltare, problemele nefiind vizibile la

timp.

Kanban îşi propune să rezolve această problemă, limitând dinamic volumul de muncă

al fiecărui rol, folosind aşa numita tablă Kanban, ca in figura de mai jos [11]:

Figura 8 – Tabelă Kanban [18]

Page 27: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 31 -

Cifrele de deasupra fiecărui pas reprezintă numărul maxim de itemi care pot fi la un

moment dat în curs în pasul respectiv. Dacă acest număr este depăşit pe vreuna dintre

coloane, aceasta devine blocaj şi trebuie găsite rapid soluţii pentru a scădea numărul

aferent. Oricare dintre coloane poate conţine itemi în curs şi terminaţi, figura exemplifică

acest lucru doar pe două dintre coloane.

Page 28: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 32 -

3. Estimarea în Agile

Estimarea este una dintre problemele cele mai dificile cu care se confruntă toate

părţile implicate într-un proiect software. Pornind de la calcule simple şi până la algoritmi

complecşi, estimările pot fi foarte dificil de realizat în industria IT, datorită lipsei

constantelor din tehnologia actuală. Spre deosebire de alte industrii, nu se poate calcula

cu precizie cât va dura un task, deoarece există prea mulţi factori de luat în considerare,

factori care includ tehnologiile folosite, experienţa pe proiect, resursele fizice pe care va

rula proiectul etc.

În Agile există două tipuri de estimări care se folosesc în mod frecvent, şi anume

estimarea bazată pe puncte (story point) şi estimarea bazată pe zile de dezvoltare (ideal

developer days) [16]. Deşi în trecut estimarea pe zile a fost mai des folosită,

metodologiile tradiţionale având nevoie de estimări stricte pe perioade lungi de timp,

odată cu apariţia Agile a inceput să prindă contur estimarea bazată pe puncte [17].

În ambele cazuri, estimarea are loc în 4 paşi standard, care se pot vedea în figura de

mai jos:

1. Clientul descrie user-story-urile

2. Dezvoltatorii estimează individual

3. Are loc o discuţie pe baza estimărilor, ăn care se aduc argumente de ce s-a estimat

astfel

4. Dezvoltatorii estimează din nou individual

Dacă este nevoie, ultimii 2 paşi se pot repeta până când se ajunge la un consens.

Page 29: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 33 -

Figura 9 – Paşii în estimarea Agile [18]

2.1 Estimarea pe zile

Acest tip de estimare are o istorie lungă, fiind folosit de foarte multă vreme si

continuă să fie folosit frecvent. Întreaga echipă se reuneşte în sedinţa de Sprint planning,

se decide ce se va livra în cadrul sprintului (acel Sprint backlog, alcătuit din user-story-

uri), apoi fiecarui user-story i se va ataşa un număr de zile în care trebuie să fie terminat.

Aceste zile reprezintă de fapt numărul de zile în care va putea fi rezolvat de către un

singur dezvoltator. Este o estimare simplă şi nu necesită găsirea de legături între user-

story-urile dintr-un sprint.

Uneori se foloseşte în acest caz estimarea în 3 puncte, care se realizează precum

urmează:

Page 30: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 34 -

- se decide cam cât ar dura realizarea taskului

- se decide cât va dura în cel mai bun caz şi în cel mai rău caz

- se face media celor 3 estimări, rezultând estimarea finală

-

2.2 Estimarea folosind puncte

Acest tip de estimare presupune compararea user-story-urilor între ele. Se începe prin

a se alege cel mai simplu user-story (cel a cărui durată se presupune a fi cea mai mică) şi i

se asignează un punctaj de 1. Apoi toate celelalte user-story-uri vor fi comparate cu

primul şi apoi între ele, asignându-li-se numere din şirul lui Fibonacci (1, 2, 3, 5, 8 etc.).

Apoi user-story-urilor cele mai simple li se va asigna un număr de ore sau zile (man-

hours, man-days), iar celorlalte li se vor asigna estimări egale cu estimarea celei mai

simple înmulţită cu numărul din şirul lui Fibonacci aferent. Astfel se pot lua în calcul şi

eventualele întârzieri (similar cu un worst-case-scenario), spre deosebire de estimarea

simplă pe zile.

O variantă a estimării folosind puncte este planificarea poker, denumită astfel

deoarece se folosesc cărţi de joc sau cartonaşe conţinând numerele din şirul lui Fibonacci.

Fiecare membru al echipei primeşte un set de astfel de cartonaşe şi estimează, pe rând,

câte un user-story. Important este la acest tip de estimare ca toţi membrii echipei să arate

cartonaşele pentru acelaşi user-story în acelaşi timp, pentru a nu fi influenţati între ei. Se

presupune că toţi vor da aceeaşi estimare sau foarte asemănătoare. Dacă se întâmplă totuşi

să fie diferenţe foarte mari, cei care au estimarea diferită de medie vor trebui să explice de

ce au ales această soluţie şi apoi se va vota din nou. Detalii în figura următoare [18]:

Page 31: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 35 -

Figura 10 – Cărţi specifice estimării Poker [18]

Page 32: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 36 -

4. Aplicaţia Scrum Planner pentru managementul estimărilor

În ziua de astăzi există numeroase aplicaţii independente sau de tip plug-in la diverse

medii de dezvoltare care au ca scop principal managementul proiectelor, mai precis al

diverselor etape în procesul de dezvoltare software. Aplicaţiile sunt capabile să ajute

utilizatorii să aibă o evidenţă cat mai clara a taskurilor, a membrilor echipei care se ocupă

de aceste taskuri, precum şi raportele zilnice referitoare la aplicaţie (fiecare mebru al

echipei la ce a lucrat şi in ce stadiu este fiecare task al proiectului). Unele dintre aceste

aplicaţii de management au fost îmbunătăţite şi pot oferi soluţii de management în

dezvoltarea de tip Agile, permiţând de exemplu realizarea unor tabele de tip Kanban,

grafice, evidenţa şedinţelor din Scrum etc. Printre aceste aplicaţii se numără:

- Jira, VersionOne – aplicaţii independente, de sine stătătoare

- Visual Studio Scrum – pentru Visual Studio

- Agile for Oracle - pentru Oracle

Aceste aplicaţii au foarte multe întrebuinţări şi sunt folosite la scară largă în industria

software. Ele pot avea use-case-uri de tipul:

o un dezvoltator poate vedea taskurile care i-au fost atribuite, le poate sorta în funcţie de

prioritate, de modulul afectat, de gravitate etc.

o un dezvoltator îşi poate loga orele lucrate la diverse sarcini

o un utilizator (team leader, project manager) poate estima diverse taskuri şi le poate

atribui priorităţi, le poate atribui dezvoltatorilor etc

o un tester poate realiza aceleaşi acţiuni pe un test plan ca şi dezvoltatorii pe taskuri

o un project manager poate observa planificările, poate schimba diverse informaţii la

nivel de proiect

o un project manager poate crea rapoarte despre taskurile terminate, în lucru sau

neîncepute, şi poate avea o imagine de ansamblu a muncii fiecărui membru al echipei

de dezvoltatori sau testeri

Page 33: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 37 -

4.1 Problema

Deşi aplicaţiile sunt făcute în aşa fel încât să ofere foarte multe funcţionalităţi, ele

sunt organizate în aşa fel încât să fie concentrate pe proiect şi pe taskurile componente.

Un task poate fi estimat la începutul proiectului la un număr de ore sau zile şi eventual

reestimat pe parcurs, în funcţie de diverse module care l-ar putea afecta. Apoi unui

dezvoltator îi este atribuit acel task. Respectivul dezvoltator trebuie să încerce pe cât

posibil să se incradreze în acea estimare, cu toate că acest lucru îi este uneori imposibil,

datorită factorilor externi sau interni:

o Factori externi: meetinguri lungi o dată sau de mai multe ori pe zi, colegi care

trebuie ajutaţi, probleme administrative în cadrul companiei, traininguri etc.

o Factori interni: capacitatea dezvoltatorului de a rezolva taskul, în funcţie de

experienţa sa, cunoasterea tehnologiilor necesare, talentului său de

programator etc.

Aceşti factori ne duc cu gândul la nevoia unei funcţionalităţi într-o aplicaţie de

management care să ia în calcul aceşti factori descrişi mai sus. Funcţionalitatea ar trebui

orientată asupra dezvoltatorului şi capacităţii sale de a rezolva diverse taskuri, cu referire

atât la factorii care îi pot îmbunătăţi munca, cât şi la factorii perturbanţi, care pot lungi

perioada petrecută lucrănd la task.

Exemplu: Taskul T a fost estimat de o echipă de tip Scrum la o zi (8 ore de muncă).

Estimarile de acest tip sunt pesimiste iniţial, pornind de la dezvoltatori, dar, trecând prin

mâinile mai multor persoane, inclusiv project managerul, ele se pot scurta, deoarece se

doreşte livrarea cât mai rapidă.

Acest task i-a fost atribuit dezvoltatorului D, cu un nivel mediu de experienţă, dar cu

vechime pe proiect. Putem presupune astfel că taskul nu va fi greu de integrat de către

dezvoltator, datorită cunoştinţelor acestuia despre proiect şi modulele sale, dar că i-ar

putea crea anumite întârzieri datorită limbajului L, de exemplu, limbaj pe care

Page 34: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 38 -

dezvoltatorul D în cunoaşte la nivel mediu. De asemenea, în ziua în care dezvoltatorul îşi

propusese să rezolve respectivul task, a venit un angajat nou, căruia D a trebuit să îi faca

o introducere în companie şi proiect, fapt ce i-a răpit câteva ore din munca la task. În

aceeaşi zi a avut loc şi o şedinţă neasteptată, care de asemenea a facut imposibil lucrul la

task.

Din exemplu de mai sus putem deduce că taskul T poate avea întârzieri mari, iar

timpul real în care taskul a fost terminat poate fi şi dublu faţă de estimarea iniţială. Şi cu

toate că în unele companii este posibilă şi raportarea timpului petrecut în sedinţe, multe

aplicaţii nu permit decîr raportarea muncii la taskuri, deci este necesar să se raporteze 8

ore pe zi. Este simplu de dedus că, impreună cu diverse pauze scurte din timpul zilei, cu

prezentarea proiectului către noul coleg, cu şedinţa si cu alte eventuale modalităţi de

distragere a atenţiei, nu este posibil să se fi lucrat 100 % din zi la task, deci vor apărea

întărzieri. Sub un deadline strâns, multi dezvoltatori sunt nevoiţi să petreacă foarte multe

ore în plus la servici, pentru a rezolva taskurile prost estimate in iniţial. În urma multor

ore de muncă în plus, productivitatea va scădea, nemulţumirile personale vor creşte, fapt

care nu este benefic nici pentru angajat, nici pentru proiect şi nici pentru companie, pe

termen lung.

4.2 Soluţia propusă

Conform exemplului de mai sus, este clar că există o variabilă în procesul estimării

de care aplicaţiile deja existente nu ţin cont. Această variabilă este chiar dezvoltatorul

căruia îi este atribuit taskul, respectiv o măsură a diverşilor factori care pot contribui la

accelerarea sau dimpotrivă, la încetinirea procesului de rezolvare a taskului. El poate avea

o mulţime personală de variabile, din care se pot calcula intârzierile care pot apărea în

munca sa, astfel ca project managerul să poată să aibă o imagine de ansamblu şi eventual

să discute cu clientul in cazul intârzierilor foarte mari.

Page 35: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 39 -

4.3 Aplicaţia Scrum Planner

4.3.1 Termeni folosiţi

Sprint – se referă la un sprint din modelul de dezvoltare Agile. Este important să fie

cât mai scurt, dar nu mai mult de 4 săptămâni.

User story – modulele care vor intra în sprintul curent. Mai multe persoane pot lucra

concomintent la acelaşi user story.

Task - unitate de muncă, sarcină mică care intră în componenţa unui user story. Un

task este rezolvat de un singur dezvoltator.

Resource – un dezvoltator care poate lucra la taskurile ce îi sunt atribuite. Are un

număr maxim de ore de muncă care îi pot fi atribuite într-un sprint.

Skill – calităţile, abilităţile şi factorii externi care ţin strict de Resource şi care

influenţează estimarea taskurilor. Acestea au fiecare un Skill Weight (pondere): unele

sunt mai importante ca altele, în sensul că vor influenţa mai mult estimarea.

Productivity index – număr repezentând productivitatea dezvoltatorului, calculată în

funcţie de mulţimea de Skilluri, valorile şi ponderile acestora

Estimated Hours – orele estimate de către echipă ale unui task

Real Hours – orele calculate de către aplicaţie, conţinând întârzierea datorată

dezvoltatorului, conform Productivity Index

Page 36: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 40 -

Figura 11: lista de taskuri ale sprintului curent, împreună cu informaţii despre ele

4.3.2 Skills – calităţile dezvoltatorului software

Aceste skill-uri se pot defini dinamic, în funcţie de necesităţile proiectului, pentru a

exprima cu cât mai multă acurateţe nivelul programatorului, lucru care va avea ca urmare

calcularea mai precisă a indexului de productivitate. Fiecare skill va avea o pondere si o

valoare. Ponderile pot lua valori în intervalul 1-5, în timp ce valorile skillurilor pot fi între

-5 şi 5. Cele pozitive reflectă calităţi ale dezvoltatorului (cunoaşterea diverselor

tehnologii, experienţa în profesie sau experienţa pe proiect), calităţi care il vor ajuta în

realizarea mai rapidă a taskurilor, iar cele negative reprezintă diversele evenimente

perturbatoare, care îl impiedică în muncă (sedinţe, trainiguri etc).

Exemplu: un dezvoltator senior poate termina un task estimat la 8 ore în mai puţin de

atâta, dacă lucrează neîntrerupt. Dar tot acelaşi programator senior mai are si alte atribuţii

în afara sarcinilor ce ţin strict de proiect, cum ar fi realizarea de diverse trainiguri la

interni şi juniori (inclusiv pregătirea prezentărilor respective), şedinţe, ajutarea diverşilor

colegi cu diverse probleme etc. Presupunând munca la task de 7 ore, plus o sedinţă de o

ora, un training de o oră şi explicarea problemelor unor colegi care au nevoie de ajutor

încă o oră, estimarea este uşor depăşită. Adăugând mai multe taskuri similare, într-un user

story este foarte uşor să nu se respecte acel estimările iniţiale.

Page 37: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 41 -

Figura 12: Pagina de detalii a unui dezvoltator, conţinând detalii despre skilluri,

productivity index, taskuri atribuite

4.3.3 Productivity index (indexul de productivitate)

Acest index este specific fiecărui dezvoltator în parte, ţinandu-se cont de skillurile

anterioare (ponderea şi valoarea). Se calculează conform formulei următoare:

∑ (

)

Unde simbolurile sunt:

Pi = Ponderea Skillului cu indexul i

Page 38: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 42 -

Vi = Valoarea Skillului cu indexul i

n = numărul de skilluri ale dezvoltatorului

În cadrul aplicaţiei, acest ProdIndex va fi rotunjit până la 2 zecimale, conform

standardului IEEE 754 [21], (rotunjirea bancherului sau rotunjirea la cel mai apropiat

număr).

4.3.4 Estimated Hours şi Real Hours

Orele estimate sunt rezultatul şedinţei de Sprint planning, realizată de către intreaga

echipă, pentru fiecare task. După estimare se poate calcula estimarea totală pentru un user

story.

Orele reale pentru un task se calculează din orele estimate, folosind Productivity

Index pentru dezvoltatorul atribuit. Atribuirea taskului altui dezvoltator modifică orele

reale. Acestea se calculeazo conform formulei:

( )

Unde simbolurile au următoarea semnificaţie:

RHT – Orele reale ale taskului T

EHT – Orele estimate pentru taskul T

PIR – Indexul de productivitate al dezvoltatorului D

Formula foloseşte o diferenţă între 100 şi Productivity Index, deoarece, cu cât acesta

este mai mare, cu atât acel dezvoltator este mai bine pregătit şi va putea rezolva mai rapid

taskul. Diferenţa de la 100 provine de la faptul că Productivity Index se calculează ca un

procent.

Page 39: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 43 -

Figura 12: pagina de editare a unui task sugerează numele unui alt dezvoltator, care

ar putea rezolva taskul în mai puţin timp

4.3.5 Auto-atribuirea

În unele cazuri, project managerul poate dori ca aplicaţia să atribuie automat taskurile

pentru a minimiza timpul de întârziere. Aplicaţia permite acest lucru prin folosirea unui

buton de Auto-assign, care va declanşa algoritmul de auto-atribuire a taskurilor. Nu este

obligatorie folosirea acestui algoritm, deoarece, de obicei, într-un proiect taskurile se

atribuie în funcţie de experienţă, cunoaşterea tehnologiilor etc. În Scrum, dezvoltatorii

Page 40: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 44 -

decid singuri cum işi vor atribui taskurile, de aceea este important ca aplicaţia să permită

auto atribuirea, cât şi atribuirea manuală.

Algoritmul de auto-atribuire este euristic, care va sorta taskurile descrescător după

numărul de ore estimate, apoi programatorii tot descrescător după indexul de

productivitate. Apoi va asigna taskurile începând cu programatorul cu indexul de

productivitate cel mai mare, până la numărul maxim de ore ce îi pot fi asignate,

continuând în jos. Algoritmul este descris în pseudocod mai jos:

max_possible_hours=constant

sort list_of_tasks

sort list_of_programmers

for task in list_of_tasks

for programmer in list_of_programmers

if task.estimated_hours + programmer.total_assigned_hours <= max_possible_hours

assign task to programmer

break

Acest algoritm asigură certitudinea că taskurile cele mai lungi, la care pot apărea cele

mai mari întârzieri, sunt atribuite întâi programatorilor cei mai buni. De asemenea se

asigură că, în procesul de atribuire de taskuri, programatorii cei mai buni vor fi luaţi în

calcul, înainte de a atribui taskuri celorlalţi.

Algoritmul funcţionează doar cu menţiunea că orele totale estimate ale taskurilor nu

trebuie să depăşească totalul orelor maxime care pot fi atribuite programatorilor, plus o

marjă de eroare de 20%.

Studiu de caz auto-atribuire:

Pornim de la situaţia user-story-urilor ca mai jos:

Page 41: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 45 -

Figura 13: User-story-urile şi orele estimate, reale, precum şi posibila întârziere

Observăm posibilitatea unor întârzieri în proiect de 34 de ore, cu 43% mai mult decât

perioada estimată.

Taskurile sunt asignate astfel:

Figura 14: Taskurile sprintului curent şi atribuirea resurselor

Această atribuire s-a făcut manual, în timpul şedinţei de sprint planning. Echipa este

alcătuită din juniori şi seniori. Aceştia au totalul de ore atribuite, precum şi productivity

index ca în figura mai jos:

Page 42: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 46 -

Figura 15: Indexul de productivitate şi orele atribuite fiecărui dezvoltator

Folosind butonul de Auto-assign din pagina cu lista de taskuri, putem declanşa

algoritmul de auto atribuire. Acesta va genera un dialog, iar dacă se confirmă,

algoritmul va suprascrie valorile atribuite momentan, ca în figura de mai jos:

Figura 16: Declanşarea algoritmului de atribuite automată

Algoritmul rulează rapid, datorită mulţimii reduse de date de procesat, apoi putem

urmări noua atribuite a taskurilor.

Deoarece algoritmul lucrează cu constanta MAX-HOURS, în cazul aplicaţiei

definită la 20 de ore, s-au putut atribui taskurile majore celor mai buni programatori,

taskurile mai simple fiind redistribuite celorlalţi, tot în ordine descrescătoare a

indexului propriu de productivitate. În cazul nostru, programatorul cel mai bun ar fi

Page 43: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 47 -

Oscar Wilde, cu un index de 77.60, iar cel cu indexul de productivitate cel mai mic

este Dan Brown, cu un index de 39.23.

În figura de mai jos se observă noua atribuire:

Observăm că taskul cel mai lung i-a fost atribuit lui Oscar Wilde, astfel fiindu-i

atribuite un total de 20 de ore, apoi programatorul cu indexul imediat următor, respectiv

Umberto Eco, are atribuite 2 taskuri care totalizează 20 de ore. Dan Brown din contră,

având indexul de productivitate cel mai mic, are cele mai puţine ore atribuite, respectiv 10

ore ale unui singur task, dar care, datorită productivităţii reduse, vor putea avea o

întârziere de 6 ore.

În figura de mai jos putem observa noile valori per user-story:

Page 44: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 48 -

Durata totală posibilă s-a redus la 107 ore, iar întârzierea totală posibilă este acum de

doar 27 de ore. Acest algoritm a redus intârzierea posibilă de la 42% la 33% din perioada

estimată.

4.3.6 Tehnologii folosite

Aplicaţia foloseşte tehnologiile .NET 4.5, ca platformă generală de dezvoltare.

Limbajul de back-end este C# 4.5, iar pentru front se foloseşte ASP.MVC 4, rezultând

o arhitectură Model View Controller.

Baza de date folosită este SQL Server Express 2008, iar ca Object Relational

Mapping (ORM) se foloseşte Entity Framework 5, disponibil în regim open-source.

Pentru limbajul de scripting pe partea de client se foloseşste JavaScript şi librăria

jQuery.

4.3.7 Dezvoltări viitoare

Aplicaţia poate fi cu uşurinţă extinsă pe viitor, prin adăugarea de noi module sau

îmbunătăţirea celor existente. Printre aceste planuri de extindere se pot include:

o adăugarea de funcţionalităţi pentru a realiza review-uri pentru membrii echipei, în

funcţie de productivitatea lor în timp

o realizarea de grafice pentru a se observa estimările, timpul petrecut pe taskuri, timpul

rămas etc.

o adăugarea de tipuri noi de resurse (ex: testeri), care să aibă seturi diferite de skill-uri,

pentru a extinde funcţionalitatea existentă şi la alte tipuri de echipe

o adăugarea unui modul de pontaj, prin care membrii echipei pot raporta timpul petrecut

pe diverse taskuri, şi a unei funcţionalităţi care calculează diferenţele dintre estimări şi

timpul real, prin care se pot observa mai uşor capacităţile membrilor echipei

Page 45: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 49 -

Concluzie

Aplicaţia Scrum Planner oferă o imagine nouă estimărilor clasice, punând accent pe

om în locul taskului. Programatorul, respectiv cel ce realizează taskul este cel de care

trebuie să ţinem seama atunci când estimăm.

Aplicaţia poate fi extinsă pentru a urmări şi evoluţia în timp a estimărilor şi de a oferi

rapoarte bazate pe diverse sprinturi. Un project manager poate observa şi evoluţia unui

programator, care poate de exemplu să îşi îmbunătăţească performanţele, să înveţe

tehnologii noi şi să capete experienţă. Folosind indexul de productivitate, se pot face

evaluările programatorilor etc.

Aplicaţia poate fi extinsă pentru echipele de testare, suport, sau chiar pentru echipe

din afara sferei IT, pentru un mai bun management al timpului, respectiv al riscului de

întârziere.

Agile este o mulţime de metodologii care, pentru a avea rezultate cât mai bune,

trebuie folosite împreună. Importantă este cunoaşterea proprietăţilor specifice fiecarei

metodologii şi mularea pe proiectul care urmează a fi dezvoltat, precum şi pe echipa de

dezvoltatori, testeri, business analişti, project manageri care vor lucra împreună la proiect.

Nu există nici o metodologie potrivită perfect oricărui tip de proiect şi oricărei echipe.

Decizia de a folosi Agile nu poate fi luată peste noapte, este nevoie de studiu şi

consultarea tuturor membrilor echipei, dar este o decizie care, conform susţinătorilor săi,

va îmbunătăţi considerabil procesul de dezvoltare software. În ziua de astăzi, multe

companii IT şi mulţi clienţi ai acestora se orientează spre aceste metodologii moderne,

deoarece au incredere în rezultatele obţinute.

Agile este o direcţie care câştigă teren, iar în viitor probabil că vom vedea toate

proiectele IT conţinând, măcar intr-o mică parte, idei preluate din metodologia Agile.

Page 46: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 50 -

Bibliografie

[1] Agile Manifesto – http://agilemanifesto.org/

[2] Agile Alliance – http://www.agilealliance.org/

[4] Mikolouk, Kasia – Agile Vs. Waterfall: Evaluating The Pros And Cons (2013)

[5] Fowler, Martin – The New Methodology (2005)

[6] Forsyth, Aaron – Waterfall vs Agile Models in Software Development (2013)

[7] Boehm, Barry – A Spiral Model of Software Development and Enhancement (1986)

[8] Scrum and Agile Training and Consulting - http://www.mountaingoatsoftware.com

[9] Sims, Chris - Scrum: A Breathtakingly Brief and Agile Introduction

[10] Mar, Kane; Schwaber, Ken – Scrum with XP (2010)

[11] Zuiderveld, Nicholas - eXtreme Programming and Scrum: A comparison of Agile

methods

[12] http://www.kanbanblog.com/

[13] http://www.learnaccessvba.com/application_development/waterfall_method.htm

[14] http://ultimatesdlc.com/spiral-model/

[15]http://www.codeproject.com/Articles/320791/Developing-Factorial-Application-

Using-Test-Driven

[16] Cohn, Michael – Agile Estimation and Planning

[17] Martini, Arialdo – 8 practical rules for producing decent estimates (2012)

[18] http: //www.codeproject.com

[19] http: //www.cprime.com

Page 47: Cuprins - profs.info.uaic.roadiftene/Licenta/Dizertatie2014_CiofuMirela.pdf · suficient de importantă si va genera discuţii si dispute aprinse, întrucât este foarte dificil sau

- 51 -

[20] http: //www.xpprogramming.com

[21] http://grouper.ieee.org/