Appunti Ingegneria del software - Home Page
Transcript
Appunti Ingegneria del software - Home Page
Ingegneria del software versione 1.0.5 Appunti ::::::::::: 19 luglio 2006 Indice 1 Ciclo di vita del software 1.1 Processo di sviluppo del software . . . . . . . . . . . . . . 1.2 Modelli . . . . . . . . . . . . 1.3 Agile . . . . . . . . . . . . . . 1.3.1 Dierenze con altri modelli . . . . . . . . 1.3.2 Quando usarlo . . . . 1.4 Iterativo - Incrementale . . . 1.5 RAD . . . . . . . . . . . . . . 1.5.1 Vantaggi Svantaggi . . 1.6 Extreme Programming . . . . 1.6.1 Planning Game . . . . 1.6.2 Small Relesases . . . . 1.6.3 Customers on-Site . . 1.6.4 Test First . . . . . . . 1.6.5 Refactoring . . . . . . 1.6.6 Simplicity . . . . . . . 1.6.7 System Metaphor . . . 1.6.8 Pair Programming . . 1.6.9 Collective Code Ownership . . . . . . . . 1.6.10 Continous Integration 1.6.11 Standards . . . . . . . 1.6.12 Overtime: 40 hour week 1.6.13 JUnit . . . . . . . . . 1.7 RUP . . . . . . . . . . . . . . 1.7.1 RUP best practices . . 1.7.2 Ciclo di vita del Progetto . . . . . . . . . . 1.7.3 Il modello a Cascata WaterFall . . . . . . . 1.7.4 Il modello a Spirale . 1.7.5 Il modello a Release . 13 3 2 UXF 4 3 Metriche codice sorgente 3.1 LOC . . . . . . . . . . . 4 3.2 eLOC . . . . . . . . . . 5 3.3 lLOC . . . . . . . . . . . 5 3.4 DLOC . . . . . . . . . . 5 3.5 SLOC . . . . . . . . . . 5 3.5.1 Vantaggi . . . . . 6 3.5.2 Svantaggi . . . . 6 6 4 UMM 7 7 5 XMI 7 7 6 COTS 8 8 7 SCM 7.1 Goal . . . . . . . . . . . 8 8 8 FPA 13 . . . . . . . . . . . . . . . . . . . . . 14 14 14 14 14 14 15 15 15 15 16 16 . . . 16 17 8 9 COCOMO 18 9 9.1 Basic COCOMO . . . . . . . 18 9 9 10 COCOMO II 19 9 11 11 CORBA 20 11 11 12 12 12 DFD 20 13 Linguaggio Z 20 13.1 Esempio - Denizione sistema 21 13.2 Esempio - Add . . . . . . . . 21 2 Indice 14 Diagrammi UML 14.1 14.2 14.3 14.4 Diagramma casi d'uso . . . . Diagramma delle classi . . . . Diagramma delle sequenze . . Diagramma delle collaborazioni . . . . . . . . . . . . . . 22 22 22 23 14.5 14.6 14.7 14.8 Diagramma di stato . . . . . Diagramma delle attività . . Diagramma dei componenti . Diagramma di distribuzione dei componenti (deployment) 23 Bibliograa 23 23 23 24 25 1 3 Ciclo di vita del software 1 Ciclo di vita del software L'espressione ciclo di vita del software si riferisce al modo in cui una metodologia di sviluppo o un modello di processo scompongono l'attività di realizzazione di prodotti software in sottoattività fra loro coordinate, il cui risultato nale è il prodotto stesso e tutta la documentazione a esso associato[1]. Esistono varie fasi: 1. Analisi: ovvero l'indagine preliminare sul contesto in cui il prodotto software deve inserirsi, sulle caratteristiche che deve esibire, ed eventualmente su costi e aspetti logistici della sua realizzazione; questa fase può essere scomposta in sottoattività quali: (a) analisi di fattibilità, (b) analisi e modellazione del dominio applicativo, (c) analisi dei requisiti. 2. Progetto: in cui si deniscono le linee essenziali della struttura del sistema da realizzare, in funzione dei requisiti evidenziati dall'analisi e dal documento nale da essa creato. Anche questa fase può essere scomposta in sottoattività: (a) progetto architetturale, (b) al progetto dettagliato. In questa fase verrà sviluppando un documento che permetterà di avere una denizione della struttura di massima (architettura di alto livello) e una denizione delle caratteristiche dei singoli componenti (moduli) 3. Implementazione 4. Testing (a) testing dei singoli moduli, (b) testing del sistema integrato, (c) test funzionali, (d) test di performance, (e) test di accettazione, (f ) test d'installazione. 5. Manutenzione 4 1 Ciclo di vita del software 1.1 Processo di sviluppo del software L'UML (Unied Modelling Language), ad esempio, è un linguaggio di modellazione, utilizzato dai processi per realizzare, organizzare, documentare i prodotti realizzati dalle fasi di cui il processo si compone. Coloro che, individualmente o in gruppo, lavorano allo sviluppo o alla modica di un software, adottano necessariamente un certo approccio nel modo di relazionarsi con i propri clienti/utenti, nell'organizzare il proprio lavoro, nella scelta delle tecniche da utilizzare. Adottano un processo [1]. Il ciclo di sviluppo del software, nella maggior parte dei casi, è e ogni iterazione produce una sua release. iterativo, Elenchiamo di seguito le fasi principali che possono far parte di ogni singola iterazione: 1. Specica dei requisiti: ciò che viene richiesto dal committente 2. Analisi e Design dove per analisi si intende lo studio di cosa deve fare il sistema (punto di vista logico) e per design lo studio di come il sistema deve venire implementato (punto di vista tecnico). Negli ultimi anni, la distinzione tradizionale tra analisi e design è entrata in crisi. 3. Implementazione 4. Integrazione e test 1.2 Modelli Esistono molti modelli per lo sviluppo del software: • iterativo (1970 - 1992), • Waterfall (a cascata) (1970), • RAD (1980 - 1991), • spirale (1985), • RUP (1998), • Extreme Programming (XP) (1999). • Agile (2001), 1 5 Ciclo di vita del software 1.3 Agile Agile è una metodologia di sviluppo del software, un framework. Ci sono più tipi di agile software per sviluppare questo metodo, questi possono essere trovati nell'organizzazione no-prot The Agile Alliance. Questo metodo tenta di minimizzare i rischi dello sviluppo con piccole timeboxes, chiamate iterazioni, da una a quattro settimane. Ogni iterazione include delle fasi: planning, requirements analysis, design, coding, testing e documentation. Mentre una iterazione non garantisce il rilascio di un prodotto, l'agile software project, si propone di riuscire a rilasciare un nuovo software ad ogni iterazione. Alla ne di ogni iterazione, il tema ssa le priorità del progetto. 1.3.1 Dierenze con altri modelli <Agile> <Iterative> <Waterfall> <-*-**> Adaptive....................................Predictive • Adaptive methods: si concentra sull'adattarsi velocemente ai cam- biamenti. • Predictive methods: si concentra sulla pianicazione dettagliata e futura del progetto 1.3.2 Quando usarlo • Più di 20 sviluppatori, • distanza tra glil sviluppatori, • mission- and life-critical eorts, • command-and-control company cultures. 1.4 Iterativo - Incrementale Il modello iterativo, e incrementale, risponde alle debolezze dei modelli watefall. I due modelli di sviluppo iterativo più conosciuti sono RUP (Rational Unied Process), e DSDM (Dynamic Systems Development Method). Questo modello è una parte essenziale dell'XP (Extreme Programming) e tutti gli altri agile software frameworks. 6 1 Ciclo di vita del software 1.5 RAD (Rapid Application Development) RAD nato come risposta al metodologia non-agile, come il modello waterfall. Il problema con i precedenti modelli era quello che i requisiti cambiassero prima della conclusione del progetto, con il risultato di creare sistemi non utilizzabili. 1.5.1 • Vantaggi Svantaggi accresce la velocità e qualità di sviluppo 1 Questa velocità è dovuta all'uso di tool quali CASE Per qualità nel modello RAD si intende il grado con il quale l'applicazione nita si riscontra con le aspettative del cliente, ed i costi di manutenzione bassi. • Come svantaggi, riduce la scalabilità e le features. La scalabilità è ridotta perché questo modello parte da un prototipo e si evolve no alla applicazione nita; mentre riduce le features questo è dovuto al time boxing, le features vengono inserite tardi nelle versioni nali della release. 1.6 Extreme Programming L'extreme programming XP, è un modo di programmare che segue determinate regole, per cercare di ottimizzare il più possibile lavoro fatto dai programmatori [2]. Alcune di queste regole sono di seguito riportate: 1. Planning Game 7. System Metaphor 2. Small Releases (Piccole release) 8. Pair Programming 3. Customers on-Site (Cliente sul posto) 4. Test First 9. Collective Code Ownership 10. Continous Integration 11. Code Standards 5. Refactorig 12. Overtime: 40 hour week 6. Simplicity 13. ... 1 L'obiettivo di questo tool è quello di catturare i requisiti e descriverli come codice nel modo più veloce possibile. 1 Ciclo di vita del software 1.6.1 7 Planning Game Come Pianicare: • Creare delle priorità (con il cliente) • Stimare la dicoltà dei lavori (Lo sviluppatore) • Lavorare in task paralleli, si è più veloci (Lo sviluppatore) • Pianicare insieme i lavori ed i vari task all'inizio (Sviluppatore-Cliente) 1.6.2 Small Relesases Signica piccole release frequenti, in genere prima dell'XP, si faceva il software per intero e poi si dava al committente validato; mentre ora si cerca di dare subito qualcosa al cliente, in modo che capisca subito se il software è corretto secondo le sue speciche; questo evita di fare lavoro inutile. In genere per il cliente viene sviluppato subito il 10% del programma in modo tale che sia veloce il riscontro in caso di problemi. Questa tecnica, evita la nascita e la morte poi di determinati software, con la perdita quindi di tempo e denaro, inoltre fa subito vedere se ci sono errori o difetti 1.6.3 3 2 nei software prodotti. Customers on-Site Il committente deve essere tenuto sempre in stretto contatto con gli sviluppatori. In genere succede che dopo aver ottenuto l'ordine di progettare un software, il programmatore ed il cliente non si sentono quasi più no a software terminato: questo non deve succedere. Con l'XP, lo sviluppatore chiede subito al committente cosa sono le sue priorità, i moduli che devono essere sviluppati prima, e come devono essere sviluppati. Coinvolgere il cliente nei test per sapere se il software per lui è corretto, mostrare se il programma per lui è user-friendly. 1.6.4 Test First In genere i test vengono eseguiti dopo lo sviluppo della applicazione. Mentre in XP, il development è guidato dai test, questa può sembrare una perdita di 2 Per errore si intende una dimenticanza del programmatore Es.: un errore di battitura. . . 3 Per difetto si intende un problema nei risultati ottenuti dal software, risultati inattesi. (Altrimenti detto bug, Fault.) 8 1 Ciclo di vita del software tempo ma poi alla ne: si ha si, una perdita di tempo iniziale, ma si recupera sulla ne del progetto; mentre con l'approccio tradizionale si ha una velocità maggiore all'inizio per poi decelerare alla ne nella fase di Testing. 1.6.5 Refactoring Con questo termine, si intende modicare il codice, modicarne la struttura, il usso di controllo ma non il risultato. Ad esempio rinominare un metodo, aggiungere metodi a delle classi(ma senza cambiare il risultato del modulo). Il refactoring serve in generale per migliorare la qualità del codice. Divisione di un grande metodo in più parti. . . 1.6.6 Simplicity Cercare di tenere il progetto più semplice possibile. 1.6.7 System Metaphor Usare metafore vicine al dominio del committente. Se il cliente è un produttore di automobili, cercare di parlare dello sviluppo del software in termini di produzione di automobili, questo è una forma per cercare di capire nel miglior cosa deve fare il software prodotto. 1.6.8 Pair Programming Con il termine pair programming si intende, la programmazione in gruppo, per esempio in due, questa viene richiesta quando il compito è particolarmente dicile; su lavori critici si lavora insieme. 1.6.9 Collective Code Ownership Il codice scritto è di tutti gli sviluppatori; se si trova un errore nel programma la colpa è dell'intero team. Bisogna dire che essendo il codice di tutti, chi vuole può fare tutte le modiche, se secondo lui un modulo non è corretto lo può modicare, a patto che usi i CVS (Concurrent Version System,controllo di versione); inoltre al termine della modica il modulo modicato devo dare lo stesso risultato nei test del modulo vecchio; in altre parole non devo alterare i risultati che il modulo vecchio dava. Se non è così, allora in quel caso, la colpa è del programmatore che ha svolto la modica, il quale non si è preoccupato di vedere se i test erano ancora corretti; in conclusione, più libertà ma anche più responsabilità. 1 9 Ciclo di vita del software 1.6.10 Continous Integration In genere il test di integrità viene fatto alla ne dello sviluppo dei singoli moduli con una frequenza molto alta di errori. L'XP dice che questo test deve essere fatto in modo più frequente proprio per evitare problemi di integrazione alla ne del progetto, molto più dicili da trovare e sistemare. 1.6.11 Standards Cercare di scrivere codice il più possibile in modo standard: es in java, i nomi delle classi iniziano con la lettera maiuscola, mentre per i nomi dei metodi si usano dei verbi. 1.6.12 Overtime: 40 hour week Per uno sviluppatore, le ore di straordinario, (overtime), sono permesse solo per una settimana, altrimenti c'è il rischio di commettere errori, mentre l'orario lavorativo normale non deve superare le 40 ore settimanali. 1.6.13 JUnit E' uno strumento che serve per eseguire Test di unità in Java. Utilizza la libreria Java riessione (per gestire le classi). Terminologia: • Unit Test: una classe che testa un'altra classe • Caso di Test: chiama un metodo con un input particolare e si osserva se il risultato è corretto • Test Suite: una serie di casi di test • Test Runner: serve per far partire i test Junit, introduce una nuova classe: nomeclasse Test. Inoltre introduce due classi con nomi ssi: • setUp: inizializza la classe per eseguire i test • tearDown: libera la classe Junit utilizza le asserzioni per produrre il risultato dei test e vedere se sono corretti. Esempio in Java1: 10 1 7 public class ES { int mcd ( int x , int y) { ... } } 9 /* C r e o un ' a l t r a c l a s s e */ 1 3 5 Ciclo di vita del software 19 public class ES TEST { void testmcd () { mcd (10 ,2) ; // Mi a s p e t t o c h e r e s t i t u i s c a 2 } assertTrue ( mcd (10 ,2) ==2) ; assertTrue ( mcd (6 ,12) ==6) ; } 21 /* * * * T i p i di A s s e r z i o n i * * * */ 11 13 15 17 23 static void assertTrue ( boolean test ) static void assertTrue ( String message , boolean test ) 25 27 29 static void assertFalse ( boolean test ) static void assertFalse ( String message , boolean test ) static void assertEquals ( expected , actual ) static void assertEquals ( String message , expected , actual ) Codice 1: Esempio in pseudolinguaggio Java Limiti e problemi del Testing con JUnit • È una buona idea scrivere metodi che controllano lo stato di un oggetto • Non è facile testare il codice delle GUI • Con questo metodo si controlla l'output ma ha volte non è facile scrivere codice per questo controllo • Non è facile testare svariati metodi che lavorano in parallelo per dare un risultato 1 Ciclo di vita del software • 11 Sono comunque state proposte possibili soluzioni 1.7 RUP RUP (Rational Unied Process) è un software molto noto di sviluppo iterativo. RUP deve essere visto non come attraverso una singola prospettiva di lavoro, ma piuttosto un framework operativo adattabile alle esigenze 1.7.1 RUP best practices 1. Sviluppo del software in modo iterativo, 2. gestione dei requisiti, 3. verica della qualità del codice, 4. CVS controllo dei cambiamenti apportati al software. RUP usa il modello iterativo per le seguenti ragioni: • Il processo di integrazione viene fatto passo dopo passo durante lo sviluppo del software, limitandosi a farlo per pochi elementi alla volta, • l'implementazione viene fatta per moduli, facilitando il riuso del software, • se i requisiti cambiano è possibile adattarsi, • l'architettura del software viene migliorata ad ogni release 1.7.2 Ciclo di vita del Progetto È formato da quattro fasi vedi Figura 1 a Pagina 12: 1. Inception Phase (a) Stakeholder denizione, stima dei costi, tempi, (b) comprensione dei requisiti, (c) priorità costi/tempi, rischio, sviluppo del processo, (d) studio del prototipo architetturale che si è studiato, (e) spese attuali vs spese pianicate. 2. Elaboration Phase 12 1 Ciclo di vita del software (a) Generazione casi d'uso i casi d'uso completati all'80% (b) descrizione dell'architettura software, (c) piano di sviluppo per coprire tutto il progetto. 3. 4. Construction Phase, Transition Phase. Figura 1: Ciclo di vita del progetto 1.7.3 Il modello a Cascata - WaterFall Figura 2: Modello WaterFall L'output di ogni fase è l'input della successiva; il principale limite di questo modello, è il fatto di non poter tornare indietro; se c'è un problema nel software che viene scoperto tardi bisogna ricominciare. 1.7.4 Il modello a Spirale In questo modello vedi Figura 3 a pagina 13, si crea un prototipo, attraverso le varie fasi: analisi dei requisiti, specica. . . e poi si fa l'analisi dei rischi 2 13 UXF Figura 3: Modello a Spirale anche con il cliente per vedere se si può proseguire. Il principale vantaggio dei modelli a spirale e Release e che il software è in continua evoluzione [3]. 1.7.5 Il modello a Release In questo modello, si crea una prima release da sottoporre al cliente per ottenere un primo feedback; per poi correggerla o svilupparla ancora. Alla ne di tutte le release si ottiene il prodotto nale. 2 UXF UXF (UML eXchange Format) è un modello di interscambio di formati per UML(Unied Modeling Language) basato su XML. Permette una alta inter operabilità; il team che sviluppa codice tramite questo modello, può riutilizzare e scambiare le informazioni tramite lo standard XML. XML è un sosticato sottoinsieme dell'SGML (Standard Generalized Markup Language: ISO 8879) i principali vantaggi sono: • Indipendenza dal vendor (vender independence), • Estensibilità, • Possibilità di rappresentare delle informazioni complesse, 14 3 • Leggibilità umana (Human readability), • Interoperabilità tra i tools di sviluppo. Metriche codice sorgente 3 Metriche codice sorgente 3.1 LOC Line of code (LOC). LOC sono usate per stimare i tempi ed i costi. 3.2 eLOC Eective line of code (ELOC), è la misura di tutte le line di codice che non sono commenti, spazi bianchi, e parentesi. Questa metrica rappresenta la quantità del lavoro. 3.3 lLOC Logical lines of code (ILOC) rappresenta una metrica per gli statements; es.: for. Esempio: Source code line LOC eLOC lLOC Comment Blank -------------------------------------------------------------if (x<10) // test range x x x { x // update y coordinate x x y = x + 1; x x x } x -------------------------------------------------------------- 3.4 DLOC Developed line of code (DLOC). Include tutto il programma ed gli statement. Esiste anche il Kilo line of code (KLOC). 3.5 SLOC SLOC (Source lines of code) è una metrica usata per misurare il codice di un certo programma. SLOC viene usato per stimare lo sforzo richiesto per sviluppare un certo software. 5 15 XMI 3.5.1 Vantaggi • Automatizzare il conteggi delle linee di codice tramite tools • Una metrica intuitiva: le righe di un software possono essere visionate. 3.5.2 Svantaggi 1. Non si può quanticare il costo, di un software contando le linee di codice, in altre parole contando solo la fase di codica la quale occupa solo il 33% - 35% di tutti il processo, 2. non ci permette di catturare questa diversità: un programmatore può scrivere poche righe di codice ma molto signicative, mentre un secondo programmatore ne scrive molte ma meno signicative e con più errori, 3. linguaggi dierenti, 4. GUI, tramite queste interfacce, il programmatore può fare copia ed incolla del codice già scritto in precedenza. 4 UMM UMM (UN/CEFACT's 4 Modeling Methodology), è una metodologia di mo- dellazione la quale si sviluppa tramite UN/CEFACT. 5 XMI XMI (XML Metadata Interchange) è uno standard OMG per lo scambio di metadati tramite il linguaggio XML. Può essere usato per qualsiasi metadato purché questo possa essere espresso tramite MOF (Meta-Object Facility). L'uso più comune di XMI è per l'interscambio di modelli UML, i quali possono essere usati anche per altri linguaggi. • XML - eXtensible Markup Language, W3C standard. • UML - Unied Modeling Language, OMG modeling standard. United Nations Centre for Trade facilitation and Electronic Business) UN/CEFACT ha come scopo migliorare il business, e l'organizzazione amministrativa, sviluppo 4 (The e transazioni economiche, scambio di prodotti e servizi; contribuisce allo sviluppo del commercio globale. 16 7 SCM • MOF - Meta Object Facility, OMG DSL per la specica di metamodelli. • MOF Mapping a XMI 6 COTS (Commercial o-the-shelf ); COTS è un termine applicato nell'ambito sia dei prodotti software che hardware, il quale dice quando questo prodotto è pronto e disponibile alla vendita al pubblico. • GOTS : government o-the-shelf, • MOTS : modiable o-the-shelf, oppure military o-the-shelf. La motivazione che spinge ad utilizzare dei componenti COTS, è che riduce il tempo ed i costi di sviluppo del software; perché i componenti possono comprati e non progettati da zero. A volte tuttavia i costi di integrazione e la dipendenza da terze parti possono accrescere i costi. 7 SCM SCM (Software Conguration Management) è una parte del CM (Conguration Management). Risponde a queste domande: 1. Qualcuno fa qualcosa, come possiamo riprodurla? Spesso il problema si evolve e non è possibile riprodurlo in modo identico, ma servono dei cambiamenti incrementali. Tradizionalmente CM si è concentrato sul controllo e la creazione di prodotti semplici. Ai nostri giorni, la sda è quella fare il minor numero di incrementi; valutando la complessità del sistema che si sta sviluppando. 7.1 Goal • Conguration Identication- Con quale codice noi lavoriamo? • Conguration Control- Controllo delle release e eventuali cambiamenti. • Status Accounting- Registrazione e report dei componenti. 8 17 FPA • Review- Assicurarsi della completezza dei vari componenti. • Build Management- Gestione dei processi e dei tool utilizzati nel progetto. • ... 8 FPA FPA (Function Point Analysis) è un metodo che misura la dimensione funzionale di un sistema informativo. Questo viene fatto osservando le transazioni funzionali e logiche del les rilevanti per gli utenti nel loro business [5]. Necessità di alcuni passi: 1. Identicare le funzioni del sistema che sono rilevanti per gli utenti 2. Determinare la complessità di ogni funzione 3. Contare le funzioni di tipo di dati per determinare il loro contributi al numero dei function point non pesati 4. Contare le funzioni di tipo transazionale per determinare il loro contributi al numero dei function point non pesati 5. Determinare il fattore di aggiustamento del valore 6. Calcolare il numero di function point pesati. Step 1 - FPA distingue tra cinque tipi di funzioni utente: 1. Internal Logical File (ILF) 2. External Interface File (EIF) 3. External Input (EI) 4. External Output (EO) 5. External Inquiry (EQ) Step 2 - FPA distingue tra tre tipi di complessità: 1. Low 2. Average 3. High 18 9 COCOMO 9 COCOMO COCOMO (COnstructive COst MOdel) è un modello progettato da Barry Boehm, per dare una stima del numero di uomini-mese che prenderanno parte allo sviluppo di un software. COCOMO consiste in una gerarchia di tre crescenti livelli di dettaglio: 1. Basic COCOMO : è statico, sforzo e costo dello sviluppo di un software come funzione della dimensione di un programma espressa nella sua stima delle linee di codice. 2. Intermediate COCOMO : sforzo come funzione della dimensione del programma e i cost drivers che includono subjective assessment of product, hardware, personale e project attributes. 3. Detailed COCOMO : incorpora tutte le caratteristiche della versione intermedia con un impatto dei cost driver ad ogni passo (analisi, progetto, codica. . . ), del processo di produzione del software. 9.1 Basic COCOMO Può essere applicato a tre tipologie di progetto: 1. Organic projects : sono relativamente piccoli, semplici progetti, 2. Semi-detached projects : sono una via di mezzo in termini di dimensione e complessità, 3. Embedded projects : sono progetti che devono essere sviluppati con hardware, software. L'equazione del basic COCOMO: E = ab (KLOC)bb D = cb (E)db P = E/D dove E è lo sforzo (persone-mese), D è il tempo di sviluppo in un mese, KLOC è la stima del numero di line di codice per i progetto (espresse in migliaia), P I coecienti è il numero di persone richieste. ab , bb , cb , db sono dati Tabella 1 a Pagina 19. 10 19 COCOMO II Software Project ab bb cb db Organic 2.4 1.05 2.5 0.38 Semi-detached 3.0 1.12 2.5 0.35 Embedded 3.6 1.20 2.5 0.32 Tabella 1: Coecienti Basic COCOMO 10 COCOMO II Nel COCOMO II vengono apportate modiche al COCOMO I. Vengono deniti tre livelli di COCOMO, che corrispondono a tre classi di applicazioni e utilizzano informazioni reperibili in tre diversi momenti del ciclo di vita: 1. Application Composition: è il settore di chi utilizza primitive di alto livello per programmare (ad esempio GUI, spreadsheet) o si riferisce alla fase in cui viene generalmente eettuata una prototipazione per risolvere problemi ad alto rischio (interfacce utente, interazione software/sistema, prestazioni, maturità della tecnologia); vengono utilizzati gli Object Points, in quanto si ritiene che siano disponibili in maniera adabile in questa fase 2. Early Design: si passa alla fase di progetto, con l'esplorazione di alternative per le architetture; vengono usati i Function Points, il linguaggio e alcuni driver di costo in numero limitato, poiché in questa fase non è ancora noto molto a riguardo del progetto 3. Post-Architecture: si giunge alla fase di sviluppo tradizionale; si ot- tiene la stessa precisione di COCOMO 1; vengono usati LOC, Function Points e linguaggio con 17 cost drivers e 5 fattori di scala, che sostituiscono i fattori del modello precedente e i modelli Organic, Semidetachede Embedded Inoltre, il modello COCOMO II • utilizza modelli non lineari per riuso e reingegnerizzazione • permette il trattamento delle economie di scala • apporta modiche ai moltiplicatori originari • si avvale di un modello Bayesiano per i parametri del modello valutati da esperti 20 13 Linguaggio Z 11 CORBA L'OMG (Object Management Group), decise di promuovere il CORBA (Common Object Request Broker Architecture) una architettura distribuita orientata algi oggetti. Usando CORBA, un client può in modo trasparente (es.: senza conoscere l'implementazione del server in dettaglio) invocare un metodo su un server in due modi: in modo statico oppure tramite una invocazione dinamica. 12 DFD Un DFD (data ow diagram) è una rappresentazione graca di un usso di dati attraverso un sistema. Un diagramma di usso può essere utilizzato per visualizzare il data processing. 13 Linguaggio Z È un linguaggio per la specica formale, il quale usa la notazione matematica per descrivere in un modo preciso le proprietà e le informazioni che un sistema deve avere, senza conoscere in che modo queste proprietà vengono archiviate [7]; descrive che cosa il sistema deve fare senza sapere come [4]. Una importante caratteristica del linguaggio Z è quella di decomporre la specica in piccole parti chiamati schemas. Gli schema sono usati per descrivere aspetti statici e dinamici. Gli aspetti statici includono: • lo stato che può essere occupato, • le relazioni tra invarianti che sono mantenute quando un sistema si muove da uno stato all'altro. Gli aspetti dinamici includono: • le operazioni possibili, • le relazioni tra i loro input e output, • i cambiamenti di stato. 13 21 Linguaggio Z 13.1 Esempio - Denizione sistema Denire formalmente tramite il linguaggio Z un software che gestisce il nome e la data di compleanno di un database di persone. BirthdayBook NAME NAME 9 DATE : dom Birthday known : P birthday : known • known è il set dei record nomi con il compleanno • birthday è la funzione la quale applicata ad un nome restituisce il compleanno L'ultima riga, è l'invariante in quanto è una relazione vera in ogni stato del sistema. Un possibile stato del sistema è dato da: known = { Primo, Michele, Claudia } birthday = { Primo 7→ 25Mar, Michele 7→ 20Dec, Claudia 7→ 20Dec }. L'invariate è rispettato in quanto il dominio dei birthday record è esattamente uguale a quello di known cioè 3. 13.2 Esempio - Add Aggiungiamo al sistema la possibilità di inserire nuovi dati. Lo schema è AddBirthday. AddBirthday ∆BirthdayBook NAME : DATE name? : date? name? ∈ / known Birthday' =Birthday ∪ {name? 7→ date? } • known è il set dei record nomi con il compleanno • birthday è la funzione la quale applicata ad un nome restituisce il compleanno 22 14 Diagrammi UML 14 Diagrammi UML UML è un linguaggio di progettazione; UML è una evoluzione di modelli già esistenti, forti anità con ER (Entity - Relationship), FC (Flow Chart), modelli object oriented. Diagrammi UML: • Livello logico: diagramma dei casi d'uso (use case) diagramma delle classi (class) diagramma di sequenza (sequence) diagramma di collaborazione (collaboration) diagramma di transizione di stato (state) diagramma delle attività (activity) • Livello sico: diagramma dei componenti (component) diagramma di distribuzione dei componenti (deployment) 14.1 Diagramma casi d'uso Questi descrivono l'interazione tra attori e sistema, non la logica interna della funzione; sono infatti espressi in forma testuale, comprensibile anche per i non addetti ai lavori e possono essere deniti a livelli diversi (sistema o parti del sistema). Ragionare sui casi d'uso aiuta a scoprire i requisiti funzionali. 14.2 Diagramma delle classi Il diagramma delle classi, rappresenta le classi e gli oggetti che compongono il sistema, ed i relativi attributi ed operazioni [6, 1]. Specica, mediante le associazioni, i vincoli che legano tra loro le classi; può essere denito in fasi diverse (analisi, disegno di dettaglio) ed inoltre può rappresentare diverse tipologie di oggetti (oggetti business, oggetti di interfaccia,. . . ). 14 Diagrammi UML 23 14.3 Diagramma delle sequenze Il diagramma delle sequenze, serve ad evidenziare il modo in cui uno scenario (uno specico percorso in un caso d'uso) viene risolto dalla collaborazione tra un insieme di oggetti; specica la sequenza dei messaggi che gli oggetti si scambiano inoltre può specicare nodi decisionali e iterazioni. Diagrammi di sequenza e diagrammi di collaborazione esprimono informazioni simili, ma le evidenziano in modo diverso. 14.4 Diagramma delle collaborazioni Il diagramma delle collaborazioni, specica gli oggetti che collaborano tra loro in un dato scenario, ed i messaggi che si indirizzano. La sequenza dei messaggi è meno evidente che nel diagramma di sequenza, mentre sono più evidenti i legami tra gli oggetti; può essere utilizzato in fasi diverse (analisi, disegno di dettaglio), e rappresentare diverse tipologie di oggetti. 14.5 Diagramma di stato Specica il ciclo di vita degli oggetti di una classe, denendo le regole che lo governano; quando un oggetto si trova in un certo stato può essere interessato da determinati eventi (e non da altri). Come risultato di un evento l'oggetto può passare ad un nuovo stato (transizione). 14.6 Diagramma delle attività Serve a rappresentare sistemi di workow, oppure la logica interna di un processo (di qualunque livello, dai business process ai processi di dettaglio). Permette di rappresentare processi paralleli e la loro sincronizzazione; è un caso particolare di diagrammi di stato, in cui ogni stato è uno stato di attività. 14.7 Diagramma dei componenti Evidenzia l'organizzazione e le dipendenze esistenti tra componenti; i componenti sono moduli software eseguibili, dotati di identità e con un'interfaccia ben specicata, inoltre i componenti (come a livello logico le classi) possono essere raggruppati in package. 24 14 Diagrammi UML 14.8 Diagramma di distribuzione dei componenti (deployment) Evidenzia la congurazione dei nodi elaborativi in ambiente di esecuzione (run-time), e dei componenti, processi ed oggetti ubicati in questi nodi; permette di rappresentare, a diversi livelli di dettaglio, l'architettura sica del sistema. 25 Riferimenti bibliograci Riferimenti bibliograci [1] http://en.wikipedia.org [2] http://www.extremeprogramming.org/rules.html Data accesso 30.06.2006 Data accesso 15.06.2006 [3] http://xoomer.virgilio.it/mmanara/ling_sicurr/dom_l.rar Data accesso 01.07.2006 [4] http://spivey.oriel.ox.ac.uk/mike/zrm/index.html Data accesso 15.07.2006 [5] Data processing Organization IFPUG Function point 4.2 Guida rapida (2005.02.21) www.dpo.it [6] Adriano Comai (1998) Introduzione a UML [7] J. M. Spivey (1992) The Z Notation: A Reference Manual Second Edition Programming Research Group University of Oxford, Based on the work of J. R. Abrial, I. J. Hayes et al.