Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Aa cum arat statisticile principala cauz a eecului proiectelor software este insuficienta implicare a
clienilor. Buna nelegerea a problemelor clientului, neaprat legat de mprtirea unei viziuni comune ntre
echipa de dezvoltare i client sunt dou faete de baz ale implicrii clientului. Fr ele, echipa de dezvoltare nu
are referinele de baz pentru a putea ti dac ceea ce dezvolt este corespunztor sau nu i, prin urmare,
implicarea puternic a clientul n proiect i nelegerea comun a problemelor lui este vital.
Altfel, este ca i cum te-ai deplasa ntr-o direcie oarecare, fr s tii unde vrei s ajungi.
Mesajul acesta este adesea (i cel mai bine!) ilustrat printr-o caricatur despre diferena care apare adesea
n practic, ntre problema clientului, nelegerea problemei i ceea ce se realizeaz de fapt (vezi imaginea)
n literatura de specialitate sunt descrise mai multe Cicluri de dezvoltare software. Dintre acestea, dou au
importan asupra a ceea ce se dorete a fi discutat n aceast carte i, din acest motiv, sunt prezentate numai
acestea dou. De asemenea, nu se dau toate detaliile acestor cicluri ci se prezint numai ceea ce este util din
punct de vedere al Analizei Software.
Ciclul de dezvoltare n cascad (n V)
Cel mai vechi model i cel mai cunoscut este ciclul n cascad (waterfall). El este o secven de stadii n
care finalul unui stadiu este nceputul altuia. Aceste stadii sunt (de notat c n unele cri apar mai multe, fiind
incluse studiul de fezabilitate, integrarea sau instalarea, stadii care pentru lucrarea de fa sunt mai puin
relevante i pe care nu le vom prezenta):
1. Analiz
n aceast etap a proiectului are loc definirea a ceea ce trebuie dezvoltat. Obiectivul aici este s se afle
nevoile clientului i s se defineasc foarte clar cerinele privind viitorul produs software.
2. Design
Aceast etap are ca obiectiv modelarea viitorului sistem, vzut ca soluie a problemelor determinate n
faza de analiz. Dac Analiza i propunea s determine ce trebuie fcut, faza de Design trebuie s arate cum
trebuie fcut.
n aceast faz sunt proiectate funcionalitile pe care viitorul sistem va trebui s le aib.
3. Dezvoltare
Aceast
faz
nseamn
scrierea
efectiv
codului,
dezvoltarea
efectiv
acestuia.
4. Testare
n aceast faz produsul este testat pentru descoperirea anomaliilor n funcionare, astfel nct la final s
corespund cerinelor definite n faza de Analiz.
n afar de aceste faze eseniale ale procesului de dezvoltare, mai trebuie totui menionate i deploymentul, acceptana i mentenana. Acceptana este faza (sau momentul) n care clientul recepioneaz sistemul
software, accept c acesta corespunde cerinelor lui i i d acordul pentru intrarea n faza de mentenan.
Intrarea n faza de mentenan nseamn ncetarea includerii oricror noi cerine n sistem i corectarea bugurilor (anomaliilor n funcionare). Aceast faz este important pentru c ea constituie adesea o faz
costisitoare, dar i prea adesea ignorat.
Modelul de mai sus este, cu siguran, un model mai degrab teoretic, el bazndu-se pe presupunerea
(evident fals) c cerinele definite n prima faz nu se vor schimba pn la sfritul proiectului. n realitate
schimbarea cerinelor este singurul lucru stabil n software. ntotdeauna, n decursul proiectului, cerinele se vor
schimba (axioma A1).
Marele rezultat al existenei acestui model este evident de ordin teoretic. El ne d imaginea clar a faptului
c anumite activiti nu pot fi executate dect dup finalizarea altora, de alt natur sunt dependente de ele.
4
Dac la ciclul n cascad disciplinele implicate n proiect (Analiz, Design, Implementare, Testare) se
confundau cu fazele de proiect, n ciclul iterativ acestea nu mai pot fi privite ca faze ci ca ceea ce sunt ele de
fapt: discipline implicate mai mult sau mai puin n fiecare iteraie din proiect.
n acest ciclu, fiecare nou iteraie nseamn detalierea (sau clarificarea), adugarea, modificarea eventual
eliminarea unor elemente definite n iteraiile anterioare. De asemenea, fiecare iteraie permite i validarea a
ceea ce s-a fcut pn n acel moment.
Acest ciclu mai are i avantajul c permite implicarea clientului chiar i n fazele avansate de dezvoltare a
produsului, astfel nct s se obin un preios feed-back. Acest feed-back va putea fi integrat n produs n
iteraiile urmtoare.
Spre finalul discuiei o doamn de la contabilitate i amintete c ea vrea neaprat un buton cu care
sistemul s fac automat importul facturilor din Excel. I se explic rapid c aceast funcionalitate necesit nite
dezvoltri care nu erau prevzute dar asta o nemulumete profund: se subnelege c sistemul trebuie s fac
asta pentru c altfel este inacceptabil. Ea nu are nevoie de acest sistem dac nu face atta lucru i c ea nu este
dispus s bage de mn facturile n sistem. Abil, eful nostru i promite c va cuta o soluie i micul conflict se
aplaneaz.
ntoars acas, echipa de dezvoltare ncepe organizarea. Este numit un responsabil cu scrierea
specificaiei care trebuie terminat n dou sptmni c s scpm de treaba asta i s ne apucm de lucru.
Scrierea specificaiei va fi bineneles supervizat de eful de proiect, cel mai n msur s fac asta (chiar ar
face el specificaia dar nu are timp).
n fine, dup alte trei edine cu clientul i dup o lun de efort, specificaia este gata, semnat i
parafat. Echipa poate ncepe s lucreze cu adevrat. Se mpart task-urile pentru programatori: tu te ocupi de
capitolul 1 din specificaie, tu de capitolul 2 i aa mai departe. Dac sunt neclariti programatorii sunt liberi s
ntrebe. Se fac edine sptmnale n care se gsesc soluii tehnice la diversele probleme. Din cnd n cnd
eful de proiect mai cere lmuriri la client n legtur cu o problem sau alta. Dac unele "lmuriri" se bat cap
n cap cu specificaia, se planific o ntlnire la client i se ia o decizie, de comun acord. Proiectul merge bine, n
direcia ateptat chiar dac apar din cnd n cnd bug-uri sau probleme de integrare (este interesant c aproape
toat lumea poate face astfel de evaluri, chiar dac "direcia ateptat" este definit vag i, de obicei, se
rezum la evoluia cantitii de cod scris).
Dup opt luni de la nceputul proiectului, echipa actual ncepe s realizeze c exist unele ntrzieri.
Pentru anumite module se pune problema c programatorul care a nceput treaba a plecat din echip, iar cel care
i-a luat locul nu nelege prea bine ce are de fcut i nici de ce s-a fcut ntr-un fel sau altul.
eful de proiect s-a sturat s tot pun ntrebri la client aa c rspunde la problemele ridicate de
programatori cu nite presupuneri logice, care, simte el c nu au cum s nu fie acceptate. Oricum, i n echipa
de proiect a clientului s-au fcut modificri i nimeni nu mai tie ce s-a cerut cu cteva luni n urm.
Actualizarea specificaiilor a fost abandonat demult pentru c nu mai era timp pentru aa ceva i oricum
s-a dovedit o activitate inutil.
Dup unsprezece luni i jumtate este clar c proiectul e n ntrziere. Dei s-a dezvoltat aproape tot, mai
sunt cteva probleme importante care nu au fost nc abordate din lips de timp, pentru care nu exist o soluie
sau soluia dat nu este acceptat de client i trebuie fcute dezvoltri complexe. Testarea, care acum merge n
plin, d foarte mult de lucru echipei de dezvoltatori care nu mai fac fa rezolvrii bug-urilor. edinele de
analiz cu eful de departament arat clar c principalul vinovat este clientul care nu tie prea bine ce vrea i
care i-a schimbat foarte mult cerinele. Evident, i echipa este puin vinovat pentru c nu a reuit s l in n
fru, dar acum clientul trebuie s neleag c proiectul nu se poate termina la termen.
Dup alte ase luni, eful de proiect din partea clientului l anun pe directorul su general c proiectul,
dei se afl n mare ntrziere, nu este deloc ceea ce se atepta s fie (dei, privind n urm putem vedea c
aceast ateptare nu a fost niciodat definit riguros), c responsabilii din departamente nu sunt mulumii de
sistem, iar unii au declarat c ei nu l pot folosi sub nici o form. La departamentul de producie este evident c
utilizarea sistemului ar produce un blocaj.
Se decide o nou ntlnire ntre pri, se analizeaz situaia, se iau msuri...
Decompoziia
Directorul companiei XYZ se plnge c nu i poate planifica corect aprovizionarea i c pierde foarte
muli bani din cauz c nu are ntotdeauna suficient marf atunci cnd apar oportuniti de vnzare sau, invers,
pierde bani pentru c i se altereaz cantiti nsemnate de marf n stoc din cauz c s-a achiziionat mai mult
dect era necesar.
Pentru a rezolva o asemenea problem, pe care foarte adesea oamenii o formuleaz, de exemplu sub forma
"probleme cu aprovizionarea" sau "nu se aprovizioneaz conform necesarului real" primele soluii care apar sunt
pe msura gradului de generalitate al descrierii (specificaiei) problemei i adesea sunt, dup caz, chiar hilare:
"s se aprovizioneze conform necesarului real" (soluia este o inversare a problemei: "nu se face cutare lucru",
devine "s se fac cutare lucru").
Dei asemenea soluii nu sunt greite n sine, ele nu ne sunt utile. Problema iniial, "nu se aprovizioneaz
conform necesarului real" transformat n soluia "s se aprovizioneze conform necesarului real" este n
continuare o problem. Cum s se aprovizioneze conform necesarului real i care este necesarul real?
Pentru a rspunde acestei probleme este, evident, nevoie ca ea s fie spart n buci mai mici adic,
tradiionalul divide et impera (pentru c noi romnii avem o tradiie n asta i suntem foarte buni la aa ceva,
tim foarte bine s fim divizai).
Pentru a se aproviziona conform necesarului real, domnul XYZ (dnsul este directorul companiei XYZ,
desigur) va trebui (1) s tie care este necesarul real i (2) s achiziioneze exact atta ct a decis c este
necesarul real.
Pentru a determina necesarul real trebuie, mai departe, s tie (1.1) ct a vndut n trecut, (1.2) ce comenzi
curente are i (1.3) ce cantitate de marf are n stoc.
Pentru a achiziiona exact atta ct a decis c este necesarul real trebuie s poat, n orice moment, (2.1) s
afle cantitile deja comandate la furnizori i (2.2) s poat determina diferenele dintre necesarul calculat i
comenzile trimise la furnizori:
Aa cum probabil v ateptai deja, n Analiza Software, decompoziia este utilizat foarte des. Este
aproape o legtur organic, definitorie ntre Analiz i descompunere. Pentru specialistul n software ns,
trebuie s fie foarte clar, de la nceput, c nu toate sub-problemele de business determinate prin descompunere
se vor rezolva prin soft. Mai multe amnunte n articolele urmtoare...
Probabil c metoda iterativ mprumut cte ceva de la fiecare dintre celelalte trei metode. Important, n
cazul ei, este urmtorul aspect: fiecare dintre iteraii rezolv atta ct este posibil n acel stadiu i creeaz baza
pentru ca n iteraia urmtoare s se poat face un nou pas. Fiecare etap trebuie s aduc echipei de proiect
rezolvarea acelor probleme, precum i suficient feed-back, nct etapa urmtoare s poat fi desfurat cu
efectul scontat i cu risc minim.
Evident, aceast metod nu trebuie confundat cu ciclul de dezvoltare iterativ deoarece sunt lucruri
diferite, chiar dac ea poate fi considerat baza teoretic pentru acest ciclu.
folosi ca referin. Dac documentul nu exist, cele dou puncte de vedere, precum i evoluia lor n timp nu au
un element comun palpabil i fr echivoc, o referin acceptabil.
Aadar, conform punctului 3 din definiia cerinei, o cerin care nu este documentat nu exist.
Observm, din definiia de mai sus, c cerina, privit din partea utilizatorului sistemului este ceva util
pentru rezolvarea unei probleme, n timp ce, pentru dezvoltator cerina este ceva ce el trebuie s dezvolte,
conform specificaiei. Ca urmare, cerina trebuie exprimat n aa fel nct s poat fi interpretat fr dubii de
ambele pri, pentru c ea este destinat n egal msur ambelor pri.
Pe de o parte, pentru utilizator este important rezolvarea propriilor probleme, fr ca detaliile tehnice ce
in de rezolvarea lor s fie relevante. De cealalt parte, dezvoltatorul are nevoie de o referin pentru a ti ce s
dezvolte, n timp ce problemele utilizatorului au relevan mai sczut. Aici, la mijloc ntre cei doi se situeaz
Analistul software i produsul munci sale: cerina software un document care arat utilizatorului soluia
problemei lui iar dezvoltatorului ce trebuie s dezvolte.
Aa cum se vede n figura de mai sus, n cadrul evoluiei de la Problem la Soluie, specificarea cerinei
este pasul intermediar: ea este, pentru utilizator, soluia vizat a problemei lui, iar pentru dezvoltator este
problema pe care o are de rezolvat.
Dup cum vom vedea i n continuare, cerinele exprimate n limbaj inteligibil, sub forma documentelor
de specificaii software, agreate de ctre client i de ctre echipa de dezvoltare, constituie referina de baz
pentru toi cei implicai n proiectele software: pentru project manageri, n determinarea i urmrirea task-urilor
sau pentru inginerii de testare, n realizarea testelor.
11
Astfel sub-problema 1.1 Cunoaterea vnzrilor din trecut se transform n: Introducerea facturilor de
vnzare n Sistem i Generare raport de vnzri din Sistem (presupunem c rezolvnd aceste dou chestiuni se
rezolv complet problema cunoaterii vnzrilor din trecut, chiar dac n realitate lucrurile ar putea s fie mai
complicate).
De la acest nivel de detaliere e clar c anumite probleme, i anume cele de pe ultimul nivel de detaliere, nu
mai sunt probleme pe care directorul companiei XYZ, sau chiar managerul de achiziii, s le rezolve nemijlocit
ci sunt task-uri adresate altui nivel de utilizatori.
Astfel, dac task-ul determinrii necesarului real i al urmririi achiziiilor este destinat nivelului
managerial, task-ul Introducerea facturilor de vnzare n Sistem este adresat unui alt utilizator, implicat direct
n derularea business-ului.
Noul nivel adugat nsemn nivelul la care este vizibil interaciunea dintre utilizatori i Sistem. Pentru
"Introducerea comenzilor n sistem" este evident c este necesar o funcionalitate n Sistem, aferent acestei
probleme. n fond, pe acest nivel ajungem la cerinele software pure, cele care se supun 100% definiiei date la
capitolul referitor la definiia cerinei: din punctul de vedere al utilizatorului trebuie rezolvat task-ul introducerii
facturii n Sistem iar din punctul de vedere al dezvoltatorului trebuie dezvoltat funcionalitatea aferent.
Dac ar fi s se detalieze din nou chestiunea Introducerii comenzilor n sistem, dar propunndu-ne s ne
modelm deja viitorul sistem informatic (s ne imaginm un flux complet de lucru cu Sistemul!) ar rezulta
urmtoarele funcionaliti pretinse Sistemului: adugare factur, modificare factur, tergere/anulare factur:
12
Acesta este nivelul la care granularitatea maxim a problemelor din business-ul real ating nivelul la care
poate fi conceput un sistem informatic: adaug, calculeaz, terge, modific, selecteaz, compar etc.
Privind n sens invers, de jos n sus, aceste funcionaliti sunt acelea pe care utilizatorul, ntr-un flux de
lucru cu Sistemul, le utilizeaz pentru rezolvarea task-urilor sale. Apoi, pe un nivel mai sus, din task-urile
utilizatorilor sunt rezolvate problemele de business.
Prin urmare, se pot stabili urmtoarele niveluri ale cerinelor software [1]:
A. Cerine de business: acestea sunt cerinele de pe cel mai nalt nivel i sunt obiectivele (sau problemele)
de nivel nalt ale clientului. Aa cum vom vedea n continuare aceste cerine sunt de obicei descrise ntr-un
document denumit Vision & Scope.
B. Cerine utilizator: pe acest nivel sunt task-urile pe care utilizatorul le va putea ndeplini utiliznd
produsul software. Aceste cerine sunt specificate de obicei sub form de use case-uri.
C. Cerine funcionale: sunt cerinele adresate direct viitorului Sistem, funcionalitile care trebuie
dezvoltate pentru ca utilizatorii s i poat ndeplini task-urile. Acest nivel este nivelul cel mai apropiat de
designul Sistemului.
n figura de mai jos se pot vedea att nivelurile cerinelor, ct i nivelurile din business care le genereaz,
precum i documentele de specificaii utilizate n general pentru acel nivel de cerine (sgeile cu vrful n jos
nseamn de obicei descompunere):
13
(sau "ce se rezolv prin..."). De pild, Introducerea facturilor de vnzare (C1) este un element care ajut la
Cunoaterea vnzrilor din trecut (SP1.1).
Prin urmare, pornind de la problema iniial, fiecare nivel de descompunere reprezint o soluie, dar n
acelai timp o problem. Totui, la un anumit nivel trebuie s se gseasc soluia final.
Judecnd lucrurile practic, ar fi o eroare s ne nchipuim c putem s lungim lucrurile la nesfrit. Undeva
trebuie s se termine (aa cum bugetul alocat proiectului se termin sigur undeva).
PROBLEM vs. SOLUIE
Privind lucrurile din punctul de vedere al ntregului proiect, soluia ultim a problemei clientului este
desigur aplicaia software n sine, programul executabil livrat clientului. Din punctul de vedere al analistului
ns, programul executabil final este punerea n practic, ntocmai, a unui model (a unei specificaii), ceea ce
conduce la ideea c, pentru analist, dar nu numai pentru el, soluia ultim a problemei clientului se gsete ntr-o
specificaie, ce urmeaz a fi modelul pentru dezvoltarea executabilului altfel spus, proiectul viitorului
executabil.
Aadar, putem mpri spaiul dintre problema iniial a clientului i soluia, constnd n modelul viitoarei
aplicaii software n dou pri distincte: PROBLEMA i SOLUIA. n zona PROBLEMEI vom situa acele
specificaii care descriu problema clientului iar n zona SOLUIEI acele specificaii care descriu modul de
rezolvare a PROBLEMEI. Trebuie spus, din start c nu toate specificaiile din zona SOLUIEI sunt de
competena analistului. Dimpotriv, cea mai mare parte a soluiei este conceput i descris de ctre arhiteci
software sau designeri de soluii software.
De la cerinele clientului la cod
Probabil c, n continuarea exemplului de la capitolul anterior, detalierea pe nc un nivel ar nsemna
descrierea modului de rezolvare a problemelor prin soft, detalierea funciilor pe care viitorul sistem le va avea:
Acest nou nivel de detaliere ncepe deja descrierea propriu-zis a aplicaiei software. La acest nivel, dup
descrierea pe sub-nivele a PROBLEMEI, ncepe descrierea SOLUIEI.
15
Pentru a elimina orice confuzie n legtur cu specificaiile funcionale, trebuie spus c acestea nu conin
detalierea a cum se dezvolt acestea, nu conin elemente de design ci sunt vzute ca funcionaliti pe care
Sistemul software trebuie s le posede pentru a permite realizarea task-urilor utilizatorilor. Sistemul este vzut
aici ca o cutie neagr tim ce funcii trebuie s ndeplineasc dar nu tim cum.
Mai trebuie spus c de la o metodologie de lucru la alta tipurile, coninutul documentelor sau chiar limitele
dintre PROBLEM i SOLUIE pot s difere. n unele cazuri PROBLEMA se ncheie cu specificarea use caseurilor (ceea ce nseamn acoperirea task-urilor utilizatorilor), n altele odat cu Specificaiile funcionale.
Personal, dei susin cu trie c analistul trebuie s se limiteze la zona de business v recomand cu cldur
s v inspirai din metodologiile "clasice": RUP, MSF etc. sau din standardele existente (de pild IEEE Std 8301993: IEEE Recommended Practice for Software Requirements Specifications). Aceasta v va ajuta s v
formai propria prere i s nelegei cum este mai bine s mprii sarcinile n organizaia dumneavoastr.
Problema clientului este legat ntotdeauna de business
n principiu, treaba analistului se termin acolo unde ncep s fie vizibile interaciunile dintre utilizatori i
viitorul sistem informatic. Din acest punct ncepe treaba arhitectului software.
n fond, specificaiile cerinelor se termin, logic, acolo unde clientul nu poate sau nu trebuie s impun
propriul punct de vedere.
16
De exemplu, structura bazei de date, variabile utilizate, componente software reutilizabile, mprirea pe
module nu sunt lucruri asupra crora clientul trebuie s se pronune (cu rare i nedorite excepii).
ntotdeauna se va avea n vedere c documentul de specificaii trebuie asumat i semnat de ctre client n
cunotin de cauz, n deplin nelegere a coninutului su, motiv pentru care nu i se poate pretinde asumarea
soluiilor tehnice sau validarea unor detalii care depesc capacitatea tehnic a acestuia.
n concluzie, documentaia care precede dezvoltarea propriu-zis a codului unei anumite aplicaii software
descrie, pe de o parte PROBLEMA, pe de alt parte SOLUIA. Rolul Analizei este s descrie ct mai corect i
complet PROBLEMA, restrngnd doar din punct de vedere al business-ului clientului spaiul SOLUIILOR
posibile, fr s introduc restricii tehnologice.
n general, PROBLEMA clientului este o problem de business nu o problem de tehnologie.
17
Problema reala a clientului este, de obicei, foarte vasta, mai ales n raport cu bugetul alocat. De aceea,
ceea ce trebuie sa fie domeniul problemei pe care si propune, n mod realist, sa o rezolve un proiect trebuie
negociat astfel nct dezvoltatorul sa nu fie obligat sa lucreze n pierdere (lucru care de obicei degenereaza ntr-o
pierdere de ambele parti) iar clientul sa rezolve cu adevarat problema de baza.
ntr-o prima varianta clientul ntelege ca solutionarea problemei lui solicita o investitie mai mare si
accepta modificarea bugetului pna la acoperirea ntregului necesar:
n cealalt varianta clientul, constrns de probleme bugetare, nu poate mari suma alocata si mpreuna cu
consultantul sau decide sa reduca domeniul problemei la ceea ce si permite sa cheltiue (n urma unei analize de
impact, fie gaseste acele 20% dintre cerinte care rezolva 80% din problema, fie decide ce este mai important si
mai profitabil sa implementeze n acest proiect si ce se poate amna pentru un alt proiect viitor).
n orice caz, la sfrsitul acestei etape presupunem ca avem declarata, chiar n termeni vagi, o anumita
problema si avem alocat bugetul adecvat. Desi n realitate este putin probabil sa se ajunga aici, pentru noi
aceasta simplificare a modelului este utila pentru ntelegerea situatiilor care pot sa apra.
Prin urmare noi vom presupune ca la primul pas am definit (chiar daca destul de vag) domeniul problemei.
Urmatorul pas, culegerea cerintelor este o detaliere a problemei, si rezultatul ei final ar trebui sa fie tot o
suprapunere perfecta peste acel domeniu, numit de noi problema reala sau domeniul problemei. n realitate nsa
nu ne putem astepta la o suprapunere perfecta dar ne propunem, n mod realist, pastrarea unei diferente
minimale, controlata, care sa nu afecteze obiectivele de baza ale proiectului.
Situatiile nefavorabile care pot sa apara sunt urmatoarele:
18
A. n prima situatie, cerintele captate nu acopera problema n ntregime (anumite lucruri nu se vor rezolva)
nsa produce costuri considerabile prin includerea unor cerinte inutile sau a unor cerinte care ies din domeniul
initial al problemei (probleme reale dar care nu contribuie la rezolvarea problemei).
B. n a doua situatie, cerintele captate si acceptate a fi incluse n proiect depasesc posibilitatile bugetare
ale proiectului si va conduce la pierderi financiare, litigii n justitie sau la abateri grave de la calitate.
C. A treia situatie neplacuta, este rezolvarea incompleta a problemei prin omiterea unor cerinte sau
ntelegerea vaga si incompleta altora sau chiar a problemei.
La ce efecte negative ne putem atepta?
Prin urmare, oricare dintre variante poate conduce la urmtoarele efecte negative:
- dezvoltarea unor funcionaliti inutile;
- dezvoltarea unor funcionaliti utile dar n afara domeniului problemei, care ridic probleme de buget;
- omiterea unor funcionaliti necesare sau chiar eseniale.
Am numit aceste rezultate negative efecte negative pentru c lucrul ctre care trebuie s ne ndreptm
sunt de fapt cauzele de la baza ntregului fenomen negativ.
Recapitulnd, efectul ultim este nereuita proiectului n ceea ce privete atingerea obiectivelor legate de
funcionaliti, calitate i buget (simultan), iar din punct de vederea al analizei cerinelor aceasta pornete de la
dezvoltarea unor funcionaliti inutile, dezvoltarea unor funcionaliti necesare dar din afara domeniului
problemei i omiterea unor funcionaliti necesare. La rndul lor aceste fenomene pornesc de la un set de cauze,
aa cum sunt descrise n tabelul de mai jos:
Cauze
- nelegerea slab a problemei clientului, a raiunii
proiectului;
- insuficienta implicarea a clientului;
- cerine ambigue;
- adugarea necontrolat a unor cerine a cror raiune
este neclar;
Efect negativ
- dezvoltarea unor funcionaliti inutile;
ntre cauzele prezentate mai sus "nelegerea slab a problemei clientului", dei poate s par puin
surprinztoare este un fenomen foarte des ntlnit.
Pur i simplu, ntrebai membrii unei echipe de dezvoltare "de ce se dezvolt acest proiect?" sau "de ce
clientul d bani pe acest soft?".
Vei fi surprini s aflai c acel proiect se dezvolt pentru c "aa avem contract cu clientul" (pi nu...!?)
sau "nu tiu, dar dac clientul pltete... e treaba lui", ori "pentru c aa trebuie, nu poi s rmi n urm cu
tehnologia".
Cel mai dramatic este atunci cnd asemenea rspunsuri vin de la persoane care sunt analiti sau project
manageri, nct te ntrebi, firesc, cum se stabilesc acolo prioritile i pe ce baz se negociaz schimbrile?
19
20
aib anumite caracteristici care le fac s fie cerine adevrate, corect specificate i posibil de realizat, n
parametrii bugetari i de calitate determinai.
nainte de a trece efectiv la enunarea acestor caracteristici, v invit s v gndii la cerin aa cum este
definit n capitolul Definiia cerinei software:
1. o condiie sau capabilitate necesar a fi ndeplinit de ctre un sistem, pentru ca un utilizator s poat
rezolva o anumit problem sau s ating un anumit obiectiv; 2. o condiie sau capabilitate pe care un sistem
trebuie s o realizeze sau s o posede pentru a satisface un contract, standard, specificaie sau alt document
formal impus.
Aadar, privit dintr-o parte cerina se vede ca o problem a unui client, privit din cealalt parte este o
soluie furnizat de un anumit sistem. De aceste dou faete ale ei depind caracteristicile de care vorbim n
continuare.
Aceste caracteristici sunt, n principal, urmtoarele (depinznd de autor lista poate fi mai mare sau mai
mic dar cele eseniale sunt acestea):
1. Necesar
O cerin exist dac i numai dac este necesar. Amintind de prima parte a definiiei de mai sus, putem
spune c cerina exist dac exist o problem real de la care pornete. n caz contrar cerina nu exist.
Aceast caracteristic este extrem de util pentru managementul cerinelor, problema din spatele cerinei
fiind, n mod necesar, o frunz din decompoziia problemei mari a proiectului (mai multe detalii n capitolul
Nivelurile cerinelor).
Doar pe baza problemei acesteia vom putea ti dac o cerin se ncadreaz sau nu n proiect.
Pentru a demonstra c o cerin este necesar este nevoie de existena unei legturi ctre cerinele de pe
nivelul superior (mai multe detalii n capitolul Nivelurile cerinelor).
2. Corect
Atunci cnd spunem c o cerin trebuie s fie corect, ne apropiem deja de a doua parte a definiiei de
mai sus (sau mai degrab le cuprindem pe amndou). O cerin este corect dac faeta denumit soluie este,
nimic altceva dect soluia corect la problema dat.
De exemplu, un use case care este gndit pentru realizarea unui anumit task este corect dac niruirea
pailor descrii conduce la realizarea, fr dubii, a task-ului.n caz contrar cerina descris astfel nu este corect.
n general pentru a determina corectitudinea unei cerine este necesar s se fac referire la cerinele de pe
nivelul superior (mai multe detalii n capitolul Nivelurile cerinelor).
3. Complet
O cerin este complet dac reprezint o soluie complet pentru rezolvarea complet a problemei. Dei
cazurile de incompletitudine sunt greu de descoperit, organizarea de review-uri formale cu participarea
oamenilor tehnici din echipa de dezvoltare, de obicei d rezultate.
4. Consistent
O cerin este considerat consistent dac nu intr n contradicie cu alt cerin. De exemplu,
urmtoarele cerine sunt inconsistente:
- autovehiculul se va deplasa cu viteza maxim de 100 km/h;
- autovehiculul va parcurge 200 de km n maximum o or.
5. Verificabil
O cerin este verificabil (testabil) dac permite realizarea validarea fr echivoc a soluionrii ei prin
msurare sau testare. De exemplu, sistemul va permite derularea optim a activitii, timpul de rspuns va fi
ct mai mic cu putin sau sistemul va putea fi accesat de un numr mare de utilizatori simultan sunt cerine
care nu pot fi verificate n mod cert, fr dubii.
22
Oricnd se poate pune ntrebarea ce nseamn derularea optim a activitii, cnd se poate spune c inta a
fost atins?
6. Clar (fr ambiguiti)
O cerin poate fi considerat lipsit de ambiguiti atunci cnd poate fi interpretat ntr-un singur fel.
Dac mai muli cititori neleg lucruri diferite atunci cerina este ambigu.
Pentru a ine sub control fenomenul existenei ambiguitilor (axioma A4, care spune c niciodat oamenii
implicai n proiect nu sunt perfeci, ne spune c ele sunt inerente) trebuie organizate review-uri ale specificaiei.
De asemenea, specificaiile vor fi folosite ca surs primar pentru crearea planurilor de teste i a manualului de
utilizare.
7. Trasabil
Trasabilitatea se refer la posibilitatea de a reface traseul pe care o cerin a luat natere, pornind de la
solicitarea iniial a unui reprezentant al clientului. Acest mod de abordare asigur informaia care justific
existena sau nu a cerinei, precum i posibilitatea de a reface drumul pe care a aprut o cerin, atunci cnd apar
dubii asupra acesteia, asupra sursei sau asupra raiunii ei.
23