o Economiile tuturor tarilor dezvoltate sunt dependente de software
o Din ce in ce mai multe sisteme sunt controlate prin software o Ingineria software se ocupa cu teorii, metode si instrumente pentru dezvoltarea de software professional o Cheltuielile cu software reprezinta o fractiune semnificativa din produsul national brut in toate tarile dezvoltate Costurile pentru software o Deseori costurile pentru software domina costurile sistemelor de calcul. Costul software-lui instalat pe un PC este de obicei mai mare decat costul hardware-lui o Este mai scump sa intretii decat sa dezvolti software. Pentru sistemele cu durata mare de viata costurile de intretinere pot ajunge la de cateva ori costurile de dezvoltare o Ingineria software este preocupata de dezvoltarea de software eficienta din punct de vedere al costurilor Ce inseamna software? o Def: Programe pentru calculator si documentatia asociata (ex. cerinte, modele proiectate, manuale de utilizare) o Produsele software pot fi dezvoltate atat pentru un anume client cat si pentru o piata generala, si ele pot fi: -Generice - dezvoltate pentru a fi vandute unui spectru de clienti diferiti (ex. Excel or Word) -Bespoke (orientate client) - dezvoltate pentru un singur client, conform specificatiilor acestuia o Metode pentru realizare de software nou: - Dezvoltare de programe noi -Configurare de sisteme software generice -Reutilizare software existent Ce este ingineria software? o Def. Ingineria software este o disciplina de tip inginerie care trateaza toate aspectele productiei de software o Inginerii software trebuie sa: -Adopte o abordare sistematica si organizata a muncii lor -Utilizeze instrumente si tehnici adecvate la: Problema de rezolvat + Restrictiile de dezvoltare ++ Resursele disponibile Care este diferenta intre ingineria software si stiinta calculatoarelor? o Stiinta calculatoarelor se ocupa cu teorie si fundamente o Ingineria software se ocupa cu elementele practice ale dezvoltarii si furnizarii de software util o Teoriile din stiinta calculatoarelor nu reprezinta o baza completa pentru ingineria software Care este deosebirea dintre ingineria software si ingineria sistemelor? o Ingineria sistemelor se ocupa de toate aspectele dezvoltarii de sisteme bazate calculator, aceasta incluzand inginerie hardware, software si de proces. Ingineria software este parte a acestui proces ocupandu-se cu dezvoltarea infrastructurii software, a controlului, a aplicatiilor si a bazelor de date din cadrul sistemului o Inginerii de sistem sunt implicati in specificarea sistemului, in proiectarea arhitecturala, in integrare si in instalare Ce este un proces software? o Def. Un set de activitati ce au ca scop dezvoltarea si evolutia software-lui o Activitati generice ce apar in toate procesele software: -Specificare – ce trebuie sa faca sistemul si care sunt constrangerile in dezvoltarea sa -Dezvoltare – producerea sistemului software -Validare - verificarea faptului ca software-ul produs este ceea ce vrea clientul -Evolutie - modificarea software-lui ca raspuns la modificarea cerintelor Ce este un model de proces software? o Def. O reprezentare simplificata a procesului software vazut dintr-o anume perspectiva o Exemple de perspective pentru procesul software: -Perspectiva fluxului de activitati (Workflow) - secventa de activitati -Perspectiva fluxului de date (Data-flow) - fluxul informatiilor -Perspectiva rol/actiune - cine ce face o Modele generice pentru procesul software: -Cascada (Waterfall) - Dezvoltare iterativa -Inginerie software bazata pe componente Care sunt costurile ingineriei software? o In general 60% sunt costuri de dezvoltare si 40% costuri pentru testare. Pentru software-ul orientat pe client costurile de evolutie depasesc deseori costurile de dezvoltare o Costurile variaza in functie de: -Tipul sistemului ce trebuie dezvoltat -Cerintele impuse atributelor sistemului cum ar fi performanta si fiabilitate o Distributia costurilor depinde de modelul de dezvoltare utilizat Metodele ingineriei software? o Def. Abordari structurate ale dezvoltarii de software care includ modele de sistem, notatii, reguli, sfaturi pentru proiectare si ghidarea procesului o Descrieri de modele - Descrieri ale modelelor grafice care trebuie produse o Reguli - Constrangeri aplicate modelelor sistemului o Recomandari - Sfaturi cu privire la practici bune pentru proiectare o Ghidare proces - Ce activitati trebuie urmate. Ce inseamna CASE (Computer-Aided Software Engineering) o Def. Sisteme software destinate furnizarii de suport automat pentru activitatile procesului software o Sistemele CASE sunt utilizate deseori ca suport pentru metodologii de dezvoltare de software o Upper-CASE: Instrumente in sprijinul activitatilor procesului referitoare la cerinte si proiectare o Lower-CASE: Instrumente ce sprijina activitatile de programare, debugging si testare Care sunt atributele unui software bun? o Software-ul trebuie sa ofere utilizatorului functionalitatea si performanta solicitata si trebuie sa fie mentenabil, dependabil si acceptabil o Mentenabilitate: Software-ul trebuie sa evolueze pentru a respecta cerinte in schimbare o Dependabilitate: Software-ul trebuie sa fie demn de incredere; sa te poti baza pe el o Eficienta: Software-ul nu trebuie sa faca risipa de resursele sistemului o Acceptabilitate: Software-ul trebuie sa fie acceptat de catre utilizatorii pentru care a fost proiectat. Aceasta inseamna ca produsul software trebuie sa fie inteligibil, utilizabil si compatibil cu alte sisteme Care sunt provocarile adresate ingineriei software? o Heterogenitate, livrare si incredere o Heterogenitate: Dezvoltare de tehnici pentru construire de software care poate sa faca fata la platforme si medii de executie eterogene o Livrare: Dezvoltare de tehnici care sa conduca la livrare de software mai rapida o Incredere: Dezvoltare de tehnici care demonstreaza ca utilizatorii pot avea incredere in produsul software Responsabilitate etica si profesionala o Ingineria software implica responsabilitati mai largi decat simpla aplicare a competentelor tehnice o Inginerii software trebuie sa aiba un comportament onest si sa manifeste responsabilitate etica pentru a fi respectati ca profesionisti o Comportamentul etic inseamna mai mult decat simpla sustinere a legii Elemente de responsabilitate profesionala o Confidentialitate: Inginerii trebuie sa respecte confidentialitatea angajatorului si a clientilor, indiferent daca a fost sau nu semnat un contract de confidentialitate o Competenta: Inginerii trebuie sa-si reprezinte corect nivelul de competenta. Ei nu trebuie sa accepte sarcini care nu se incadreaza in competentele pe care le detin Elemente de responsabilitate profesionala o Drepturi de proprietate intelectuala: Inginerii trebuie sa fie constienti de legile locale care guverneaza utilizarea proprietatii intelectuale, cum ar fi patente, copyright, etc. Ei trebuie sa fie atenti in a se asigura ca este protejata proprietatea intelectuala a angajatorului si a clientilor o Abuzarea calculatorului: Inginerii software nu trebuie sa-si utilizeze cunostintele tehnice pentru a abuza de calculatoarele altor persoane. Abuzarea calculatoarelor variaza de la relativ trivial (ex. joc pe calculator) la extrem de serios (diseminare de virusi). Codul de etica ACM/IEEE o Societatile profesionale din USA au cooperat in vederea producerii unui cod de practica etica o Membrii acestor organizatii semneaza un cod de practica etica in momentul aderarii o Codul contine Opt Principii relativ la comportamentul si deciziile inginerilor software profesionisti, incluzand liber-profesionistii, educatorii, managerii, supervizorii si cei care fac politicile, precum si instructorii si studentii acestei profesiuni Codul de etica - PREAMBUL o Preambul: Versiunea scurta a codului rezuma, la un nivel ridicat de abstractizare, aspiratiile; clauzele incluse in versiunea completa dau exemple si detalii asupra modului in care aceste aspiratii modifica modul in care actionam ca ingineri software profesionisti. Fara aspiratii, detaliile pot deveni legalistice si anoste; fara detalii, aspiratiile pot suna pompuos dar fara continut; impreuna, aspiratiile si detaliile formeaza un cod coeziv si Inginerii software trebuie sa se angajeze in a face din analiza, specificarea, proiectarea, dezvoltarea, testarea si intretinerea software- lui o profesiune folositoare si respectata. Conform cu angajamentul lor relativ la sanatatea, siguranta si bunastarea publicului, inginerii software trebuie sa adere la urmatoarele Opt Principii: Codul de etica - PRINCIPII 1. PUBLIC: Inginerii software trebuie sa actioneze in concordanta cu interesul public 2. CLIENT SI ANGAJATOR: Inginerii software trebuie sa actioneze intr-o maniera care sa reprezinte cel mai bine interesele angajatorului si ale clientului, in concordanta cu interesul public 3. PRODUS: Inginerii software trebuie sa asigure faptul ca produsele lor si modificarile acestora respecta cele mai inalte standarde profesionale 4. DISCERNAMANT: Inginerii software trebuie sa-si pastreze integritatea si independenta in opiniile profesionale 5. MANAGEMENT: Managerii si conducatorii din ingineria software trebuie sa subscrie si sa promoveze o abordare etica a managementului dezvoltarii si intretinerii de software 6. PROFESIUNE: Inginerii software trebuie sa promoveze integritatea si reputatia profesiunii in concordanta cu interesul public 7. COLEGIALITATE: Inginerii software trebuie sa fie cinstiti si sa-si sprijine colegii 8. SELF: Inginerii software trebuie sa se perfectioneze continuu relativ la practicarea profesiunii si trebuie sa promoveze o abordare etica in practicarea acesteia Dileme etice o Dezacordul de principiu cu politicile managementului superior o Angajatorul actioneaza intr-un mod lipsit de etica si lanseaza un sistem critic din punct de vedere al sigurantei fara a finaliza testarea acestuia o Participarea la dezvoltarea de sisteme militare sau nucleare Puncte cheie o Ingineria software este o disciplina de tip inginerie care se ocupa cu toate aspectele producerii de software o Produsele software constau din programe si din documentatia asociata acestora. Atributele esentiale ale produselor software sunt mentenabilitatea, dependabilitatea, eficienta si utilizabilitatea o Procesul software consta din activitatile implicate in dezvoltarea de produse software. Activitatile de baza sunt specificarea, dezvoltarea, validarea si evolutia software-lui o Methodologiile sunt modalitati organizate de producere de software. Ele includ sugestii pentru procesul ce trebuie urmat, notatiile ce se vor utiliza, regulile ce guverneaza descrierile sistemului produse si indicatiile de proiectare o Instrumentele CASE sunt sisteme software care sunt proiectate pentru a sprijini activitatile de rutina ale procesului software cum ar fi editarea diagramelor de proiectare, verificarea consistentei diagramelor si urmarirea testelor executate o Inginerii software au responsabilitati fata de profesiunea de inginer si fata de societate. Ei nu trebuie sa fie preocupati doar de problemele tehnice o Societatile profesionale publica coduri de conduita care precizeaza standarde de comportament pentru membrii lor Ce este un sistem? o Def. Colectie semnificativa (cu un anume scop) de componente inter- relationate care lucreaza impreuna pentru a realiza un obiectiv comun o Poate include componente: Software & Hardware(mecanic, electric, etc) si poate fi operat de persoane o Componentele sistemului sunt interdependente o Proprietatile si comportamentul componentelor sistemului sunt strans corelate Categorii de sisteme o Sisteme tehnice bazate pe calculatoare: -includ hardware si software -operatorii si procesele operationale nu sunt considerate ca parte a sistemului -sistemul nu este “constient” se sine (self-aware) o Sisteme socio-tehnice: -includ sisteme tehnice -includ procesele operationale si persoanele care utilizeaza si interactioneaza cu sistemul tehnic -sunt guvernate de politici si reguli organizationale Caracteristicile sistemelor socio-tehnice o Are proprietati emergente: Proprietati de ansamblu ale sistemului care depind de componentele sistemului si de relatiile dintre acestea o Non-deterministic: Nu produce intotdeauna aceeasi iesire pentru acelasi set de intrare deoarece comportamentul sistemului este partial dependent de operatorii umani o Relatii complexe cu obiectivele organizationale: Gradul in care sistemul sprijina obiectivele organizationale nu depinde doar de acesta Proprietati emergente o Proprietati de ansamblu (globale) ale sistemului o Sunt consecinta a relatiilor dintre componentele sistemului o Pot fi evaluate si masurate doar dupa ce componentele au fost integrate in sistem Tipuri de proprietati emergente o Proprietati emergente functionale: Apar atunci cand toate partile sistemului lucreaza impreuna pentru a realiza un obiectiv. De exemplu, o bicicleta, odata ce a fost asamblata din componentele sale, are proprietatea functionala de a fi un dispozitiv de transport o Proprietati emergente non-functionale: -Exemple: fiabilitatea, performanta, siguranta, securitatea -Sunt corelate cu comportamentul sistemului in contextul sau operational -Sunt deseori critice pentru sistemele bazate pe calculatoare deoarece esuarea in a realiza un nivel minim definit pentru aceste proprietati poate face ca sistemul sa nu poata fi utilizat Ingineria fiabilitatii sistemului o Defectele se pot propaga in sistem datorita inter-dependentei intre componente o Defectele sistemului apar deseori din cauza inter-relatiilor neprevazute intre componente o Este probabilistic imposibil de anticipat toate relatiile posibile intre componente o Rezultatele masuratorilor asupra fiabilitatii software-lui pot da o imagine falsa a fiabilitatii sistemului Influente asupra fiabilitatii o Fiabilitate hardware: Probabilitatea ca o componenta hardware sa se defecteze si durata repararii acesteia o Fiabilitate software: Probabilitatea ca o componenta software sa produca o iesire incorecta o Fiabilitate operator: Probabilitatea ca un operator al sistemului sa faca o greseala Relatii de fiabilitate o Un defect hardware poate genera semnale false care se afla in afara domeniului intrarilor asteptate de catre software o Erori software pot produce activarea de alarme care cauzeaza stresarea unui operator si conduc la erori produse de acesta o Contextul in care este instalat un sistem poate afecta fiabilitatea sa Proprietati de tip interdictie o Exista proprietati care se exprima ca interdictii: -Siguranta – sistemul nu trebuie sa se comporte in maniera nesigura -Securitate – sistemul nu trebuie sa permita utilizare neautorizata o Este dificil de masurat sau evaluat aceste proprietati o Spre deosebire de acestea: Proprietati ca performanta si fiabilitatea pot fi masurate mai simplu Ingineria sistemelor o Se refera la: Specificarea, proiectarea, implementarea, validarea, repartizarea si intretinerea sistemelor socio-tehnice o Se ocupa cu: -Serviciile oferite de sistem -Constrangerile asupra construirii si operarii sistemului -Modurile in care este utilizat sistemul Procesul ingineriei sistemelor o Urmeaza in mod uzual modelul ‘waterfall’ datorita necesitatii de a dezvolta in paralel diferite parti ale sistemului. Conditii restranse pentru realizare de iteratii ale fazelor deoarece modificarile hardware sunt foarte costisitoare. Software-ul poate avea sarcina de a compensa problemele hardware o Implica in mod inevitabil ingineri din discipline diferite care trebuie sa lucreze impreuna. Posibilitate mare sa apara intelegeri gresite. Diferite discipline utilizeaza vocabulare diferite deci este necesara negociere indelungata. De asemenea, inginerii pot avea agende proprii de realizat Definirea cerintelor sistemului o In acest stadiu se definesc trei tipuri de cerinte: -Cerinte functionale abstracte. Functiile sistemului sunt definite in maniera abstracta -Proprietatile sistemului. Sunt definite proprietatile de ansamblu non- functionale ale sistemului -Caracteristici indezirabile. Este specificat comportament inacceptabil pentru sistem o Obiective organizationale globale ale sistemului Obiectivele sistemului o Trebuie sa defineasca motivul procurarii sistemului pentru un context particular, Exemplu: -Obiective functionale-Oferirea unui sistem de alarma incendii si intrusi pentru o cladire, care va realiza averizare interna si externa a incendiilor si intruziunilor neautorizate -Obiective organizationale-Sa asigure faptul ca desfasurarea normala a activitatilor din cladire nu este afectata serios de evenimente ca incendii si intruziune neautorizata Cerinte sistem: problematica o Sistemele complexe sunt de obicei dezvoltate pentru a adresa probleme dificile: -Probleme care nu sunt complet intelese -Probleme care se modifica pe masura ce sistemul este specificat o Trebuie anticipata evfolutia hardware-lui/comunicatiilor pe perioada de viata a sistemului o Este dificil de definit cerintele non-functionale (in particular) fara cunoasterea structurii sistemului la nivel de componente Procesul proiectarii sistemului o Partitionarea cerintelor: Organizarea cerintelor in grupuri pe baza de relatii o Identificarea sub-sistemelor: Identificarea unui set de sub-sisteme care pot realiza, in colectiv, cerintele sistemului o Alocarea cerintelor pe sub-sisteme: Produce probleme specifice cand sunt integrate componente COTS (Commercial, Off-the-Shelf) o Specificarea functionalitatii la nivel de sub-sistem o Definirea interfetelor sub-sistemelor: Activitate critica in cazul dezvoltarii de sub-sisteme in paralel Proiectarea sistemului: problematica o Partitionarea cerintelor intre hardware, software si componente umane poate implica negociere intensa o Deseori se presupune ca problemele dificile de proiectare sunt solvabile prin utilizare de software o Platformele hardware pot fi nepotrivite pentru cerintele software, lucru ce trebuie compensat de software Cerinte si proiectare o Ingineria cerintelor si proiectarea sistemului sunt strans legate o Constrangerile impuse de contextul sistemului si de alte sisteme limiteaza variantele de proiectare astfel incat poate deveni o cerinta chiar utilizarea unui anume proiect o Pentru a structura cerintele poate fi necesara o etapa initiala de proiectare o Pe masura desfasurarii proiectarii se afla lucruri noi referitoare la cerinte Modelarea sistemului o Un model arhitectural prezinta o perspectiva abstracta a sub-sistemelor ce formeaza un sistem o Poate include fluxuri majore de informatii intre sub-sisteme o Este prezentata de obicei ca diagrama bloc o Poate identifica diferite tipuri de componente functionale in model Dezvoltare sub-sistem o Proiecte (tipic) paralele pentru dezvoltare de hardware, software si comunicatii o Poate implica procurare de sisteme COTS (Commercial Off-the-Shelf) o Lipsa de comunicare intre echipele de implementare o Mecanism birocratic si lent pentru propunerea de modificari la sistem => orarul de dezvoltare poate necesita extindere datorita nevoii de relua unele activitati Integrare sistem o Procesul de a pune impreuna hardware, software si persoane pentru a construi un sistem o Trebuie abordat incremental astfel incat sub-sistemele sunt integrate pe rand o In acest stadiu apar in mod uzual problemele de interfata intre sub- sisteme o Pot sa apara probleme cu furnizari necoordonate ale componentelor sistemului Instalare sistem o Dupa finalizare, sistemul trebuie instalat in contextul clientului: -Premizele asupra contextului pot fi incorecte -Poate sa apara rezistenta umana la introducerea unui nou sistem -E posibil ca sistemul sa fie nevoit sa coincida cu sisteme alternative pentru o anumita perioada de timp -Pot sa apara probleme de instalare fizica (ex. probleme de cablare) -Trebuie identificate necesitatile de instruire a operatorilor Evolutie sistem o Sistemele mari au durate de viata lungi. Ele trebuie sa evolueze pentru a indeplini cerinte in schimbare o Evolutia este in mod inerent costisitoare: -Modificarile trebuie analizate din perspectiva tehnica si din perspectiva economica -Pot sa apara probleme neanticipate datorate interactiunii sub- sistemelor -Rareori exista o ratiune fundamentata pentru deciziile originale de proiectare -Structura sistemului este corupta pe masura ce apar modificari la ea o Sistemele existente ce trebuie pastrate sunt numite uneori sisteme legacy Dezafectarea sistemului o Def. Scoaterea din functiune a sistemului la sfarsitul duratei de viata utila o Poate necesita indepartare de materiale (ex. chimicale periculoase) care polueaza mediul: Trebuie pregatita in proiectarea sistemului prin incapsulare o Poate necesita restructurarea si conversia datelor pentru a fi utilizate in alt sistem Organizatii/persoane/sisteme o Sistemele socio-technice sunt sisteme organizationale destinate realizarii unui scop organizational sau aplicativ (al afacerii) o Daca nu este inteles contextul organizational in care este utilizat sistemul, este mai putin probabil ca acesta sa indeplineasca cerintele reale ale afacerii si ale utilizatorilor lui Factori umani si organizationali o Modificari proces o Modificari job o Modificari organizationale Procesele organizationale o Procesele ingineriei sistemelor se suprapun si interactioneaza cu procesele organizationale pentru procurari o Procesele operationale sunt procesele implicate in utilizarea sistemului pentru scopul caruia ii este destinat. Pentru sistemele noi, acestea trebuie definite ca parte a proiectarii sistemului o Procesele operationale trebuie proiectate astfel incat sa fie flexibile si sa nu forteze realizarea operatiilor intr-un mod particular. Este important ca operatorii umani sa-si poata utiliza initiativa atunci cand apar probleme Procurare sistem o Def. Achizitionarea unui sistem pentru a indeplini o cerinta a organizatiei o De obicei este necesara specificare sistem si proiectare arhitecturala inainte de procurare: -Este nevoie de specificare pentru a lansa un contract de dezvoltare a sistemului -Specificarea poate permite cumpararea unui sistem COTS (aproape intotdeauna mai ieftin decat dezvoltarea integrala a sistemului) o Sistemele mari si complexe constau din combinatii de componente COTS si componente special proiectate. Procesele pentru procurarea acestor tipuri diferite de componente sunt in mod uzual diferite Problematica procurarii o Cerintele ar putea necesita modificare pentru a se potrivi capabilitatilor componentelor off-the-shelf o Specificatiile cerintelor pot fi parte a contractului pentru dezvoltarea sistemului o Dupa ce a fost ales contractorul ce va construi sistemul, exista de obicei o perioada de negociere in cadrul contractului pentru acordul asupra modificarilor Contractori si sub-contractori o Procurarea de sisteme mari hardware/software graviteaza de obicei in jurul unui contractor principal o Sunt realizate sub-contracte cu alti furnizori pentru a furniza parti din sistem o Clientul tine legatura cu contractorul principal si nu trateaza direct cu sub-contractorii Sisteme legacy o Sisteme socio-tehnice care au fost dezvoltate utilizand tehnologii vechi, depasite o Cruciale pentru operarea unei anumite afaceri si uneori este prea riscant sa fie dezafectate: -Sistem de contabilizare pentru client bancar -Sistem de intretinere a avioanelor o Sistemele legacy impun constangeri noilor procese economice (business) si consuma o proportie insemnata din bugetele companiilor Componentele sistemelor legacy o Hardware-poate fi hardware depasit de tip mainframe o Suport software-se pot baza pe suport software de la furnizori care nu mai exista o Software de aplicatie-pot fi scrise in limbaje de programare depasite o Data ale aplicatiei-deseori incomplete si inconsistente o Procese economice-pot fi constranse de structura si functionalitatea software-lui o Politici si reguli economice-pot fi implicite si incapsulate in software-ul sistemului Puncte cheie o Sistemele socio-tehnice includ hardware, software si persoane si sunt proiectate pentru a realiza un anume scop economic o Proprietatile emergente sunt proprietati care sunt caracteristice sistemului in ansamblu si nu partilor lui componente o Procesul ingineriei sistemelor include specificare, proiectare, dzvoltare, integrare si testare. Integrarea sistemului este in mod deosebit critica o Factorii umani si organizationali au un efect semnificativ asupra modului in care opereaza sistemele socio-tehnice o Exista interactiuni complexe intre procesele pentru procurarea, dezvoltarea si operarea sistemelor o Un sistem legacy este un sistem vechi care continua sa ofere servicii esentiale o Sistemele legacy includ procese economice, software de aplicatii, software support si hardware Procesul software o Def. Proces software = set structurat de activitati necesare pentru dezvoltarea unui sistem software: specificare & proiectare && validare &&& evolutie o Def. Model pentru proces software = reprezentare abstracta a unui proces. Prezinta o descriere a unui proces dintr-o perspectiva particulara Modele generice pentru procesul software o Modelul cascada (waterfall)- Etape separate si disticte de specificare si de dezvoltare o Dezvoltare evolutiva-Specificarea, dezvoltarea si validarea sunt intercalate o CBSE (Component-based software engineering)- Sistemul este asamblat din componente existente o Exista variante multiple ale acestor modele. De exemplu dezvoltarea formala, unde se utilizeaza un proces de tip cascada dar specificarea este o specificare formala care este rafinata de-a lungul mai multor stadii pentru a deveni un proiect implementabil Etapele modelului cascada o Analiza si definirea cerintelor o Proiectarea sistemului si a software-lui o Implementarea si testarea unitatilor o Integrarea si testarea sistemului o Operarea si mentenanta (intretinerea) o Principalul dezavantaj al modelului cascada consta in dificultatea adaptarii modificarilor dupa ce procesul demarat. Aceasta deoarece inainte de a se trece la o noua etapa este necesara incheierea celei precedente. Problematica modelului cascada o Partitionarea inflexibila a proiectului in stadii distincte face dificil raspunsul la modificarea cerintelor clientului o Modelul este potrivit doar in cazurile in care cerintele sunt bine intelese si modificarile vor fi in limite acceptabile in timpul procesului de dezvoltare o Putine sisteme economice au cerinte stabile o Modelul cascada este folosit in special pentru proiecte de ingineria sistemelor mari, unde un sistem este dezvoltat pe mai multe sit-uri Dezvoltare evolutiva o Dezvoltare exploratorie-Obiectivul este acela de a lucra cu clientii si de a dezvolta un sistem final dintr-o specificare schitata initial. Trebuie sa se inceapa cu cerinte bine intelese si sa se adauge caracteristici noi pe baza propunerilor clientului o Prototipare (throw-away prototiping)- Obiectivul este acela de a intelege cerintele sistemului. Trebuie sa se inceapa cu cerintele putin intelese si sa se clarifice ceea ce este necesar cu adevarat Dezvoltare evolutiva o Probleme: -Lipsa vizibilitatii procesului -Sistemele sunt deseori slab structurate -Pot fi necesare calificari speciale (ex. in limbaje pentru prototipare rapida) o Aplicabilitate: -Pentru sisteme interactive de dimensiuni mici sau mijlocii -Pentru parti din sisteme mari (ex. interfata utilizator) - Pentru sisteme cu durate mici de viata CBSE (Component-based software engineering) o Bazata pe reutilizare sistematica, unde sistemele sunt integrate din componente existente sau din sisteme COTS (Commercial-off-the-shelf) o Etapele procesului: -Analiza componente -Modificare cerinte -Proiectare sistem cu reutilizare -Dezvoltare si integrare o Aceasta abordare este din ce in ce mai mult utilizata odata cu aparitia standardelor de componente Iterare proces o Cerintele sistemului se dezvolta (INTOTDEAUNA) pe parcursul unui proiect, astfel incat reiterarea, in care primele etape sunt reluate, este intotdeauna parte a procesului pentru sisteme mari o Iterarea se poate aplica oricarui model generic de proces software o Doua abordari (corelate): Furnizare incrementala & Dezvoltare in spirala Furnizare incrementala o In loc de a livra sistemul deodata, dezvoltarea si livrarea sunt divizate in incremente, cu fiecare increment livrand o parte a functionalitatii cerute o Cerintele utilizatorului sunt prioritizate si cerintele cu cele mai mari prioritati sunt incluse in primele incremente o Odata ce a fost pornita dezvoltarea unui increment cerintele sunt inghetate, desi cerintele pentru urmatoarele incremente pot continua sa evolueze Avantajele dezvoltarii incrementale o Se poate furniza valoare la client cu fiecare increment, astfel incat functionalitatea sistemului este disponibila mai devreme o Primele incremente actioneaza ca un prototip care ajuta la obtinerea cerintelor pentru incrementele urmatoare o Risc mai scazut de esuare a intregului proiect o Serviciile sistemului cu prioritati mari tind sa fie testate mai mult Programare extrema o Abordare a dezvoltarii bazata pe dezvoltarea si furnizarea de incremente de functionalitate foarte mici o Se bazeaza pe: imbunatatirea constanta a codului & implicarea utilizatorului in echipa de dezvoltare && programare in mod pereche (pairwise) Dezvoltare in spirala o Procesul este reprezentat sub forma de spirala (in loc de secventa de activitati cu reluare) o Fiecare bucla din spirala reprezinta o etapa in proces o Nu exista faze fixe ca specificare sau proiectare – buclele din spirala sunt alese functie de ceea ce este necesar o Risurile sunt evaluate explicit si rezolvate de-a lungul procesului Sectoarele modelului spirala o Stabilire obiective-Sunt identificate obiectivele specifice etapei o Evaluare si reducere risc-Riscurile sunt evaluate si se realizeaza activitati pentru reducerea riscurilor cheie o Dezvoltare si validare-Se alege un model de dezvoltare pentru sistem, care poate fi oricare din modelele generice o Planificare-Proiectul este revazut si se planifica urmatoarea etapa a spiralei Activitatile procesului o Specificarea software-lui o Proiectarea si implementarea software-lui o Validarea software-lui o Evolutia software-lui Specificarea software-lui o Def. Procesul de stabilire a serviciilor cerute si a constrangerilor asupra operarii si dezvoltarii sistemului o Procesul pentru ingineria cerintelor: Studiu de fezabilitate & Obtinere si analiza cerinte && Specificare cerinte &&& Validare cerinte Proiectarea si implementarea software-lui o Def. Procesul de convertire a specificatiilor sistemului intr-un sistem executabil o Proiectare software-Proiectarea unei structuri software care realizeaza specificatiile o Implementatare-Traducerea acestei structuri intr-un program executabil o Activitatile de proiectare si implementare sunt strans corelate si pot fi intercalate Activitatile procesului de proiectare a software-lui o Proiectare arhitecturala o Specificare abstracta o Proiectare interfata o Proiectare componente o Proiectare structura de date o Proiectare algoritm Metode structurate o Def. Abordari sistematice ale proiectarii software-lui o Proiectul este documentat (in mod uzual) sub forma de set de modele grafice o Modele posibile: Model obiecte & Model secvente && Model tranzitii de stare &&& Model structural &&&& Model al fluxului de date Programare si depanare o Def. Traducerea proiectului intr-un program si eliminarea erorilor din acel program o Programarea este o activitate personala – nu exista un proces generic pentru aceasta activitate o Programatorii realizeaza o testare initiala a programului in cursul operatiei de depanare (debugging) pentru a descoperi si corecta erori ale programului Validarea software-lui o Verificarea si validarea (V & V) au scopul de a arata ca sistemul se conformeaza specificatiilor sale si indeplineste cerintele clientului sistemului o Implica procese de verificare/control si revizuire si testarea sistemului o Testarea sistemului implica executarea sistemului cu cazuri de testare care sunt derivate din specificarea de date reale ce trebuie procesate de sistem Stadiile testarii o Testare componente sau unitati: Componentele individuale sunt testate independent & Componentele pot fi functii sau obiecte sau grupuri coerente de astfel de entitati o Testare sistem: Testarea sistemului in ansamblu. Testarea proprietatilor emergente are o importanta speciala o Teste de acceptare: Testare cu datele clientului pentru a verifica daca sistemul indeplineste cerintele acestuia Evolutia software-lui o Software-ul este in mod inerent flexibil si se poate modifica o Pe masura ce cerintele se modifica odata cu modificarea circumstantelor economice, software-ul suport pentru procesul economic trebuie, de asemenea, sa evolueze si sa se schimbe o Desi s-a facut demarcarea intre dezvoltare si evolutie (intretinere), aceasta devine din ce in ce mai nerelevanta pe masura ce din ce in ce mai putine sisteme sunt complet noi RUP (Rational Unified Process) o Model modern pentru procesul software, derivat din UML si procesele asociate elaborarii acestuia o Descris din 3 perspective: Perspectiva dinamica-arata repartizarea etapelor in timp & Perspectiva statica-arata activitatile procesului && Perspectiva practica-sugereaza practici bune Etapele RUP o Conceptie-Stabilirea cazului business pentru sistem o Elaborare-Dezvoltarea unei intelegeri a domeniului problemei si a arhitecturii sistemului o Construire-Proiectarea sistemului, programarea si testarea o Tranzitie-Repartizarea (deploy) sistemului in contextul sau de operare Practici bune RUP o Dezvoltare iterativa a software-lui o Managementul cerintelor o Utilizare de arhitecturi bazate pe componente o Modelare vizuala a software-lui o Verificarea calitatii software-lui o Controlul modificarilor la software CASE (Computer-aided software engineering) o CASE (Computer-aided software engineering) este software folosit ca suport pentru procesele de dezvoltare de software si de evolutie a software-lui. o Automatizare activitati: Editoare grafice pentru dezvoltarea modelului sistemului & Dictionare de date pentru gestionarea entitatilor proiectarii && Constructor GUI pentru construirea interfetei utilizator &&& Debugger-e pentru a sprijini gasirea erorilor in program &&&& Traducatoare (translator) automate pentru generare de noi versiuni de program Tehnologia CASE o Tehnologia CASE a condus la imbunatatiri semnificative ale procesului software. Totusi nu atat de mult cat s-a prezis o Ingineria software cere gandire creativa – aceasta nu este usor de automatizat o Ingineria software este o activitate de echipa si, pentru proiectele mari, se cheltuieste mult timp cu interactiunile in cadrul echipei. Tehnologia CASE ofera mai geru suport pentru acestea Clasificare pentru CASE o Clasificarea ajuta la intelegerea diferitelor tipuri de instrumente CASE si suportul oferit de ele pentru activitatile procesului software o Perspectiva functionala-Instrumentele sunt clasificate conform functiei lor specifice o Perspectiva proces-Instrumentele sunt clasificate conform activitatilor procesului pentru care ofera suport o Perspectiva integrarii-Instrumentele sunt clasificate conform organizarii lor in unitati integrate Integrare CASE o Instrumente-Suport pentru activitati individuale ale procesului, cum ar fi verificarea consistentei proiectarii, editare text, etc o Workbench-uri-Suport pentru o etapa a procesului cum ar fi specificare sau proiectare; in mod normal includ mai multe instrumente integrate o Medii-Suport pentru tot sau pentru o parte substantiala a intregului proces software. In mod normal includ mai multe workbench-uri integrate Puncte cheie o Procesele software sunt activitatile implicate in producerea si evolutia unui sistem software. o Modelele proceselor software sunt reprezentari abstracte ale acestor procese o Activitatile generale sunt specificarea, proiectarea si implementarea, validarea si evolutia o Modelele generice ale proceselor descriu organizarea proceselor software. Exemplele includ modelul cascada, modelul dezvoltarii evolutive si ingineria software bazata pe componente o Modelele iterative ale procesului descriu procesul software sub forma de ciclu de activitati o Ingineria cerintelor este procesul de dezvoltare a specificatiilor software- lui o Procesele de proiectare si implementare transforma specificatiile in program executabil o Validarea implica controlarea faptului ca sistemele indeplinesc specificatiile si necesitatile utilizatorului. o Evolutia se refera la modificarea sistemului dupa ce a fost dat in exploatare o RUP (Rational Unified Process) este un model generic de proces care separa activitatile de etape o Tehnologia CASE ofera suport pentru activitatile procesului software Ingineria cerintelor o Def. Ingineria cerintelor = procesul de stabilire a serviciilor pe care le solicita utilizatorul din partea sistemului si a constrangerilor impuse operarii si dezvoltarii sistemului o Def. Cerintele = descrierile serviciilor si constrangerilor sistemului, care sunt generate in timpul procesului de inginerie a cerintelor Ce este o cerinta? o Poate varia de la o descriere abstracta de nivel inalt a unui serviciu sau a unei constrangeri a sistemului pana la o specificatie functionala precizata in detaliu in termeni matematici o Acest lucru este inevitabil deoarece cerintele pot servi unei functii duale: Pot fi baza unei licitatii pentru un contract => trebuie sa fie deschise catre interpretare & Pot fi baza contractului insusi => trebuie definite in detaliu && Ambele declaratii (abstracta si detaliata) pot fi numite cerinte Tipurile de cerinte o Cerinte utilizator-Expuneri in limbaj natural plus diagrame ale serviciilor pe care le furnizeaza sistemul si constrangerile sale operationale. Scrise pentru clienti o Cerinte sistem-Un document structurat care precizeaza descrieri detaliate ale functiilor, serviciilor si constrangerilor operationale ale sistemului. Defineste ceea ce trebuie implementat, deci poate fi parte a contractului intre client si contractor Definitii si specificatii o Def. cerinta utilizator: Software-ul trebuie sa ofera un mijloc de a reprezenta si accesa fisiere externe create de alte instrumente o Specificatie cerinte sistem: .1 Utilizatorulului trebuie sa i se ofere facilitati de a defini tipuri de fisiere externe .2 Fiecare tip de fisier extern poate avea asociat un instrument care poate fi aplicat fisierului .3 Fiecare tip de fisier extern poate fi reprezentat sub forma unei pictograme specifice pe display-ul utilizatorului .4 Trebuie oferite facilitati pentru definirea de catre utilizator a pictogramei pentru reprezentarea unui tip de fisier extern .5 Cand un utilizator selecteaza o pictograma reprezentand un fisier extern, efectul selectarii este acela de a aplica instrumentul asociat tipului de fisier extern fisierului reprezentat de pictograma selectata Cerinte functionale si non-functionale o Cerinte functionale: Precizarea serviciilor pe care trebuie sa le ofere sistemul, cum trebuie sa reactioneze sistemul la intrari particulare si cum trebuie sa se comporte sistemul in situatii particulare o Cerinte non-functionale: Constrangeri asupra serviciilor sau functiilor oferite de sistem, cum ar fi constrangeri de timp, constringeri asupra procesului de dezvoltare, standarde, etc o Cerinte de domeniu: Cerinte care vin din partea domeniului de aplicatie al sistemului si care reflecta caracteristicile acelui domeniu Cerinte functionale o Descriu functionalitatea sau serviciile sistem o Depind de tipul de software, de utilizatorii preconizati si de tipul sistemului in care este utilizat software-ul o Cerintele utilizator functionale pot fi expuneri de nivel inalt despre ceea ce trebuie sa faca sistemul o Cerintele sistem functionale trebuie sa descrie serviciile sistemului in detaliu Exemplu: Sistemul LIBSYS o Un sistem de biblioteca ce ofera o interfata unica catre mai multe baze de date cu articole din diferite biblioteci. o Utilizatorii pot cauta, descarca si imprima aceste articole pentru studiu individual Exemple de cerinte functionale o Utilizatorul trebuie sa poata cauta fie in intregul set initial al bazelor de date fie sa poata selecta un subset al acestuia o Sistemul va oferi instrumente de vizualizare corespunzatoare pentru ca utilizatorul sa citeasca documentele o Fiecarui ordin i se va aloca un identificator unic (ORDER_ID) pe care utilizatorul il va putea copia in zona de memorie permanenta a contului Imprecizia cerintelor o Daca cerintele nu sunt exprimate precis pot sa apara probleme. o Cerinte ambigue pot fi interpretate in moduri diferite de catre dezvoltatori si utilizatori o Consideram termenul ‘instrumente de vizualizare corespunzatoare’ din exemplul prezentat in slide-ul anterior: Intentia utilizatorului- instrumente de vizualizare specifice pentru fiecare tip de document & Interpretarea dezvoltatorului-Oferirea unui instrument simplu de vizualizare text care sa arate continutul documentului Completitudinea si consistenta cerintelor o In principiu, cerintele trebuie sa fie atat complete cat si consistente o Complete-Trebuie sa includa descrieri ale tuturor facilitatilor necesare o Consistente-Nu trebuie sa existe conflicte sau contradictii in descrierile facilitatilor sistemului o In practica, este imposibil sa se produca un document al cerintelor si complet si consistent Cerinte non-functionale o Definesc proprietatile (ex. fiabilitate, timp de raspuns, necesar de memorie) si constrangerile (ex. capabilitatile dispozitivelor de I/E, reprezentarile sistemului, etc) o De asemenea, pot fi specificate cerintele procesului software impunand un anume sistem CASE, un limbaj de programare sau o metoda de dezvoltare o Pot fi mai critice decat cerintele functionale: daca nu sunt indeplinite atunci sistemul este nefolositor Clasificarea cerintelor non-functionale o Cerinte produs-Cerinte care specifica modul particular in care trebuie sa se comporte produsul furnizat (ex. viteza de executie, fiabilitate, etc) o Cerinte de organizatie-Cerinte ce sunt consecinta a politicilor si procedurilor organizationale (ex. standarde de proces utilizate, cerinte de implementare, etc) o Cerinte externe-Cerinte care provin de la factorii externi sistemului si procesului dezvoltarii sale (ex. cerinte de interoperabilitate, cerinte legislative etc) Teluri si cerinte o Poate fi foarte dificil de precizat unele cerinte non-functionale, iar cerinte imprecise pot fi verificate cu dificultate o Tzel: O intentie generala a utilizatorului (ex. usurinta in utilizare) o Cerinta non-functionala verificabila-O exprimare care utilizeaza o masura ce poate fi testata obiectiv o Telurile sunt utile dezvoltatorilor deoarece transmit intentiile utilizatorilor sistemului Exemple o Un tzel al sistemului: Sistemul trebuie sa fie usor de folosit de catre controlorii experimentati si trebuie organizat astfel incat sa se minimizeze erorile utilizatorilor o O cerinta non-functionala verificabila-Controlorii experimentati trebuie sa fie capabili sa utilizeze toate functiile sistemului dupa un total de doua ore de antrenament. Dupa acest antrenament, numarul mediu de erori efectuate de utilizatorii experimentati nu va depasi doua pe zi Interactiunea cerintelor o In sisteme complexe apar in mod obisnuit conflicte intre diferite cerinte non-functionale o Exemplu: Sistem pentru nava spatiala: o Pentru a minimiza greutatea, trebuie minimizat numarul de chip-uri separate in sistem. o Pentru a minimiza consumul de energie, trebuie utilizate chip-uri la puteri joase. o Totusi, utilizand chip-uri la puteri joase poate insemna ca trebuie utilizate mai multe chip-uri. Cerinte de domeniu o Sunt derivate din domeniul aplicatiei si descriu caracteristicile si trasaturile care reflecta domeniul ale sistemului o Pot fi cerinte functionale noi, constrangeri asupra cerintelor existente sau definitii ale unor operatii de calcul specifice o Daca nu sunt satisfacute, sistemul poate fi nefunctional Cerinte de domeniu: problematica o Intelegere: Cerintele sunt exprimate in limbajul domeniului aplicatiei & Acesta este deseori greu de inteles pentru inginerii care dezvolta sistemul o Subintelegere: Specialistii domeniului inteleg domeniul atat de bine incat nu considera ca este necesar sa expliciteze cerintele de domeniu. Acestea li se par subintelese si implicite Cerinte utilizator o Cerintele functionale si non-functionale trebuie descrise astfel incat sa poata fi intelese de catre utilizatorii sistemului care nu au conostinte tehnice de detaliu o Sunt definite utilizand limbaj natural, tabele si diagrame deoarece acestea pot fi intelese de toti utilizatorii Probleme cu limbajul natural o Lipsa de claritate-Odata cu cresterea preciziei exprimarii documentul devine dificil de citit o Confuzii ale cerintelor-Se tinde catre amestecarea cerintelor functionale si non-functionale o Amalgamarea cerintelor-Mai multe cerinte diferite ar putea fi exprimate impreuna Cerinte sistem o Def: Specificatii, mai detaliate decat cerintele utilizator, ale functiilor, serviciilor si constrangerilor sistemului o Sunt destinate sa constituie baza pentru proiectarea sistemului o Pot fi incorporate in contractul sistemului o Pot fi definite sau ilustrate utilizand modele de sistem (curs ulterior) Cerintele si proiectarea o In principiu, cerintele trebuie sa exprime ceea ce sistemul trebuie sa faca si proiectarea trebuie sa descrie cum se realizeaza aceasta. o In practica, cerintele si proiectarea sunt inseparabile: Pentru a structura cerintele se poate proiecta o arhitectura a sistemului & Sistemul poate sa inter-opereze cu alte sisteme care genereaza cerinte de proiectare && Utilizarea unei anumite proiectari poate fi o cerinta de domeniu Probleme cu specificarea in limbaj natural o Ambiguitate: Cititorii si scriitorii cerintei trebuie sa interpreteze aceleasi cuvinte in acelasi fel. Limbajul natural este inerent ambiguu astfel incat acest lucru este dificil o Supra-flexibilitate: Acelasi lucru poate fi spus in mai multe moduri in specificatie o Lipsa modularizarii: Structurile limbajului natural nu sunt adecvate structurarii cerintelor sistem Specificatii in limbaje structura o Libertatea scriitorului de cerinte este limitata de un tipar (template) predefinit pentru cerinte o Toate cerintele sunt scrise intr-o maniera standard o Terminologia utilizata in descriere poate fi limitata o Avantajul consta in faptul ca se pastreaza expresivitatea limbajului natural dar se impune un grad de uniformitate asupra specificatiilor Specificatii bazate pe forma o Definitia functiei sau a entitatii o Descrierea intrarilor si surselor acestora o Descrierea iesirilor si a destinatiilor acestora o Indicarea altor entitati necesare o Pre si post conditii (daca e cazul) o Efectele colaterale (daca exista) ale functiei Specificare tabelara o Utilizata pentru a suplimenta limbajul natural o Utila in special atunci cand trebuie definite mai multe cursuri alternative de actiune Modele grafice o Sunt foarte utile atunci cand este necesar sa se ilustreze cum se modifica starile sau cand este necesara descrierea unei secvente de actiuni o Diferite modele grafice vor fi explicate intr-un curs ulterior Diagrame de secvente o Ilustreaza secventele de evenimente care au loc in cursul unei interactiuni a utilizatorului cu sistemul o Ordinea actiunilor este exprimata de sus in jos: Exemplu: Sistem pentru extragere cash de la un ATM: Validare card & Tratare cerere && Finalizare tranzactie Specificatii de interfata o Majoritatea sistemelor trebuie sa lucreze cu alte sisteme iar interfetele de operare trebuie specificate ca parte a cerintelor o Trebuie definite trei tipuri de interfete: Interfetele procedurale & Structurile datelor care sunt transferate && Reprezentarile datelor o Notatiile formale = tehnica eficienta pentru specificarea interfetei Standardul IEEE pentru cerinte o Defineste o structura generica pentru un document de cerinte ce trebuie instantiata pentru fiecare sistem specific o Introducere: Scopul documentului cerintelor + Domeniul produsului + Definitii, acronime si abrevieri + Referinte + Rezumat al restului documentului o Descriere generala: Perspectiva produsului + Functiile produsului + Caracteristicile utilizator + Constrangeri generale + Premize si dependente o Cerinte specifice: Functionale + Non-functionale + De interfata o Cea mai substantiala parte a documentului o Variabilitate mare in practica organizationala-nu are o structura standard o Apendice o Index Structura documentului cerintelor o Prefata o Introducere o Glosar o Definitiile cerintelor utilizator o Arhitectura sistemului o Specificatiile cerintelor sistem o Modelele sistemului o Evolutia sistemului o Apendice o Index Puncte cheie o Cerintele indica CE trebuie sa faca sistemul si definesc constrangeri asupra operarii si implementarii lui. o Cerintele functionale indica serviciile pe care trebuie sa le ofere sistemul o Cerintele non-functionale constrang sistemul ce trebuie dezvoltat sau procesul de dezvoltare a acestuia o Cerintele utilizator sunt expuneri de nivel inalt despre ce trebuie sa faca sistemul. Cerintele utilizator trebuie scrise utilizand limbaj natural, tabele si diagrame o Cerintele sistem sunt destinate sa comunice functiile pe care sistemul trebuie sa le furnizeze o Un document al cerintelor software este o expunere agreata a cerintelor sistemului o Standardul IEEE este un punct de plecare util pentru definirea de standarde specifice, mai detaliate, de cerinte Procesul ingineriei cerintelor o Scop: crearea si intretinerea unui document al cerintelor sistem o Variaza functie de: domeniul aplicatiei & persoanele implicate && organizatia care dezvolta cerintele o Activitati generice comune tuturor variantelor procesului: Identificarea cerintelor & Analiza cerintelor && Validarea cerintelor &&& Managementul cerintelor Perspectiva alternativa asupra procesului ingineriei cerintelor o Activitatile organizate sub forma unui proces iterativ in jurul unei spirale impartita in trei zone o Timpul si efortul alocat fiecarei activitati intr-o iteratie depinde de: Etapa din cadrul procesului & Tipul sistemului dezvoltat Perspectiva alternativa asupra procesului ingineriei cerintelor o In etapele initiale-intelegerea: Cerintelor economice generale & Cerintelor non-functionale && Cerintelor utilizator o In etapele ulterioare: Ingineria cerintelor sistem & Modelarea sistemului o Potrivita abordarilor in care cerintele sunt dezvoltate pe diferite nivele de detaliu o Numarul de iteratii in spirala poate varia => spirala poate fi parasita dupa ce au fost identificate o parte sau toate cerintele utilizator o Daca activitatea de prototipare este extinsa pentru a include dezvoltare iterativa => modelul permite ca cerintele si implementarea sistemului sa fie dezvoltate in paralel Studiul de fezabilitate o Studiul de fezabilitate decide daca sistemul propus merita sau nu a fi dezvoltat o Este un studiu scurt si concentrat care verifica daca: Sistemul contribuie la obiectivele organizationale & Sistemul poate fi realizat utilizand tehnologiile curente si bugetul alocat && Ssistemul poate fi integrat cu alte sisteme utilizate Implementarea studiului de fezabilitate o Intrari: Cerinte ale procesului economic (business) preliminare & Scurta descriere a sistemului && Schitarea modului in care sistemul va sprijini procesele economice o Rezultat: Raport care recomanda continuarea sau renuntarea la dezvoltarea sistemului o Bazata pe: Evaluarea informatiilor despre ce se cere & Colectarea de informatii && Scrierea unui raport Identificarea si analiza cerintelor o Numita si extragerea sau descoperirea cerintelor o Implica activitati in comun ale personalului tehnic cu clientii pentru a intelege: Domeniul aplicatiei & Serviciile pe care sistemul trebuie sa le ofere && Constangerile operationale ale sistemului o Stakeholder-ii (partile interesate, partenerii)= persoanele si asociatiile implicate o Exemple: Utilizatori finali & Manageri && Ingineri implicati in intretinere &&& Experti ai domeniului &&&& Sindicate, etc Analiza cerintelor: problematica o Partile interesate nu stiu exact ce vor o Partile interesate exprima cerintele in termenii lor proprii o Diferite parti interesate pot avea cerinte contradictorii (conflictuale) o Factorii organizationali si politici pot influenta cerintele sistemului o Modificarea cerintelor in timpul procesului de analiza: Pot sa apara noi parti interesate & Se poate schimba contextul economic Activitatile procesului o Descoperirea cerintelor-Interactiune cu partile interesate pentru a descoperi cerintele acestora. In acest stadiu sunt descoperite cerintele de domeniu o Clasificarea si organizarea cerintelor-Gruparea cerintelor aflate in relatie si organizarea lor in grupuri (cluster-e) coerente o Metoda: Identificare cerinte comune. Utilizarea unui model arhitectural al sistemului pentru a identifica subsistemele si a asocia cerinte fiecarui subsistem o Prioritizare si negociere-Prioritizarea cerintelor si rezolvarea conflictelor dintre acestea o Documentarea cerintelor-Cerintele sunt documentate si constituie intrare in urmatoarea bucla a spiralei Descoperirea cerintelor o Def. Procesul de culegere de informatii despre sistemele propuse si cele existente si distilarea cerintelor utilizator si sistem din aceste informatii o Surse de informatii: Documentatii & Partile interesate in sistem (stakeholders) && Specificatii ale unor sisteme similare Exemplu: Partile interesate pentru sistemul ATM o Clientii bancii o Reprezentanti ai altor banci o Managerii bancii o Personalul contabil o Administratorii bazei de date o Managerii pentru securitate o Departmentul de vanzari (marketing) o Inginerii de la intretinere hardware si software o Reglementatorii bancari Puncte de vedere o Def. Punctele de vedere sunt un mod de a structura cerintele astfel incat sa reprezinte perspectivele diferitelor parti interesate. Partile interesate pot fi clasificate ca avand diferite puncte de vedere o Obs. Fiecare punct de vedere ofera o noua perspectiva asupra sistemului; aceste perspective nu sunt complet independente – de obicei se suprapun propunand astfel cerinte comune o Aceasta analiza multi-perspectiva este importanta deoarece nu exista un mod unic corect de a analiza cerintele sistemului Tipuri de puncte de vedere o Puncte de vedere interactor-Persoane sau alte sisteme care interactioneaza direct cu sistemul. Exemplu: intr-un sistem ATM - punctul de vedere ale clientului, punctul de vedere al bazei de date. o Puncte de vedere indirecte-Partile interesate care nu utilizeaza sistemul direct dar care influenteaza cerintele. Exemplu: intr-un sistem ATM - punctul de vedere al managementului, punctul de vedere al personalului. o Puncte de vedere de domeniu-Caracteristicile si constrangerile de domeniului care influenteaza cerintele. Exemplu: intr-un sistem ATM - standarde pentru comunicare inter-bancara Identificarea punctelor de vedere o Furnizorii si beneficiarii serviciilor sistem o Sistemele care interactioneaza direct cu sistemul specificat o Regulamente si standarde o Sursele cerintelor economice si non-functionale o Inginerii care trebuie sa dezvolte si sa intretina sistemul o Marketing si alte puncte de vedere economice Intervievare o In intervievare formala sau informala, echipa pentru ingineria cerintelor pune intrebari partilor interesate referitoare la sistemul pe care il utilizeaza si la cel care trebuie dezvoltat o Exista doua tipuri de interviu: Interviu inchis: se cauta raspunsuri la un set de intrebari predefinite & Interviu deschis: nu exista o agenda predefinita si este explorat, impreuna cu partile interesate, un domeniu al problematicii Interviuri in practica o Un interviu combinat (cu caracteristici de interviu inchis si deschis) o Interviurile sunt utile pentru a intelege in general ceea ce fac partile interesate si modul in care ar putea interactiona cu sistemul o Interviurile nu sunt bune pentru a intelege cerintele sistem deoarece: Inginerii de cerinte nu pot intelege terminologia specifica a domeniului & Anumite cunostinte din domeniu sunt atat de familiare, incat persoanele din domeniul respectiv le exprima cu dificultate in cuvinte sau considera ca nu trebuie exprimate explicit Intervieviatori eficienti o Intervieviatorii trebuie sa fie cu mintea deschisa, sa doreasca sa asculte partile interesate si sa nu aiba idei preconcepute despre cerinte o Trebuie sa formuleze intrebari sau propuneri concrete si sa nu se astepte pur si simplu sa li se raspunda la intrebarea ‘ce doriti ?’ Scenarii o Def. Scenariile sunt exemple din viata reala referitoare la modul in care sistemul poate fi utilizat; Trebuie sa includa: o O descriere a situatiei initiale o O descriere a fluxului normal de evenimente o O descriere a ceea ce poate functiona gresit o Informatii despre alte activitati concurente o O descriere a starii la finalizarea scenariului Cazuri de utilizare o Cazurile de utilizare sunt tehnici UML bazate pe scenariu care: Identifica actorii implicati intr-o interactiune & Descriu interactiunea insasi o Un set de cazuri de utilizare ar putea descrie toate interactiunile posibile cu sistemul o Pentru a adauga detalii la cazurile de utilizare pot fi folosite diagrame de secvente care sa arate secventa de procesare a evenimentului in sistem Factori sociali si organizationali o Sistemele software sunt utilizate intr-un context social si organizational. Aceasta poate influenta sau chiar domina cerintele sistem o Factorii sociali si organizationali nu constituie un punct de vedere ci influenteaza toate punctele de vedere o Analistii buni trebuie sa fie sensibili la acesti factori, fara a avea insa la dispozitie un mod sistematic de a aborda analiza Etnografie o Sociologii petrec un timp considerabil observand si analizand modul in care oamenii lucreaza o Oamenii nu trebuie sa explice sau sa formuleze in cuvinte modul in care lucreaza o Se pot observa factori sociali si organizationali importanti o Studii etnografice arata ca modul de lucru este de obicei mai bogat si mai complex decat este sugerat prin diferite modele ale sistemului Etnografie focalizata o Combina etnografia cu prototiparea o Ca rezultat la dezvoltarea prototipului apar intrebari fara raspuns care focalizeaza analiza etnografica o Problema cu etnografia este ca aceasta studiaza practicile existente, care pot avea unele baze istorice ce nu mai sunt relevante Domeniul de aplicare a etnografiei o Cerintele care sunt derivate din modul in care oamenii lucreaza in realitate si nu din modul in care definitiile procesului sugereaza ca ar trebui sa lucreze o Cerintele care sunt derivate din cooperarea cu si constientizarea activitatilor altor persoane Validarea cerintelor o Se ocupa cu demonstrarea faptului ca cerintele definesc sistemul pe care clientul il doreste cu adevarat o Costurile erorilor la nivelul cerintelor este ridicat, deci validarea este foarte importanta o Eliminarea unei erori la nivelul cerintelor dupa livrare ar putea ajunge la pana de 100 de ori costul eliminarii unei erori de implementare o Obs. Validarea se suprapune cu analiza in sensul descoperirii unor probleme legate de cerinte Verificarea cerintelor o Validitate o Consistenta o Completitudine o Realism o Verificabilitate Tehnici pentru validarea cerintelor o Revizuiri ale cerintelor-Analiza manuala sistematica a cerintelor. o Prototipare-Utilizarea unui model executabil al sistemului pentru a certifica cerintele o Generare de cazuri de testare-Dezvoltarea de teste ale cerintelor pentru a verifica testabilitatea o Obs. Aceste tehnici pot fi utilizate in mod conjugat sau individual Revizuiri ale cerintelor o Pe perioada formularii definitiilor cerintelor sunt necesare revizuiri regulate ale acestora o In revizuiri trebuie implicat atat personalul de la client cat si cel de la contractor o Revizuirile pot fi formale (cu documente complete) sau informale. O comunicare buna intre dezvoltatori, clienti si utilizatori poate rezolva probleme inca din stadii incipiente Verificari la revizuire o Verificabilitate o Intelegere o Posibilitate de urmarire o Adaptabilitate Managementul cerintelor o Def. Managementul cerintelor este procesul de gestionare a cerintelor in schimbare in timpul procesului de inginerie a cerintelor si a dezvoltarii sistemului o Cerintele sunt in mod inevitabil incomplete si inconsistente o Cerinte noi apar in timpul procesului pe masura ce necesitatile economice (business) se modifica si se dezvolta o mai buna intelegere a sistemului o Puncte de vedere diferite pot avea cerinte diferite iar acestea sunt deseori contradictorii Modificarea cerintelor o Prioritatea cerintelor diferitelor puncte de vedere se modifica in timpul procesului de dezvoltare o Clientii sistemului pot specifica cerinte dintr-o perspectiva economica, care pot fi in conflict cu cerintele utilizatorilor finali o Contextul economic si tehnic se schimba in timpul dezvoltarii sistemului Cerinte durabile si volatile o Cerinte durabile. Cerinte stabile derivate din activitatea de baza a organizatiei clientului. Exemplu: un spital va avea intotdeauna doctori, tratamente, etc. Pot fi derivate din modelele domeniului o Cerinte volatile. Cerinte care se schimba in timpul dezvoltarii sau utilizarii sistemului. Exemplu: Intr-un spital - cerintele derivate din politica de asigurare a sanatatii. Planificarea managementului cerintelor o In timpul procesului de inginerie a cerintelor trebuie planificate: o Identificarea cerintelor-Cum se identifica cerintele in mod individual o Un proces de management al schimbarilor-Procesul de urmat la analiza unei schimbari la cerinte o Politicile de urmarire-Cantitatea de informatii pastrata referitoare la relatiile intre cerinte o Instrumentul CASE suport-Instrumentul suport necesar pentru a gestiona schimbarea cerintelor Posibilitatea de urmarire o Posibilitatea de urmarire este legata de relatiile dintre cerinte, de sursele lor si de proiectarea sistemului o Posibilitatea de urmarire a sursei-Legaturi de la cerinte la partile interesate care le-au propus o Posibilitatea de urmarire a cerintelor-Legaturi intre cerinte dependente o Posibilitatea de urmarire a proiectarii-Legaturi de la cerinte la artefactele proiectarii Instrument CASE suport o Memorarea cerintelor-Cerintele trebuie gestionate intr-un depozit de date sigur si manevrabil o Managementul schimbarilor-Procesul de management al schimbarilor este un proces de tip flux de activitati pentru care se pot defini mai multe stadii, iar fluxul de informatii intre aceste stadii poate fi partial automatizat o Managementul posibilitatii de urmarire-Extragerea automata a legaturilor dintre cerinte Managementul schimbarii cerintelor o Trebuie aplicat tuturor schimbarilor propuse pentru cerinte. o Stadii principale: o Analiza problemei. Discutarea problemei aparuta la cerinte, verificarea validitatii ei si propunerea de schimbari; o Analiza schimbarii si costurilor ei. Evaluarea efectelor schimbarii asupra altor cerinte; o Implementarea schimbarii. Modificarea documentului cerintelor si a altor documente pentru a reflecta schimbarea. Recomandare: minimizarea referintelor externe si modularizarea sectiunilor documentului. Puncte cheie o Procesul ingineriei cerintelor include un studiu de fezabilitate, identificarea si analiza cerintelor, specificarea cerintelor si managementul cerintelor o Identificarea si analiza cerintelor este un proces iterativ care implica intelegerea domeniului, colectarea, clasificarea, structurarea, alocarea de prioritati si validarea cerintelor o Sistemele au mai multe parti interesate (stakeholders), care au cerinte diferite o Factorii sociali si organizationali influenteaza cerintele sistemului o Validarea cerintelor se ocupa de verificari pentru validitate, consistenta, completitudine, realism si verificabilitate o Schimbarile procesului economic conduc inevitabil la modificari ale cerintelor o Managementul cerintelor include planificarea si managementul schimbarilor Modele ale sistemului o Exprima cerintele sistemului intr-un mod mai tehnic o Specificatiile sistemului sunt documentate utilizand un set de modele pentru sistem o Utilizeaza reprezentari grafice care descriu: Procesul economic & Problema ce trebuie rezolvata && Sistemul ce trebuie dezvoltat o Punte importanta intre procesele de analiza si de proiectare Modelarea sistemului o Modelarea sistemului ajuta analistul in intelegerea functionalitatii sistemului, iar modelele sunt utilizate in comunicarea cu clientii o Diferite modele prezinta sistemul din perspective diferite: Perspectiva externa: contextul sistemului & Perspectiva comportamentala: comportamentul sistemului && Perspectiva structurala: arhitectura sistemului, arhitectura datelor Tipuri de modele o Un model al sistemului este o abstractizare a sistemului si nu o reprezentare a acestuia o Abstractizarea simplifica in mod deliberat sistemul si elimina detaliile o Tipurile de modele se bazeaza pe diferite abordari ale abstractizarii: Ex: o Modelul fluxului datelor (Data-flow) se concentreaza pe fluxul datelor si pe transformarile functionale suferite de acestea, fara a intra in detalii referitoare la structura datelor o Modelul entitate-relatie-atribut (Entity-relationship-attribute) documenteaza structurile datelor sistemului si nu functionalitatea acestuia Tipuri de modele o Modelul procesarii datelor : modul de procesare a datelor in diferite stadii o Modelul compozitiei : modul in care entitatile se compun din alte entitati o Modelul arhitectural : principalele subsisteme si relatiile intre acestea o Modelul clasificarii : organizarea entitatilor pe baza de caracteristici comune o Modelul stimul/raspuns : reactia sistemului la evenimente Modelarea contextului o Modelele contextului sunt utilizate pentru a ilustra contextul operational al unui sistem-modeleaza ceea ce se afla dincolo de limitele/marginile (boundaries) sistemului o Decizia referitoare la plasarea marginilor sistemului poate fi afectata de consideratii sociale si organizationale o Modelele arhitecturale descriu sistemul si relatiile sale cu alte sisteme Modelarea procesului o Modelele procesului reprezinta procesul de ansamblu si procesele care sunt suportate de sistem o Se pot utiliza modele ale fluxului de date pentru a ilustra procesele si fluxul de informatii de la un proces la altul Modelarea comportamentului o Modelele comportamentale sunt utilizate pentru a descrie comportamentul general al sistemului o Tipuri de modele comportamentale: Model al procesarii datelor-arata modul de procesare a datelor pe masura ce acestea se deplaseaza prin sistem & Model al masinii cu stari (state machine) – arata raspunsul sistemului la evenimente o Ambele modele sunt necesare pentru a descrie comportamentul sistemului, deoarece ele arata sistemul din perspective diferite Modelarea procesarii datelor o Diagramele fluxurilor de date (data flow diagrams - DFDs) pot fi utilizate pentru a modela procesarea datelor in sistem o Acestea ilustreaza pasii procesarii sub forma de fluxuri de date in sistem o DFDs sunt componenta intrinseca a multor metode de analiza o Sunt realizate cu notatii simple si intuitive, pe care clientii le pot intelege usor o Ilustreaza procesarea datelor end-to-end Diagramele fluxurilor de date o DFDs modeleaza sistemul din perspectiva functionala o Urmarirea si documentarea datelor asociate unui proces este utila in dezvoltarea intelegerii sistemului in ansamblu o Diagramele fluxurilor de date pot fi utilizate si in ilustrarea schimbului de date intre sistem si alte sisteme din contextul sau Modelarea starilor si tranzitiilor (state machine) o Se modeleaza comportamentul sistemului ca raspuns la evenimentele externe si interne o Modelele ilustreaza raspunsurile sistemului la stimuli, de aceea sunt utilizate in special pentru modelarea sistemelor de timp real o Modelele de stare si tranzitii sunt reprezentari de tip graf in care starile sistemului sunt plasate in noduri iar evenimentele pe arce. La aparitia unui eveniment sistemul face o tranzitie dintr-o stare in alta o Diagrama de stare (statechart) este parte integrala a UML 1.4, fiind utilizata pentru modelarea starilor si tranzitiilor in sistem Statechart o Permite descompunerea modelului in sub-modele o Include o scurta descriere a actiunilor in forma do: descriere_actiune o Poate fi completata cu tabele in care sunt descrise starile si stimulii Structurarea modelelor de stari o Necesara in modelele sistemelor mari, cu un numar mare de stari posibile o Super-stare o Notiune ce incapsuleaza un numar de stari separate o Reprezentata ca o singura stare intr-un model de nivel mai inalt o Este expandata (detaliata) intr-o diagrama separata o Ex. Super-starea “Operation” din diagrama anterioara State machine diagram (SMD) o In UML 2.0 o Descrie un comportament sau o trasatura comportamentala. o Componente: Stari, Tranzitii intre stari, Declansatoare (triggers) pentru tranzitii, Activitati realizate in cursul executiei tranzitiilor, Activitati realizate pe durata fiecarei stari o Stare-poate avea una sau mai multe regiuni o Regiune-set independent de stari si tranzitii o Suport pentru concurenta o Submasina cu stari – masina cu stari reutilizabila (Are referinte la puncte de conectare care reprezinta canale de intrare si de iesire) o SMDs pot fi organizate in ierarhii de tip generalizare/specializare o Stare-descrie conditia unui obiect in termeni de: Atribute ale obiectului & Comportamentul in care este angajat o Formal: o stare modeleaza o perioada de timp in care se mentine adevarata o conditie de invarianta o Exemple de conditii de invarianta: Set de valori ale atributelor, Conditia de a lucra la o activitate, Conditia de a astepta un eveniment o Tipuri de stari: Simpla-nu contine alte stari & Compusa-contine una sau mai multe masini cu stari, in regiuni separate && Submasina – contine o submasina (specificatia punctelor de intrare si de iesire) Modele semantice ale datelor o Utilizate pentru a descrie structura logica a datelor procesate de sistem o Un model entitate-relatie-atribut (ERA) reprezinta entitatile din sistem, relatiile intre entitati si atributele entitatilor o Modelul ERA este larg folosit in proiectarea bazelor de date. Poate fi implementat utilizand baze de date relationale o Nu exisa o notatie specifica oferita de UML. Se pot utiliza obiecte si asocieri Dictionare de date o Dictionarele de date sunt liste cu toate numele utilizate in modelele sistemului. Sunt incluse, de asemenea, descrieri ale entitatilor, relatiilor si atributelor o Avantaje: Ofera suport pentru gestionarea numelor si evitarea duplicatelor & Pastreaza cunostinte organizationale care leaga analiza, proiectarea si implementarea o Multe CASE workbenches ofera suport pentru utilizarea de dictionare de date Orientare obiect o Abordare a intregului proces de dezvoltare, adica: o Exprimarea cerintelor sistemului utilizand un model obiectual; reprezentarea OO atat a datelor cat si a procesarilor din sistem o Proiectare utilizand obiecte o Dezvoltarea sistemului intr-un limbaj de programare OO Modele obiectuale o Modelele obiectuale descriu sistemul in termeni de clase de obiecte si asocieri intre acestea o O clasa de obiecte este o abstractizare referitoare la un set de obiecte, continand atributele comune si serviciile (operatiile) oferite de fiecare obiect o Se pot realiza diferite modele obiect: Modele pentru mostenire, Modele pentru agregare, Modele pentru interactiuni o Sunt moduri naturale de reflectare a entitatilor din lumea reala manipulate de sistem o Entitati mai abstracte sunt mai dificil de modelat utilizand aceasta abordare o Identificarea claselor de obiecte este recunoscuta ca un proces dificil care necesita o foarte buna intelegere a domeniului aplicatiei o Clasele de obiecte ce reflecta entitatile domeniului sunt reutilizabile intre sisteme Modele pentru mostenire o Organizeaza clasele de obiecte ale domeniului sub forma unei ierarhii o Clasele din varful ierarhiei reflecta caracteristicile comune tuturor claselor o Clasele de obiecte mostenesc atributele si serviciile de la una sau mai multe superclase; ele pot fi la rindul lor specializate functie de necesitati o Proiectarea ierarhiei de clase poate fi un proces dificil daca se doreste evitarea duplicarii in diferite ramuri ale ierarhiei Modele obiectuale si UML o UML este o reprezentare standard realizata de dezvoltatorii metodelor de analiza si proiectare larg utilizate o A devenit un standard eficient pentru modelarea OO (orientata obiect) o Notatie: o Clasele de obiecte sunt dreptunghiuri cu trei compartimente: nume, atribute, operatii o Relatiile dintre clasele de obiecte (numite si asocieri) sunt reprezentate prin linii care leaga obiectele o Mostenirea este referita ca generalizare si este reprezentata ascendent in ierarhie Mostenire multipla o In loc de a mosteni atribute si servicii de la o singura clasa parinte, un sistem ce suporta mostenire multipla permite claselor de obiecte sa mosteneasca din mai multe superclase o Aceasta poate conduce la conflicte semantice in cazul in care atribute si/sau servicii cu acelasi nume din diferite superclase au semantici diferite o Mostenirea multipla complica reorganizarea ierarhiei de clase Agregarea obiectelor o Un model de agregare arata cum clasele care sunt colectii sunt compuse din alte clase o Modelele de agregare sunt similare cu relatia “part-of” din modelele semantice ale datelor Modelarea comportamentului obiectelor o Un model comportamental ilustreaza interactiunile dintre obiecte care produc un anumit comportament al sistemului specificat ca un caz de utilizare (use-case) o Diagramele de secvente, diagramele de comunicare, diagramele de interactiune (interaction overview) si diagramele de timp din UML 2.0 sunt utilizate pentru a modela interactiunile dintre obiecte Metode structurate o Metodele structurate incorporeaza modelarea sistemului ca o parte inerenta a metodei o Metodele definesc un set de modele, un proces pentru realizarea acestor modele, reguli care trebuie aplicate modelelor si indrumari de realizare a lor o Instrumentele CASE ofera suport pentru modelarea sistemului ca parte a unei metode structurate Slabiciunile metodelor o Nu modeleaza cerintele non-functionale ale sistemului o De obicei nu includ informatii care sa specifice daca o anumita metoda este potrivita pentru o problema data o Pot produce prea multa documentatie o Modelele sistemului sunt uneori prea detaliate si dificil de inteles de catre utilizatori CASE workbench-uri o Un set coerent de instrumente destinat sa ofere suport pentru activitati corelate ale procesului software, cum ar fi analiza, proiectare sau testare o Workbench-urile pentru analiza si proiectare ofera suport pentru modelarea sistemului atat in timpul procesului de inginerie a cerintelor cat si in timpul celui de proiectare a sistemului o Aceste workbench-uri pot oferi suport pentru o metoda de proiectare specifica sau pentru crearea mai multor tipuri diferite de modele ale sistemului Componente ale workbench-ului pentru analiza si proiectare o Editoare de diagrame: Creare modele pentru obiecte, date si comportament & Sunt, de asemenea, constiente de tipurile entitatilor din sistem o Instrumente pentru analiza si verificarea modelului-Proceseaza artefactele proiectarii si raporteaza erorile si anomaliile o Repozitoriu si limbajul de interogare asociat-Memorare/gasire artefacte ale proiectarii si informatii asociate, in repozitoriul central o Dictionarul datelor o Instrumente pentru definirea si generarea de rapoarte-Genereaza automat documentatia sistemului utilizand informatiile din repozitoriul central o Instrumente pentru definirea de forme-Specificare de formate pentru ecran si pentru documente o Traducatoare pentru import/export-Schimbul de informatii intre repozitoriul central si alte instrumente de dezvoltare o Instrumente pentru generare cod-Genereaza automat cod sau schelet (skeleton) de cod utilizand artefactele proiectarii pastrate in repozitoriul central Puncte cheie o Un model este o vedere abstracta asupra sistemului. Tipuri complementare de modele ofera diferite informatii despre sistem o Modelele pentru context arata pozitia unui sistem in contextul sau cu alte sisteme si procese o Modelele pentru fluxul de date pot fi utilizate pentru a modela procesarea datelor intr-un sistem o Modelele pentru stari si tranzitii modeleaza comportamentul sistemului ca raspuns la evenimente interne sau externe o Modelele semantice pentru date descriu structura logica a datelor care sunt importate sau exportate de sistem o Modelele obiectuale descriu entitatile logice ale sistemului, clasificarea si agregarea lor o Modelele pentru interactiuni arata interactiunile dintre actori si obiectele sistemului pe care le utilizeaza o Metodele structurate ofera un cadru (framework) pentru dezvoltarea de modele ale sistemului Arhitectura software o Def. Proiectarea arhitecturala este procesul de proiectare pentru identificarea subsistemelor ce compun un sistem si a cadrului pentru control si comunicare intre subsisteme o Iesirea acestui proces de proiectare este o descriere a arhitecturii software Proiectarea arhitecturala o Etapa timpurie in procesul de proiectare a sistemului o Reprezinta legatura dintre procesul de specificare si cel de proiectare o Deseori realizata in paralel cu unele activitati de specificare o Implica identificarea componentelor majore ale sistemului si a comunicarii dintre acestea Avantajele arhitecturii explicite o Comunicarea cu partile interesate-Arhitectura poate fi utilizata ca element central al discutiei de catre partile interesate in sistem o Analiza sistemului-Face posibila analiza faptului ca sistemul isi poate atinge obiectivele non-functionale o Reutilizare pe scara larga-Arhitectura se poate reutiliza pentru o gama larga de sisteme Arhitectura si caracteristicile sistemului o Performanta-Localizarea operatiilor critice si minimizarea comunicarii. Utilizare de componente cu granularitate mare (large-grain rather than fine-grain) o Securitate-Utilizarea unei arhitecturi multi-nivel cu componentele critice plasate in nivelele interioare o Siguranta-Izolarea, intr-un numar mic de subsisteme, a caracteristicilor critice din punct de vedere al sigurantei o Disponibilitate-Includerea de componente redundante si de mecanisme pentru toleranta la defecte o Mentenabilitate-Utilizare de componente cu granularitate mica, inlocuibile Conflicte arhitecturale o Utilizarea de componente cu granularitate mare imbunatateste performanta dar reduce mentenabilitatea o Introducerea de date redundante imbunatateste disponibilitatea dar complica asigurarea securitatii o Localizarea caracteristicilor legate de siguranta inseamna de obicei mai multa comunicare si deci degradarea performantei Structurarea sistemului o Descompunerea sistemului in subsisteme care interactioneaza o Proiectul arhitectural este exprimat, in mod normal, ca diagrama bloc ce prezinta o imagine de ansamblu asupra structurii sistemului o Se pot dezvolta, de asemenea, modele mai specifice care prezinta modul in care subsistemele partajeaza date, sunt distribuite si se interfateaza Diagrame bloc o Notatii: casete si linii o Foarte abstracte-nu ilustreaza natura relatiilor intre componente si nici proprietatile vizibile din exterior ale subsistemelor o Totusi, utile pentru comunicarea cu partile interesate si pentru planificarea proiectului Decizii in proiectarea arhitecturala o Proiectarea arhitecturala este un proces creativ, deci difera functie de tipul sistemului ce este dezvoltat o Totusi, exista o serie de decizii comune tuturor proceselor de proiectare arhitecturala Reutilizarea arhitecturii o Sistemele din acelasi domeniu au deseori arhitecturi similare care reflecta conceptele domeniului o Liniile de productie de aplicatii sunt construite in jurul unei arhitecturi nucleu cu variante care satisfac cerintele clientilor particulari Stiluri arhitecturale o Modelul arhitectural al unui sistem se poate conforma unui model arhitectural generic (stil arhitectural) o Cunoasterea acestor stiluri poate simplifica problema definirii arhitecturilor sistemelor o Totusi, majoritatea sistemelor mari sunt eterogene si nu urmeaza un singur stil arhitectural Modele arhitecturale o Utilizate pentru a documenta un proiect arhitectural o Modelul structural static care ilustreaza componentele majore ale sistemului o Modelul dinamic al procesului care ilustreaza structura de procesare a unui sistem o Modelul interfetelor care defineste interfetele sub-sistemelor o Modelul relatiilor, cum ar fi modelul fluxului datelor, care ilustreaza relatiile intre sub-sisteme. o Modelul distribuirii care ilustreaza modul in care subsistemele sunt distribuite pe calculatoare Organizarea sistemului o Reflecta strategia de baza care este utilizata pentru a structura sistemul o Trei stiluri organizationale sunt larg utilizate: Stilul repozitoriu de date & Stilul servicii si servere partajate (client-server) && Stilul masina abstracta (sau multi-nivel) Modelul repozitoriu o Subsistemele trebuie sa schimbe date. Acest lucru se poate realiza in doua moduri: Datele partajate sunt pastrate intr-o baza de date centrala (repozitoriu) si pot fi accesate de catre toate subsistemele & Fiecare subsistem pastreaza o baza de date proprie si transfera date in mod explicit catre alte subsisteme o Modelul repozitoriu este folosit in majoritatea cazurilor in care trebuie partajate cantitati mari de date Caracteristicile modelului repozitoriu o Avantaje: Mod eficient de a partaja cantitati mari de date & Subsistemele nu trebuie sa fie preocupate de modul in care sunt produse datele si beneficiaza de management centralizat (ex. backup, security, etc) && Modelul de partajare este publicat sub forma de schema a repozitoriului o Dezavantaje: Subsistemele trebuie sa realizeze un acord asupra modelului datelor din repozitoriu. Acesta se stabileste in mod inevitabil pe baza unui compromis & Evolutia datelor este dificila si costisitoare && Nu se pot defini domenii cu politici de management specifice &&& Sunt dificil de realizat distribuiri eficiente Modelul client-server o Model de sistem distribuit care ilustreaza modul in care datele si procesarile sunt distribuite pe un set de componente o Set de servere de sine statatoare (stand-alone) care ofera servicii specifice cum ar fi imprimare, management date, etc o Set de clienti care apeleaza aceste servicii o Retea ce permite clientilor sa acceseze server-ele Caracteristicile modelului client-server o Avantaje: Distribuirea datelor este evidenta & Utilizeaza in mod eficient sistemele de retea. Pot necesita hardware mai ieftin && Simplu de adaugat servere noi sau de actualizat (upgrade) serverele existente o Dezavantaje: Nu exista un model partajat al datelor deci sub-sistemele utilizeaza diferite organizari ale datelor. Schimbul de date poate fi ineficient & Management redundant in fiecare server && Nu exista un registru central de nume si servicii – gasirea serverelor si a serviciilor poate fi dificila Modelul masina abstracta (multi-nivel) o Utilizat pentru a modela interfatarea sub-sistemelor o Organizeaza sistemul intr-un set de nivele (sau masini abstracte), fiecare nivel oferind un set de servicii o Suporta dezvoltarea incrementala a sub-sistemelor de pe nivele diferite. Cand se schimba interfata unui nivel, doar nivelele adiacente sunt afectate o Totusi, structurarea sistemelor in acest mod este deseori artificiala Stiluri de descompunere modulara o Stiluri de descompunere a sub-sistemelor in module o Nu exista o diferenta rigida intre organizarea sistemului si descompunerea modulara Sub-sisteme si module o Un sub-sistem opereaza de sine statator, independent de servicile oferite de alte sub-sisteme o Un modul este o componenta a sistemului care ofera servicii altor componente dar care in mod normal nu e considerata sistem separat Descompunere modulara o Un alt nivel structural, unde sub-sistemele sunt descompuse in module o Tratam doua modele de descompunere modulara: Un model obiect in care sistemul este descompus in obiecte care interactioneza & Un model banda de asamblare (pipeline) sau flux de date (data-flow) in care sistemul este descompus in module functionale care transforma intrarile in iesiri o Pe cat posibil, deciziile referitoare la concurenta trebuie amanate pana la implementarea modulelor Modele obiect o Structureaza sistemul intr-un set de obiecte slab cuplate cu interfete bine definite o Descompunerea orientata obiect se ocupa cu identificarea claselor de obiecte, a atributelor si a operatiilor acestora o La implementare, sunt create atat obiecte din aceste clase cat si un model de control utilizat pentru a coordona operatiile pe obiecte Avantajele modelului obiect o Obiectele sunt slab cuplate, deci implementarea lor poate fi modificata fara a afecta alte obiecte o Obiectele pot reflecta entitati din lumea reala o Limbajele OO sunt larg utilizate o Totusi: Schimbarile la nivelul interfetelor obiectelor pot cauza probleme & Entitati complexe ar putea fi greu de reprezentat sub forma de obiecte Banda de asamblare orientata pe functii o Transformarile functionale proceseaza intrarile pentru a produce iesiri o Pot fi referite ca model “pipe and filter” (ca in UNIX shell) o Variante ale acestei abordari sunt foarte raspandite. Cand transformarile sunt secventiale avem de-a face cu un model secvential in loturi de lucrari (batch sequential model) care este intens utilizat in sistemele de procesare a datelor o Nu sunt foarte potrivite pentru sistemele interactive Avantajele modelului banda de asamblare o Suporta reutilizarea transformarilor o Organizare intuitiva pentru comunicarea cu partile interesate o Simplu de adaugat noi transformari o Relativ simplu de implementat fie ca sistem concurent fie ca sistem secvential o Totusi: Necesita un format comun pentru transferul datelor de-a lungul benzii de asemblare & Suporta cu dificultate interactiunile bazate pe evenimente Stiluri de control o Sunt destinate fluxului de control intre sub-sisteme. Difera de modelul de descompunere a sistemului o Control centralizat->Un sub-sistem are responsabilitatea de a controla, porni si opri alte sub-sisteme o Control bazat pe evenimente->Fiecare sub-sistem poate raspunde la evenimente externe generate de alte sub-sisteme sau de contextul sistemului Control centralizat o Un sub-sistem de control preia responsibilitatea gestionarii executiei altor sub-sisteme o Modelul “Call-return”->Model subrutina “top-down” in care controlul porneste de la varful unei ierarhii de subrutine si parcurge ierarhia pana la baza. Aplicabil sistemelor secventiale o Modelul manager->Aplicabil sistemelor concurente. O componenta a sistemului controleaza pornirea, oprirea si coordonarea proceselor altor sisteme. Poate fi implementat in sistemele secventiale folosind instructiunea “case” Sisteme conduse de evenimente (event-driven) o Conduse de evenimente generate extern, pentru care temporizarea evenimentului este in afara controlului sub-sistemelor care proceseaza evenimentul. o Doua modele principale pentru sistemele conduse de evenimente: Model cu difuzare (broadcast). Un eveniment este difuzat tuturor sub- sistemelor. Orice sub-sistem capabil sa trateze evenimentul o poate face & Model condus de intreruperi (interrupt-driven). Utilizat in sistemele de timp real, unde intreruperile sunt detectate de un handler de intreruperi si transferate altor componente spre procesare o Alte modele pentru sistemele conduse de evenimente includ spreadsheets si sistemele de productie Modelul cu difuzare (broadcast) o Eficient la integrarea sub-sistemelor de pe calculatoare diferite dintr-o retea o Sub-sistemele isi inregistreaza interesul pentru anumite evenimente. Cand acestea se produc, controlul este transferat catre sub-sistemele inregistrate la evenimentul respectiv, care il pot astfel trata o Politica de control nu este incapsulata in eveniment sau in rutina de tratare (handler) mesaj. Sub-sistemele sunt cele care decid asupra evenimentelor de interes pentru ele o Totusi, sub-sistemele nu cunosc cand si daca un eveniment va fi tratat Sisteme conduse de intreruperi o Utilizate in sistemele de timp real, acolo unde este esential ca unui eveniment sa i se raspunda “la timp” o In sistem exista un set de tipuri cunoscute de intreruperi si rutine de tratare (handler) definite pentru fiecare tip o Fiecare tip este asociat cu o locatie de memorie si un comutator hardware care realizeaza transferul la rutina corespunzatoare de tratare o Permit raspuns rapid dar sunt complicat de programat si dificil de validat Arhitecturi de referinta o Modelele arhitecturale pot fi specifice unor domenii de aplicatii o Doua tipuri de modele specifice domeniului: Modele generice: abstractizeaza mai multe sisteme reale si incapsuleaza caracteristicile principale ale acestor sisteme & Modele de referinta: sunt modele mai abstracte, idealizate. Ofera o modalitate de informare despre clasa sistemului si de comparare intre arhitecturi diferite o Modelele generice sunt de obicei modele “bottom-up”; Modelele de referinta sunt modele “top-down” o Modelele de referinta sunt derivate din studierea domeniului aplicatiei si nu din sistemele existente o Se pot utiliza ca baza pentru implementarea sistemului sau pentru a compara diferite sisteme. Actioneaza ca standard fata de care sistemele pot fi evaluate o Modelul OSI este un model multi-nivel pentru sistemele de comunicare Modelul de referinta CASE o Servicii repositoriu de date->Memorare si management date o Servicii pentru integrare date->Gestionarea grupurilor de entitati o Servicii pentru management sarcini (tasks)->Definirea si punerea in scena a modelelor de procese o Servicii de mesagerie->Comunicare instrument-instrument si instrument- context o Servicii de interfata utilizator->Dezvoltarea interfetei utilizator Puncte cheie o Arhitectura software este cadrul (framework) fundamental pentru structurarea sistemului o Deciziile proiectarii arhitecturale includ decizii referitoare la arhitectura aplicatiei, la distribuire si la stilurile arhitecturale ce vor fi utilizate o Se pot dezvolta modele arhitecturale diferite, cum ar fi un model structural, un model al controlului si un model al descompunerii sistemului in sub-sisteme o Modelele organizationale ale sistemelor includ modele repozitoriu, modele client-server si modele masina abstracta o Modelele pentru descompunere modulara includ modele obiect si modele banda de asamblare o Modelele controlului includ modele de control centralizat si modele de control condus de evenimente o Pentru a comunica arhitecturi specifice domeniului si pentru a evalua si compara proiecte arhitecturale se pot utiliza arhitecturi de referinta Arhitecturi generice pentru aplicatii o Sistemele de aplicatie sunt destinate rezolvarii unei necesitati organizationale o Sistemele de aplicatii pentru activitati economice care au multe elemente comune tind sa aiba arhitecturi comune care reflecta cerintele aplicatiei o O arhitectura generica este configurata si adaptata pentru a crea un sistem care raspunde unor cerinte specifice Utilizarea arhitecturilor pentru aplicatii o Ca punct de pornire pentru proiectarea arhitecturala o Ca element de verificare in cursul proiectarii o Ca modalitate de de organizare a activitatii echipei de dezvoltare o Ca mod de evaluare a componentelor in vederea reutilizarii o Ca vocabular pentru discutiile referitoare la tipuri de aplicatii Tipuri de aplicatii o Aplicatii de procesare date->Aplicatiile conduse de date care proceseaza date in loturi de date fara interventia explicita a utilizatorului in cursul procesarii o Aplicatii de procesare tranzactii->Aplicatii centrate pe date care proceseaza cererile utilizatorului si actualizeaza informatiile dintr-o baza de date a sistemului o Sisteme de procesare evenimente->Aplicatii in care actiunile sistemului depind de interpretarea evenimentelor venite din contextul sistemului o Sisteme de procesare limbaje->Aplicatii in care intentiile utilizatorului sunt specificate intr-un limbaj formal care este procesat si interpretat de sistem Exemple de aplicatii o Procesare date: Aplicatii pentru facturare & Aplicatii pentru state de plata o Procesare tranzactii: Aplicatii e-commerce & Aplicatii pentru rezervari o Procesare evenimente: Procesoare de texte & Aplicatii de timp real o Procesare limbaje: Compilatoare & Interpretoare de comenzi Sisteme de procesare date o Sisteme care sunt centrate pe date si in care bazele de date utilizate sunt de cateva ordine de marime mai mari decat software-ul propriu-zis o Datele intra si ies in loturi. Exemplu: Intrari: Un set de coduri client si citirile de la un contor de energie electrica asociate & Iesiri: Un set corespunzator de facturi, cate una pentru fiecare client o Sistemele de procesare date au de obicei o structura de tip intrare- proces-iesire Intrare-proces-iesire o Componenta intrare citeste date dintr-un fisier sau dintr-o baza de date, verifica validitatea acestora si pune datele valide intr-o lista de asteptare in vederea procesarii o Componenta proces ia o tranzactie din lista de asteptare, executa calculele si creaza o noua inregistrare cu rezultatele acestora o Componenta iesire citeste aceste inregistrari, le formateaza corespunzator si le scrie in baza de date sau le trimite la o imprimanta Diagrame ale fluxurilor de date o Arata cum sunt procesate datele pe masura ce ele se deplaseaza in cadrul unui sistem o Transformarile sunt reprezentate ca dreptunghiuri cu colturile rotunjite, fluxurile de date ca sageti intre acestea si fisierele/depozitele de date ca dreptunghiuri Sisteme de procesare tranzactii o Proceseaza cererile utilizatorului pentru extragerea de informatii dintr-o baza de date sau pentru actualizarea bazei de date o Din perspectiva utilizatorului o tranzactie este: Orice secveta coerenta de operatii care satisface un scop. o Exemplu -> cautarea programului zborurilor de la Londra la Paris o Utilizatorii fac cereri asincrone pentru servicii care sunt apoi procesate de un manager de tranzactii Middleware de procesare tranzactii o Middleware-ul de management tranzactii sau monitoarele de teleprocesare gestioneaza comunicarea cu diferite tipuri de terminale (ex. ATMs si terminale pentru numarare), serializeaza datele si le transmit spre procesare o Procesarea interogarii are loc in baza de date a sistemului iar rezultatele sunt trimise inapoi, prin intermediul managerului de tranzactii, la terminalul utilizatorului Arhitectura sistemelor informationale o Sistemele informationale au o arhitectura generica care poate fi organizata pe modelul multi-nivel o Nivelele includ: Interfata utilizator & Comunicarea cu utilizatorul && Extragerea de informatii &&& Baza de date a sistemului Sistemele de alocare resurse o Sisteme care gestioneaza o cantitate fixa dintr-o anumita resursa (ex. bilete la meciuri de fotbal, carti intr-o librarie, etc.) si o aloca utilizatorilor o Exemple de sisteme de alocare resurse: Sisteme de programari, in care resursa alocata este o perioada de timp & Sisteme pentru biblioteci, in care resursa gestionata sunt cartile si alte lucruri ce pot fi imprumutate && Sisteme pentru controlul traficului aerian, in care resursa alocata este spatiul aerian Arhitectura pentru alocare resurse(sisteme multi-levet), includ: o O baza de date a resurselor o Un set de reguli de alocare a resurselor o Un manager de resurse o Un alocator de resurse o Autentificarea utilizatorului o Managementul interogarilor o Componenta de livrare a resurselor o Interfata utilizator Implementarea sistemului multi-nivel o Fiecare nivel poate fi implementat ca o componenta pe scara larga care se executa pe un server separat. Acesta este modelul arhitectural cel mai utilizat pentru sistemele bazate Web o Pe o singura masina, nivelele intermediare sunt implementate ca un program separat care comunica cu baza de date prin intermediul API-lui acesteia o Componentele cu granularitate fina din interiorul nivelelor pot fi implementate ca servicii Web Arhitectura de sistem pentru comert electronic (e-commerce) o Sistemele pentru comert electronic sunt sisteme bazate Internet pentru management de resurse, care accepta ordine electronice pentru bunuri sau servicii o De obicei sunt organizate utilizand o arhitectura pe mai multe straturi (multi-tier) cu nivele ale aplicatiei asociate fiecarui strat Sisteme de procesare evenimente o Aceste sisteme raspund la evenimente produse in contextul sistemului o Caracteristica cheie este ca momentul aparitiei evenimentului este nepredictibil, astfel incat arhitectura trebuie organizata astfel incat sa poata gestiona aceasta problema o Multe sisteme comune, cum ar fi procesoarele de texte sau jocurile, sunt sisteme de procesare evenimente Sisteme de editare o Sistemele de timp real si sistemele de editare sunt cele mai cunoscute tipuri de sisteme de procesare evenimente o Caracteristicile sistemelor de editare: Sisteme mono-utilizator & Trebuie sa ofere raspuns rapid la actiunile utilizatorului && Organizate in jurul unor tranzactii lungi, astfel incat trebuie sa includa facilitati de recuperare si refacere Componentele sistemelor de editare o Sistemele de editare sunt in mod natural orientate obiect, incluzand urmatoarele tipuri de obiecte: o Ecran -> monitorizeaza memoria ecran si detecteaza evenimente o Eveniment -> recunoaste evenimentele si le transfera spre procesare o Comanda -> executa o comanda utilizator o Date editor -> gestioneaza structura de date a editorului o Date auxiliare -> gestioneaza alte date cum ar fi stiluri si preferinte; o Sistem de fisiere -> gestioneaza transferurile cu fisierele o Afisare -> actualizeaza continutul ecranului Sisteme de procesare limbaje o Accepta un limbaj natural sau artificial ca intrare si genereaza o alta reprezentare a acestui limbaj o Poate include un interpretor pentru a actiona asupra instructiunilor limbajului care sunt procesate o Utilizat in situatiile in care cel mai simplu mod de a rezolva o problema este de a descrie algoritmul sau datele din sistem o Instrumentele meta-CASE proceseaza descrierile instrumentelor, regulile metodelor, etc. si genereaza instrumente CASE Componentele sistemului de procesare limbaj o Analizor lexical o Tabela de simboli o Analizor sintactic o Arborele sintaxei o Analizor semantic o Generator de cod Puncte cheie o Modelele generice pentru arhitecturile de aplicatii ne ajuta sa intelegem si sa comparam aplicatii o Clasele importante de aplicatii sunt: sistem de procesare date, sistem de procesare tranzactii, sistem de procesare evenimente si sistem de procesare limbaj o Sistemele de procesare date opereaza in loturi si au o structura de tip intrare-proces-iesire o Sistemele de procesare tranzactii permit accesarea si modificarea de la distanta, de catre utilizatori multipli, a informatiilor dintr-o baza de date o Sistemele de procesare evenimente includ editoare si sisteme de timp real o Intr-un editor sunt detectate evenimentele de la interfata cu utilizatorul, iar o structura de date interna este modificata corespunzator o Sistemele de procesare limbaje traduc textele dintr-un limbaj in altul si pot interpreta instructiunile specificate Dezvoltare orientata obiect o Analiza, proiectarea si programarea orientate obiect sunt corelate dar distincte o Analiza (OOA) se ocupa cu dezvoltarea unui model obiectual al domeniului aplicatiei o Proiectarea (OOD) se ocupa cu dezvoltarea unui model orientat obiect al sistemului care sa implementeze cerintele o Programarea (OOP) se ocupa cu realizarea unui OOD utilizand un limbaj de programare OO cum ar fi Java sau C++ Caracteristicile proiectarii OO o Obiectele sunt abstractizari ale entitatilor lumii reale sau ale entitatilor sistemului si se autogestioneaza o Obiectele sunt independente si incapsuleaza informatii de stare si de reprezentare o Functionalitatea sistemului este exprimata in termeni de servicii oferite de obiecte o Obiectele comunica prin transfer de mesaje si nu prin date partajate o Obiectele se pot distribui si se pot executa secvential sau paralel Avantajele proiectarii OO o Intretinere mai usoara. Obiectele pot fi intelese ca entitati de sine statatoare o Obiectele sunt componente potential reutilizabile o In unele sisteme exista o corespondenta evidenta intre entitatile lumii reale si obiectele sistemului Obiecte si clase de obiecte o Obiectele sunt entitati intr-un sistem software care reprezinta instante ale entitatilor din lumea reala sau din sistem o Clasele de obiecte sunt tipare (templates) pentru obiecte. Ele sunt utilizate pentru a crea obiecte o Clasele de obiecte pot mosteni atribute si servicii de la alte clase de obiecte Obiecte si clase de obiecte o Un obiect este o entitate care are o stare si un set definit de operatii ce opereaza asupra starii. Starea este reprezentata sub forma unui set de atribute ale obiectului. Operatiile asociate cu obiectul ofera servicii altor obiect (clienti) care solicita aceste servicii atunci cand necesita un calcul o Obiectele sunt create conform unor definitii de clase de obiecte. O definitie de clasa de obiecte serveste ca tipar pentru un tip de obiecte. Ea include declaratii pentru toate atributele si pentru toate serviciile ce trebuie asociate unui obiect din acea clasa UML (Unified Modeling Language) o In anii 1980 si 1990 au fost propuse mai multe notatii diferite pentru descrierea proiectelor orientate obiect. o UML este o integrare a acestor notatii o UML descrie notatii pentru mai multe modele diferite ce pot fi produse in cursul proceselor de analiza si proiectare OO o UML este standardul de facto pentru modelarea OO Comunicarea intre obiecte o Conceptual, obiectele comunica prin transfer de mesaje o Mesajul contine: Numele serviciului solicitat de obiectul apelant & Copii ale informatiilor necesare pentru executarea serviciului si numele unui element in care se pastreaza rezultatul serviciului o In practica, mesajele sunt deseori implementate prin apeluri de procedura: Nume = nume procedura & Informatii = lista de parametri Exemple de mesaje o Apelul unei metode asociata cu un obiect “buffer” care returneaza urmatoarea valoare din “buffer”: v = circularBuffer.Get () ; o Apelul unei metode asociata cu un obiect “termostat” care seteaza temperatura ce trebuie mentinuta constanta: thermostat.setTemp (20) ; Generalizare si mostenire o Obiectele sunt membri ai claselor, care definesc tipuri de atribute si operatii o Clasele pot fi organizate in ierarhii de clase, in care o clasa (super-clasa) este o generalizare a uneia sau mai multor clase (sub-clase) o O sub-clasa mosteneste atribute si operatii de la super-clasa sa si poate adauga metode si operatii proprii o Generalizarea din UML este implementata ca mostenire in limbajele de programare OO Avantajele mostenirii o Este un mecanism de abstractizare care poate fi utilizat pentru a clasifica entitati o Este un mecanism de reutilizare atat la nivel de proiectare cat si la nivel de programare o Graful mostenirii este o sursa de cunostinte despre organizarea domeniului si a sistemului Problematica mostenirii o Clasele de obiecte nu sunt auto-continute; nu pot fi intelese fara a se face referire la super-clasele lor o Proiectantii au tendinta de a reutiliza graful mostenirii realizat in timpul analizei. Aceasta poate conduce la o ineficienta semnificativa o Grafurile mostenirii din etapele de analiza, proiectare si implementare au functii diferite si trebuie gestionate separat Relatia de asociere in UML o Obiectele si clasele de obiecte participa in relatii cu alte obiecte si clase de obiecte o In UML, o relatie de generalizare este indicata prin intermediul unei asocieri o Asocierile pot fi adnotate cu informatii care descriu asocierea o Asocierile sunt generale, dar pot indica faptul ca un atribut al unui obiect este un obiect asociat sau ca o metoda se bazeaza pe un obiect asociat Obiecte concurente o Natura obiectelor de entitati auto-continute le face potrivite pentru implementare concurenta o Modelul comunicarii intre obiecte prin transfer de mesaje poate fi implementat direct daca obiectele sunt executate pe procesoare separate intr-un sistem distribuit Servere si obiecte active o Server: Obiectul este implementat sub forma de proces paralel (server) cu puncte de intrare ce corespund operatiilor obiectului. Daca nu exista nici un apel catre el, obiectul se auto-suspenda si asteapta cereri pentru servicii o Obiect activ: Obiectul este implementat ca proces paralel, iar starea interna a obiectului poate fi modificata prin operatii interne executate in obiect si nu prin apeluri externe. Procesul ce reprezinta obiectul executa continuu aceste operatii, deci obiectul nu se auto-suspenda Fire de executie in Java o Firele de executie din Java sunt o constructie simpla pentru implementarea obiectelor concurente o Firele de executie trebuie sa includa o metoda numita run() care este lansata automat de catre sistemul Java runtime (JVM) o Obiectele active includ in mod tipic o bucla infinita astfel incat sa se execute continuu Un proces de proiectare orientata obiect o Procesele de proiectare structurate implica dezvoltarea mai multor modele diferite ale sistemului o Ele necesita un efort mare pentru dezvoltarea si intretinerea acestor modele. Acest lucru poate fi prea costisitor pentru sistemele mici o Totusi, in cazul dezvoltarii sistemelor mari de catre echipe, diferite modele dezvoltate in cursul proiectarii sunt un mecanism esential de comunicare in si intre echipe Stadiile procesului o Evidentiaza activitatile cheie, fara a fi legat de un proces proprietar cum ar fi RUP: o Definirea contextului si a modului de utilizare a sistemului o Proiectarea arhitecturii sistemului o Identificarea principalelor obiecte din sistem o Dezvoltarea modelelor de proiectare o Specificarea interfetelor obiectelor Contextul sistemului si modelele de utilizare o Dezvoltarea intelegerii relatiilor dintre software-ul ce trebuie realizat si contextul sau extern o Contextul sistemului -> Un model static care descrie celelalte sisteme din context. Se utilizeaza modelul unui subsistem ce reprezinta celelalte sisteme din context. Slide-ul urmator ilustreaza sistemele din jurul sistemului statie meteo o Modelul utilizarii sistemului -> Un model dinamic care descrie modul in care sistemul interactioneaza cu contextul sau. Interactiunile sunt reprezentate cu cazuri de utilizare Modelele cazurilor de utilizare o Modelele cazurilor de utilizare sunt folosite pentru a reprezenta fiecare interactiune cu sistemul o Un model de cazuri de utilizare reprezinta caracteristicile sistemului sub forma de elipse iar entitatile ce interactioneaza cu sistemul sub forma de oameni schematici Proiectare arhitecturala o Odata stabilite interactiunile intre sistem si contextul sau, aceste informatii sunt utilizate pentru proiectarea arhitecturii sistemului o Pentru statia meteo este potrivita o arhitectura multi-nivel: Nivelul interfata pentru manipularea comunicarilor & Nivelul colectarii datelor pentru gestionarea instrumentelor && Nivelul instrumentelor pentru colectarea datelor. o Recomandare: In mod normal nu trebuie sa fie mai mult de 7 entitati intr-un model arhitectural. Identificarea obiectelor o Identificarea obiectelor (sau a claselor de obiecte) este partea cea mai dificila a proiectarii OO o Nu exista o 'formula magica' pentru identificarea obiectelor. Ea se bazeaza pe abilitatea, experienta si cunoasterea domeniului de catre proiectantii sistemului o Identificarea obiectelor este un proces iterativ. Este putin probabil ca aceasta sa se fie completa si corecta upa prima iteratie Abordari ale identificarii obiectelor o Utilizarea unei abordari gramaticale bazata pe o descriere a sistemului in limbaj natural (utilizata in metoda Hood de proiectare OO) o Fundamentarea identificarii pe lucrurile tangibile din domeniul aplicatiei o Utilizarea unei abordari comportamentale si identificarea obiectelor pe baza a cine participa la ce comportament o Utilizarea unei analize bazata pe scenarii. Sunt identificate obiectele, atributele si metodele necesare realizarii fiecarui scenariu Obiecte noi si rafinarea obiectelor o Utilizarea cunostintelor despre domeniu pentru a identifica mai multe obiecte si operatii: Statiile meteo trebuie sa aiba identificator unic & Statiile meteo sunt situate la distanta, deci defectiunile la instrumente trebuie raportate automat. Rezulta ca sunt necesare atribute si operatii pentru auto-verificare o Obiecte active si pasive: In acest caz obiectele sunt pasive si colecteaza date la cerere si nu in mod autonom. Aceasta introduce flexibilitate cu pretul timpului de procesare necesar pentru controller Modele de proiectare o Modelele de proiectare arata obiectele si clasele de obiecte precum si relatiile dintre aceste entitati o Modelele statice descriu structura statica a sistemului in termeni de clase de obiecte si relatii intre acestea o Modelele dinamice descriu interactiunile dinamice dintre obiecte Exemple de modele de proiectare o Modele de subsisteme care arata gruparea logica a obiectelor in subsisteme coerente o Modele de secvente care arata secventele interactiunilor intre obiecte o Modele de masini cu stari care arata modul in care obiectele individuale isi modifica starea ca raspuns la evenimente o Alte modele: modele ale cazurilor de utilizare, modele ale agregarilor, modele ale generalizarilor, etc Modele de subsisteme o Arata organizarea proiectului software in grupuri de obiecte aflate in relatii logice o Sunt reprezentate in UML sub forma de pachete sau de clase stereotipate cu <<subsystem>> si care pot contine doua compartimente: specificare si realizare o Reprezinta modele logice. Organizarea reala a obiectelor in sistem poate sa fie diferita Modele de secvente o Modelele de secvente arata secventele interactiunilor care au loc intre obiecte: o Obiectele sunt aranjate orizontal in zona superioara o Timpul este reprezentat verical; modelele sunt citite de sus in jos o Interactiunile sunt reprezentate sub forma de sageti etichetate; stiluri diferite de sageti reprezinta tipuri diferite de interactiuni o Un dreptunghi subtire pe directia timpului reprezinta o perioada de timp in care obiectul este activ (i.e. este obiectul ce detine controlul) Diagrame de stare o Arata modul in care obiectele raspund la diferite cereri pentru servicii si tranzitiile de stare declansate de aceste cereri. Exemplu: diagrama de stare a statiei meteo: o Daca starea obiectului este Shutdown atunci el va raspunde la un mesaj Startup() o In starea Waiting obiectul asteapta mesaje o Daca primeste mesajul reportWeather() atunci sistemul trece in starea Summarising o Daca primeste mesajul calibrate() sistemul trece in starea Calibrating o Se intra intr-o stare Collecting la primirea unui semnal de la un dispozitiv de temporizare Specificarea interfetelor obiectelor o Specificarea interfetelor obiectelor permite ca obiectele si alte componente sa fie proiectate in paralel o Proiectantii trebuie sa evite detalierea reprezentarii interfetei, care trebuie incapsulata in obiect o Obiectele pot avea interfete multiple, acestea reprezentand puncte de vedere diferite asupra metodelor oferite o UML utilizeaza clase pentru a reprezenta interfete. Clasele sunt stereotipate cu <<interface >> si nu au compartimentul de atribute o O abordare alternativa este utilizarea unui limbaj de programare pentru a descrie interfete. Avantajul este dat de facilitatile de verificare a sintaxei de catre compilator Evolutia proiectului software o Ascunderea informatiilor in obiecte (incapsularea) are ca rezultat faptul ca modificarile facute unui obiect nu afecteaza in mod nepredictibil alte obiecte o Fie necesitatea adaugarii unor facilitati de monitorizare a poluarii la statia meteo. Acesta analizeaza probe de aer si calculeaza cantitatile diferitilor poluanti din atmosfera o Citirile indicatorilor de poluare sunt transmise odata cu datele meteo Procesul ICONIX pentru dezvoltarea de software o Intre abordarea elaborata din RUP (Rational Unified Process) si abordarea minimalista din programarea extrema (XP) o Este condus de cazurile de utilizare (use case driven), ca si RUP, dar elimina o mare parte din overhead-ul necesar acestuia. o Este relativ redus si concentrat, ca XP, dar nu elimina analiza si proiectarea o Utilizeaza UML (Unified Modeling Language) dar pastreaza o focalizare pe urmarirea si verificarea cerintelor o Are ca rezultat un set concret, specific si usor de inteles de cazuri de utilizare pe care echipa le poate folosi in efortul de dezvoltare ICONIX o Codul trebuie sa implementeze intocmai cerintele descrise in cazurile de utilizare o Descrierea generala initiala trebuie sa devina neambigua, completa si riguroasa pentru ca pe baza ei sa poata fi produse o arhitectura buna si solida, un proiect software robust si apoi, prin extensie, un cod care implementeaza intocmai comportamentul cerut de utilizatori o Analiza si proiectarea incep cu: Un prototip & O idee despre cum va arata interfata utilizator && Un punct de plecare in identificarea scenariilor sau cazurilor de utilizare ale sistemului o Structura codului OO este definita de clase => sunt necesare una sau mai multe diagrame de clase care sa defineasca clasele din sistem. o Pentru fiecare clasa sunt definite: Un set complet de atribute (datele) & Operatii (functiile software) o In consecinta, trebuie identificate: Toate functiile software & Toate datele necesare realizarii functiilor o Diagramele de clase de la nivelul proiectarii: Un set foarte detaliat de diagrame de clase la nivelul proiectarii. Aceste diagrame de clase sunt pasul precedent codificarii. Clasele din aceste diagrame sunt in corespondenta 1:1 cu clasele din codul sursa o Alocarea comportamentului -> deciderea, pentru fiecare functie, a clasei care o va contine o Diagrama de secvente -> suport ideal pentru a lua aceste decizii de alocare a comportamentului o Diagrama de secvente arata comunicarea prin transfer de mesaje intre instantele obiectelor la momentul executiei. Fiecare mesaj invoca o functie software a obiectului care il receptioneaza. De aceea acesta diagrama este ideala pentru vizualizarea alocarii comportamentului o In unele instrumente de modelare vizuala -> pe masura ce este desenata diagrama de secvente, clasele din diagrama de clase sunt populate automat cu operatiile corespunzatoare mesajelor o Diagrama de robustete -> ocupa spatiul dintre cerinte si proiectul de detaliu o Analiza de robustete s-a dovedit a fi un ajutor important in trecerea de la cerinte la proiect o Diagrama de robustete a fost descrisa in specificatiile originale pentru UML, dar definitia ei a fost plasata intr-un document colateral numit Objectory Process-Specific Extensions (extensii specifice procesului Objectory) o Diagrama de secvente -> un set de obiecte ce participa intr-un scenariu dat o Avem nevoie de: O prima incercare de a identifica obiectele ce participa la scenariu & O prima identificare a functiilor software ce vor fi realizate in scenariu o Procesul propus de Ivar Jacobson's este un proces care incorporeaza o prima incercare, sau un proiect preliminar, al carei rezultat apare in ceea ce numim diagrama de robustete o Aceasta prima incercare este apoi rafinata intr-un proiect detaliat in diagrama de secvente o Analiza de robustete, care implica parcurgerea diagramei de robustete, permite: Trecerea de la modelarea functionala la modelarea comportamentala & Descoperirea de noi obiecte && Adaugarea de atribute la clase pe masura ce se urmareste fluxul datelor &&& Actualizarea si rafinarea textului cazului de utilizare o Cazuri de utilizare bune: Descriu utilizarea sistemului in contextul modelului obiect & F oarte explicite && Precise &&& Neambigue o Scop specific: derivarea proiectului software din ele Puncte cheie o Proiectarea OO este o abordare a proiectarii in care componentele au stare proprie privata si operatii in general publice o Obiectele trebuie sa aiba constructor si operatii pentru inspectarea starii. Ele ofera servicii altor obiecte o Obiectele pot fi implementate secvential sau concurent o UML (Unified Modeling Language) ofera diferite notatii pentru definirea diferitelor modele obiectuale o In timpul procesului de proiectare OO sunt produse mai multe modele diferite. Acestea includ modele statice si dinamice ale sistemului o Interfetele obiectelor trebuie definite cu precizie utilizand, de exemplu, un limbaj de programare cum ar fi Java o Proiectarea OO ofera potential de simplificare a evolutiei sistemului Modele de interfete utilizator o Interfata batch (in loturi de lucrari): Una sau mai multe interfete ce permit utilizatorilor sa preprogrameze cartele special formatate prin gaurire, pe baza unui sablon specific recunoscut de calculator. Fiecare cartela corespunde unei comenzi sau unei linii de cod. Asa numitele cartele “job” erau utilizate pentru a dirija procesarea pachetului de cartele. Cartelele erau citite intr-un cititor de cartele care furniza calculatorului informatiile pentru procesare. & Problema acestui model de interfata este lipsa de interactivitate cu calculatorul in timpul procesarii cartelelor. La aparitia unei probleme la o cartela operatia trebuia sa se opreasca pentru a se inlocui cartela gresita. Aceasta conducea la reluari multiple pentru a pune programul la punct o Interfata in mod linie de comanda (CLI): Afiseaza un prompter care indica faptul ca sistemul este gata sa primeasca o intrare. Utilizatorul tasteaza o comanda si o trimite spre procesare apasand de obicei tasta Enter. Calculatorul proceseaza comanda si furnizeaza o iesire sub forma de text. & O comanda poate, de asemenea, apela un fisier care contine o serie de comenzi sau cod ce poate fi procesat. && Aduce interactivitate cu calculatorul. &&& Dificil de retinut comenzile complexe. &&&& Un limbaj de scripting, permite utilizatorilor sa creeze fisiere de comenzi ce pot fi lansate ca atare o Interfata text (TUI): Utilizeaza intreg ecranul pentru a executa diferite operatii. & Ofera functionalitate si utilizabilitate superioara in conducerea activitatilor Proiectarea UI o Proiectarea UI este o parte esentiala a intregului proces de proiectare a software-lui o Interfata utilizator trebuie proiectata astfel incat sa fie potrivita cu abilitatile, experienta si asteptarile utilizatorilor anticipati o Deseori utilizatorii unui sistem il judeca mai curand dupa interfata decat dupa functionalitate o O interfata proiectata prost poate determina un utilizator sa faca greseli catastrofice o Proasta proiectare a a interfetei este unul dintre motivele pentru care multe sisteme software nu au fost niciodata utilizate Scopurile unui proiect bun o Trebuie sa fie etic o Trebuie sa aiba un scop o Trebuie sa fie pragmatic o Trebuie sa fie elegant Principiile proiectarii UI o Proiectarea UI trebuie sa tina cont de necesitatile, experienta si capabilitatile utilizatorilor sistemului o Proiectantii trebuie sa fie constienti de limitarile fizice si mentale ale utilizatorilor (ex. memorie pe termen scurt limitata) si sa recunoasca faptul ca acestia pot face greseli o Principiile proiectarii UI stau la baza proiectarii interfetelor, dar nu toate principiile sunt aplicabile tuturor proiectelor o Familiaritate -> Interfata trebuie sa se bazeze pe termeni si concepte orientate pe utilizator si nu pe concepte specifice sistemelor de calcul. De exemplu, un sistem pentru birou trebuie sa utilizeze concepte ca scrisori, documente, fisiere, si nu directoare, identificatoare de fisier, etc o Consistenta -> Sistemul trebuie sa prezinte un nivel corespunzator de consistenta. Comenzile si menu-urile trebuie sa aiba acelasi format, punctuatia comenzilor sa fie similara, etc. Consistenta intre aplicatii: ex. comenzile cu inteles similar exprimate in acelasi mod. Consistenta low- level: ex. utilizarea acelorasi acceleratori ca cei definiti de sistemul de operare. Consistenta high-level: ex. aceleasi operatii suportate de toate tipurile de entitati din sistem o Surpriza minima: Daca o comanda functioneaza intr-un mod cunoscut, utilizatorul trebuie sa fie capabil sa prevada functionarea comenzilor comparabile (conform cu modelul mental construit de utilizator in timpul utilizarii aplicatiei) o Recuperabilitate: Sistemul trebuie sa ofere un anumit grad de flexibilitate fata de erorile utilizatorilor si sa permita acestora sa poata recupera sistemul o Trebuie oferite facilitati de interactiune pentru diferite tipuri de utilizatori: Ocazionali (necesita ghidare) vs. power users (necesita acceleratori) & Utilizatori cu dizabilitati: ex. Utilizatori cu dificultati de vedere => se va prezenta textul cu caractere de dimensiuni mari Probleme de proiectare in UI o In proiectarea sistemelor interactive trebuie adresate doua probleme: Cum va fi furnizata calculatorului informatia de la utilizator? & Cum va fi prezentata utilizatorului informatia produsa de calculator? o Interactiunea cu utilizatorul ca si prezentarea informatiei pot fi integrate prin intermediul unui cadru coerent, cum ar fi o metafora pentru interfata utilizator Stiluri de interactiune o Manipulare directa o Selectie din menu o Completare formular o Limbaj de comanda o Limbaj natural Interfete bazate Web o Multe sisteme bazate Web au interfete bazate pe formulare (forms) Web o Campurile formularelor pot fi menu-uri, casete preluare text, butoane radio, etc o In exemplul LIBSYS utilizatorii aleg dintr-un menu sursa la care se va face cautarea si tasteaza fraza de cautare intr-o caseta de preluare text Prezentarea informatiilor o Prezentarea informatiilor se refera la prezentarea informatiilor produse de sistem utilizatorilor acestuia o Informatiile pot fi prezentate direct (ex. text intr-un procesor de texte) sau pot fi transformate intr-o anumita forma de prezentare (ex. intr-o anume forma grafica) o Abordarea Model-View-Controller este o modalitate de a oferi suport pentru prezentari multiple ale datelor Prezentarea informatiilor o Informatii statice: Initializate la inceputul unei sesiuni. Nu se modifica pe durata sesiunii & Pot fi numerice sau textuale o Informatii dinamice: Se modifica pe parcursul unei sesiuni iar modificarile trebuie comunicate utilizatorului sistemului & Pot fi numerice sau textuale Prezentare analogica sau digitala o Prezentare digitala: Compacta -> ocupa putin spatiu pe ecran & Se pot comunica valori precise o Prezentare analogica: Usor de format o impresie la prima vedere asupra valorii & Posibilitatea de a arata valori relative && Mai usor de vazut valorile exceptionale Vizualizarea datelor o Se ocupa cu tehnicile pentru afisarea cantitatilor mari de informatii o Vizualizarea poate revela relatiile dintre entitati si tendintele datelor o Vizualizari posibile de date: o Informatii meteo colectate de la mai multe surse o Starea unei retele de telefonie sub forma unui set de noduri conectate o Combinat chimic viziualizat sub forma de presiuni si temperaturi intr-un set de rezervoare si conducte o Un model molecular afisat in 3 dimensiuni o Pagini Web afisate ca arbore hiperbolic Afisarea culorilor o Culoarea adauga o dimensiune suplimentara unei interfete si poate ajuta utilizatorul sa inteleaga structuri complexe de informatie o Culoarea poate fi utilizata pentru a evidentia: Evenimente exceptionale & Anomalii && Similaritati o Greseli obisnuite la utilizarea culorilor in proiectarea interfetelor: Utilizarea culorii pentru a comunica un anumit inteles & Utilizarea excesiva de culori Indrumari de utilizare a culorilor o Limitarea numarului de culori utilizate si folosirea lor consecventa o Utilizarea unei schimbari de culoare pentru a ilustra o schimbare in starea sistemului o Utilizarea codificarii pe baza de culori pentru a oferi sprijin utilizatorilor in realizarea activitatii curente o Utilizarea codificarii pe baza de culori in mod bine gandit si controlat o Atentie la imperecherea culorilor Mesaje de eroare o Proiectarea mesajelor de eroare este de importanta critica. Mesaje proaste pot conduce la refuzarea sistemului de catre utilizator o Mesajele trebuie sa fie politicoase, concise, consistente si constructive o Cultura si experienta utilizatorilor trebuie sa constituie un factor determinant in proiectarea mesajelor Procesul de proiectare a interfetei utilizator (UI) o Proiectarea UI este un proces iterativ care implica o legatura stransa intre utilizatori si proiectanti o Activitati fundamentale ale acestui proces: Analiza utilizatorului. Intelegerea a ceea ce vor face utilizatorii cu sistemul Prototiparea sistemului. Dezvoltarea unei serii de prototipuri in vederea experimentarii Evaluarea interfetei. Experimentarea prototipurilor cu utilizatorii Analiza utilizatorului o Daca nu se intelege ce vor utilizatorii sa faca cu sistemul, atunci nu exista o perspectiva realista a proiectarii unei interfete eficiente o Analiza utilizatorului trebuie descrisa in termeni pe care ii pot intelege atat utilizatorii cat ceilalti proiectanti o Scenariile in care sunt descrise episoade tipice de utilizare sunt un mod de a realiza aceste analize Cerinte rezultate din scenariu o Utilizatorii ar putea sa nu cunoasca termeni de cautare corespunzatori, deci au nevoie de o metoda care sa-i ajute sa aleaga termeni o Utilizatorii trebuie sa poata alege colectiile in care sa se realizeze cautarile o Utilizatorii trebuie sa poata realiza cautari si sa ceara copii ale materialelor relevante Intervievare o Proiectare de interviuri semi-structurate bazate pe intrebari deschise o Utilizatorii pot furniza astfel informatiile pe care ei le considera esentiale si nu doar informatiile pe care inginerul s-a gandit sa le colecteze o Interviuri in grup sau grupuri focalizate permit utilizatorilor sa discute intre ei despre ceea ce fac Etnografie o Implica faptul ca un observator extern urmareste utilizatorii la lucru si ii interogheaza verbal despre ceea ce fac o Valoroasa deoarece multe sarcini ale utilizatorilor sunt intuitive si acestora le este foarte dificil sa le descrie si explice o Ajuta, de asemenea, in intelegerea rolului influentelor sociale si organizationale asupra modului de lucru Prototiparea interfetei utilizator o Scopul prototiparii este de a permite utilizatorilor sa capete exeprienta directa cu interfata o In lipsa acestei experiente directe, este imposibil de judecat utilizabilitatea unei interfete o Prototiparea poate fi un proces cu doua stadii: In primul stadiu se pot utiliza prototipuri pe hartie & In cel de al doilea stadiu desenul este rafinat si se dezvolta prototipuri automate din ce in ce mai sofisticate Prototip pe hartie o Parcurgerea scenariilor utilizand schite ale interfetei o Prezentarea unei serii de interactiuni cu sistemul o Prototipul pe hartie este o metoda eficienta de a afla reactiile utilizatorului la propunerile pentru design-ul interfetei Evaluarea interfetei utilizator o Se pot realiza evaluari ale design-ului unei interfetei utilizator pentru a vedea in ce masura corespunde modului de lucru potrivit o Evaluarea totala este foarte costisitoare si nepractica pentru majoritatea sistemelor o In mod ideal o interfata ar trebui evaluata in raport cu specificatiile de utilizabilitate. Totusi, aceste specificatii sunt rareori definite Utilizabilitate o Capaciatatea de a fi utilizabil o Convenabil si practic de utilizat o Bazata pe: o Utilizabilitatea necesita concentrare pe utilizatori o Oamenii utilizeaza produse software pentru a fi productivi o Utilizatorii sunt persoane ocupate care incearca sa indeplineasca sarcini o Utilizatorii sunt cei care decid daca un produs este usor de utilizat Tehnici simple de evaluare o Chestionare pentru feedback de la utilizator o Inregistrare video a utilizarii sistemului si evaluarea ulterioara a proiectiei o Extinderea codului cu operatii de colectare referitoare la utilizarea facilitatilor si la erorile utilizatorului o Adaugarea de cod care sa colecteze feedback on-line de la utilizator Puncte cheie o Principiile de proiectare a interfetei utilizator trebuie sa ajute in ghidarea proiectarii interfetelor utilizator o Stilurile de interactiune includ manipulare directa, sisteme de menu-uri, completare formulare, limbaje de comanda si limbaj natural o Afisarile grafice ar trebui utilizate pentru a prezenta tendinte si valori aproximative. Afisarile digitale sunt utile atunci cand este necesara precizie o Culorile trebuie utilizate cu economie si in mod consistent o Procesul de proiectare a interfetei utilizator implica analiza utilizatorului, prototiparea sistemului si evaluarea prototipului o Scopul analizei utilizatorului este de a face proiectantii constienti de modul in care utilizatorii lucreaza de fapt o Prototiparea UI ar trebui sa fie un proces in doua stadii, cu prototipurile elaborate in primul stadiu utilizate ca baza pentru prototiparea automata a interfetei o Scopurile evaluarii UI sunt de a obtine feedback despre cum sa fie imbunatatit design-ul intefetei si de a evalua daca interfata indeplineste cerintele de utilizabilitate Dezvoltare rapida de software (RAD) o Datorita contextelor economice in schimbare rapida, economia trebuie sa raspunda la noi oportunitati si competitii. o Acestea necesita software, iar dezvoltarea si livrarea rapida sunt deseori cerintele cele mai critice pentru sistemele software. o Mediul economic ar putea accepta insa software de calitate mai slaba daca este posibila furnizarea rapida a functionalitatii esentiale. Cerinte o Datorita contextului in schimbare, este deseori imposibil sa se ajunga la un set stabil si consistent de cerinte pentru sistem. o De aceea, modelul cascada pentru dezvoltarea de software nu este practic; singura cale de a livra software-ul rapid este utilizarea unei abordari a procesului de dezvoltare bazata pe specificarea ierativa a cerintelor. Caracteristicile proceselor RAD o Procesele de specificare, proiectare si implementare sunt concurente. Nu exista specificatii detaliate iar documentatia de proiectare este minimizata. o Sistemul este dezvoltat intr-o serie de incremente. Utilizatorii finali evalueaza fiecare increment si fac propuneri pentru incrementele urmatoare. o Interfetele utilizator ale sistemelor sunt dezvoltate de obicei utilizand un sistem de dezvoltare interactiv. Avantajele dezvoltarii incrementale o Accelerarea firnizarii serviciilor pentru client. Fiecare increment furnizeaza functionalitatea cu prioritate maxima pentru client. o Angajarea utilizatorului in realizarea sistemului. Utilizatorii trebuie sa fie implicati in dezvoltare, ceea ce inseamna ca sistemul are sanse mai mari sa le indeplineasca cerintele iar utilizatorii sunt mai angajati in raport cu sistemul. Probleme ale dezvoltarii incrementale o Probleme de management-Este dificil de judecat progresul si de depistat problemele deoarece nu exista documentatie care sa demonstreze ce s-a realizat. o Probleme contractual-Contractul normal include o specificatie; in lipsa unei specificatii trebuie utilizate formate diferite de contract. o Probleme de validare-Fata de ce se testeaza sistemul daca nu exista o specificatie? o Probleme de intretinere-Continua modificare tinde sa corupa structura software-lui, facand ca modificarile si evolutia catre indeplinirea de noi cerinte sa fie mai costisitoare. Prototipare o Pentru unele sisteme mari dezvoltarea iterativa incremetala poate fi nepractica; aceasta este adevarat in special cand mai multe echipe lucreaza in locatii diferite la acelasi proiect. o Se poate utiliza prototiparea, in cadrul careia este dezvoltat un sistem experimental ca baza pentru formularea cerintelor. Prototipul este inlaturat atunci cand s-a obtinut acordul asupra specificatiilor sistemului. Obiective conflictuale o Obiectivul dezvoltarii incrementale este de a furniza utilizatorilor finali un sistem functional. Dezvoltarea incepe cu acele cerinte care sunt cel mai bine intelese. o Obiectivul prototiparii este de a valida sau de a deriva cerintele sistemului. Procesul de prototipare incepe cu cerintele cel mai putin intelese. Metode agile o Insatisfactia creata de overhead-urile implicate in metodele de proiectare a condus la crearea metodelor agile. Aceste metode: Se concentreaza pe cod si nu pe proiect (design); Sunt bazate pe o abordare iterativa a dezvoltarii software-lui; Sunt destinate sa furnizeze rapid software functional si sa-l modifice rapid pentru a indeplini cerinte in schimbare. o Metodele agile se potrivesc probabil cel mai bine cu sisteme economice de dimensiuni mici si mijlocii sau cu produse PC. Probleme ale metodelor agile o Poate fi dificil sa mentinem interesul clientilor care sunt implicati in proces. o Membrii echipei ar putea fi nepotriviti cu implicarea intensa care caracterizeaza metodele agile. o Acolo unde exista multe parti interesate, ar putea fi dificila prioritizarea modificarilor. o Mentinerea simplitatii necesita munca in plus. o Contractele ar putea fi o problema, la fel ca si in alte abordari ale dezvoltarii iterative. Programarea extrema o Probabil cea mai cunoscuta si larg utilizata metoda agila. o Programarea extrema (XP) are o abordare ‘extrema’ la dezvoltarea iterativa. o Noi versiuni pot fi construite de mai multe ori pe zi; o Incrementele sunt furnizate clientului la fiecare 2 saptamani; o Pentru fiecare versiune (build) se executa toate testele, iar versiunea este acceptata doar daca trece cu succes aceste teste. XP si principiile agile o Dezvoltarea incrementala este realizata prin lansari mici si frecvente ale sistemului. o Implicarea clientului inseamna angajarea full-time a clientului alaturi de echipa. o Persoane, nu procese: prin programare in pereche, proprietate colectiva si un proces care evita ore suplimentare de lucru. o Suport pentru realizarea de modificari prin lansari regulate ale sistemului. o Mentinerea simplitatii prin refactorizare constanta a codului. Scenariile de cerinte o In XP, cerintele utilizator sunt exprimate sub forma de scenarii “povestite” de utilizatori. o Acestea sunt scrise pe cartele iar echipa de dezvoltare le divizeaza in sarcini (task) de implementare. Aceste sarcini sunt baza estimarilor de timp si de cost. o Clientul alege scenariile ce vor fi incluse in urmatoarea lansare pe baza prioritatilor si a estimarilor de timp. XP si modificarile o In mod conventional este recomandabil in ingineria software ca proiectarea sa se faca astfel incat sistemul sa suporte usor modificari ulterioare. Timpul si efortul investite in anticiparea modificailor sunt recuperate prin reducerea costurilor ulterioare din ciclul de viata. o XP, totusi, sustine ca acest lucru nu merita facut deoarece nu toate modificarile pot fi anticipate. o In schimb, propune imbunatatirea constanta a codului (refactorizare) astfel incat modificarile sa poata fi facute usor atunci cand sunt implementate. Testarea in XP o Dezvoltarea testelor de la inceput. o Dezvoltare incrementala a testelor pe baza scenariilor. o Implicarea utilizatorului in dezvoltarea si validarea testelor. o Automatizarea testarii pentru a executa testarea tuturor componentelor la construirea fiecarei lansari. Dezvoltarea testelor de la inceput o Scrierea testelor inainte de cod clarifica cerintele ce trebuie implementate. o Testele sunt scrise ca programe (nu ca date) astfel incat pot fi executate automat. Testul include o verificare ca s-a executat corect. o Toate testele anterioare si testele noi sunt executate automat atunci cand se adauga o noua functionaliate. Astfel se verifica faptul ca noua functionalitate nu a introdus erori. Programarea in pereche o In XP programatorii lucreaza in perechi, stand impreuna pentru a dezvolta codul. o Aceasta ajuta la dezvoltarea unei proprietati comune asupra codului si distribuie cunostintele catre intreaga echipa. o Serveste ca un proces de revizuire informala deoarece fiecare linie de cod este vazuta de mai multe persoane. o Incurajeaza refactorizarea deoarece intreaga echipa poate beneficia de aceasta. o Masuratorile sugereraza ca productivitatea este similara cu cea a doua persoane care lucreaza independent. Dezvoltarea rapida a aplicatiilor (RAD) o Metodele agile au avut parte de o atentie considerabila, dar exista si alte abordari ale dezvoltarii rapide a aplicatiilor care au fost utilizate pentru multi ani. o Acestea sunt proiectate pentru dezvoltarea de aplicatii economice cu foarte multe date (data-intensive) si se bazeaza pe programarea si prezentarea informatiilor dintr-o baza de date. Instrumente pentru medii RAD o Limbaje de programare a bazelor de date o Generator de interfete o Legaturi la aplicatii de birou (office) o Generatoare de rapoarte Generarea interfetei o Multe aplicatii se bazeaza pe formulare complexe iar dezvoltarea manuala a acestora este o activitate consumatoare de timp. o Mediile RAD ofera sprijin pentru generarea de ecrane care include: Definirea interactiva a formularelor utilizand tehnici “drag and drop”; Legarea formularelor in cazul in care se specifica necesitatea prezentarii unei secvente de formulare; Verificarea datelor completate in formulare, daca sunt definite domenii/restrictii pentru valorile permise in campuri. Programare vizuala o Limbajele de scripting, cum ar fi Visual Basic, suporta programarea vizuala in care prototipul este dezvoltat prin crearea unei interfete utilizator din elemente standard si prin asocierea de componente cu aceste elemente. o Exista o biblioteca vasta de componente care ofera sprijin pentru acest tip de dezvoltare. o Acestea trebuie croite astfel incat sa fie potrivite cerintelor specifice aplicatiei. Probleme ale programarii vizuale o Este dificil de coordonat dezvoltarea de software in echipa. o Nu exista o arhitectura explicita a sistemului. o Dependentele complexe intre parti ale programului pot conduce la probleme de mentenabilitate. Reutilizare cu COTS (Commercial, off-the-shelf) o O abordare eficienta a dezvoltarii rapide este legarea si configurarea sistemelor COTS existente. o De exemplu, un sistem de management al cerintelor ar putea fi construit utilizand: O baza de date pentru a memora cerintele; Un procesor de texte pentru a captura cerintele si formatele de raportare; O tabela de calcul (spreadsheet) pentru managementul urmaririi; Documente compuse o Pentru unele aplicatii se poate crea un prototip prin dezvoltarea unui document compus. o Acesta este un document cu elemente active (cum ar fi o tabela de calcul) care permite realizarea de calcule de catre utilizator. o Fiecare element activ are asociata o aplicatie care este invocata la selectarea elementului. o Documentul compus este integratorul acestor aplicatii. Prototiparea software-lui o Un prototip este o versiune initiala a unui sistem utilizata pentru a demonstra concepte si a incerca optiuni de proiectare. o Un prototip poate fi utilizat in: Procesul de inginerie a cerintelor pentru a ajuta la identificarea si validarea cerintelor; Procesul de proiectare pentru a explora optiunile si a dezvolta un design pentru UI; Procesul de testare pentru a executa teste back-to-back. Beneficiile prototiparii o Cresterea utilizabilitatii sistemului. o O apropiere de cerintele reale ale utilizatorilor. o Cresterea calitatii proiectului. o Imbunatatirea mentenabilitatii. o Reducerea efortului de dezvoltare. Prototipuri o Prototipurile “throw-away” trebuie eliminate dupa dezvoltare deoarece nu sunt o baza potrivita pentru producerea sistemului deoarece: Este imposibila reglarea sistemului astfel incat sa indeplineasca cerinte non- functionale; In mod normal prototipurile nu sunt documentate; Datorita modificarilor rapide, de obicei structura prototipului este degradata; Prototipul probabil nu va indeplini standardele de calitate normale ale organizatiei. Puncte cheie o O abordare iterativa a dezvoltarii de software conduce la livrarea mai rapida a software-lui. o Metodele agile sunt metode iterative de dezvoltare care au ca scop reducerea overhead-ului de dezvoltare, astfel incat software-ul sa fie produs mai rapid. o Programarea extrema include practici cum ar fi testarea sistematica, imbunatatirea continua si implicarea clientului. o Abordarea testarii in XP este o calitate puternica in care testele executabile sunt dezvoltate inainte de scrierea codului. o Mediile RAD includ limbaje de programare a bazelor de date, instrumente pentru generare de formulare si legaturi cu aplicatii de birou. o Un prototip “throw-away” este utilizat pentru explorarea cerintelor si a optiunilor de proiectare. o La implementarea unui prototip “throw-away” se incepe cu cerintele cel mai putin intelese; in dezvoltarea incrementala se incepe cu cerintele cel mai bine intelese. Reutilizarea software-lui o In majoritatea disciplinelor ingineresti, sistemele sunt proiectate prin compunere din componente existente care au fost utilizate in alte sisteme. o Ingineria software s-a focalizat mai mult pe dezvoltarea originala, dar acum se recunoaste ca pentru a obtine mai rapid si la costuri mai mici un software mai bun este nevoie sa adoptam un proces de proiectare bazat pe reutilizarea sistematica a software-lui. Inginerie software bazata pe reutilizare o Reutilizarea sistemelor de aplicatii-Se poate reutiliza un intreg sistem de aplicatie fie prin incorporarea sa fara modificari in alte sisteme (COTS reuse) fie prin dezvoltarea familiilor de aplicatii. o Reutilizarea de componente-Se pot reutiliza componentele unei aplicatii, de la sub-sisteme la simple obiecte (tratata in cursul urmator). o Reutilizarea de obiecte si de functii-Se pot utiliza componente software care implementeaza un singur obiect sau functie bine definite. Reutilizarea o Desi reutilizarea inseamna pur si simplu reutilizarea componentelor unui sistem, exista multe abordari diferite ce pot fi aplicate. o Reutilizarea este posibila pe mai multe nivele, de la simple functii la sisteme complete de aplicatie. o Reutilizarea acopera intreaga arie a tehnicilor de reutilizare posibile. Factori de planificare a reutilizarii o Planul de timp al dezvoltarii software-lui. o Durata de viata preconizata pentru software. o Baza (background), competentele si experienta echipei de dezvoltare. o Criticalitatea software-lui si cerintele sale non-functionale. o Domeniul aplicatiei. o Platforma de executie pentru software. Reutilizare concept o La reutilizarea componentelor de proiectare sau de program trebuie urmate deciziile de proiectare facute de cel ce a dezvoltat componenta originala. o Aceasta ar putea limita oportunitatile de reutilizare. o Totusi, o forma mai abstracta de reutilizare este reutilizarea de concepte. O abordare particulara este descrisa intr-un mod independent de implementare iar o implementare este dezvoltata ulterior. o Cele doua abordari principale ale reutilizarii de concepte sunt: Design patterns; Generative programming. Design patterns o Un sablon de programare (design pattern) este un mod de a reutiliza cunoastere abstracta despre o problema si solutia sa. o Un sablon este o descriere a problemei si a esentei solutiei. o Trebuie sa fie suficient de abstract pentru a fi reutilizat in diferite contexte. o Deseori sabloanele sunt bazate pe caracteristici ale obiectelor cum ar fi mostenirea si polimorfismul. Elementele unui sablon o Nume-Un identificator sugestiv. o Descrierea problemei. o Descrierea solutiei-Nu un design concret ci un sablon (template) pentru o solutie de proiectare care poate fi instantiat in diferite moduri. o Consecinte-Rezultatele si compromisurile (trade-offs) aplicarii sablonului. Sablonul Observer o Nume-Observer. o Descriere-Separa afisarea starii unui obiect de obiectul propriu-zis. o Descrierea problemei-Utilizat cand sunt necesare afisari multiple ale starii. o Descrierea solutiei-Vezi slide-ul urmator ce contine descrierea UML. o Consecinte-Nu sunt practice optimizarile pentru cresterea performantei afisarii. Reutilizare bazata pe generator o Generatoarele de programe implica reutilizarea sabloanelor si algoritmilor standard. o Acestea sunt inglobate in generator si parametrizate de catre comenzile utilizator. Programul este apoi generat automat. o Reutilizarea bazata pe generator este posibila atunci cand se pot identifica abstractizarile specifice domeniului si codul executabil ce la corespunde. o Se poate utiliza un limbaj specific domeniului pentru a compune si a controla aceste abstractizari. Tipuri de generatoare de programe o Tipuri de generatoare de programe o +Generatoare de aplicatii pentru procesarea datelor economice; o +Generatoare de parser-e si analizoare lexicale pentru procesarea linbajelor; o +Generatoare de cod din instrumente CASE. o Reutilizarea bazata pe generatoare este foarte eficienta dar aplicabilitatea sa este limitata la un numar relativ mic de domenii de aplicatie. o Este mai simplu de dezvoltat programe folosind generatoare decat folosind alte abordari bazate pe componente ale reutilizarii. Dezvoltare orientata pe aspecte o Dezvoltarea orientata pe aspecte se adreseaza unei probleme majore din ingineria software: separarea preocuparilor (concerns). o Preocuparile (concerns) sunt deseori asociate cu elemente ce traverseaza aplicatia (nu pur si simplu simplu cu functionalitatea aplicatiei) – ex. toate componentele isi monitorizeaza operatiile proprii, toate componentele trebuie sa pastreze securitatea, etc. o Preocuparile traversante sunt implementate ca aspecte si sunt intretesute dinamic intr-un program. Codul acestora este reutilizat iar noul sistem este generat de catre tesatorul (weaver) de aspecte. Cadre (frameworks) de aplicatii o Framework-urile sunt proiecte de subsisteme formate dintr-o colectie de clase abstracte si concrete si din interfetele dintre acestea. o Subsistemul este implementat prin adaugare de componente care sa completeze partile proiectului si prin extinderea claselor abstracte din framework. o Framework-urile sunt entitati reutilizabile de dimensiuni moderate. Clase de framework-uri o Framework-uri pentru infrastructura sistemelor-Sprijina dezvoltarea infrastructurii sistemelor, cum ar fi comunicarile, interfetele utilizator si compilatoarele. o Framework-uri pentru integrarea middleware-lui-Standarde si clase care sprijina comunicarea si schimbul de informatii intre componente. o Framework-uri pentru aplicatii enterprise-Sprijina dezvoltarea tipurilor specifice de aplicatii, cum ar fi sisteme de telecomunicatii sau sisteme financiare. Extinderea framework-urilor o Framework-urile sunt generice si sunt extinse pentru a crea aplicatii sau subsisteme mai specifice. o Extinderea unui framework implica: Adaugarea de clase concrete care mostenesc operatii de la clasele abstracte din framework; & Adaugare de metode ce vor fi apelate ca raspuns la evenimentele ce sunt recunoscute de framework. o Problema framework-urilor este complexitatea lor, ceea ce inseamna ca este necesar mult timp pana la utilizarea lor eficienta. Model-view controller o Framework de infrastructura pentru proiectarea GUI. o Permite prezentari multiple ale unui obiect si separarea interactiunilor cu aceste prezentari. o Framework-ul MVC implica instantierea mai multor sabloane de programare. Reutilizarea sistemelor de aplicatie o Implica reutilizarea unor intregi sisteme de aplicatie fie prin configurarea unui sistem pentru un anume context fie prin integrarea a doua sau mai multe sisteme pentru a crea o noua aplicatie. o Vom discuta doua abordari: Integrarea de produse COTS; & Dezvoltarea liniilor de productie. Reutilizarea produselor COTS o COTS – sisteme comerciale (Commercial Off-The-Shelf). o Sistemele COTS sunt de obicei sisteme complete de aplicatie care ofera o interfata de programare a aplicatiilor - API (Application Programming Interface). o Construirea sistemelor mari prin integrarea de sisteme COTS a devenit o strategie viabila de dezvoltare pentru unele tipuri de sisteme cum ar fi sistemele de comert electronic (E-commerce). o Beneficiul principal este oferit de dezvoltarea mai rapida a aplicatiei insotita de obicei de costuri mai scazute de dezvoltare. Decizii de proiectare cu COTS o Care produse COTS ofera functionalitatea cea mai potrivita? Exista mai multe produse similare ce pot fi utilizate. o Cum se va face schimbul de date? Produsele individuale utilizeaza structuri de date si formate proprii. o Care dintre caracteristicile produsului vor fi utilizate? Cele mai multe produse ofera mai multa functionalitate decat este necesara intr-un caz particular. Trebuie interzis accesul la functionalitatea neutilizata. Exemplu: produse COTS reutilizate o De partea clientului, se utilizeaza programe standard pentru navigare Web si pentru posta elecronica. o De partea serverului, o platforma pentru comert electronic (e- commerce) trebuie integrata cu un sistem existent de gestionare ordine si facturi. o +Aceasta implica scrierea unui adaptor astfel incat cele doua sisteme sa poata schimba date. o +De asemenea, este integrat un sistem de posta electronica (e-mail) pentru a genera mesaje pentru clienti. Aceasta necesita, de asemenea, un adaptor pentru a primi date de la sistemul de gestionare ordine si facturi. Problemele integrarii de sisteme COTS o Lipsa de control asupra functionalitatii si performantei-Sistemele COTS ar putea fi mai putin eficiente decat par. o Probleme de interoperabilitate a sistemlor COTS-Sisteme COTS diferite pot fi bazate pe premize diferite, ceea ce conduce la dificultatea integrarii lor. o Nu exista control asupra evolutiei sistemului-Furnizorii si nu utilizatorii de sisteme COTS controleaza evolutia acestora. o Sprijin de la furnizorii de sisteme COTS-Furnizorii COTS ar putea sa nu ofere suport pe toata durata de viata a produsului. Linii de productie de software o Liniile de productie de software sau familiile de aplicatii sunt aplicatii cu functionalitati generice care pot fi adaptate si configurate pentru utilizare in contexte specifice. o Adaptatarea poate sa implice: o +Configurare de componente si de sistem; o +Adaugare de noi componente la sistem; o +Selectare dintr-o biblioteca de componente existente; o +Modificare de componente pentru a indeplini cerinte noi. Specializarea liniilor de productie de software o Specializarea platformei-Sunt dezvoltate versiuni diferite ale aplicatiei pentru platforme diferite. o Specializarea contextului-Sunt create versiuni diferite ale aplicatiei pentru diferite contexte de operare (ex. tipuri diferite de echipamente de comunicare). o Specializare functionala-Sunt create versiuni diferite ale aplicatiei pentru clienti cu cerinte diferite. o Specializarea procesului-Sunt create versiuni diferite ale aplicatiei ca suport pentru diferite procese economice. Configurarea liniilor de productie de software o Configurarea la repartizare (deployment)-Este configurat un sistem generic prin inglobarea cunoasterii despre cerintele clientului si procesul economic. Software-ul propriu-zis nu este modificat. o Configurarea la proiectare-Un cod generic comun este adaptat si modificat conform cerintelor clientilor particulari. Sisteme ERP o Un sistem ERP (Enterprise Resource Planning) este un sistem generic care ofera suport pentru procese economice comune cum ar fi trimitere de ordine, facturare, manufacturare, etc. o Acestea sunt larg utilizate in firme mari – ele reprezinta probabil cea ma comuna forma de reutilizare de software. o Nucleul generic este adaptat prin includerea de module si prin incorporarea de cunostinte depre procesele si regulile economice. Configurarea la proiectare o Liniile de productie de software care sunt configurate in timpul proiectarii sunt instantieri de arhitecturi de aplicatii generice. o Produsele generice apar, de obicei, dupa mai multa experienta cu produse specifice. Arhitecturi pentru linii de productie o Arhitecturile trebuie structurate astfel incat sa separe subsisteme diferite si sa permita modificarea lor. o Arhitectura trebuie, de asemenea, sa separe entitatile de descrierile lor. Exemplu: Sistem pentru dispecerizare vehicule o Un sistem de management resurse specializat al carui scop este de a aloca resurse (vehicule) pentru a gestiona incidente. o Adaptatarea include: o +La nivelul UI, exista componente pentru necesitatile de afisare si de comunicare ale operatorului; o +La nivelul managementului operatiilor de I/E, exista componente care trateaza autentificarea, raportarea si planificarea rutelor; o +La nivelul managementului de resurse, exista componente pentru localizarea si dispecerizarea vehiculelor, gestionarea starilor vehiculelor si jurnalizarea (logging) incidentelor; o +Baza de date include baze de date pentru echipament, vehicule si harti. Dezvoltarea unei instante de produs o Extragerea cerintelor partilor interesate-Utilizarea ca prototip a unui membru existent al familiei. o Alegerea celui mai potrivit membru al familiei-Gasirea membrului familiei care indeplineste cel mai bine cerintele. o Re-negocierea cerintelor-Adaptarea cerintelor conform capabilitatior software-lui. o Adaptarea sistemului existent-Dezvoltarea de noi module si realizarea de schimbari la membrul familiei. o Livrarea unui nou membru al familiei-Documentarea caracteristicilor cheie, utile in dezvoltarea ulterioara de noi membri. Puncte cheie o Avantajele reutilizarii sunt date de costuri mai scazute, dezvoltare mai rapida de software si riscuri mai mici. o Sabloanele de programare (design patterns) sunt abstractizari de nivel inalt care documenteaza solutii de proiectare de succes. o Generatoarele de programe se ocupa, de asemenea, cu reutilizarea de software – conceptele reutilizate sunt inglobate in sistemul generator. o Framework-urile pentru aplicatii sunt colectii de obiecte concrete si abstracte care sunt proiectate pentru reutilizare prin specializare. o Reutilizarea produselor COTS se ocupa cu reutilizarea de sisteme mari, off-the-shelf. o Problemele reutilizarii de COTS includ lipsa de control asupra functionalitatii, performantei si evolutiei software-lui ca si probleme de interoperare. o Sistemele ERP sunt create prin configurarea unui sistem generic cu informatii despre procesul economic al beneficiarului. o Liniile de productie de software sunt aplicatii inrudite dezvoltate in jurul unui nucleu comun de functionalitate partajata. Dezvoltarea bazata pe componente o Ingineria software bazata pe componente (CBSE) este o abordare a dezvoltarii de software care se bazeaza pe reutilizarea de software. o Aceasta a aparut datorita faptului ca dezvoltarea orientata obiect a esuat in a suporta reutilizare eficienta. Clasele ce descriu obiecte singulare sunt prea detaliate si specifice. o Componentele sunt mai abstracte decat clasele de obiecte si pot fi considerate furnizori de servicii de sine statatori. Caracteristicile esentiale ale CBSE o Componente independente specificate prin interfetele lor. o Standarde de componente pentru a facilita integrarea componentelor. o Middleware care ofera suport pentru inter-operabilitatea componentelor. o Un proces de dezvoltare angrenat in reutilizare. CBSE si principiile de proiectare o In plus fata de beneficiile reutilizarii, CBSE este bazata pe principiile de proiectare solide ale ingineriei software: o +Componentele sunt independente si nu interfera intre ele; o +Implementarile componentelor sunt ascunse; o +Comunicarea se face prin interfete bine definite; o +Platformele pentru componente sunt partajate si reduc costurile de dezvoltare. Problemele CBSE o Componente o O componenta ofera un serviciu, indiferent de locul unde se executa aceasta sau de limbajul in care a fost programata o +O componenta este o entitate executabila independenta care poate fi compusa din unul sau mai multe obiecte executabile; o +Interfata componentei este publicata si toate interactiunile se executa prin intermediul acestei interfete publice; Definitii ale conceptului de componenta o Councill and Heinmann: -O componenta software este un element software care se conformeaza unui model de componente si care poate fi repartizata independent si compusa, fara a fi modificata, conform unui standard de compunere. o Szyperski: -O componenta software este o unitate de compunere cu interfete specificate prin contract si cu dependente explicite de context. O componenta software poate fi repartizata independent si este subiect pentru compunere de catre terte parti. Componenta ca furnizor de servicii o Componenta este o entitate executabila independenta. Nu trebuie compilata inainte de a fi utilizata cu alte componente. o Serviciile oferite de o componenta sunt facute disponibile printr-o interfata si toate interactiunile cu componenta au loc prin aceasta interfata. Interfetele unei componente o Interfata oferita -Defineste serviciile care sunt oferite de componenta altor componente. o Interfata solicitata -Defineste serviciile care trebuie sa fie disponibile in sistem astfel incat componenta sa se execute conform specificatiilor sale. Componente si obiecte o Componentele sunt entitati repartizabile. o Componentele nu definesc tipuri. o Implementarile componentelor sunt opace. o Componentele sunt independente de limbaj. o Componentele sunt standardizate. Modele de componente o Un model de componente este o definitie de standarde pentru implementarea, documentarea si repartizarea componentelor. o Exemple de modele de componente: modelul EJB (Enterprise Java Beans) & modelul COM+ (modelul .NET) && modelul de componente Corba (Corba Component Model) o Modelul de componente specifica modul in care trebuie definite interfetele si elementele ce trebuie incluse in definitia unei interfete. Suport middleware o Un model de componente constituie fundamentul pentru middleware care ofera suport pentru executarea componentelor. o Implementarile modelului de componente ofera: Servicii de platforma care permit componentelor scrise conform modelui sa comunice; & Servicii orizontale care sunt servicii independente de aplicatie utilizate de diferite componente. o Pentru a utiliza serviciile oferite de un model, componentele sunt repartizate intr-un container. Acesta este un set de interfete folosite pentru a accesa implementarile serviciilor. Dezvoltarea de componente reutilizabile o Pentru a fi facute reutilizabile, componentele dezvoltate pentru o aplicatie specifica trebuie, de obicei, generalizate. o Este mai probabil ca o componenta sa fie reutilizabila daca ea este asociata cu o abstractizare stabila a domeniului (business object). o De exemplu, abstractizarile stabile de domeniu intr-un spital sunt asociate cu scopul fundamental - medici, pacienti, tratamente, etc. Dezvoltarea de componente reutilizabile o Componentele destinate reutilizarii trebuie special construite prin generalizarea componentelor existente. o Reutilizabilitatea componentelor o +Trebuie sa reflecte abstractizarile stabile ale domeniului; o +Trebuie sa fie cat se poate de independente; o +Trebuie sa publice exceptii in interfata componentei. o Exista un targ intre reutilizabilitate si utilizabilitate-Cu cat interfata este mai generala cu atat este mai mare reutilizabilitatea, dar complexitatea este mai mare, ceea ce conduce la utilizabilitate mai scazuta. Modificari pentru reutilizabilitate o Eliminarea metodelor specifice aplicatiei. o Modificarea numelor pentru a le face mai generale. o Adaugarea de metode pentru a extinde acoperirea. o Tratarea exceptiilor trebuie sa devina consistenta. o Adaugarea unei intefete de configurare pentru adaptarea componentei. o Integrarea componentelor necesare pentru a reduce dependentele. Componente derivate din sisteme legacy o Sistemele legacy existente care indeplinesc functii economice utile pot fi reimpachetate sub forma de componente pentru a fi reutilizate. o Aceasta implica scrierea unei componente adaptor care implementeaza interfetele oferite si solicitate si apoi accesarea sistemului legacy. o Desi costisitoare, aceasta abordare poate fi mai ieftina decat rescrierea sistemului legacy. Componente reutilizabile o Costurile de dezvoltare ale componentelor reutilizabile pot fi mai mari decat costurile echivalentelor lor specifice. Aceasta majorare de costuri trebuie sa fie inclusa in costurile organizatiei si nu in cele ale proiectului. o Componentele generice pot fi mai putin eficiente din punct de vedere al spatiului si pot avea timpi de executie mai mari decat echivalentele lor specifice. Procesul CBSE o Cand se reutilizeaza componente, este esential sa se faca un compromis intre cerintele ideale si serviciile reale furnizate de componentele disponibile. o Aceasta implica: Dezvoltarea unei schite a cerintelor; & Cautarea componentelor si apoi modificarea cerintelor conform functionalitatilor disponibile. & Reluarea cautarii pentru a afla daca exista componente mai bune care satisfac cerintele revizuite. Problematica identificarii componentelor o Increderea. Furnizorul unei componente trebuie sa fie de incredere. Altfel, in cel mai bun caz o componenta ar putea sa nu functioneze asa cum este definita, iar in cel mai rau caz poate sa creeze probleme de securitate. o Cerintele. Grupuri diferite de componente vor satisface cerinte diferite. o Validarea. Specificatiile componentei ar putea sa nu fie suficient de detaliate pentru a permite dezvoltarea de teste cuprinzatoare. & Componentele ar putea sa aiba si functionalitate nedorita intr-o anumita aplicatie. Cum se poate testa faptul ca aceasta nu interfera cu aplicatia? Exemplu: Esuarea lansatorului Ariane 5 o In 1996, primul test de zbor al rachetei Ariane 5 s-a terminat cu un dezastru atunci cand lansatorul a scapat de sub control la 37 de secunde dupa decolare. o Problema s-a datorat unei componente (sistemul inertial de navigare) reutilizata dintr-o versiune anterioara a lansatorului, care a esuat deoarece presupunerile facute atunci cand a fost dezvoltata componenta nu au fost valabile si pentru Ariane 5. o Functionalitatea care a esuat din aceasta componenta nu era necesara in Ariane 5. Compunerea componentelor o Procesul de asamblare a componentelor pentru a crea un sistem. o Compunerea implica integrarea componentelor intre ele si cu infrastructura. o Va trebui scris si cod de legatura (‘glue code’) pentru a integra componentele. Tipuri de compunere o Compunere secventiala componentele sunt executate in secventa. Aceasta implica compunerea interfetelor oferite de fiecare componenta. o Compunere ierarhica in care una dintre componente apeleaza serviciile alteia. Interfata oferita de o componenta este compusa cu interfata solicitata de o alta. o Compunere aditiva in care interfetele a doua componente sunt puse impreuna pentru a crea o noua componenta. Incompatibilitate de interfata o Incompatibilitate de parametri in care operatiile au acelasi nume dar sunt de tipuri diferite. o Incompatibilitate de operatie unde numele operatiilor din interfetele care se compun sunt diferite. o Incompletitudine operatii unde interfata oferita de o componenta este un subset al interfetei solicitata de o alta componenta. Componente adaptor o Adreseaza problema incompatibilitatii componentelor prin reconcilierea interfetelor componentelor care trebuie compuse. o Sunt necesare tipuri diferite de adaptoare functie de tipul de compunere. o O componenta addressFinder si o componenta mapper pot fi compuse prin intermediul unui adaptor care extrage codul postal dintr-o adresa si il transfera componentei mapper. Compunerea prin adaptor o Componenta postCodeStripper este adaptorul care faciliteaza compunerea secventiala a componentelor addressFinder si mapper. Semantica interfetei o Pentru a decide daca interfetele compatibile sintactic sunt compatibile in realitate trebuie sa recurgem la documentatiile lor. o Fie o interfata pentru o componenta PhotoLibrary : OCL (Object Constraint Language) o OCL (Object Constraint Language) a fost proiectat pentru a defini constangeri asociate cu modelele UML. o Este fundamentat in jurul notiunii de specificare a pre si post conditiilor - similar cu abordarea utilizata in limbajul Z. Exemplu: Conditiile componentei PhotoLibrary o Descrierea OCL asociata cu componenta PhotoLibrary spune ca: o In biblioteca nu trebuie sa existe o fotografie cu acelasi identificator cu cea care se adauga; o Biblioteca trebuie sa existe – se presupune ca la crearea unei biblioteci i de adauga un singur item; o Fiecare intrare noua mareste dimensiunea bibliotecii cu 1; o La extragerea utilizand acelasi identificator se obtine fotografia adaugata; o La cautarea in catalog folosind acelasi identificator se obtine intrarea in catalog realizata pe baza lui. Compromisurile compunerii o La compunerea de componente pot sa apara conflicte intre cerintele functionale si cele non-functionale si conflicte intre nevoia de a furniza rapid sistemul si evolutia acestuia. o Trebuie luate decizii cum ar fi: o +Care compunere de componente este eficienta pentru furnizarea cerintelor functionale? o +Ce compunere de componente permite modificari ulterioare? o +Care vor fi proprietatile emergente ale sistemului compus? Puncte cheie o CBSE este o abordare bazata pe reutilizare pentru definirea si implementarea de componente slab cuplate in sisteme. o O componenta este o unitate software ale carei functionalitati si dependente sunt definite complet in interfetele sale. o Un model de componente defineste un set de standarde pe care furnizarii si utilizatorii de componente trebuie sa le respecte. o In timpul procesului CBSE, procesele de inginerie a cerintelor si de proiectare a sistemului sunt intretesute. o Compunerea componentelor este procesul de legare a acestora pentru a crea un sistem. o La compunerea de componente reutilizabile trebuie scrise adaptoare care sa reconcilieze interfetele componentelor. o La alegerea componentelor trebuie considerate functionalitatile necesare, cerintele non-functionale si evolutia sistemului.