Modularizare
Modularizarea este actiunea de impartire a unui proiect mai complex in unitati functionale sau structurale mai simple, care sa poata fi realizate mai usor si care sa necesite intr-un anumit moment al executarii lor mai putine resurse implicate. Pentru o modularizare de succes trebuie tinut cont de mai multe aspecte:
modulele este bine sa aiba cat mai putine interactiuni intre ele (sa fie cat mai independente unele de altele). In principiu se urmareste sa existe doar o interfata simpla si bine specificata prin care un modul sa comunice cu altele, in asa fel incat chiar daca apar modificari in interiorul acelui modul, ele sa nu afecteze alte module din proiect
daca resursele o permit, este bine sa se conceapa modulele in asa fel incat ele sa poata fi executate in paralel. De exemplu daca avem o echipa de trei programatori este ineficient sa impartim un proiect in etape gen: baza de date, interfata utilizator, etc, la fiecare asignand un programator, fiindca pana cand baza de date nu este realizata, cel care lucreaza la interfata utilizator, nu va avea ce face sau invers. In aceasta situatie este mult mai bine sa modularizam proiectul in module care pot fi executate concurent (in paralel), de exemplu un programator va lucra la conturile utilizatori, altul la partea de grafice si al treilea la salvare/incarcare din fisier
din experienta, de multe ori apar intarzieri in realizarea dievrselor module, astfel incat trebuie sa existe o marja de siguranta in timpii alocati realizarii lor si in acelasi timp, daca avem anumite termine limita care trebuie neaparat respectate, sa putem, in caz de urgenta, sa realocam pentru un modul resurse alocate altui modul, cu executare mai putin urgenta
Use Case-uri
Use case-urile modeleaza interactiunile dintre un agent extern si un modul software. Din acest punct de vedere, modulul software este privit ca un black box si in aceasta etapa a proiectarii suntem interesati doar de intarile si iesirile sale. Pentru un proiect putem avea mai multe use case-uri, pe masura ce detaliem implementarea diverselor module. In aceasta situatie chiar un modul in sine poate sa fie considerat un agent extern pentru alt modul.
Actorii sunt figurati prin omuleti si sunt situati in stanga diagramei. Modulul al carui functionalitate se descrie ocupa partea din dreapta a diagramei si este impartit pe componente principale care sunt figurate prin elipse. Interactiunile dintre actori si componente sunt figurate prin linii continue, pe care sunt scrise actiunile propriu-zise. Relatiile de extindere intre componente sunt figurate cu sageti desenate cu linii intrerupte pe care scrie <<extend>>, cu sageata orientata catre modulul mai general. Intre componente mai pot sa existe relatii de includere, figurate prin sageti cu linii intrerupte orientate catre componenta mai generala, pe care scrie <<include>>. Acestea sunt folosite pentru a descrie use case-uri pariculare, care sunt detaliate in alta parte. Si intre actori pot sa existe relatii de generalizare, figurate printr-o sageata cu linie continua, indreptata de la actorul specializat la cel mai general. De exemplu, intr-un site, un utilizator logat reprezinta o specializare a unui vizitator.
In use case-uri, pe masura ce aprofundam relatiile intre module, pe langa interactiunile dintre agenti si module, mai pot sa apara dependente intre module in sensul de extindere si includere. In exemplul de mai sus este ilustrata o posibila diagrama use case pentru modulul de salvare de imagini al unui program de grafica. Actorii implicati sunt utilizatorul care doreste sa salveze o imagine si sistemul de operare pe care ruleaza programul. Modulul de salvare imagine este compus din trei componente si anume:
interfata utilizator - permite utilizatorului sa interactioneze cu modulul; in ea pot sa fie selectate numele fisierului si formatul grafic dorit
libraria de formate grafice - asigura codarea imaginii din program intr-un anumit format grafic si salvarea acesteia pe disc; in cazul nostru aceasta librarie mai are doua componente specializate, unul pentru salvarea imaginilor in format JPG iar celalalt in format PNG (aceste doua componente sunt necesare fiindca utilizatorul trebuie sa poata alege gradul de compresie pentru formatele JPG si PNG)
rezultat - la sfarsitul operatiei de salvare utilizatorul trebuie sa fie informat daca salvarea s-a efectuat cu succes sau daca a intervenit vre-o eroare (de exemplu nu mai este spatiu pe disc); din acest motiv componenta rezultat trebuie sa interactioneze atat cu utilizatorul cat si cu sistemul de operare
Diagrame de activitate (Activity Diagrams)
Diagramele de activitate modeleaza sistemul din punctul de vedere al unui automat cu stari finite si al interactiunilor dintre stari. O stare reprezinta un aspect indivizibil, care poate sa fie constituit din mai multe operatii, dar in care se poate intra doar printr-u anumit punct de intare si se poate iesi doar printr-un anumit punct de iesire.
Starile sunt figurate prin dreptunghiuri. Tranzitiile intre stari sunt figurate prin sageti. Conditiile logice pentru selectarea unor tranzitii particulare sunt figurate prin romburi. Punctele de inceput si de sfarsit ale diagramei (care trebuie sa fie unice), sunt figurate prin elipse.
In exemplul de mai sus, este ilustrata o posibila diagrama de activitate pentru modulul de salvare de imagini al unui program grafic. Din diagrama se constata ca atunci cand utilizatorul selecteaza butonul de salvare, programul va afisa fereastra de salvare de imagini. In aceasta fereastra, utilizatorul poate sa selecteze formatul grafic dorit pentru salvare, numele imaginii salvate, sa apese butonul de salvare pentru a salva imaginea sau sa apese pe butonul de renuntare, caz in care se inchide fereastra de salvare si se revine in programul principal. Sagetile de la selectie format grafic si selectie nume arata ca utilizatorul poate sa treaca ori de cate ori doreste prin acesti pasi si in orice ordine. In monentul in care se apasa butonul de salvare, se inchide fereastra de salvare si se salveaza propriuzis imagiena in fisier. Dupa operatia de salvare, se testeaza daca ea a fost efectuata cu succes si in functie de aceasta se afiseaza un mesaj de succes sau unul de eroare.
Diagrame Gantt
Diagramele Gantt sunt o modalitate de specificare temporala a modulelor care alcatuiesc un proiect. Pentru aceasta se considera pe orizontala axa timpului, iar pe verticala modulele constituente. Pe linia corespunzatoare fiecarui modul se hasureaza intervalul alocat acelui modul, corespunzator axei timpului. Rezulta astfel o serie de segmente care reprezinta perioade de timp alocate executarii fiecarui modul, segmente care pot sau nu sa aiba suprapuneri pe verticala. Tinand cont ca un modul are alocate mai multe resurse (umane, materiale, etc), diagrama Gantt ne ajuta sa alocam timpul necesar executarii fiecarui modul, in asa fel incat daca doua module necesita o aceeasi resursa ele sa nu aiba suprapuneri pe axa timpului. Totodata, daca doua module depind unul de celalalt, in sensul ca se poate realiza ce de-al doilea numai dupa ce primul a fost finalizat, acest aspect se marcheaza pe diagrama Gantt cu o sageata care porneste de la sfarsitul primului modul si se termina la inceputul celui de-al doilea modul.
Pentru fiecare modul se pot specifica resursele implicate, observatii si in acelasi timp, de-alungul executarii proiectului, se poate specifica procentul din modul realizat pana la acea data. In diagramele Gantt mai pot sa apara si informatii suplimentare, de exemplu timpul alocat unui modul poate fi impartit in 3 etape: estimare optimista, estimare normala si estimare pesimista. Marcajele pot avea diverse culori, care sa specifice de exemplu faptul ca acel modul este mai complex sau ca necesita mai multe resurse, etc.
Unele programe pentru diagrame Gantt pot sa realizeze automat, pornind de la resursele asociate diverselor module si de la perioadele necesare executarii acestora, un alt tip de diagrame in care pe verticala sunt dispuse toate resursele implicate in proiect si pe axa timpului se marcheaza folosirea acestora. Astfel, se pot vedea care sunt perioadele in care o anumita resursa este folosita si in care perioada este libera, putandu-se realiza o eficientizare mai mare a folosirii ei.
Diagrama Gantt de mai sus a fost realizata folosind programul TIMIOS GANTT DESIGNER: http://timios.net/gantt/