Documente Academic
Documente Profesional
Documente Cultură
Cuprins
Introducere ............................................................................................................................ - 7 -
e. Refactorizarea codului.......................................................................................... - 25 -
4.1 Problema.................................................................................................................... - 37 -
Concluzie ............................................................................................................................ - 49 -
Bibliografie ......................................................................................................................... - 50 -
-7-
Introducere
Aceast lucrare i propune s sintetizeze metodologiile de dezvoltare software
ncadrate n categoria Agile, care se bucur n ziua de astzi de o cretere continu n
popularitate n rndul companiilor de pe piaa IT. Lucrarea descrie punctele comune i
punctele diferite ale fiecrei metodologii n parte, precum i recomandri pro i contra
folosirii lor n diverse proiecte, n procesul de dezvoltare software.
Ideea poate fi extins i la altfel de echipe IT, pretndu-se foarte bine i echipelor de
testare, care lucreaz n acelai timp cu echipele de dezvoltare, deoarece aceleai diferene
ntre un junior i senior, de exemplu, vor exista i n echipele de testare.
-8-
1. Introducere n Agile
Una dintre primele probleme care apar la inceputurile unui nou proiect software este
discuia despre ce metodologie de dezvoltare se va folosi. Acest aspect este o decizie
suficient de important si va genera discuii si dispute aprinse, ntruct este foarte dificil
sau chiar imposibil sa fie schimbat n decursul proiectului, fr a afecta planificarea
iniial. 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 astzi ar fi Waterfall i Agile, cu tendina
metodologiei Agile de a ctiga teren fa de clasicul Waterfall, celelalte reprezentnd o
pondere mai mic n ingineria software, fiind n schimb folosite n alte domenii.
Prima prezentare coninnd etape similare a fost inut in 1956 de ctre 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 aprarea aerian automata a Americii de Nord.
Prima prezentare formal a procesului a avut loc de fapt mult mai trziu, n 1970, ntr-
un articol al crui autor a fost Winston Royce, acesta nefolosind termenul waterfall n
prezentarea sa. Royce l-a prezentat ca pe un model intens folosit, care este greit si
nefuncional.
-9-
Termenul de waterfall sau cascad a aprut mai trziu, datorit definiiei etapelor,
n stil top-down, fr 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 urmtoare, ca n Figura 1 de mai
jos [13]:
Acestui tradiional model de dezvoltare i s-au adugat modele modificate de-a lungul
anilor, n funcie de necesitile de moment, pstrnd totui neschimbate conceptele de
baz.
1.2 Prototipul
Acest modelul de dezvoltare implic definirea iniial 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 demonstraie pentru client [8].
Modelul acesta a fost derivat din Waterfall, n acele cazuri cnd cerinele iniiale nu
sunt foarte clare. n timpul procesului de construire a acestui model, clientul va oferi
feedback din cnd n cnd, acest fapt conducnd la obinerea acestui prototip. Avnd
confirmarea de la client la terminarea construciei acestui prototip, este posibil editarea
unui document de specificaii. Folosind acesta, se poate ncepe dezvoltarea software a
produsului final, folosind n general Waterfall.
Aceast metodologie a fost descris pentru prima oar de ctre 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 dezvoltrii, iar fiecare faz va fi alctuit din 4 pai [7],
descrii mai jos:
1.4 Agile
Datorit greutilor ntmpinate n timpul dezvotrii proiectelor folosind waterfall, a
fost prezentat in 2001 o metodologie numit generic Agil, bazat pe etape
incrementale si repetitive, n care cerinele se dezvolt pe parcurs, avnd suportul ntregii
echipe i de asemenea axndu-se pe colaborarea intens ntre membrii echipei.
Termenul agile a fost prezentat n 2001 de ctre autorii Agile Manifesto [1], o
proclamaie a unor valori cheie si principii de dezvoltare, care are 17 semnatari.
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 aceti autori au decis formarea alianei Agile [2], o organizaie non
profit care promoveaz i astzi devoltarea Agile, conform principiilor si regulilor de mai
sus. Dei iniial nu foarte cunoscut, metodologia a inceput s prind contur pe parcursul
ultimilor ani, n 2005 fiind publicat un addendum la Agile Manifesto, numit Declaraia
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
- 14 -
comunicarea intensiv descris mai sus poate consuma suficient de mult timp, probabil
mai mult dect 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 numrm un plan clar de lucru
la inceputul proiectului i posibilitatea unei estimri mai acurate [4]. Timpul de lucru si
bugetul sunt mult mai bine planificate, ceea ce este de obicei pe placul clienilor.
Deoarece se pune accent pe documentare si planificare, nlocuirea unui individ n timpul
procesului de dezvoltare nu este foarte dificil, o persoan nou putnd cu uurin s ia
locul altcuiva n timpul procesului de dezvoltare.
1.6 Ce alegem
Alegerea unei metodologii la nceputul proiectului poate fi dificil, ntruct este clar c
nici una nu este potrivit pentru toate cazurile i toate tipurile de proiecte. Susintorii
ambelor metodologii vor exista mereu i asta deoarece fiecare are avatanje considerabile
i se poate plia pe anumite tipuri de proiecte mai bine dect opusa ei.
n general, Waterfall tinde s fie mai util atunci cnd se estimeaz multe schimbri
pe parcursul proiectului, cnd se cunoate bugetul clientului de la nceput i ceea ce se
dorete a se obine 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
interaciune cu clientul ar ncetini foarte mult procesul, sau echipe distribuite n mai
multe ri, eventual cu fuse orare foarte diferite.
- 16 -
Agile tinde s fie potrivit pentru proiecte mai mici, cu tendine de schimbare pe
parcurs, echipe mai mici i independente, de obicei localizate n acelai loc.
Este necesar ca echipele s fie alctuite din indivizi cu diferite responsabiliti pentru
a putea fi atinse toate punctele anterioare. De asemenea este necesar prezena n
permanen a unui reprezentant al clientului la edinele ce au loc n cadrul echipei de
dezvoltatori sau posibilitatea contactrii acestuia n permanen, pentru a confirma cu
acetia cerinele necesare i a clarifica problemele decizionale care s-ar putea ivi.
Sfritul unui sprint nu are ca scop livrarea unui produs final, ci mai degrab livrarea
unor funcionaliti cu un numr redus de defecte (buguri).
2.1 Scrum
Scrum este o metod de dezvoltare Agile si management de proiect bazat pe
flexibilitate la schimbri si planificare iniial minimal. Procesul Scrum se realizeaz n
scurte iteraii numite sprinturi, care dureaz pn la patru sptmni. Fiecare sprint ncepe
cu o sedin scurt de planificare i se finalizeaz cu un review. Ideea principal este de a
lsa dezvoltatorilor posibilitatea de a se auto planifica, ntruct ei sunt cei mai in msur
s estimeze si s realizeze corect livrarea i de asemenea de a rezolva problemele pe
msur ce acestea apar. n momentul de fa este cea mai des folosit metod din
categoria Agile, de sine stttoare sau n combinaie cu altele.
a. Product Owner
Product Ownerul lucreaz n strns legtur cu clientul i este responsabil de
comunicarea cu echipa de dezvoltatori si explicarea acestora viziunea clientului asupra
proiectului. El reprezint interesele clientului prin descrierea cerinelor i prioritizarea lor
- 20 -
corect. n general, n marile companii, acest rol are i responsabilitile unui Project
Manager, acest lucru neafectnd responsabilitile lui principale n dezvoltarea Scrum
b. Scrum Master
Scrum Masterul se asigur c procesul Scrum este urmat cu strictee si nu exist
impedimente care ar putea afecta livrarea la sfritul 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 alctuite din ingineri software, analiti, arhiteci,
programatori, testeri, designeri. Fiecare dintre aceti membri particp la sedinele zilnice
i ia parte la luarea de decizii. Echipa este autonom, fr a fi nevoie de prezena unui
team-leader.
d. Roluri secundare
Printre rolurile secundare se numr Stakeholders (prile interesate) clienii, care au
interes n finalizarea produsului, reprezentai de ctre Product Owner, i utilizatorii finali,
care sunt cei crora li se adreseaz produsul.
- 21 -
Dei la prima vedere pare foarte similar ca metodologie cu Scrum, ntre cele doua
exist i diferene notabile [10]:
n general, Test Driven Development este alctuit din mai multe faze, ca n figura de
mai jos [15]:
s cunoasc foarte bine cerinele naintea scrierii codului, ceea ce va ridica considerabil
calitatea codului i va mbunti aria de acoperire a sa.
c. Implementarea funcionalitii
n aces pas, singurul scop este scrierea de cod care va face testele s fie terminate cu
succes. Nu este esenial atenia la calitatea codului, este important viteza cu care noua
funcionalitate este scris. Acest pas trebuie s dureze ct mai puin.
e. Refactorizarea codului
Avnd certitudinea faptului c noua funcionalitate este complet implementat i n
conformitate cu cerinele, aces pas se asigur de calitatea codului. Codul va fi refactorizat,
respectnd tehnicile moderne de ingineria programrii. Acest pas se realizeaz
conconmitent cu pasul anterior, pentru a avea certitudinea c refactorizarea nu cauzeaz
defecte n funcionalitatea existent.
Toate etapele de mai sus se vor repeta ori de cte ori este necesar, pn la sfritul
proiectului. Acest tip de dezvoltare determin o mare calitate a codului scris i se asigur
c defectele sunt descoperite i reparate ct mai devreme n procesul de dezvoltare.
Venind cu aceste beneficii, acest model de dezvoltare vine i cu un defect considerat
- 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 cteva reguli best-practice, care ajut la obinerea
unei caliti superioare a TDD i implicit, a proiectului final. Printre ele se numr:
f. Deploymentul automat
Deploymentul automat uureaz foarte mult munca dezvoltatorilor. Ideal ar fi s
existe taskuri care realizeaz deployment automat pe toate mainile de integrare i testare,
eventual i n producie. Eventualele greeli de integrare pot fi apoi rezolvate manual, dar
un proces automat minimizeaz existena erorilor umane.
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
producie n orice domeniu. Dei tehnologia construciilor de maini nu are foarte multe
similariti cu ingineria software, procesul Kanban a fost bine primit n ultima vreme i se
regsete printre metodologiile Agile.
Cifrele de deasupra fiecrui pas reprezint numrul maxim de itemi care pot fi la un
moment dat n curs n pasul respectiv. Dac acest numr este depit pe vreuna dintre
coloane, aceasta devine blocaj i trebuie gsite rapid soluii pentru a scdea numrul
aferent. Oricare dintre coloane poate conine itemi n curs i terminai, figura exemplific
acest lucru doar pe dou dintre coloane.
- 32 -
3. Estimarea n Agile
Estimarea este una dintre problemele cele mai dificile cu care se confrunt toate
prile implicate ntr-un proiect software. Pornind de la calcule simple i pn la algoritmi
compleci, estimrile 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 ct va dura un task, deoarece exist prea muli factori de luat n considerare,
factori care includ tehnologiile folosite, experiena pe proiect, resursele fizice pe care va
rula proiectul etc.
n Agile exist dou tipuri de estimri 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]. Dei n trecut estimarea pe zile a fost mai des folosit,
metodologiile tradiionale avnd nevoie de estimri stricte pe perioade lungi de timp,
odat cu apariia Agile a inceput s prind contur estimarea bazat pe puncte [17].
n ambele cazuri, estimarea are loc n 4 pai standard, care se pot vedea n figura de
mai jos:
Dac este nevoie, ultimii 2 pai se pot repeta pn cnd se ajunge la un consens.
- 33 -
Aceste aplicaii au foarte multe ntrebuinri 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 funcie 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 prioriti, le poate atribui dezvoltatorilor etc
o un tester poate realiza aceleai aciuni pe un test plan ca i dezvoltatorii pe taskuri
o un project manager poate observa planificrile, poate schimba diverse informaii la
nivel de proiect
o un project manager poate crea rapoarte despre taskurile terminate, n lucru sau
nencepute, i poate avea o imagine de ansamblu a muncii fiecrui membru al echipei
de dezvoltatori sau testeri
- 37 -
4.1 Problema
Dei aplicaiile sunt fcute n aa fel nct s ofere foarte multe funcionaliti, ele
sunt organizate n aa fel nct s fie concentrate pe proiect i pe taskurile componente.
Un task poate fi estimat la nceputul proiectului la un numr de ore sau zile i eventual
reestimat pe parcurs, n funcie de diverse module care l-ar putea afecta. Apoi unui
dezvoltator i este atribuit acel task. Respectivul dezvoltator trebuie s ncerce pe ct
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 ajutai, probleme administrative n cadrul companiei, traininguri etc.
o Factori interni: capacitatea dezvoltatorului de a rezolva taskul, n funcie de
experiena sa, cunoasterea tehnologiilor necesare, talentului su de
programator etc.
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 ctre
dezvoltator, datorit cunotinelor acestuia despre proiect i modulele sale, dar c i-ar
putea crea anumite ntrzieri datorit limbajului L, de exemplu, limbaj pe care
- 38 -
Din exemplu de mai sus putem deduce c taskul T poate avea ntrzieri mari, iar
timpul real n care taskul a fost terminat poate fi i dublu fa de estimarea iniial. i cu
toate c n unele companii este posibil i raportarea timpului petrecut n sedine, multe
aplicaii nu permit decr 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 ctre noul coleg, cu edina si cu alte eventuale modaliti de
distragere a ateniei, nu este posibil s se fi lucrat 100 % din zi la task, deci vor aprea
ntrzieri. Sub un deadline strns, multi dezvoltatori sunt nevoii s petreac foarte multe
ore n plus la servici, pentru a rezolva taskurile prost estimate in iniial. n urma multor
ore de munc n plus, productivitatea va scdea, nemulumirile personale vor crete, fapt
care nu este benefic nici pentru angajat, nici pentru proiect i nici pentru companie, pe
termen lung.
User story modulele care vor intra n sprintul curent. Mai multe persoane pot lucra
concomintent la acelai user story.
Task - unitate de munc, sarcin mic care intr n componena unui user story. Un
task este rezolvat de un singur dezvoltator.
Figura 11: lista de taskuri ale sprintului curent, mpreun cu informaii despre ele
Exemplu: un dezvoltator senior poate termina un task estimat la 8 ore n mai puin de
atta, dac lucreaz nentrerupt. Dar tot acelai programator senior mai are si alte atribuii
n afara sarcinilor ce in strict de proiect, cum ar fi realizarea de diverse trainiguri la
interni i juniori (inclusiv pregtirea prezentrilor respective), edine, ajutarea diverilor
colegi cu diverse probleme etc. Presupunnd 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 uor depit. Adugnd mai multe taskuri similare, ntr-un user
story este foarte uor s nu se respecte acel estimrile iniiale.
- 41 -
Figura 12: Pagina de detalii a unui dezvoltator, coninnd detalii despre skilluri,
productivity index, taskuri atribuite
( )
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 urmtoarea semnificaie:
Figura 12: pagina de editare a unui task sugereaz numele unui alt dezvoltator, care
ar putea rezolva taskul n mai puin timp
4.3.5 Auto-atribuirea
n unele cazuri, project managerul poate dori ca aplicaia s atribuie automat taskurile
pentru a minimiza timpul de ntrziere. Aplicaia permite acest lucru prin folosirea unui
buton de Auto-assign, care va declana algoritmul de auto-atribuire a taskurilor. Nu este
obligatorie folosirea acestui algoritm, deoarece, de obicei, ntr-un proiect taskurile se
atribuie n funcie de experien, cunoaterea tehnologiilor etc. n Scrum, dezvoltatorii
- 44 -
decid singuri cum ii vor atribui taskurile, de aceea este important ca aplicaia s permit
auto atribuirea, ct i atribuirea manual.
max_possible_hours=constant
sort list_of_tasks
sort list_of_programmers
break
Acest algoritm asigur certitudinea c taskurile cele mai lungi, la care pot aprea cele
mai mari ntrzieri, sunt atribuite nti programatorilor cei mai buni. De asemenea se
asigur c, n procesul de atribuire de taskuri, programatorii cei mai buni vor fi luai n
calcul, nainte de a atribui taskuri celorlali.
Observm posibilitatea unor ntrzieri n proiect de 34 de ore, cu 43% mai mult dect
perioada estimat.
Aceast atribuire s-a fcut manual, n timpul edinei de sprint planning. Echipa este
alctuit din juniori i seniori. Acetia au totalul de ore atribuite, precum i productivity
index ca n figura mai jos:
- 46 -
Algoritmul ruleaz rapid, datorit mulimii reduse de date de procesat, apoi putem
urmri noua atribuite a taskurilor.
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.
Observm 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 urmtor, respectiv
Umberto Eco, are atribuite 2 taskuri care totalizeaz 20 de ore. Dan Brown din contr,
avnd indexul de productivitate cel mai mic, are cele mai puine ore atribuite, respectiv 10
ore ale unui singur task, dar care, datorit productivitii reduse, vor putea avea o
ntrziere de 6 ore.
Durata total posibil s-a redus la 107 ore, iar ntrzierea total posibil este acum de
doar 27 de ore. Acest algoritm a redus intrzierea posibil de la 42% la 33% din perioada
estimat.
Limbajul de back-end este C# 4.5, iar pentru front se folosete ASP.MVC 4, rezultnd
o arhitectur Model View Controller.
Baza de date folosit este SQL Server Express 2008, iar ca Object Relational
Mapping (ORM) se folosete Entity Framework 5, disponibil n regim open-source.
Concluzie
Aplicaia Scrum Planner ofer o imagine nou estimrilor clasice, punnd accent pe
om n locul taskului. Programatorul, respectiv cel ce realizeaz taskul este cel de care
trebuie s inem seama atunci cnd estimm.
Aplicaia 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
ntrziere.
Agile este o mulime de metodologii care, pentru a avea rezultate ct mai bune,
trebuie folosite mpreun. Important este cunoaterea proprietilor specifice fiecarei
metodologii i mularea pe proiectul care urmeaz a fi dezvoltat, precum i pe echipa de
dezvoltatori, testeri, business analiti, project manageri care vor lucra mpreun la proiect.
Nu exist nici o metodologie potrivit perfect oricrui tip de proiect i oricrei 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 susintorilor si,
va mbunti considerabil procesul de dezvoltare software. n ziua de astzi, multe
companii IT i muli clieni ai acestora se orienteaz spre aceste metodologii moderne,
deoarece au incredere n rezultatele obinute.
Agile este o direcie care ctig teren, iar n viitor probabil c vom vedea toate
proiectele IT coninnd, mcar intr-o mic parte, idei preluate din metodologia Agile.
- 50 -
Bibliografie
[4] Mikolouk, Kasia Agile Vs. Waterfall: Evaluating The Pros And Cons (2013)
[7] Boehm, Barry A Spiral Model of Software Development and Enhancement (1986)
[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
[17] Martini, Arialdo 8 practical rules for producing decent estimates (2012)
[21] http://grouper.ieee.org/