Documente Academic
Documente Profesional
Documente Cultură
-Principii generale –
Scopuri:
1) Introducere
Obs. Amploarea proiectului este foarte importantă. Un proiect ce implică 200 oameni diferă (ca
management) faţă de unul ce implică 2 oameni.
Un proiect software are anumite caracteristici care-l diferenţiază faţă de alte tipuri de proiecte:
•Invizibilitatea: dacă la un pod ce se construieşte, e vizibil progresul, la produsele software nu e la fel;
•Complexitatea: produsele software conţin mai multă complexitate per dolar sau euro cheltuit
•Flexibilitate: un produs software se poate schimba în funcţie de preferinţele utilizatorilor, mai degrabă
decât să se ceară utilizatorilor să-şi modifice comportamentul pentru a folosi produsul.
c) Executarea proiectului: Un ciclu de viaţă tipic al unui proiect (typical project life-cycle) este
următorul:
Detalierea etapelor
•Analiza cerinţelor: această etapă trebuie să stabilească ceea ce doresc utilizatorii de la software.
•Implementarea /instalarea: termenul “implementare” se referă, după unii autori, la tot ce urmează
după etapa de design, iar după alţii la instalarea sistemului după ce software-ul a fost dezvoltat (în
acest caz, trebuie încorporate aici şi stabilirea parametrilor sistemului, scrierea manualelor de utilizare,
asigurarea training-ului utilizatorilor).
•Mentenanţă şi suport: după ce sistemul a fost instalat, e nevoie de corecţia erorilor ce nu au fost
depistate în faza de testare, de extinderea şi îmbunătăţirea sistemului. Mentenanţa şi suportul pot fi
văzute ca procese software minore.
•Verificare şi validarea: operaţie necesară pentru depistarea şi corectarea eventualelor erori (errors,
bugs, faults) din sistem.
a) Putem întâlni:
•sisteme de informaţie(information systems): exemplu –un sistem de control al stocurilor.
•sisteme în timp real(embedded systems): exemplu – un sistem ce controlează aerul condiţionat dintr-
o clădire.
Obs. Unele sisteme pot avea caracteristici din ambele tipuri de sisteme
5) Proiectul ca sistem
Un proiect se ocupă de crearea unui nou sistem sau/şi de transformarea unuia vechi.
Un sistem poate fi parte a unui sistem mai mare şi poate avea ca părţi componente subsisteme
(subsystem).
În afara sistemului există aşa numitul mediu al sistemului(system´s environment), adică acele
elemente care pot afecta sistemulo, dar asupra cărora sistemul nu are control.
6) Ce este managementul?
Procentele de mai sus se referă la numărul de manageri care au identificat fiecare item. Un manager
poate identifica mai mult decât un item.Pe de altă parte, cele mai frecvente provocări pentru un
manager sunt următoarele (printre altele):•Să facă faţă deadlines-urilor(85%);•Să facă faţărestricţiilor
legate de resurse (83%);•Comunicarea efectivă de sarcini (80%);•Câştigarea angajamentului
membrilor echipei (74%);•Stabilirea unor “pietre de hotar” măsurabile (70%);•Să facă faţă schimbărilor
(60%);•Să facă faţă conflictelor (42%);•Să gestioneze vânzătorii şi sub-contractorii (38%).
Deşi multe sarcini ale managementului se gestionează mai degrabă se sisteme de management decât
de manageri, e adevărat că pentru succesul unui proiect e totuşi răspunzătoare o persoană.
B) Obiective
Managerul şi echipa sa trebuie să stabilească clar obiectivele, pentru a se putea concentra asupra
lucrurilor esenţiale şi a defini astfel criteriile de succes ale proiectului.
Dacă există mai multe grupuri de utilizatori, atunci trebuie să existe o autoritate a proiectului, care
săaibă autoritatea globală asupra proiectului. În acest caz, există şi un comitet de organizare, care are
responsabilitatea globală pentru stabilirea, monitorizarea şi schimbarea obiectivelor. Managerul este
responsabil pentru derularea proiectului zi de zi, dar el trebuie să raporteze periodic comitetului de
organizare stadiul evoluţiei proiectului.
C) Măsurarea eficacităţii
9) Stakeholders
B) Cerinţe de calitate: cum trebuie să se comporte sistemul, de exemplu timp de răspuns, uşurinţa
folosirii, fiabilitate
Eficacitatea se referă la a face lucrul potrivit. Eficienţa se referă la folosirea optimă a resurselor.
C) Măsurători
În proiectele mai mari, liderii de proiect trebuie să gestioneze o cantitate mare de informaţii. Aceste
informaţii nu trebuie să fie vagi şi, ideal, ar trebui să fie cantitative.
Concluzii
•Proiectele sunt prin definiţie activităţi “non-rutin㔺i de aceea mai nesigure decât alte sarcini;
• Proiectele software sunt similare cu alte activităţi, dar au anumite atribute ce prezintă dificultăţi, cum
ar fi de exemplu invizibilitatea relativă a multor produse;
•Un factor cheie în succesul unui proiect este stabilirea unor obiective clare. Diferite persoane cheie
din proiect (stakeholders) pot avea interese diferite. De aceea e necesară o autoritate recunoscută
care să răspundă de întregul proiect;
• Pentru ca obiectivele să aibă concreteţe, trebuie să existe căi practice de a verifica că obiectivele se
îndeplinesc. Asta conduce la nevoia de măsurători;
• Trebuie să existe măsurători obiective de succes, în ideea de a ajuta la comunicarea neambiguă a
diverselor părţi implicate în proiect.
Calitatea software-ului
1. Introducere
Deşi calitatea este “un lucru bun”, calitatea unui sistem, în practică, poate fi un atribut vag şi insuficient
definit. De aceea trebuie să se definească exact ce calităţi cerem unui sistem.
Calitatea priveşte toate etapele planificării şi executării proiectului, dar se dovedeşte de un interes
particular în următoarele etape:
•Identificarea infrastructurii proiectului;
•analiza caracteristicilor proiectului;
•identificarea produselor şi activităţilor;
•revizuirea şi editarea planului.
Pentru fiecare criteriu, trebuie inventate nişte măsuri pentru a evalua gradul în care calitatea e
prezentă.
Orice măsură relativă bună trebuie să compare numărul unităţilor la maximul posibil în acele
circumstanţe. De exemplu, numărul maxim de eroriîntr-un program va fi raportat la mărimea
programului, astfel încât măsura “numărul de erori la mia de linii de cod” e mai utilă decât “numărul de
erori din program”.
În anumite cazuri putem măsura calitatea în mod direct, în timp ce în altele lucrul măsurat nu e calitate
propriu-zisă, dar reprezintă un indicator care să indice în ce grad e prezentă calitatea.
•funcţionalitate, care acoperă funcţiile pe care produsul software le asigură pentru satisfacerea
nevoilor utilizatorilor;
•siguranţă (reliability), care se referă lacapabilitateasoftware-ului pentru a menţine nivelul de
performanţă;
•usability, care se referă la efortul cerut pentru a utiliza software-ul;
•eficienţă, care se referă al resursele fizice folosite când software-ule executat;
•mentenabilitate, care se referă la efortul cerut pentru a face schimbări software-ului;
•portabilitate, care se referă la abilitatea software-ului de a fi transferat în diferite medii.
ISO 9126 oferăsubcaracteristici pentru fiecare categorie primară, utile pentru clarificarea categoriei
principale.
Funcţionalitate
Siguranţă
Usability
Înţelegere (Understandability)
Învăţare (Learnability)
Operabilitate (Operability)
Eficienţă
Comportare în timp
Comportare d.p.d.v. al resurselor
Mentenabilitate
Analisability
Flexibilitate (Changeability)
Stabilitate
Testabilitate
Portabilitate
Adaptabilitate
Uşurinţa instalării (Installability)
Conformitate (Conformance)
Uşurinţa de a fi înlocuit (Replaceability)
Obs. Conformance, spre a se distinge de compliance, se referă la acele standarde care privesc
portabilitatea. Exemplu: folosirea unui limbaj de programare standard în multe medii
software/hardware e exemplu de conformance.
Obs. Replaceability se referă la factori care dau compatibilitatea ”în sus”între componentele software
vechi şi cele noi.
Obs. Analisability(sau diagnosability) este uşurinţa cu care de determină cauza unui eşec.
Changeability (sau flexibility) implică faptul că furnizorii de software îl schimbă totdeauna. Stabilitatea
înseamnă că există un risc mic ca o modificare a software-ului să aibă efecte neaşteptate.
ISO 9126 oferă anumite indicaţii privind folosirea caracteristicilor de calitate. Pentru sistemele
interactive (interactive end user system), elementul primordial d.p.d.v. al calităţii ar fi usability.
Selectarea metricilor de calitate. Nu sunt date indicaţii în standardul ISO 9126 privind aplicabilitatea
diverselor măsuri ce trebuie folosite.
Definirea nivelelor de rating. Metricile folosite trebuie să se mapeze pe scale care să indice gradul în
care au fost satisfăcute cerinţele.
Definirea criteriilor de evaluare. Este felul în care scorurile d.p.d.v. al calităţii se combină pentru a
da o vedere de ansamblu asupra produsului. Mai jos e dat un exemplu de acordare a scorurilor:
Mai jos sunt date orientativ anumite modalităţi de măsurare a unor calităţi particulare. Fiecare proiect
va trebui să aibă însă propriile măsuri.
Reliability
Aceasta poate fi măsurată în termeni de:
•disponibilitate(availability),procentul unui interval de timp în care sistemul poate fi folosit;
•timpul mediu dintre eşecuri, timpul total de lucru, împărţit la numărul de eşecuri;
•eşec la cerere, probabilitatea ca un sistem să nu fie disponibil la un anumit timp sau probabilitatea ca
o tranzacţie să eşueze;
•activitatea de suport (support activity), numărul de rapoarte de erori.
Mentenability
Poate fi văzută ca flexibilitate plus diagnosability, care poate fi definită drept timpul mediu necesar
pentru diagnosticarea unei erori.
Obs. D.p.d.v. al utilizatorului, mentenabilitypriveşte timpul scurs între detectarea unei erori şi
corectarea ei, iar d.p.d.v. al managementului de programare ca efortul necesar.
6. Standarde externe
Unele standarde de calitate au fost gândite pentru toate produsele, nu doar pentru produsele software.
j)Echipamentul folosit în procesul de producţie trebuie să fie controlat adecvat în privinţa calităţii;
k)Statutul testării pentru toate componentele şi sistemele trebuie să fie înregistrat clar în toate etapele;
l)Trebuie avut grijă ca itemii care sunt cunoscuţi ca potenţial de a se defecta să fie folosiţi cu mare
atenţie;
m)Când se identifică un defect, trebuie luate măsuri pentru îndepărtarea părţii defecte şi pentru a ne
asigura că defectul nu apare din nou;
n)Trebuie să existe proceduri corespunzătoare manipularării, stocării, împachetării şi livrării
produsului;
o)Trebuie menţinute suficiente înregistrări care să demonstreze că sistemul de asigurare a calităţii
lucrează cu succes;
II) TickIt. Department of Trade and Industry (DTI) a formulat standardul TickIt, care dă interpretarea
standardului ISO 9000 (mai ales în ceea ce priveşte dezvoltarea software). Acesta include cerinţe,
cum ar fi:
În loc să verifice că un sistem e în stare să detecteze erori, un client poate cere că vadă dacă
furnizorul foloseşte metode şi instrumente de dezvoltare software care să fie potrivite pentru a produce
un software de bună calitate.
În SUA s-a dezvoltat un capability maturity model (CMM)la Software Engineering Institute (SEI).
Acesta încearcă să plaseze organizaţiile care produc software într-unul dintre cele 5 nivele de
maturitate pentru a indica cât de sofisticate sunt şi cât de calitative sunt practicile de producere a
software-ului. Aceste nivele dunt definite după cum urmează:
•Nivelul 1: InitialProcedurile urmate tind să fie întâmplătoare. Anumite proiecte vor avea succes, dar
asta datorită doar priceperii unor profesionişti din echipă (inclusiv managerii). Nu există nivel 0 şi de
aceea orice organizaţie va fi implicit la acest nivel.
•Nivelul 3: DefinedOrganizaţiile au definit felul în care fiecare sarcină a ciclului de viaţă al dezvoltării
software va fi făcută.
Tehnicile care ajuta la creşterea calităţii software por fi încadrate în trei mari teme:
•Increasing visibility Un pas important pentru a face procesele de dezvoltare software mai vizibile a
fost pledoaria lui Gerald Weinberg pentru o programare mai puţin egoistă (“egoless programming”),
care a încurajat practica simplă a programatorilor care să se uite la codul celorlaţi.
•Procedural structure S-au dezvoltat, de-a lungul anilor, metodologii în care fiecare proces în ciclul
de dezvoltare software să fie cu grujă planificat pe etape.
•Checking intermediate stages Un element important în vederea obţinerii unor practici pentru
calitate a fost verificarea corectitudinii muncii în etapele incipiente, conceptuale. Ideea este să se
poată obţine modele ale muncii, chiar dacă nu perfecte, care să poate fi depanate ulterior.
Concluzii
•Calitatea în sine e un concept vag şi cerinţele de calitate practice trebuie definite cu mare atenţie
• Trebuie să existe moduri practice de testare a prezenţei sau absenţei calităţii
• Multe dintre calităţile care sunt aparente utilizatorilor de software pot fi testate doar atunci când
sistemul e complet
• E nevoie deci de modalităţi de verificare a calităţii probabile în timpul dezvoltării
•Anumite tehnici de creştere a calităţii se concentrează pe testarea produselor procesului de
dezvoltare, în timp ce altele încearcă să evalueze calitatea proceselor de dezvoltare folosite.
Calitatea software-ului
-Laborator -
Problema 1. Un sistem cuprinde 5000 SLOC, pentru implementarea căruia a fost nevoie de 400 zile-
muncă. Un amendament la sistem a provocat adăugarea a 100 SLOC, care au luat 20 zile-muncă
pentru implementare. Calculaţi:
a)productivitatea sistemului original
b)Productivitatea pentru amendament
c)Extendibilitatea
Problema 3. Un sistem a fost instalat şi e disponibil în mod normal de la 8 a.m. la 6 p.m., de luni până
vineri. Într-o perioadă de 4 săptămâni, sistemul a fost indisponibil timp de o întreagă zi din cauza unor
probleme cu harddiscul şi indisponibil alte 2 zile până la 10 a.m. Din cauza unor unităţi. Care este
availabilityşi timpul mediu dintre eşecuri (failures), presupunând că au fost 3 eşecuri?
Problema 4. Identificaţi instanţe specifice în mediul de dezvoltare software unde sunt relevante
cerinţele:
a) privind controlul echipamentului (punctul (j) din standardul BS EN ISO 9001);
b) privind înregistrarea statusului testării al tuturor componenetelor (punctul (k) din standardul BS EN
ISO 9001);
c) privind mânuirea corectă, depozitarea, împachetarea şi livrarea produsului (punctul (m) din
standardul BS EN ISO 9001)
Ce proceduri s-ar aplica în mediul software în legătură cu aceste necesităţi?
Indicaţii şi răspunsuri
Problema 1. Un sistem cuprinde 5000 SLOC, pentru implementarea căruia a fost nevoie de 400 zile-
muncă. Un amendament la sistem a provocat adăugarea a 100 SLOC, care au luat 20 zile-muncă
pentru implementare. Calculaţi:
a)Productivitatea sistemului original
b)Productivitatea pentru amendament
c)Extendibilitatea
Soluţie.
a) Productivitatea sistemului original=5000/400=12,5
b) Productivitatea pentru amendament=100/20=5
c) Extendibilitatea=5/12,5x100=40%
Indicaţii. Software-ul se poate diviza într-un număr de arii de interes, care se evaluează separat, cum
ar fi pregătirea documentului, prezentarea, îmbinarea corespondenţei etc.
De exemplu;
•Calitate –uşurinţa învăţării;
•Definiţie –timpul necesar unui novice pentru a învăţa să opereze a.î. să producă un document
standard;
•Scara –ore
•Test –oferiţi-i sistemul, un manual de utilizare şi un document pe care săâl pregătească. Cronometraţi
cât îi ia (consideraţi, de exemplu, că planificat este 2 ore, cel mai bun caz îi ia 1 oră, cel mai rău 4 ore)
Problema 3. Un sistem a fost instalat şi e disponibil în mod normal de la 8 a.m. la 6 p.m., de luni până
vineri. Într-o perioadă de 4 săptămâni, sistemul a fost indisponibil timp de o întreagă zi din cauza unor
probleme cu harddiscul şi indisponibil alte 2 zile până la 10 a.m. Din cauza unor unităţi. Care este
availabilityşi timpul mediu dintre eşecuri (failures), presupunând că au fost 3 eşecuri?
Problema 4. Identificaţi instanţe specifice în mediul de dezvoltare software unde sunt relevante
cerinţele:
Indicaţie.
b) Statusul testării. Componentele software care sunt actualizate nu sunt eliberate către utilizatori
înainte ca o testare adecvată să fie făcută.
Evaluarea proiectului
1. Introducere
Ideea de a începe (continua) munca la un proiect este de fapt compararea unui proiect cu alternativele
sale şi hotărârea de a merge mai departe sau nu.
2. Evaluarea strategică
Chiar dacă nu există un program explicit definit, orice proiect propus va fi evaluat în cadrul general al
obiectivelor de business ale organizaţiei.
IS = Information System
MIS = Management Information Cum va contribui sistemul propus la obiectivele stabilite
SystemObiective ale organizaţiei? De pildă, pot creşte cifra de afaceri?
Plan IS Cum se încadrează sistemul propus în planul IS? Cu ce
sistem existent va interfera noul sistem? Ce sistem
existent va înlocui?
Structura organizaţiei Ce efect va avea noul sistem asupra organizaţiei?
MIS Ce informaţii va aduce sistemul şi la ce nivel?
Personal Ce implicaţii aduce asupra politicii globale asupra
personalului?
Imagine În ce fel va afecta imaginea clienţilor organizaţiei noul
sistem?
3. Evaluarea tehnică
“Orice proiect ce necesită investiţii trebuie să obţină cel puţin un beneficiu mai mare decât dacă s-ar
depozita suma de investiţii într-o bancă, de exemplu.”
Trebuie aleasă cea mai bună opţiune de proiect dintre cele disponibile.
Clasificarea costurilor:
•Costuri de dezvoltare: include salariile şi alte costuri pentru echipa de dezvoltatori ai proiectului,
precum şi costurile asociate.
•Costuri de organizare (setup): costurile pentru punerea sistemului în practică şi include costurile
pentru orice hardware nou şi echipamente auxiliare, dar şi pentru conversia fişierelor, recrutarea şi
pregătirea personalului.
Clasificarea beneficiilor:
•Beneficii directe: sunt mai uşor de estimat, din exploatarea directă a sistemului.
•Beneficii indirecte estimabile: sunt în general beneficii secundare, cum ar fi acurateţea crescută prin
introducerea unei interfeţe mai prietenoase, la care putem aprecia reducerea erorilor.
Dificultatea şi importanţa cash-flow forecastinge evidenţiat de numărul companiilor care dau faliment
deoarece, deşi dezvoltă produse sau servicii profitabile, nu pot susţine cheltuieli neplanificate (se
observă şi din grafic ca la început e necesar să se facă investiţii, venitul apărând când sistemul poate
fi exploatat).Inflaţia poate cauza cheltuieli neprevăzute.
De exemplu, tabelul de mai jos indică estimarea cash flow pentru 4 proiecte:
6. Tehnici de evaluare cost -beneficiu
Pentru tabelul de mai jos, întocmiţi un clasament privind dezirabilitatea proiectelor prezentate şi
motivaţi alegerea făcută:
Profitul net: este diferenţa dintre venitul total şi cheltuieleile totale. În tabelul precedent, proiectul 2 are
profitul net cel mai mare, dar necesită şi cea mai mare investiţie iniţială (1 milion).
Perioada de restituire (Payback period): este timpul scurs până la acoperirea investiţiei iniţiale.
Temă: calculaţi perioada de restituire pentru fiecare proiect din tabelul precedent.
Temă. Calculaţi ROI pentru fiecare dintre proiectele prezentate în tabelul precedent.
Un dezavantaj al acestui criteriu este acela că nu ţine seama de timpul necesar al cash-flow.Return on
investment (ROI) sau Accounting rate of return (ARR) este o metodă de a compara profitabilitatea
netă cu investiţia cerută:
Temă. Calculaţi ROI pentru fiecare dintre proiectele prezentate în tabelul precedent.
Un dezavantaj al acestui criteriu este acela că nu ţine seama de timpul necesar al cash-flow.
Net present value (NPV) şi internal rate of return (IRR) sunt cunoscute ca tehnici de discounted cash
flow (DCF). Calcularea NPV este o tehnică de evaluare a proiectului şi ia în calcul profitabilitatea
proiectului şi timing-ul cash flows care sunt produse. Se determină prin reducerea (discounting)
viitoarelor cash flows cu un procent numit rată de discount.
unde reste rata de discount.
Valoarea prezentă a unui cash flow poate fi calculată prin înmulţirea cash flow cu factorul de discount
potrivit.
NPV pentru un proiect poate fi calculat prin reducerea fiecărui cash flow şi însumarea valorilor reduse.
Temă. Calculaţi NPV pentru proiectele 2,3 şi 4 şi indicaţi care dintre proiecte poate fi ales, pe baza
criteriului NPV.
Un dezavantaj al NPV ca măsura a profitabilităţii e acela că, deşi e utilizat ca metodă de comparare a
proiectelor, s-ar putea să nu fie direct comparabile cu câştigurile cu alte investiţii.
IRR e calculat ca rata de discount procentuală ce va produce NPVcu valoare 0. Se poate calcula cu
uşurinţă folosind, de exemplu, Microsoft Excel, care are implementate funcţii specifice.
Obs. Se pot găsi mai multe valori care să produce o valoare 0 a NPV. În acest caz, se poate lua
valoarea cea mai mică şi ignora celelalte valori.
Obs. NPV şi IRR nu oferă totuşi răspunsul complet la o evaluare economică a unui proiect.
•În timp ce IRR ar putea indica un proiect profitabil, viitoarele câştiguri ar putea fi de departe mai mici
decât dacă s-ar fi depozitat banii într-o bancă. De accea trebuie luat în calcul ca un proiect să aducă
un beneficiu cu mai mult de 15%, să zicem, faţă de interest rates.
• Trebuie avută în vedere o întrebare de genul: dacă finanţăm acest proiect, mai putem finanţa şi alte
proiecte valoroase?
7. Evaluarea riscurilor
Principalul risc este acelă că proiectul s-ar putea să nu îndeplinească obiectivele pentru care a fost
gândit. Nu e un risc dacă proiectul se termină mai repede decât a fost planificat şi folosind un buget
mai mic!
O abordare pentru analiza riscurilor ar fi să se creeze o matrice a riscurilor posibile folosind o listă cu
riscurile posibile şi să clasificăm fiecare risc în raport cu importanţa lui şi probabilitatea de apariţie.
Exemplu de o parte de astfel de matrice, unde H –mare (high), M –medie, L – scăzută (low). Într-un
capitol ulterior se dau detalii.
Riscurile şi NPV
Când un proiect e relativ riscant, e bine să se folosească o rată de discount mai mare pentru calculul
NPV.
Analiza cost-beneficiu
O abordare mai sofisticată a evaluării riscurilor este să se considere fiecare posibil efect şi estimarea
probabilităţii ca el să apară. În loc de o singură estimare a cash flow, vom avea o mulţime de cash
flows, fiecare cu o probabilitate de apariţie. Valoarea proiectului e obţinută prin însumarea costurilor
sau beneficiilor pentru fiecare rezultat, sumă ponderată cu probabilitatea corespunzătoare.
Această abordare e potrivită mai ales pentru proiectele mari, unde există suficienţi factori de
incertitudine. Pe de altă parte, stabilirea probabilităţilor de apariţie a riscurilor nu e uşor de făcut.
Aceasta presupune variaţia fiecărui parametru ce afectează costul sau beneficiul proiectului pentru a
stabili cât de sensibilă e profitabilitatea proiectului la fiecare factor. Rezultă astfel identificarea
factorilor decisivi pentru succesul proiectului.
Obs. Analiza sensibilităţii presupune variaţia unui singur factor la un moment dat. Se foloseşte metoda
Monte Carlo pentru astfel de simulări. Există instrumente software care implementează metoda.
Exemplu. Pentru extinderea sistemului de facturare, o firmă poate lua în calcul extinderea sistemului
existent sau înlocuirea completă a lui, imediat sau mai târziu. Înlocuirea imediată înseamnă amânarea
unor proiecte. Neînlocuirea la timp poate fi o opţiune scumpă, în condiţiile în care conduce la
pierderea beneficiului din cauza neputinţei de a satisface toate cererile.
S-a calculat că extinderea sistemului are NPV 57000 Euros, deşi dacă piaţa se extinde smenificativ,
poate conduce la o valoare a NPV de -100000 Euros. Dacă piaţa creşte, o înlocuire a sistemului acum
duce la NPV de 250000 Euros. Dacă vânzările nu cresc, beneficiile se vor reduce, conducând la NPV
de -50000 Euros.
Analiza unui arbore de decizie constă în evaluarea beneficiului aşteptat luând-o pe fiecare ramură a
unui punct de decizie (notat cu D în figură).
75000*0.8+(-100000)*0.2
=40000 Euros
250000*0.2+(-50000)*0.8
=10000 Euros
Analiza unui arbore de decizie constă în evaluarea beneficiului aşteptat luând-o pe fiecare ramură a
unui punct de decizie (notat cu D în figură).
Un avantaj al folosirii arborilor de decizie este că se pot extinde cu uşurinţă (vezi figura de mai jos):
8. Concluzii
Managementul riscului
1. Introducere
În această prezentare, atenţia se concentrează pe riscul datorat întârzierii proiectului sau depăşirii
bugetului alocat
Posibilităţi
Anumite posibilităţi nu pot fi prevăzute. Totuşi, majoritatea evenimentelor neaşteptate pot fi, în
realitate, prevăzute. Asemenea evenimente se pot întâmpla din timp în timp şi, chiar dacă
probabilitatea de apariţie a lor să fie mică, trebuie luate în calcul şi planificate.
Estimarea erorilor
Anumite sarcini sunt greu de estimat din cauza lipsei experienţei cu sarcini similare, de aceea e indicat
să existe manuale de utilizare. Pe de altă parte, timpul petrecut cu testarea şi depanarea poate fi greu
de prognozat cu un grad de acurateţe mărit.
Estimarea poate fi îmbunătăţită dacă se analizează datele istorice pentru activităţi similare şi sisteme
similare. Păstrarea înregistrărilor comparând estimările originale şi rezultatele finale vor pune în
evidenţă tipurile de sarcini pentru care se fac cu greu estimări corecte.
2. Managementul riscurilor
Există un număr de modele pentru managementul riscului, dar majoritatea sunt similare, pentru că
identifică două componente majore –identificarea riscului (risk identification)şi managementul riscului
(risk management). În figura de mai jos e dată o structură divizată în sarcini, pe care Barry Boehm o
numeşte ingineria riscului (risk engineering). Toate elementele din figură se vor discuta în detaliu în
slide-urile următoare.
Trebuie făcută distincţia dintre cauza întâmplătoare (hazard) şi efectul produs de acesta.
Anumite cauze întâmplătoare sunt generice– adică sunt relevante pentru toate proiectele software.
Asemenea riscuri sunt înţelegerea greşită a cerinţelor şi starea de boală a persoanelor cheie implicate
în proiect.
Alte riscuri sunt specifice–care vor fi identificate mai greu şi numai cu suportul întregii echipe a
proiectului.
Factorii legaţi de personal (staff factors)– un programator experimentat face, de regulă, mai puţine
erori decât unul cu mai puţină experienţă. Pe de altă parte, e importantă aria în care unii au experienţă
(experienţa unui programator în Cobol nu prea contează dacă dezvoltă un sistem în C++).
Factorii legaţi de proiect (project factors)–e important ca proiectul şi obiectivele sale să fie bine
definite şi să fie clare pentru toţi membrii proiectului şi pentru stakeholders.
Factorii hardware/software– un proiect care necesită hardware nou poate pune probleme mai mari
decât dacă se dezvoltă sistemul pe un hardware existent. Realizarea proiectului pe un tip de hardware
şi o platformă software şi utilizarea sistemului pe un alt hardware şi/sau software poate ridica anumite
probleme la instalare şi nu numai.
Factorii legaţi de schimbări (changeover factors)– o schimbare radicală pentru noul sistem
facilitează apariţia riscurilor. Schimbările graduale minimizează riscurile dar nu sunt întotdeauna
practice.
Identificând riscurile, e utilă o cale de a le evalua importanţa. Anumite riscuri au probabilitate mai mare
de apariţie (cum ar fi îmbolnăvirea unuia dintre membrii echipei, chiar şi pentru o perioadă scurtă de
timp), iar altele au probabilitate mică de apariţie (un eşec hardware să ducă, de exemplu, la pierderea
întregului cod scris).
Probabilitatea apariţiei unei cauze întâmplătoare de risc e cunoscută ca probabilitatea riscului (risk
likehood). Efectul rezultat, dacă apare, se numeşte impactul riscului (risk impact)şi importanţa riscului
e cunoscută ca valoarea riscului (risk valuesau risk exposure). Risk value e calculat:
risk value= risk likehoodx risk impact
Obs. Termenii de mai sus pot fi întâniţi şi sub alte denumiri, nu sunt denumiri universal acceptate.
Ideal, impactul riscului e exprimat în termeni monetari şi probabilitatea riscului ca probabilitate (număr
subunitar). În acest caz, valoarea riscului va reprezenta costul aşteptat (expected cost). Se pot
compara aşadar valorile riscului pentru a evalua iportanţa relativă a riscurilor.
Mulţi manageri folosesc o metodă prin care se dau scoruri riscurilor, pentru a oferi o măsură
cantitativă pentru evaluarea fiecărui risc. Un scor ar putea fi împărţirea în trei categorii (High, Medium,
Low), dar se recomandă (şi e mai populară) metoda în care se dau note de la 1 la 10 (unde 10 este
pentru probablitatea cea mai mare de apariţie e unei erori).
Măsurile de impact, notate pe o scară similară, trebuie să ia în consideraţie riscul total al proiectului.
Acesta trebuie să includă următoarele costuri potenţiale:
•costul întârzierilor faţă de datele planificate pentru deliverables;
•supracostul datorat de folosirea adiţională a unor resurse;
Oricare dintre aceste strategii vor avea un cost asociat. De aceea e importantă acordarea de prorităţi
riscurilor, pentru ca cele mai importante să primească atenţia cea mai mare.
În practică, sunt în general alţi factori care trebuie luaţi în calcul atunci când vrem să aranjăm în
funcţie de prioritate:
•Riscuri acumulate. Când se întâmplă acest lucru, riscurile trebuie tratate ca şi cum ar fi un singur
risc.
•Numărul riscurilor. Există un număr maxim de riscuri ce trebuie considerate efectiv de un manager
•Costul acţiunii. Anumite riscuri, o dată identificate, pot fi reduse sau evitate imediat cu un cost
redus. Pentru alte riscuri trebuie să comparăm costurile cu efectuarea acţiunii cu beneficiile reducerii
riscului. O metodă e să se calculeze risk reduction leverage (RRL):
unde REinainte e valoarea riscului originală, REdupaeste valoarea riscului aşteptată după trecerea la
acţiune, iar cost reducere risc este costul implementării acţiunii de reducere a riscului.
5. Reducerea riscurilor
•Prevenirea hazardului.
•Reducerea probabilităţii de apariţie.
•Evitarea riscului.
•Transferul riscului. Anumite riscuri pot fi transferate, de exemplu printr-o asigurare.
• Planificarea de rezervă (contingency planning)
În tabelul de mai jos sunt arătate riscuri şi măsuri de reducere a acestor riscuri, aşa cum sunt
prezentate în Tutorial on Software Risk Management, IEEE Computer Society, 1989 de Barry Boehm.
Exemplu. Se consideră tabelul de mai jos, cu estimările timpului activităţilor folosind estimatorii PERT:
Reţeaua PERT prezentată pe pagina următoare ne arată că se aşteaptă ca proiectul să dureze 13,5
săptămâni.
O măsură cantitativă a gradul de incertitudine a unui estimator de timp pentru o activitate se obţine
calculând deviaţia standard s:
Tehnica PERT foloseşte o metodă în 3 paşi pentru a calcula probabilitatea de a respecta sau nu data
ţintă:
• se calculează deviaţia standard pentru fiecare eveniment al proiectului;
• se calculează valoarea z pentru fiecare eveniment care are o dată ţintă;
•se converteşte valoarea zla probabilitate.
Deviaţia standard pentru evenimentul 3 depinde doar de activitatea B. De aceea deviaţia standard va
fi 0,33.
Pentru evenimentul 5 există două căi posibile, B+E sau F. Deviaţia standard totală pentru calea B+E
este
iar pentru F este1,17. Prin urmare, deviaţia standard pentru evenimentul 5 este 1,17 (cea mai mare
dintre ele).
Calcularea valorii z
Valoarea z se calculează pentru fiecare nod care are o dată ţintă, cu formula de mai jos, în care Teste
data ţintă, iar teeste data aşteptată:
Valoarea zpentru evenimentul 4 este (10-9)/0,53=1,8867.
Managementul riscului
-Laborator -
Cum se poate reduce probabilitatea sau impactul fiecărui risc? Problema 1. Se consideră tabelul de
mai jos, care conţine o listă cu riscurile identificate, împreună cu probabilitatea, impactul şi valoarea
fiecărui risc:
Cum se poate reduce probabilitatea sau impactul fiecărui risc?
Problema 2. Se consideră tabelul de mai jos, care conţine estimatorii de timp a, m şi b pentru
diversele activităţi. Calculaţi timpul aşteptat pentru fiecare activitate, te
Problema 3. Se consideră reţeaua PERT de mai jos. Calculaţi pentru deviaţia standard pentru fiecare
dintre evenimentele A,B,C,D,E,F,G,H.
Indicaţie. Semnificaţia grafică este următoarea:
Problema 4. Se consideră reţeaua PERT de mai jos. Calculaţi valorile zpentru fiecare dintre
evenimentele cu date ţintă din reţea.
Problema 5. Se consideră graficul de mai jos, care ajută la convertirea valorii z la probabilităţi,
pentru reţeaua de activităţi de la problemele 3 sau 4. Calculaţi riscul ca proiectul să nu se
termine în săptămâna a 15-a. Calculaţi probabilitatea de a nu se realiza activităţile 4 şi 5 la
sfârşitul săptămânii a 10-a.
Indicaţii şi răspunsuri
Problema 1. Se consideră tabelul de mai jos, care conţine o listă cu riscurile identificate, împreună cu
probabilitatea, impactul şi valoarea fiecărui risc:
Indicaţie.
R2 –revizuiţi estimările sau împărţiţi activitatea în componente mai mici şi faceţi estimări pentru acele
componente.
R4 –gândiţi o strategie de rezervă pentru recrutarea persoanelor implicateîn alte proiecte, dar care pot
fi în postură de stanb-by la diverse momente.
Problema 2. Se consideră tabelul de mai jos, care conţine estimatorii de timp a, m şi b pentru
diversele activităţi. Calculaţi timpul aşteptat pentru fiecare activitate, te
Indicaţie.
Problema 3. Se consideră reţeaua PERT de mai jos. Calculaţi pentru deviaţia standard pentru
evenimentele 4 şi 6.
Indicaţie.
Evenimentul 4.
Problema 4. Se consideră reţeaua PERT de mai jos. Calculaţi valorile zpentru fiecare dintre
evenimentele cu date ţintă din reţea.
Indicaţie.
Problema 5. Se consideră graficul de mai jos, care ajută la convertirea valorii z la probabilităţi, pentru
reţeaua de activităţi de la problemele 3 sau 4. Calculaţi riscul ca proiectul să nu se termine în
săptămâna a 15-a. Calculaţi probabilitatea de a nu se realiza activităţile 4 şi 5 la sfârşitul săptămânii a
10-a.
Indicaţie. Valoarea z pentru evenimentul 4 este 1,89, care conduce la o probabilitate de 3%. De
aceea există 3% şanse ca să nu îndeplinim evenimentul până la sfârşitul săptămânii a 10-a.
1. Introducere
Sisteme incomplete
Având în vedere timpul scurt, e posibil ca sistemul care trebuie proiectat să nu fie funcţional. De aceea
se recomandă ca lucrurile să fie de aşa natură gândite, încât să existe ceva concret de arătat chiar din
fazele incipiente ale proiectului. În acest schelet al proiectului, ar fi o idee bună să existe anumite
funcţionalităţi vizibile. S pot adăuga alte funcţionalităţi pe măsura trecerii timpului. O sugestie ar fi să
folsoiţi modelul incremental (vezi Modele de procese software), astfel încât dacă de exemplu aveţi 3
incremente şi al treilea nu este finalizat, există totuşi celelalte două.
Sfat: documentarea proiectului e bine să fie făcută pe măsură ce se avansează cu etapele proiectului,
mai bine decât să documentaţi proiectul la sfârşit, din cauza lipsei de timp.
A)Introducere
În introducere, e o idee bună să se explice pe scurt ce face sistemul proiectat şi de ce. De asemenea,
introducerea ar fi bine să conţină:
•identificarea clientului – pentru cine se face proiectul (inclusiv dacă e pur didactic – cui s-ar putea
adresa);
• o scurtă descriere a proiectului – cel mult câteva paragrafe;
• identificarea autorităţii de proiect –persoana sau persoanele din cadrul organizaţiei clientului care va
avea autoritate peste evoluţia proiectului.
B) Background
Această parte ar trebui să conţină:
•informaţii relevante despre mediul software/hardware existent;
•circumstanţele sau problemele care conduc la proiect;
• munca din aria proiectului dusă dejala bun sfârşit;
• stakeholders din proiect (adică toţi cei care vor fi afectaţi de proiect sau care sunt interesaţi de el).
C) Obiectivele proiectului
Obiectivele trebuie să definească ce ar trebui să se realizeze şi metoda de măsurare a acestei creaţii.
La proiectele studenţeşti, evaluarea e făcută (de cele mai multe ori) din punct de vedere didactic.
Dacă însă această documentare e făcută şi în beneficiul clientului, atunci punctul de vedere al
clientului trebuie să fie prezent.
Dacă sunt multe obiective, ar trebui specificată prioritatea lor.
D) Constrângeri
De obicei se trec la partea cu obiectivele proiectului. Constrângerile includ:
• scări de timp impuse din exterior;
•cerinţele legale;
• standarde specifice;
• limitări ale persoanelor care pot fi abordate pentru informaţii.
F) Rezultatele proiectului
Trebuie listate toate rezultatele (produsele) sau elementelor cum ar fi module software, documentaţie,
ghiduri utilizator, rapoarte.
G) Activităţi
Trebuie precizată lista cu principalele activităţi pe care le implică proiectul. Fiecare activitate trebuie
precizată în termeni concreţi: de exemplu, în loc de “familiarizarea cu procedurile departamentului-2 ar
trebui “documentarea procedurilor departamentului”. S-ar putea descoperi rezultate intermediare ale
proiectului.
Pentru fiecare activitate, se definesc:
•elementele necesare înainte de a începe activitatea;
• activităţile dependente, adică acele activităţi ce necesită terminarea acestei activităţi curente pentru
a începe;
•timpul / efortul estimat, într-o anumită marjă;
•detalii despre cum vor fi verificate şi validate produsele activităţii.
Se pot include aici şi tabelele Gantt pentru monitorizarea activităţilor (sau alte instrumente specifice
monitorizării).
H) Resurse
Se pot include aici cerinţele software / hardware şi cele legate de personal.
I) Analiza riscului
Se identifică principalele lucruri care ar putea merge rău. În mod normal, acestea ar putea include:
•indisponibilitatea resurselor;
•indisponibilitatea personalului;
•probleme tehnice (cum ar fi bugs-urile software).
Se aloca fiecărui risc o evaluare a probabilităţii (notă între 1-10) şi o notă pentru impactul fiecărui risc
(tot între 1-10). Înmulţind cele două note, se obţine un scor de ansamblu.
Pentru riscurile mari, e bine să se specifice şi eventualele măsuri pentru reducerea acelor riscuri.
Concluzii
Monitorizarea şi controlul
1. Introducere
În practică problemele sunt: întârziere faţă de datele planificate, calitate îndoielnică, funcţionalitate
inadecvată şi costuri mai mari decât cele planificate.
Responsabilitate
Răspunderea globală pentru asigurarea progresului unui proiect este adesea rolul unui Project Board.
Responsabilitatea zi-de-zi va rămâne în grija managerului de proiect şi, în majoritatea proiectelor, se
pot delega responsabilităţi liderilor de echipă (team leaders). In figura de mai jos e dată structura tipică
de raportare.
Responsabilitate (continuare)
Raportarea poate fi orală sau scrisă, formală sau informală, regulată sau ad-hoc. Câteva exemple sunt
date în tabelul de mai jos.
Evaluarea progresului
Se face în mod normal pe baza informaţiilor colectate la intervale regulate sau atunci când apar
evenimente specifice. Unde e posibil, aceste informaţii vor fi obiective şi tangibile.
Taking snap-shots
Frecvenţa cu care managerul are nevoie să primească informaţii despre progresul proiectului depinde
de mărimea şi gradul de risc al proiectului.
Liderii de echipă trebuie să evalueze progresul zilnic (mai ales când lucrează cu personal
neexperimentat), în timp ce managerii de proiect găsesc mai potrivit să primească rapoarte
săptămânale sau lunare.
3. Adunarea datelor
Ca o regulă, managerii vor încerca să împartă activităţile lungi în sarcini mai controlabile ce se întind
pe o săptămână sau două. Totuşi va fi necesar să se adune informaţii despre activităţile parţial
completate şi, în particular, estimări despre câtă muncă mai e necesară pentru a le completa. Uneori
poate fi dificil să se facă astfel de estimări de mare acurateţe.
Exerciţiu. Un dezvoltator de soft a scris 250 linii de cod şi estimarea este de 500 linii. De ce nu e
corect să presupunem că sarcina programării este 50% completată. Care ar fi o estimare corectă?
Obs. În anumite cazuri, produsele intermediare pot fi folosite ca milestones. De exemplu, prima
compilare cu succes a unui program poate fi considerată ca o milestone, deşi nu reprezintă produsul
final al activităţii de codare şi testare.
4. Vizualizarea progresului
Tabele Gantt (Henry Gantt 1861-1919, inginer)
E o tehnică simplă şi veche, care indică într-o diagramă datele activităţilor planificate. Progresul
raportat e înregistrat pe diagramă. Colectarea datelor despre progresul proiectului se pot prezenta
într-o formă atractivă. În cele ce urmează, s eprezintă câteva dintre aceste metode de prezentare.
Slip chart
E o alternativă folosită de unii manageri de proiect care cred că oferă o indicaţie vizuală mai clară a
acelor activităţi care nu progresează în raport cu planificarea. O slip linecu mulţi “zimţi” indică
necesitatea replanificării.
Ball charts
În figura de mai jos, cercurile indică punctele de start şi de completare pentru activităţi. Iniţial cercurile
conţin datele planificate originale. Ori de câte ori se produc revizuiri, acestea sunt adăugate ca date
secunde în cercul corespunzător până când o activitate e începută în realitate sau completată când
datele relevante înlocuiesc prognozele revizuite (îngroşat înclinat în figură).Când datele de începere
reală sau de terminare pentru o activitate sunt întârziate faţă de data ţintă, cercul e colorat roşu (gri
închis în figură), iar când data reală e la timp sau mai devreme decât cea planificată cercul e colorat în
verde (gri deschis în figură).
Timeline chart
E o metodă de a înregistra şi afişa felul în care ţintele s-au schimbat pe întreaga durată a proiectului.
În figura de mai jos se arată un timeline chartpentru un proiect la sfârşitul celei de-a şasea săptămâni.
Timpul planificat e reprezentat pe axa orizontală şi timpul scurs pe axa verticală. Liniile şerpuite din
diagramă reprezintă datele de completare a activităţii planificate –la începutul proiectului analyse
existing system e planificat să fie completat până marţea (Tuesday) din săptămâna a 3-a, obtain user
requirements până joia (Thursday) din săptămâna a 5-a, issue tender, activitatea finală, până marţea
din săptămâna a 9-a s.a.m.d.
La sfârşitul primei săptămâni, managerul revede aceste date ţintă şi le lasă aşa cum sunt. La sfârşitul
săptămânii a 2-a, managerul decide că obtain user requirements nu va fi completată până marţea din
săptămâna a 6-a – de aceea managerul extinde linia activităţii diagonal ca să reflecte aceasta.
Celelalte ţinte de completare a activităţii sunt întârziate corespunzător. În marţea din săptămâna a 3-a,
e completată analyse existing systemşi managerul pune un cerculeţ pe diagonală pentru a indica că
asta s-a întâmplat. La sfârşitul săptămânii a 3-a managerul decide să păstreze ţintele existente. La
sfârşitul săptămânii a 4-a adaugă alte trei zile pentru draft tenderşi issue tender.
De observat că la sfârşitul săptămânii a 6-a, sunt completate 2 activităţi şi 3 sunt încă nefinalizate.
Proiectul pe ansamblu va avea 7 zile de întârziere.
5. Monitorizarea costurilorO diagramă ca cea din figura de mai jos oferă o metodă simplă
decomparare a cheltuielilor planificate cu cele reale. În sine, nu indică dacă nu cumva, deşi pare să
existe economii faţă de bugetul planificat, proiectul este mult întârziat şi de aceea graficul arată aşa.
Diagrama poate deveni mai utilă dacă se adaugă costuri viitoare planificate, calculate prin adunarea
costurilor estimate ale muncii necompletate la costurile deja existente.
Figura de mai jos ilustrează informaţiile adiţionale disponibile în momentul în care se include şi
estimarea revizuită a costurilor.
6. Earned ValueEarned Value Analysisa câştigat popularitate în ultimii ani şi poate fi văzută ca
o rafinare a monitorizării costurilor, discutată anterior. Earned Value Analysis se bazează pe
asignarea unei “valori” fiecărei sarcini sau pachet de muncă (work package), bazată pe
prognozele originale ale cheltuielilor. Valoarea asignată este costul alocate original (original
budgeted cost) pentru item şi e cunoscut ca BCWS (budgeted cost of work scheduled). O
sarcină neîncepută are asignată valoarea 0 şi când e completată, ea, precum şi proiectul, e
creditat cu valoarea sarcinii. Valoarea totală a proiectului în orice punct e cunsocută sub
denumirea de earned valuesau BCWP (budgeted cost of work perfromed) şi poate fi
reprezentată ca o valoare sau ca procent al BCWS. Când sarcinile au început dar nu sunt
complete, trebuie aplicată o metodă de asignare a earned value. Dintre aceste metode,
amintim:•tehnica 0/100– o sarcină are asignată valoarea 0 până în momentul în care e
completată, când i se atribuie o valoare de 100% din budgeted value;•tehnica 50/50 - o sarcină
are asignată o valoare de 50% din valoarea sa imediat ce începe şi apoi o valoare de 100% când
e completă;•tehnica milestone– o sarcină are o valoare asignată pe baza realizării milestones
care au asignat valori ca parte a planului alocat original.
Baseline budgetE bazat pe planul proiectului şi arată creşterea prognozată în timpa earned value.
Earned value poate fi măsurată în valori monetare, dar în cazul proiectelor de dezvoltare de software
e mai obişnuit să se măsoare în ore de muncă pe persoană (person-days) sau zile de muncă
(workdays).
La fel de bine ca înregistrarea BCWP, costul real al fiecărei sarcini poate fi exprimat ca ACWP (actual
cost of work performed), care e arătat în figura de mai jos.
7. Modificări în control
Până acum s-a presupus că natura sarcinilor nu s-a schimbat. În realitate sunt situaţii când cerinţele
se modifică din cauza schimbării circumstanţelor sau pentru că utilizatorii îşi fac o idee mai clară
despre ceea ce doresc de la software.Pe de altă parte, există situaţii interne, cum ar fi inconsistenţele
în specificaţiile programului care devin evidente numai atunci când se scrie codul.
Monitorizare şi control
-Laborator -
Problema 1. Se consideră planificarea proiectului dată în figura de mai jos. Identificaţi acele activităţi
programate să dureze mai mult de 3 săptămâni şi descrieţi cum poate monitoriza progresul pentru
fiecare dintre ele.
Problema 2. În tabelul Gantt de mai jos, identificaţi activităţile întârziate. Ce efect au acestea asupra
desfăşurării proiectului? Cum poate atenua efectul întârzierii?
Problema 3. La sfârşitul săptămânii a 8-a, managerul observă că Plan office layout e completă, dar
Draft tender (pusă în evidenţă în figură) o să ia cu o săptămână mai mult decât anticipase iniţial. Cum
va arăta chart-ul la sfârşitul săptămânii a 8-a? Dacă proiectul va merge conform planificării refăcute,
cum va arăta chart-ul la sfârşitul proiectului?
Printre itemii cel mai probabil să sufere modificări sunt datele de testare, rezultatele aşteptate şi
manualul de utilizare.
Software design
-concepte, exemple -
1. Introducere
Design-uleste‘‘the process of applying various techniques and principles for the purposeof defining a
device, a process, or a system in sufficient detail to permit itsphysical realization.’’(Taylor, An Interim
Report of Engineering Design, MIT, 1959)
Procesul de design converteşte “ce”din cadrul cerinţelor în “cum” al design-ului. Rezultatele fazei de
design ar trebui să se concretizeze într-un document ce oferă suficiente detalii care să permită
sistemului să fie implementat fără o viitoare interacţiune cu utilizatorul.
Procesul de design converteşte de asemenea terminologia din spaţiul problemei al cerinţelor la spaţiul
soluţie al implementării. Unii autori vorbesc de obiectele OOA (Object-Oriented Analysis), care sunt în
spaţiul problemă/domeniu şi de obiectele OOD (Object-Oriented Design), care sunt în spaţiul
soluţie/implementare.
Data design (designul de date)— această fază produce the structurile de date.
Architectural design (designul arhitecturii)— această fază produce the unităţile structurale (clasele).
Interface design (designul interfeţelor)— această fază specifică interfeţele dintre unităţi.
Procedural design (designul procedural)— această fază specifică algoritmii fiecărei metode.2. Fazele
procesului de designExemplu. Realizaţi designul claselor şi al structurilor de date pentru sistemul de
gestiune a împrumutului de cărţi dintr-o bibliotecă.Soluţie. Atenţia este concentrată pe împrumutul
cărţilor şi mai puţin pe alte informaţii, cum ar fi catalogarea, administrarea, retragerea cărţilor şi
administrarea clienţilor bibliotecii. Identitatea “carte”se va combina cu identitatea “copie”în structura de
clase/date pentru stocarea informaţiilor despre o copie. Poate conţine ISBN-ul şi un număr de copie ca
unic identificator. Informaţiile despre cititori se vor păstra într-o structură de date secundară, în care
probabil fiecare înregistrare va fi identificată printr-un ID unic (poate fi CNP-ul). Informaţiile referitoare
la împrumut pot fi puse într-o structură de date separată sau nu.
2.1 InterfeţeleInterfaţa arată comportarea exterioară a unui modul. Trebuie să fie suficient de
completă pentru ca modulul apelant să ştie ce va face modulul apelat în orice situaţie. Trebuie să fie
completă pentru ca cel care implementează să ştie exact ce informaţii sunt necesare.Exemplu.
Realizaţi designul interfeţelor pentru functiile imprumutaredin diagrama de clase de mai sus.Soluţie.
Clasele cititor şi copiecarte au o metodă imprumutare. Este de presupus că apelul oricăreia dintre
aceste metode va instanţia clasa imprumut. method cititor::imprumutareinput parameters –
isbnreturn type –int0 dacănu este disponibilă cartea1 dacă este disponibilă cartea şi instanţa
imprumut se creează cu succes-1 dacă apare o condiţie de eroaremethod
copiecarte::imprumutareinput parameter –NrImprumutreturn type –int0 dacă nu e disponibilă
copia1 dacăe disponibilă copia
Refinement (rafinare)— dezvoltă designul prin rafinări succesive; se mai numeşte designul “top-down”.
Modularity (modularitate)—e o abordare care divide software-ul în componente mai mici, care apoi
sunt integrate.3. Concepte ale designuluiExemplu. Rafinaţi funcţia imprumutaredin sistemul de
împrumutare cărţi de la o bibliotecă, prezentat în exemplele anterioare.Soluţie. Pe primul nivel de
design, începem printr-o funcţie imprumutare care are doi parametri: titlul cărţii şi numele cititorului.La
următorul nivel, se adaugă noţiunea de entitate împrumut, care (probabil) are două părţi: caută cartea
cu titlul specificat, caută cititorul cu numele dat şi creează o instanţă de împrumut pe baza ID-urilor
cărţii şi cititorului.Următoarea rafinare expandează fiecare parte de mai sus. gasesteCarte returnează
ISBN dacă e găsită şi e disponibilă cartea, returnează 0 dacă nu e găsită şi returnează -1 dacă acea
carte e dată. găsesteCititor returnează IDcititor dacă cititorul e găsit, 0 dacă cititorul nu e găsit şi -1
dacă cititorul nu poate împrumuta cartea. creeazaImprumut returnează 1 dacă e creată cu succes.
Dacă funcţia imprumutaredin modulul bibliotecaştie despre clasa imprumut, poate verifica
disponibilitatea cărţii, poate crea instanţa imprumutşi poate apela funcţiile imprumutare pentru a seta
valorile instanţei imprumut.
Program slicespot fi obţinute din ambele direcţii. Output slices găsesc fiecare instrucţiune care
afectează valoarea unei ieşiri (output) specificate. Input slices găsesc fiecare instrucţiune care e
afectată de valoarea unui input specificat.
Sunt uşor de determinat program slices, pornind de la un graf orientat, în care are o mulţime de vârfuri
n, fiecare vârf reprezentând un input, un output sau o instrucţiune de cod. Arcurile e sunt
dependenţele.
James Bieman şi Linda Ott au utilizat definiţii de variabile şi referinţe ca unităţi de bază, în loc de
instrucţiuni de program (program statements). Aceste definiţii şi referinţe se numesc tokens.De
aceea, orice referinţă de constantă (constant reference), referinţă de variabilă (variable reference) şi
definiţie de variabilă reprezintă un token separat (James Bieman,Linda Ott, ‘‘Measuring Functional
Cohesion,’’IEEE TOSE, 20:8 August 1994)
Exemplu. Desenaţi un graf orientat pentru codul din exemplul precedent:z = 0; while x > 0 do z = z +
y; x = x –1;end-whileSoluţie. Vom folosi linie continuă pentru data dependencies şi linie punctată
pentru control dependencies.
Un input slicepoate începe cu variabila de intrare x. Tokens x, 0, x, x, şi1din instrucţiunile while x>0
şix=x-1 se adaugă la slice. Apoi se adaugă tokens z, z şiy din instrucţiunea z=z+y. Nici un alt token nu
mai poate fi adăugat.De aceea, input slicee tot mai puţin z=0.
Un input slicepentru variabila y va conţine tokenul iniţial y şi tokens z şi y din instrucţiunea z=z+y.
Exemplu. Calculaţi functional cohesion measures pentru următorul fragment de cod.cin >> a >> b;int
x,y,z;x=0; y=1; z=1;if (a > b){x = a*b;while (10 > a){y=y+z;a=a+5;}else {x=x+b;}
Soluţie. În figura de pe pagina următoare din fiecare token către toate tokens care sunt afectate
imediat de valoarea token-ului.
Exemplu. Desenaţi o matrice pentru următoarea problemă: Tom şi Sue pregătesc o pensiune într-un
oraş. [1] Ei vor avea 3 dormitoare pentru oaspeţi. [2] Vor un sistem care să gestioneze [2.1] rezervările
şi să monitorizeze [2.2] cheltuielile şi profitul. Când un client potenţial sună pentru rezervare [3], ei
verifică [4] calendarul şi dacă sunt locuri libere [5], vor introduce [6.1] numele clientului, [6.2] adresa,
[6.3] telefonul, [6.4] datele, [6.4] preţul negociat, [6.6] nr.credit card şi [6.7] nr.camerei. Rezervarea
trebuie [7] garantată prin plata [7.1] primei zile. Rezervările vor fi ţinute fără garanţie [7.2] o perioadă
stabilită. Dacă nu se oferă garanţia până la acea zi, rezervarea va fi [7.3] anulată.
Aşa cum se arată în tabelele anterioare, există un număr de linii şi coloane albe. Cerinţa 5 se leagă de
locuri libere. Nu există o tratare explicită a locurilor libere, deşi un loc liber ar trebui să fie absenţa unei
rezervări într-o zi anume. Cerinţa 6.3 se referă la telefonul clientului şi lipseşte. Cerinţa 6.5, legată de
preţul negociat şi lipseşte din informaţiile privind rezervarea. Cerinţa 7.1 menţionează prima zi de
plată, care de asemenea nu este printre atribute.
Coloana A.1 e o listă a datelor, care e inclusă pentru a a juta căutarea locurilor libere. B şi B.1 sunt
necesare, dar nu sunt specifice pentru vreo cerinţă. C.8 e un constructor. D.1-D.4 sunt detalii ale
tranzacţiei, care sunt neglijate la cerinţe.
Exemplu. Construiţi un model pentru o bibliotecă. Soluţie. Obiectele sunt biblioteca, cărţi, copii ale
cărţilor şi cititori. Între bibliotecaşi carte, ca şi între bibliotecă şi cititor există o relaţie de agregare.
Între carteşi copiecartenu e nici agregare, nici moştenire, deoarece obiectul carte reprezintă
abstracţia unei cărţi, în timp de copiecarteeste itemul concre (fizic) care se împrumută.
Software design
-laborator-
Soluţie exerciţiul 1.
Cuplare–se doreşte cuplare slabă şi acest design are cuplare slabă, deoarece clasa collegenu are
cunoştinţe despre alcătuirea altor clase şi alte clase nu trebuie să ştie despre college.
Coeziune –e de dorit o coeziune mare şi designul are coeziune mare, deoarece fiecare clasă lucrează
cu propriile atribute.
Abstractizare– designul are o bună abstractizare. De exemplu, metoda displaydin collegenu include
detalii despre metodele lower-level de afişare.
Soluţie exerciţiul 2. 1.O persoană încearcă să răsucească mânerul uşii. -EV2.Uşa e deblocată de
sistem. -SV3.Un angajat lasă un străin pe uşă. -EH4.Un anagajat are un geamăn identic. -EH5.O
imagine are un număr minim de similarităţi pentru algoritmul de potrivire (matching algorithm). –SH
Exerciţiul 3. Calculaţi functional cohesion metrics(Bieman, Ott) pentru fragmentul de cod de mai jos.
Desenaţi graful orientat.
Sunt 33 tokens.Patru sunt superglue. Şase (incluzând tokens superglue) sunt glue tokens.
WKC=6/33=18.2%
SFC=4/33=12.1%
Adezivitate este (4*1+2*0.75+27*0.25)/33=12.25/33=37.1%
Exerciţiul 4. Desenaţi scenariile pentru interacţiunea dintre un client care încearcă să cumpere un
anumit CD cu muzică şi vânzătorul din magazin. Folosiţi state machine model. Pe arce să fie
reprezentate evenimentele.
Indicaţie. Mai jos e prezentată cea mai simplă situaţie, când vânzătorul intră în magazin, nu găseşte
CD şi pleacă din magazin. Completaţi şi variantele celelalte.
Testareasoftware-ului
1. Introducere
Testarea software-ului se face rulând software-ul cu date de test. Se mai numeşte testare dinamicăa
software-ului (dynamic software testing), pentru a se deosebi de analiza statică(static analysis),
numită uneori şi testare statică, care presupune analizarea codului sursă pentru identificarea
problemelor.
Deşi există diverse tehnici pentru validarea software-ului, executarea datelor cu date de test reprezintă
un pas necesar.
2. Noţiuni fundamentale
Testarea exhaustivă este executarea fiecărui caz de test posibil, dar se face rar, pentru că şi la
sistemele simple există foarte multe cazuri de testare posibile (Exemplu: un program cu 2 intrări de tip
întreg pe 32 biţi conduc la un număr de 264cazuri de testare posibile).
Obs. Test case selection poate fi văzută ca o încercare de dimensionare a cazurilor de testare prin
intermediul intrărilor.
Test coverage criterion e o regulă despre cum să selectăm cazuride testare şi când să ne oprim.
Abordarea standard o constituie folosirea relaţiei subsumes.
Un criteriu de testare A subsumează criteriul de acoperire a testării Bdacă orice test care satisface
criteriul A satisface de asemeneacriteriul B. Asta înseamnă că criteriul de acoperire a testării A include
într-un fel criteriul B.
Exemplu. Dacă un criteriu de acoperire a testării necesită ca fiecare instrucţiune să fie executată şi alt
criteriu de acoperire a testării necesită ca fiecare instrucţiune să fie executată plus alte teste
adiţionale, atunci al doilea criteriu subsumează primul criteriu.
Obs. O mulţime bine aleasă de cazuri de testare ce satisfac un criteriu “mai slab”poate fi mult mai bun
decât o mulţime aleasă mai rău care să satisfacă un criteriu “mai puternic”.
Unul din primii paşi este generarea unui caz de testare pentru fiecare tip distinct de ieşire a
programului. De exemplu, fiecare mesaj de eroare trebuie generat. Apoi fiecare caz special ar trebui
să aibă un caz de test. Situaţiile ce ne pot induce în eroare(tricky situations) ar trebuie testate.
Greşelile comune ar trebui testate.
Exemplu. Unul dintre exemplele clasice este următorul: pentru trei numere date la intrare, verificaţi
dacă aceste numere pot reprezenta laturile unui triunghi şi în caz afirmativ precizaţi natura triunghiului.
Soluţie. Împărţim spaţiul domeniu în 3 subdomenii, unul pentru fiecare tip de triunghi: oarecare
(scalen), isoscel (2 laturi egale) şi echilateral (toate laturile egale). Identificăm două situaţii de eroare:
un subdomeniu cu intrări greşite şi un subdomeniu în care laturile nu pot forma un triunghi. Fiecare
caz de testare trebuie să specifice valoarea output-ului.
Isoscel:
a=b=c (5,5,5–echilateral)
Nu e triunghi:
Intrări greşite:
Obs. Lista subdomeniilor poate fi extinsă. Un caz de testare în fiecare subdomeniu e soluţia minimală,
dar acceptabilă.
O metodă de formalizare a identificării subdomeniilor este construirea unei matrici folosind condiţiile
pe care le identificăm din specificaţie şi apoi să identificăm toate combinaţiile acestor condiţii ca fiind
adevărate sau false. Se vor folosi toate combinaţiile valide de T şi F. Dacă sunt 3 condiţii, vor fi 23=8
subdomenii (coloane). Liniile vor fi folosite pentru valorile lui a, b şi c şi pentru ieşirile prognozate
(expected output) pentru fiecare subdomeniu.
Exemplu. Condiţiile din problema triunghiului pot fi : (1) a=b sau a=c sau b=c, (2) a=b şi b=c, (3)
a<b+c şib<a+c şic<a+b, (4) a>0 şib>0 şic>0.Coloanele matricii vor reprezenta un subdomeniu. Pentru
fiecaresubdomeniu, vom plasa un T în fiecare rând în care condiţia e adevărată şi F când condiţia e
falsă.
Testarea structurală se bazează pe structura codului. Cel mai simplu criteriu este every statement
coverage, cunoscut drept C0 coverage.
3.4.1 C0 coverage
Acest criteriu presuppune că fiecare instrucţiune a codului ar trebui executată se un caz de testare.
Abordarea normală pentru obţinerea C0 coverage este selectarea cazurilor de testare până când un
instrument de acoperire (coverage tool) indică faptul că toate instrucţiunile din cod au fost executate.
Pentru modelarea programului cu triunghiul folosind un control flow graph, acest criteriu necesită
acoperirea fiecărui arc din digramă.
3.4.3 Testarea Every-Path
O cale (path) e o secvenţă unică a nodurilor programului care sunt executate de un caz de testare. În
matricea de testare (exemplul de mai sus), erau 8 subdomenii. Fiecare dintre ele se întâmplă să fie o
cale. În acel exemplu, există 16 combinaţii diferite de T şi F. Totuşi, 8 dintre aceste combinaţii sunt căi
nerealizabile (infeasible paths), adică nu există combinaţii de T şi F pentru deciziile din program.
Poate fi extrem de dificil să determinăm dacă calea e nerealizabilă, precum şi să găsim un caz de
testare care execută acea cale.
Multe programe cu bucle vor avea un număr infinit de căi. În general, testarea every-path nu e
rezonabilă.
3.4.4 Multiple-Condition Coverage
Acest criteriu de testare necesită ca fiecare condiţie de relaţie primitivă (primitive relation condition) să
fie evaluată true şi false. În plus, trebuie încercate toate combinaţiile de T/F pentru relaţiile primitive
într-o condiţie. E de notat că evaluarea lazy a unei expresii (un compilator e lazy dacă, de exemplu,
într-o expresie cu orprima relaţie e true, a doua nu mai e testată) va elimina anumite combinaţii. De
exemplu, într-un and dintre două relaţii primitive, a doua nu va mai fi evaluată dacă prima e falsă.
Exemplu.În pseudocodul din exemplul de la C0, sunt mai multe condiţii multiple. Primitivele care nu
se execută din cauza evaluării lazy sunt marcate mai jos cu un “X”.
3.4.5 Subdomain testing (testarea de subdomeniu)
Se bazează pe idee partiţionării domeniul de intrare (input domain) în subdomenii ce sunt mutual
excluse şi impunerea unui număr de cazuri de testare egal din fiecare subdomeniu. O idee similară se
întâlnea în cazul matricii de testare. În acest caz însă nu se restricţionează modul în care sunt
selectate domeniile.
Exemplu.Pentru problema triunghiului, putem începe cu un subdomeniu pentru fiecare ieşire. Acestea
se pot subdiviza ulterior în noi subdomenii, în funcţie de faptul dacă cel mai mare sau elementul greşit
introdus este în prima poziţie, a doua poziţie sau a treia poziţie.
3.4.6 C1 subsumează C0
Este testarea bazată pe fluxul datelor (data flow) într-un program. Datele curg din locul unde sunt
definite până în locul unde sunt folosite.
O definiţie de date(sau def.) este atunci când o valoare e asignată unei variabile.
Computation use(sau c-use) este atunci când o variabilă apare în membrul drept al unei instrucţiuni
de atribuire. c-use se spune că apare într-o instrucţiune de atribuire.
Predicate use(sau p-use) este atunci variabila este utilizată în condiţia unei instrucţiuni de decizie. p-
use e asignată ambelor ramuri ale instrucţiunii de decizie.
Definition free path(sau def-free) e o cale de la definiţia unei variabile la folosirea acelei variabile
care nu include altă definiţie a variabilei.
Exemplu(continuare)
dpu–singura p-use este pentru variabilele a,b,c şi singura defeste nodul abc
de la nodul abc la arcul abc-d
de la nodul abc la arcul abc-e
de la nodul abc la arcul e-f
de la nodul abc la arcul e-g
de la nodul abc la arcul g-h
de la nodul abc la arcul g-i
de la nodul abc la arcul i-j
de la nodul abc la arcul i-k
Se realizează prin selectarea aleatoare a cazurilor de testare. Are avantajul că este rapidă. În plus,
inferenţa statistică e mai uşoară când testele sunt selectate aleator.
Prin desenarea cazurilor de testare ale profilului operaţional, cel care face testul va avea mai multă
încredere că acea comportare a programului în timpul testării e mai predictivă despre cum se va
comporta în timpul funcţionării.
Pentru aplicarea testării aleatoare, se poate genera un număr pentru selectarea categoriei după
probabilităţi şi apoi generarea unor numere suficiente pentru a crea cazul de testare. Dacă cumva
categoria selectată a fost cazul echilateral, se va folosi acelaşi număr pentru toate cele trei intrări. Un
isoscel drept va necesita un număr aleator pentru lungimea a două laturi şi apoi se poate calcula
cealaltă latură.
Exemplu.Dacă selectăm 1000 cazuri de testare aleator, folosind profilul operaţional şi găsind 3 erori,
putem prezice că software-ul va avea o rată a erorilor mai mică de 3 defecţiuni (failures) la 1000 de
execuţii în mediul operaţional.
De multe ori erorile apar la frontierele dintre domenii. În cod, instrucţiunile condiţionale determină
frontierele domeniilor. Dacă avem o condiţie x<=1, atunci frontierax=1 este în domeniul true. În
termeni de boundary testing, spunem că on testssunt în domeniul true şi off testssunt valori ale lui x
mai mari decât 1 şi sunt în domeniul fals.Dacăo condiţiee scrisăx<1 în loc de x<=1, aunci frontiera x=1
este acum în domeniul fals.
Boundary testing e făcută cu scopul de a ne asigura că frontiera adevărată, reală (actual) dintre
domenii e apropiată pe cât se poate de frontiera specificată. De aceea, cazurile de testare sunt
selectate pe frontieră şi în afara frontierei, cât mai apropiat cu putinţă de frontieră. Testul de frontiera
standard constă în efectuarea a două on tests cât mai departe posibil pe frontieră şi un off testaproape
de mijlocul frontierei.
Figura de mai jos arată o frontieră simplă. Săgeata indică faptul că on tests ale frontierei sunt în
subdomeniul de sub frontieră. Cele două on tests sunt la capătul frontierei şi off test-ul chiar deasupra
jumătăţii.
Testarea software
-Laborator –
A. Întrebări
R: O specificare e necesară pentru a şti dacă comportarea concretă (actual behavior) e corectă sau
nu.
2. De ce path testing este de obicei impracticabilă?
R: Pentru că într-un program pot exista un număr uriaş de căi posibile.
3. De ce e important testing coverage criterion?
R: Pentru că acest criteriu forţează pe cel care face testele să testeze diversele părţi ale software-ului
B. Probleme
1.Un program calculează aria unui triunghi. Intrările sunt 3 mulţimi de coordonate x,y. Construiţi testele
funcţionale.
Testele funcţionale ar trebui să includă triunghiurile corecte, non-triunghiurile, condiţii de eroare etc.
2.Un program acceptă doi timpi (în format de 12 ore) şi ieşirile reprezintă numărul de minute scurse
între cei doi timpi. Construiţi testele funcţionale.
R: Testele funcţionale ar trebui să includă teste mai mici de 1 oră, mai mare de 1 oră, unul mai mare
de 12 ore, unul care necesită transport de ore şi unul cu timpii daţi în ordine inversă.
3.Un subprogram de căutare binară caută lista numelor în ordine alfabetică şi returnează true dacă
numele e în listă şi fals în caz contrar. Construiţi testele funcţionale.
C. Problemă propusă
1.Pentru următorul cod, identificaţi toate căile posibile, path testsşi data flow tests:
Puncte de interes
•Analiza problemei este procesul înţelegerii problemelor din lumea reală şi nevoile utilizatorului
şi propunerea de soluţii pentru satisfacerea acestor nevoi.
• Scopul analizării problemei este de de a înţelege cât mai bine problema, îniante de a trece la
dezvoltare.
•Pentru a identifica problemele din spatele problemei, trebuie întrebaţi cei direct implicaţi.
•Identificarea actorilor sistemului e un pas cheie în analizarea problemei.
Analiza problemei este procesul de a înţelege lumea reală şi nevoile utilizatorului şi de a propune
soluţii care să satisfacă aceste nevoi.
Pentru a putea face analiza problemei, definim ce este problema [Gause, Weinberg, Exploring
requirements..., 1989]:
Problema poate fi definită ca diferenţa dintre lucrurile aşa cum sunt percepute şi lucrurile aşa cum
sunt dorite.
Obs. Uneori, cea mai simplă soluţie este un proces revizuit decât un nou sistem.
Scopul problemei este de a înţelege mai bine problema înainte ca dezvoltarea să înceapă.
Paşii pe care trebuie să-i urmăm pentru a obţine scopul problemei sunt următorii:
1.Să ne punem de acord privind definirea problemei.
2.Să înţelegem problema din spatele problemei.
3.Să identificăm stakeholdersşi utilizatorii.
4.Să definim frontiera sistemului.
5.Să identificăm constrângerile care se impun soluţiei.
O cale foarte simplă este de a pune problema pe hârtie şi de a vedea dacă toată lumea e de acord cu
ea. Ca parte a acestui proces, e adesea de mare ajutor înţelegerea beneficiilor soluţiei propuse (cu
mare grijă ca beneficiile să fie descrise d.p.d.v al utilizatorilor).
Scrierea problemei se va face într-un format standardizat (vezi tabelul de mai jos). Completerea
tabelului e o tehnică simplă care ne asigură că toţi stakeholders se concentrează spre aceleaşi
scopuri.
Element Descriere
Problema e... Se descrie problema.
Afectează... Se identifică stakeholders.
Şi rezultatele în... Se descrie impactul problemei asupra stakeholders
şi asupra activităţii de business.
Beneficiile soluţiei... Se indică soluţia propusă şi se listează câteva
beneficii
O tehnică folosită este root cause analysis, care oferă o cale sistematică de a descoperi cauza unei
probleme identificate.
Pasul 2. Problema din spatele problemei
Root cause analysisnu reprezintă o metodologie definită; există multe procese, instrumente şi filozofii.
Totuşi, le putem clasifica în 5 “şcoli”:•Safety-based RCAdescinde dinaccident analysisşioccupational
safety and health.•Production-based RCAare originea încontrolul calităţii pentru manufacturarea
industrială. •Process-based RCAal cărei scop s-a extins ca să includăprocesele business. •Failure-
based RCAare rădăcinile în practica failure analysisaşa cum se foloseşte în inginerie şi mentenanţă.
•Systems-based RCAeste un amalgam al şcolilor precedente, împreună cu idei luate din domenii
precum change management, risk management, şisystems analysis.
Tehnici root cause analysis•Barrier analysis •Bayesian inference •Causal factor tree analysis
•Change analysis •Current Reality Tree •Failure mode and effects analysis•Fault tree analysis •5
Whys•Ishikawa diagram •Kepner-Tregoe•Pareto analysis •RPR Problem Diagnosis•Apollo Root Cause
Analysis
Stakeholder e oricine poate fi afectat material de implementareaunui nou sistem sau aplicaţie.
Mulţi stakeholders sunt utilizatori ai sistemului şi nevoile lor sunt uşor de identificat, deoarece ei sunt
direct implicaţi în definirea şi utilizarea sistemului. Unii stakeholders sunt doar utilizatori indirecţi,
deoarece sunt influenţaţi doar de veniturile sistemului.
Obs. Stakeholders neutilizatori trebuie de asemenea identificaţi.
Obs. Lucrurile care interacţionează cu sistemul pot fi văzute în termeni de actori (aşa cum s-au definit
în cadrul UML), încât sistemul se poate reprezenta ca în figura de mai jos:
În multe cazuri, frontierele sistemului sunt evidente (de exemplu, la sistemele cu un utilizator şi o
platformă).
În alte situaţii, frontierele sistemului nu mai sunt aşa evidente. De exemplu, sunt situaţiile în care
analistul trebuie să determine dacă datele sunt împărţite cu alte aplicaţiisau dacănoua aplicaţie va fi
distribuită între mai mulţi clienti etc.
Deşi de multe ori se identifică relativ uşor, actorii pot fi determinaţi răspunzând unor întrebări de genul
(vezi şi cursul despre Diagramele cazurilor de utilizare):
•Cine va folosi informaţia din sistem?
•Cine va opera sistemul?
•Cine va asigura mentenanţa sistemului?
•Unde va fi folosit sistemul?
•De unde îşi ia sistemul informaţiile?
•Ce alte sisteme (exterioare sistemului considerat) vor interacţiona cu sistemul?
Se pot lua în calcul diverse surse ale constrângerilor: planificarea (în timp), return on investment,
bugetul pentru muncă şi echipamente, sisteme de operare, baze de date, software-ul cumpărat,
procedurile companiei, alegerea instrumentelor şi limbajelor, constrângeri legate de personal, de
resurse etc.
Sursă Consideraţii
Economică
• Ce constrângeri financiare se aplică?
•Sunt consideraţii legate de preţul produsului?
•Sunt consideraţii legate de licenţiere?
Politică
•Sunt soluţiile potenţiale afectate de consideraţii politice?
•Sunt probleme interdepartamentale?
Sisteme
•Soluţia pe care o construim e deja în sistemele existente?
• Trebuie să menţinem compatibilitatea cu soluţiile existente?
•Ce S.O. şi medii pot fi suportate?
Tehnologică
•Suntem restricţionaţi în alegerea tehnologiilor?
•Suntem restricţionaţi în lucrul cu platformele şi tehnologiile existente?
• Există interdicţii privind utilizarea altor tehnologii?
•Ne aşteptăm să folosim pachete software cumpărate?
Odată identificate, unele dintre aceste constrângeri vor deveni cerinţe pentru noul sistem. Trebuie
determinat impactul fiecărei constrângeri asupra soluţiei potenţiale.
Concluzii
Managementul contractelor
1. Tipuri de contract
Resursele externe cerute pot fi sub formă de servicii. Un exemplu simplu ar fi folosirea unei echipe
temporare la contracte de durată mică, în vederea îndeplinirii anumitor sarcini.
Pe de altă parte, contractul poate fi încheiat pentru livrarea unei aplicaţii software complete.
Acesta poate fi:
•bespokesystem (sistem comandat), i.e. un sistem care e creat de la zero, special pentru un client;
•off-the-shelf (gata pentru cumpărare), pe care îl cumperi ca atare (“as is”) –uneori se mai numeşte
shrink-wrappedsoftware;
•customized off-the-shelf (COTS)software –acesta este basic core system, care e modificat pentru a
îndeplini cerinţele unui anumit client.
Obs. Livrarea unui echipament, conform legii din Anglia, poate fi privită ca un contract pentru livrarea
de bunuri. Livrarea de software poate fi privită ca oferirea unui serviciu (pentru scrierea software-ului)
sau ca acordarea unei licenţe pentru folosirea software-ului. Aceste disticţii au implicaţii legale.
Contracte cu preţfixat
Preţul e fixat atunci când se semnează contractul. Clientul ştie că dacă nu există schimbări în termenii
contractului, preţul pe care-l va plăti este cel consemnat în contract.
În acest caz trebuie ca analiza cerinţelor să fi avut deja loc. Odată începutîdezvoltarea, clientul nu-şi
poate schimba cerinţele fără să negocieze preţul contractului.
Avantajele acestei metode sunt:
•Cheltuielile clientului cunoscute;
•Motivarea furnizorului;
Exemplu. Tabelul de mai jos arată o astfel de estimare a preţurilor (tabel preluat din Garmus, Herron,
Measuring The Software Process, 1996)
Dacă sistemul conţine 2600 FPs, costul total va fi:
2000x967+500x1019+100x1058
O altă clasificare a contractelor (conform regulilor din Uniunea Europeană) se face în legătură cu
abordarea care e folosită pentru selectarea contractorului:
•deschisă (open);
•restricţionată (restricted);
• negociată (negociated).
Negociated procedure
Sunt situaţii când procesul de ofertare restricţionată nu e cel mai potrivit.
În aceste cazuri, se poate justifica abordarea unui singur furnizor, caz în care clientul poate fi acuzat
de favoritisme.
2. Etape în definitivarea contractelor
Analiza cerinţelor
Înaninte de abordarea furnizorului, trebuie să fie specificate clar cerinţele. Documentarea cerinţelor
trebuie sp aibă, în mod tipic, secţiuni de forma celor arătate în tabelul de mai jos (un asemenea
document se numeşte uneori operational requirementsau OR):
Cerinţele definesc cu grijă funcţiilecare necesită să fie duse la bun sfârşit de noua aplicaţie şi toate
intrările(inputs) şi ieşirile(outputs) necesare pentru aceste funcţii.
Cerinţele trebuie de asemenea să declare orice standard cu care trebuie să fie conforme şi sistemele
cu care noul sistem să fie compatibil.
Sunt necesare de asemenea cerinţe operaţionale şi de calitate (vezi capitolul despre Calitatea
produselor software).
Evaluarea propunerilor
Procesul de evaluare trebuie făcut metodic şi planificat şi ar putea include:
• examinarea atentă a documentelor propunerii;
•intervievarea reprezentanţilor furnizorilor;
•demonstraţii;
• examinări ale site-urilor;
•teste practice.
Documentele propunerii oferite de furnizori pot fi examinate pentru a vedea dacă conţin toate
elementele ce satisfac cerinţele originale. Se pot cere anumite clarificări asupra unor puncte ale
propunerii.
Orice declarare factuală făcută de furnizor presupune o angajare legală din partea lui dacă
influenţează cumpărătorul să ofere contractul acelui furnizor.
Cumpărătorul poate lua iniţiativa de a păstra note ale întâlnirilor şi de scrie apoi furnizorului pentru a
obţine confirmarea asupra acurateţii lor.
Furnizorul poate, în finalul documentului contractului, să încerce să excludă orice angajare la orice
reprezentaţii făcute în negocierile precontract.
Când produsul livrat se bazează pe un produs existent, e posibil să vadă o demonstraţie. Un pericol
cu demonstraţiile este acela că sunt controlate de furnizor. De aceea, clientul ar trebui să facă o
planificare a lucrurilor pe care doreşte să le vadă în demonstraţie, asigurându-se astfel că toate
elementele importante sunt văzute.
O problemă frecventă este aceea că în timp ce o aplicaţie existentă lucrează bine pe o anumită
platformă, nu lucrează mulţumitor pe platforma clientului. În acest caz sunt mai utile examinările unor
site-uri operaţionale care folosesc sistemul.
Definiţii
S-ar putea ca terminologia folosită în documentul contractului să fie definită, de exemplu ce se
înţelege prin “client”şi “furnizor”.
Forma înţelegerii
De exemplu, e contract de vânzare, de leasing sau licenţă?De asemenea, poate subiectul unui
contract, cum ar fi licenţa pentru utilizareunei aplicaţii software, poate fi transferată unei terţe părţi?
Proprietarul software-ului
Două chestiuni apar: mai întâi, poate clientul să vândă software-ul la alţii şi a doua dacă furnizorul
poate vinde software-ul la alţii.
Când un software e scris special pentru un client, clientul va dori probabil să-şi asigure exclusivitatea,
de exemplu prin cumpărarea copyright-ului sau prin specificarea în constract că foloseşte exclusiv
software-ul.
Mediul (environment)
Când trebuie instalat echipamentul fizic, trebuie specificată linia de demarcaţie dintre responsabilităţile
furnizorului şi clientului cu privire la lucruri cum ar fi furnizarea de energie.
Când software-ul e furnizat, trebuie confirmată compatibilitatea cu hardware-ul existent şi sistemul de
operare existent.
Angajamentele clientului
Clientul trebuie să asigure accomodationpentru furnizori şi probabil alte facilităţi (internet, linie
telefonică etc).
Proceduri de acceptare
Un sistem va fi acceptat numai după a trecut de testele de acceptare. O parte a contractului va
specifica detalii ca timpul pe care-l are clientul să facă testele, deliverables de care depind testele de
acceptare şi procedura pentru semnare atunci când testarea e completată.
Standarde
Clientul poate cere furnizorului dovada că diverse standarde sunt respectate.
Planificarea
Oferă o planificare a timpului în care trebuie completate părţile cheie ale proiectului. Această
planificare va obliga atât clientul, cât şi furnizorul. De exemplu, furnizorul poate si în stare să instaleze
software-ul la o dată convenită numai dacă clientul face platforma hardware disponibilă.
4. Managementul contractului
La anumite puncte de decizie, clientul are nevoie să examineze munca deja făcută şi să ia decizii
despre direcţia viitoare a proiectului.
Proiectul va necesita ca reprezentanţi ai clientului şi furnizorului să interacţioneze în multe puncte ale
ciclului de dezvoltare.
Această interacţiune, sau alţi factori externi, conduc(e) de obicei la necesitatea unor schimbări.
Pentru fiecare punct de decizie, trebuie să fie definite deliverables ce urmează să fie prezentate de
furnizori şi toate output-urile.
Pe măsură ce sistemul se dezvoltă, apare uneori nevoia unor schimbări în cerinţe, care pot duce la
modificarea termenilor contractului. Va fi nevoie deci de o procedură de control al schimbărilor, care
să înregistreze cerinţele pentru schimbări, împreună cu acordul furnizorului şi eventualele costuri
suplimentare necesare pentru munca în plus.
Clientul, pe de altă parte, trebuie să se asigure că în contract se specifică şi felul cum sunt tratate
situaţiile în care furnizorul nu respectă una sau mai multe obligaţii legale.
Odată contractul încheiat, trebuie avută în vedere calitatea muncii. Standardul ISO 12207 oferă printre
altele posibilitatea existenţei unor agenţi, angajaţi independent de client sau furnizor, care se vor duce
la bun sfârşit verificarea, validarea şi asigurarea calităţii.
5. Acceptarea
Când munca e terminată, clientul trebuie să înceapă activitatea legală pentru realizarea testării de
acceptare (acceptance testing). Contractul poate stabili o dată limită pentru cât poate dura testarea,
astfel încât clientul să poată face testarea înainte de expirarea timpului, în vederea corectării
problemelor ridicate.
O parte a plăţii sau chiar toată plata va depinde de testul de acceptare. Uneori o parte a plăţii finale va
fi reţinută pentru perioada rulare operaţională şi va fi plătită dacă nivelul de fiabilitate este conform
specificaţiilor contractate. Există de obicei o perioadă de garanţie, în timpul căreia furnizorul poate
pune la punct orice eroare apărută. Probabil că furnizorul poate cere o perioadă de garanţie mai mică
(30 zile, de exemplu), în timp ce clientul ar încerca să ducă perioada de garanţie până spre 120 zile,
de exemplu (aceste valori sunt orientative, dar pot fi întâlnite adesea în realitate).
Concluzii
Câteva dintre punctele cheie din acest capitol pot fi astfel rezumate:
•contractarea cu succes necesită timp important;
•e mai uşor să se obţină concesii din partea furnizorului înainte de semnarea contractului decât după;
•un contract va stabili obligaţii şi pentru client, şi pentru furnizor;
•negocierea contractului va include înţelegerea asupra managementului relaţiei dintre furnizor şi client
în timpul executării proiectului.
Una dintre primele sarcini este să împărţim activităţile mari în activităţi mai mici. Acest lucru înseamnă
şi găsirea acelor părţi mici ale activităţii. Înseamnă şi găsirea deliverablesşi milestones care se pot
utiliza pentru măsurarea progresului.
Work breakdown structure (WBS) trebuie să fie o structură de arbore. În vârful arborelui se va găsi de
obicei lyfe cycle model(LCM) folosit în organizaţie. Mai jos sunt date reguli pentru construirea unei
structuri corespunzătoare:
1. WBS trebuie să fie o structură de arbore. Nu trebuie să existe bucle sau cicluri.
3. Fiecare task trebuie să aibă un criteriu de completare (completion criterion). Trebuie să existe
o cale de a decide când un task e complet. Această decizie se numeşte completion criterion. Poate fi
deliverable, un design complet pentru proiect.
4. Toate deliverables trebuie să fie identificate.Un deliverable trebuie să fie produs de un task sau
nu va fi produs.
5. Completarea task-urilor trebuie să implice completarea întregului task. Dacă lipsesc task-uri
importante sau deliverables, întregul task nu va fi realizat.
Exemplu. Echipa A vrea să dezvolte un sistem de recunoaştere facială pentru folosirea pe un robot.
Sistemul se doreşte a fi folosit pentru a întâmpina vizitatorii în laboratorul de robotică. Ar trebui să
recunoască feţe pe care le-a mai văzut cu o anumită probabilitate. Primul pas în work breakdown ar
trebui să recunoască următoarele subtask-uri:
2) PERT –Program Evaluation and Review Technique
Tehnica creează un graf care arată dependenţele dintre task-uri. Fiecare sarcină are un estimator de
timp necesar pentru completarea sarcinii şi o listă a altor task-uri care trebuie completate înainte de a
începe task-ul respectiv (dependenţele). Graful poate să nu aibă totdeauna doar un subtask de
început sau doar un subtask de oprire. Întregul task e completat când toate subtask-urile sunt
completate. Graful poate fi folosit pentru a calcula timpii de completarepentru fiecare subtask, timpul
de completare minimpentru întregul task şi critical pathpentru subtask-uri.
Tabelul 2. Subtask-urile
Exemplu(continuare). Pot fi calculaţi acum timpii pentru nodurile c şi d. Deoarece predecesorii lui c se
termină la 8 şi 10, subtask-ul c poate începe la 10 şi completat la 10+8=18. Timpul de start pentru d va
fi 8 şi timpul de completare poate fi 8+9=17 şi pentru e vor fi 10 şi 10+5=15.Procesăm f şi g. Timpii de
start pot fi 18 şi respectiv 17. Timpii de completare pentru f va fi 18+3=21 şi 17+2=19 pentru g.
Subtask-urile h şi i se pot calcula cu amândouă plecând la 21 şi h completat la 25 şi i la 24. Tabelul 2
are toţi timpii de start şi completare.
B) CRITICAL PATH
Critical path este un set de task-uri care determină cel mai mic timp de completare (shortest possible
completion time).
Tabelul 2. Subtask-urile
Exemplu.In tabelul 2 (afişat şi în acest slide, pentru claritate) se văd timpii de completare pentru toate
subtask-urile. Marcăm h ca parte a drumului critic (critical path). Predecesorii lui h sunt f şi g. Subtask-
ul f are timpul cel mai mare de completare (latest) al celor două subtask-uri, deci f e marcat ca parte a
drumului critic. Subtask-ul f are c şi d ca predecesori. Va fi marcat c ca parte a drumului critic, având
timpul cel mai mare de completare. Similar, b va fi marcat ca parte a drumului critic, ca predecesor al
lui c cu timpul de completare cel mai mare. Drumul critic e complet.
C) SLACK TIME(satgnare)
Subtask-urile care sunt pe critical path trebuie să fie începute cât mai devreme cu putinţă, altfel tot
proiectul va fi întârziat. Totuşi subtask-urile care nu sunt pe critical path au o anumită flexibilitate
privind momentul când sunt începute. Această flexibilitate se numeşte slack time.
1. Alege nodul necritic cu timpul de terminare cel mai mare (latest ending time), nod care nu a fost
procesat. Dacă subtask-ul nu are succesori, alege latest ending time al tuturor nodurilor. Dacă
subtask-ul are succesori, alege cel mai mic dintre latest start timesal nodurilor succesor. Acesta este
latest completion time pentru acest subtask. Fă latest start timepentru acest subtask ca să reflecte
acest timp.
Estimarea costului proiectului are scopul de a determina câteresurse sunt necesare pentru
completarea proiectului. De obicei estimarea se face în programmer-months (PM).
Sunt două abordări diferite pentru estimarea costului. Vechea abordare se numeşte LOC estimation,
deoarece se baza pe estimarea iniţială a numărului de linii de cod necesare pentru dezvoltarea
proiectului.
Abordarea mai nouă se bazează pe numărarea function pointsîn descrierea proiectului.
Cost=α*KLOCβ+γ
Parametrul αeste costul marginal per KLOC (mii de linii de cod). Acesta este costul adăugat pentru
fiecare mie de linii de cod.
Parametrul β este un exponent ce reflectă neliniaritatea relaţiei. O valoare β>1 înseamnă că costul per
KLOC se măreşte pe măsură ce mărimea proiectului creşte.
Parametrul γ reflectă costul fixat pentru realizarea oricărui proiect.
Soluţie. Din tabel rezultă o relaţie liniară între mărime (size) şi efort (PM). Panta este 2,4, care
reprezintă α. Deoarece linia e dreaptă, β=1. Valoarea lui γva fi 0.Exemplu. Compania A a înregistrat
datele din proiectele anterioare. Estimaţi care ar fi parametrii pentru formula de estimare a costului şi
ce efort ar lua un proiect de 30 KLOC.
Boehm a determinat de asemenea că în datele de proiect, există un timp de dezvoltare standard bazat
pe tipul de proiect şi mărimea proiectului. Mai jos sunt date formule pentru timpul de dezvoltare
(development time –TDEV):
a)Application programs: TDEV=2.5*(PM)0.38
b)Utility programs: TDEV=2.5*(PM)0.35
c)System programs: TDEV=2.5*(PM)0.32
Exemplu. Calculaţi standardul TDEV pentru proiectele din tabelul alăturat, folosind formulele de mai
sus.
Inquires sunt perechi cerere-răspuns care nu schimbă datele interne. De exemplu, cererea pentru o
adresă a unui anumit angajat.
Outputssunt afişări ale datelor aplicaţiei. Un output poate fi un raport, un screen displaysau un mesaj
de eroare.
Internal filessunt fişiere logice ce sunt menţinute de sistem. Dacă un fişier conţinând date personale
şi date privind departamentul, se va contoriza probabil ca două fişiere separate în function point
analysis.
E) PRODUCTIVITATEA
Se determină prin împărţirea LOC la efortul programatorilor, exprimat în zi-programare. (vezi şi
exemplele date la Calitatea software –laborator).Exemplu. Compania A are efortul pentru fiecare
fază a ciclului de viaţă dată în tabelul următor. Calculaţi efortul în termeni de LOC/zi-
programare şi în termeni de function points/zi programare. Function point estimate a fost de 50
unadjusted function points. Produsul final include 950 linii de cod.
F) EVALUAREA ESTIMĂRILOR
Metrica propusă de Tom DeMarco este estimate quality factor(EQF). EQF e definită ca aria de sub
curba reală, împărţită cu aria dintre valoarea estimată şi reală. Valorile peste 8 sunt rezonabile,
conform lui DeMarco.
Exemplu. Estimările de mai jos sunt date pentru un proiect care costă 3,5 milioane dolari şi a fost
completat după 11,5 luni:
Planificareaproiectelor software
-Laborator -
Întrebări
Deşi WBS dezvoltă o listă de task-uri, e greu de văzut ce task-uri vor fi făcute primele şi care task-uri
determină final completion time.
Problema 1
Creaţi un WBS pentru task-ul vopsirii unei camere. Presupunem activităţile: planificarea
muncii, cumpărarea proviziilor, vopsirea propriu-zisă, curăţarea.
Problema 2
Problema 5
Calculaţi efortul COCOMO, TDEV şi productivitatea pentru un proiect organic care e estimat la 39800
linii de cod.