Curs 2 Curs 4

[Curs nr.3]


Stabilirea unui proces rational de dezvoltare

Nu este suficient sa se cunoasca doar produsele care rezulta in decursul dezvoltarii unui sistem software: este necesar si un proces bine definit care sa precizeze cum si cand se genereaza produsele respective.

S-a constatat ca toate proiectele soldate cu succes au fost dezvoltate intr-o succesiune ciclica compusa din 3 tipuri de activitati:

In figura de mai jos sunt redate cele 3 tipuri de activitati, aratandu-se evolutia ponderii lor in decursul ciclului de viata:

Descoperirea este activitatea de investigare care are ca scop intelegerea comportamentului dorit pentru sistemul software. Varful acestei activitati se atinge in timpul fazei de analiza, dar ea nu inceteaza cu totul niciodata, deoarece este imposibil sa se stie totul cu privire la comportarea sistemului. Uneori, la sfarsitul ciclului de viata este posibil ca descoperirea sa inregistreze o noua crestere: acest lucru se datoreaza faptului ca sistemul care tocmai a fost produs introduce el insusi o modificare a mediului inconjurator, in sensul ca poate determina utilizatorii sa descopere noi cerinte, pe care nu le-ar fi putut sti dinainte.

Creatia este activitatea care conduce la obtinerea arhitecturii sistemului. Varful acestei activitati se atinge in timpul fazei de proiectare, cand se adopta deciziile strategice majore precum si deciziile tactice care, impreuna, contureaza forma sistemului. La inceputul ciclului de viata creatia se poate manifesta ca o experimentare a unor tehnologii sau concepte noi. De asemenea, pe parcursul evolutiei sistemului creatia se poate manifesta la nivelul proiectarii detaliilor aplicatiei.

Implementarea este activitatea de programare, testare si integrare care are ca rezultat aplicatia executabila. Varful acestei activitati se atinge pe durata fazei de evolutie, dar ea poate sa aiba loc si la inceputul ciclului de viata, cand se pregatesc instrumentele software ce urmeaza a fi folosite si se creaza diverse seturi de componente de uz general.

De regula activitatile de descoperire, creatie si implementare se desfasoara una dupa alta, sub forma unor unde ce se suprapun partial, asa cum se vede si in figura de mai sus. Produsele rezultate pe durata ciclului de viata al proiectului vor evolua iterativ si incremental de-a lungul acestor unde.

Pentru o organizatie producatoare de software este foarte important ca activitatile mentionate mai sus si produsele rezultate sa se realizeze in contextul unui proces matur si repetabil. Elaborarea de sisteme software la nivel industrial este dificila tocmai din cauza caracterului sau iterativ si incremental:

Abordarea productiei industriale de software necesita existenta unor metode de dezvoltare.
O metoda cuprinde:
  • O notatie, care serveste ca mijloc de exprimare a deciziilor strategice si tactice.
  • Un proces, care precizeaza cum si cand trebuie dezvoltate anumite produse.

Metodele OO constituie o categorie particulara a metodelor de dezvoltare software, care privesc construirea sistemelor pentru care clasa reprezinta unitatea arhitecturala fundamentala.
O notatie utila trebuie sa indeplineasca 3 roluri:

In cazul metodelor OO s-a impus notatia UML.

Un proces bine definit are 4 roluri:

Fiecare organizatie producatoare de software poate fi clasificata in functie de maturitatea procesului pe care il urmeaza. Exista 5 nivele distincte ale maturitatii procesului de dezvoltare:

3.Macro-procesul

Asa cum s-a aratat intr-un capitol precedent, unul din factorii care disting un proiect sanatos de unul nesanatos este utilizarea unui ciclu de viata iterativ si incremental. Acest proces trebuie sa fie dirijat de riscuri, adica la fiecare iteratie mai intai se evalueaza riscurile majore, apoi se directioneaza resursele in sensul surmontarii riscurilor respective.
Macro-procesul unui proiect OO trebuie sa realizeze o detaliere succesiva a arhitecturii sistemului. Exista 3 elemente importante ce caracterizeaza macro-procesul:

Fazele majore ale macro-procesului includ: Aceste faze nu se inlantuie liniar, ca in cazul modelului in cascada, ci intr-un mod asemanator spiralei lui Bohem. Fiecare din aceste faze cuprind o suita de activitati care la randul lor sunt denumite:
In cele ce urmeaza fiecare faza a macro-procesului va fi descrisa in termenii urmatoarelor coordonate:


Conceptualizarea

Scop: stabilirea cerintelor esentiale ale sistemului de dezvoltat.
Nu fiecare proiect necesita aceasta faza. Recomandarea este de a efectua conceptualizarea doar atunci cand riscurile unui proiect sunt relativ mari sau cand este necesar sa se stabileasca o legatura initiala intre beneficiar si proiectant. Altfel, este indicat sa se treaca direct la analiza.
Riscurile asociate cu un proiect pot sa fie mai ridicate ca de obicei, in anumite circumstante, si anume: abordarea unui domeniu necunoscut al problemei, introducerea unei tehnologii noi (o noua platforma, un nou limbaj, noi instrumente software sau chiar noi modele ale procesului de dezvoltare). De asemenea, riscurile devin mai mari in conditiile existentei unor cerinte deosebite: performante sau capacitate crescute.
Demararea unui proiect software reprezinta aproape intotdeauna o sursa de cheltuieli, atat din partea beneficiarului, cat si din partea proiectantului. De aceea, uneori este necesara faza de conceptualizare pentru ca cei 2 sa stabileasca clar care sunt limitarile si necesitatile fiecaruia.
In legatura cu riscurile unui proiect exista urmatoarea regula:
Riscurile unui proiect incep sa atinga proportii critice din momentul in care se schimba mai mult decat 2 factori care caracterizeaza practica existenta in organizatia respectiva: echipa, baza tehnologica, platforma, metoda, instrumentele, limbajul de programare si cerintele sistemului.
In fine, conceptualizarea serveste ca un prototip al proiectului in ansamblu. La terminarea acestei faze, managerii trebuie sa poata raspunde la urmatoarele 2 intrebari:

Produse: pe durata conceptualizarii se genereaza 3 produse:

  • Un prototip executabil. Este cel mai important produs, deoarece constituie o proba palpabila pentru stabilirea corectitudinii unor ipoteze legate de functionalitatea, performanta, marimea, complexitatea proiectului, inca din fazele incipiente. Un asemenea prototip trebuie sa aiba 2 caracteristici:
      • arie larga de cuprindere, adica sa ia in considerare cat mai multe functiuni ale sistemului;
      • lipsa detaliilor; un prototip este in mod implicit un produs incomplet, care trebuie realizat repede si cu costuri minime, in nici un caz nu trebuie sa-si propuna sa contina cod de calitate. De cele mai multe ori aceste prototipuri se arunca.
  • O evaluare a riscurilor. Este o simpla enumerare a riscurilor tehnice si non-tehnice identificate care sa evidentieze obstacolele care ii asteapta pe proiectanti.
  • O viziune generala asupra cerintelor sistemului.

Activitati:
Activitatea de baza care se efectueaza consta in elaborarea unui prototip in vederea evidentierii riscurilor. Aceasta presupune urmatorii pasi:

Agenti: pentru elaborarea prototipului cel mai eficient este sa se utilizeze o echipa mica, formata din arhitectul sistemului si 1-2 proiectanti, care vor participa si mai departe, la analiza si proiectare. Arhitectul va participa efectiv la construirea prototipului, nu se va margini doar la a schita planuri.
 

Jaloane si masuratori: cel mai important reper in aceasta faza este predarea prototipului. Daca echipa depaseste termenul, e clar ca planificarea termenelor reprezinta in continuare un factor de risc, Aceasta inseamna ca fie trebuie relaxate anumite restrictii (termene sau functionalitati), fie explorate alte alternative.
Cea mai importanta masuratoare in aceasta faza este evaluarea gradului in care prototipul a acoperit toate obiectivele stabilite la inceput. Daca prototipul nu indeplineste unele din cerintele enumerate, acesta e un semn ca cerintele respective prezinta un risc tehnic ridicat.


 
 
 

Analiza

Scop: dezvoltarea unui model al comportarii dorite a sistemului.
Fiecare proiect are nevoie de aceasta faza. Ignorarea sau fusarirea ei va duce in mod sigur la situatia in care sistemul rezultat nu va fi ceea ce a cerut beneficiarul.
Analiza se concentreaza asupra comportamentului, nu a structurii. La terminarea acestei faze, managerii trebuie sa poata raspunde la urmatoarele intrebari: Procesul de cautare a raspunsurilor la aceste intrebari reprezinta un impuls pentru utilizatorii sistemului de a formula mai bine ceea ce doresc. Primele 5 intrebari din lista de mai sus servesc, in particular, la stabilirea unui vocabular comun intre expertii in domeniu, utilizatori si proiectanti.
Concentrandu-ne asupra comportamentului, vom putea identifica punctele de functionare (function points) ale sistemului. Acestea reprezinta ansamblul comportarii observabile din exterior si testabile a unui sistem. Din perspectiva utilizatorului, un punct de functionare reprezinta o actiune primara a sistemului, ca raspuns la un eveniment extern. Din perspectiva analistului, un punct de functionare reprezinta o anumita cuanta de comportament. Punctele de functionare sunt o masura a complexitatii: cu cat sunt mai multe, cu atat sistemul e mai complex. Captarea semanticii unui punct de functionare se realizeaza prin intermediul unui scenariu.
Analiza nu este o faza inchisa, in sensul ca nu putem avea pretentia de a obtine o intelegere completa asupra sistemului inainte de a trece la proiectare. Este suficient daca pentru inceput se realizeaza analiza celor mai importante functii ale sistemului, considerandu-se comportamentul primar si secundar implicat.

Curs 2 Curs 4