Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
determinano la capacit di soddisfare i bisogni impliciti e espliciti dellutenza. Parlando di qualit del software, distinguiamo fra: Qualit del processo Qualit del prodotto: o Qualit esterne: percepite dagli utenti. o Qualit interne: percepite dagli sviluppatori.
Il processo di sviluppo software: framework allinterno del quale si svolgono le attivit necessarie per
produrre software di alta qualit. Un generico processo di sviluppo software costituito da uno o pi set di Attivit portanti (progettazione dellarchitettura, suddivisione del prodotto in moduli, codifica, controllo di avanzamento..), alle quali si affiancano le Attivit ausiliarie.(project management, revisioni tecniche formali, documentazione..).
Capability Maturity Model: individua un insieme di capacit corrispondenti al livello di maturit di processo di una
software house. Misura esclusivamente la validit di processo. CMM prevede 5 livelli di valutazione, ad ognuno dei quali sono associate pi Key Process Areas (KPA). Per conseguire un livello bisogna soddisfare tutte le sue KPA. Ogni KPA si articola in pratiche: obbiettivi, impegni, capacit, attivit, metodi di controllo, metodi di verifica. Livello Iniziale: il processo di sviluppo definito di volta in volta. Risulta confuso, spesso non nemmeno definito. Livello Gestito: nell'azienda esistono processi basilari per la gestione dei progetti, al fine di tenere sotto controllo costi, tempi e soddisfacimento dei requisiti. Le metodologie usate in progetti di successo precedenti vengono ripetute in progetti successivi. Livello Definito: il processo conforme ad uno standard aziendale definito, stabile e documentato sia per quanto riguarda le attivit portanti che per quanto riguarda le attivit ausiliarie. Livello Gestito Quantitativamente: sia il prodotto sia il processo software sono valutati quantitativamente e qualitativamente sulla base di misure dettagliate. Livello Ottimizzato: utilizzo di tecnologie e metodologie innovative al fine di raggiungere un livello ottimo di gestione del processo software e sviluppo del prodotto.
Modelli di processo: la strategia adottata da unazienda per gestire il processo di sviluppo software.
Lo status quo dello sviluppo software viene modificato attraverso delle iterazioni che prevedono: - La definizione del problema - Lo sviluppo tecnico - Lintegrazione della soluzione Una iterazione produce un nuovo status quo che pu essere modificato con successive iterazioni.
Modelli prescrittivi
Sequenziale lineare: seq. di fasi, ciascuna delle quali produce un output che costituisce linput per la fase successiva. Allinizio di ciascuna fase si verifica la qualit del lavoro effettuato nella fase precedente. Le fasi sono: strutturazione e modellazione del sistema e dei dati, analisi dei requisiti, progettazione, codifica e testing. Si applica sia alla realizzazione iniziale di un software, sia alla sua manutenzione. Vantaggi: semplice da capire e da organizzare con una divisione del lavoro accentuata; Svantaggi: Altamente rischioso. I primi risultati visibili/comprensibili, arrivano verso fine progetto. Si basa su assunzioni il pi delle volte sbagliate. (Es. in fase iniziale di progetto chiarire tutti i requisiti del sistema. Definiti i requisiti, gli stessi non cambino pi fino termine progetto. Definire requisiti,stimare tempi/costi di progetto senza possedere competenza necessaria sugli aspetti tecnici ed implementativi). Incrementale: offre una serie di rilasci chiamati Incrementi. Ad ogni incremento aumentano progressivamente le funzionalit offerte al cliente. Il primo incremento fornisce la base(cuore) del prodotto. I successivi incrementi vengono effettuati dopo una primo utilizzo/valutazione del prodotto da parte del consumatore. Questo processo viene ripetuto fino al completo soddisfacimento del cliente(rilascio completo del prodotto). Vantaggi: consegna di qualcosa di concreto prima daver completato lintero sistema. Maggiore flessibilit nellassegnazione delle persone ai compiti progettuali; Svantaggi: condivide le assunzioni errate del precedente. Prototipale: prevede una prima fase di raccolta dei requisiti(massimale/incompleta). Una seconda di progettazione del prototipo, sulla base dei requisiti raccolti nella fase precedente e una di realizzazione del prototipo. Questultimo deve soddisfare i requisiti noti al momento dello sviluppo, ma non le caratteristiche fondamentali del software di qualit;il prototipo serve al committente per valutare laderenza dellapplicaz alle proprie necessit. Il feedback dellutente permette di generare un ulteriore prototipo raffinato per arrivare infine alla fase di ingegnerizzazione la quale prevede di gettare il prototipo. Vantaggi: il committente vede crescere il prodotto. Sviluppatore agevolato. Tempi di sviluppo molto rapidi(apparent). Svantaggi: Prodotto funzionante ma spesso di scarsa qualit. Difficolt e costi della fase di ingegnerizzazione sono percepiti con difficolt dal committente. A spirale: modello di sviluppo di tipo Iterativo. Strategia realistica per lo sviluppo di sistemi sw di grande dimensioni. La spirale parte dal centro, con un insieme di obiettivi e requisiti iniziali per il progetto. Ogni ciclo comporta leffettuazione di una serie di attivit, dette task regions(comun con il cliente, pianificaz., analisi rischi, progettaz. ecc). Larticolazione di un progetto iterativo guidata da una gestione sistematica dei rischi di progetto, per arrivare alla loro progressiva diminuzione. Inizialmente con la costruzione di prototipi e successivamente ogni iterazione ha lo scopo di costruire in modo progressivo, nuove porzioni del sistema verificate dal committente. Vantaggi: gestione dei rischi attraverso iterazioni volte alla loro progressiva riduzione. Maggiore qualit dei prodotti, costi e tempi inferiori. Svantaggi: impossibile prevedere il n di iterazioni, durata, e obbiettivi specifici. Richiede un controllo sistematico degli avanzamenti. Deve esistere collaborazione sistematica tra committenti e gruppo di progetto. Cleanroom: consiste nellevitare la dipendenza da costosi processi di rimozione degli errori scrivendo porzioni di software correte per principio, e verificandone la correttezza prima del collaudo. Si basa sullutilizzo combinato di: specifiche formali di progetto, verifica di correttezza, tecniche di SQA su base statistica. Adotta il modello di processo di tipo incrementale.
Per ogni incremento: si definisce una descrizione informale dei requisiti a livello utente. Si descrivono le specifiche di progetto mediante strutture a scatole e metodi formali. Progettazione e sviluppo vengono effettuati mediante raffinamento delle specifiche formali. Le box structures vengono progressivamente estese e dettagliate fino ad avere un design completo della porzione di codice da sviluppare nellincremento. Il team di sviluppo effettua le verifiche di correttezza dellapplicazione in ogni stadio del ciclo di vita: dalle semplici specifiche di progetto, allarchitettura, allo sviluppo. Segue una fase finale delle verifiche di correttezza, rivolta al riesame del codice sorgente. Si progettano ed eseguono i test cases in modo da esercitare il software secondo una distribuzione probabilistica delluso; quando si raggiunto il livello desiderato di affidabilit la porzione di software certificata. Vantaggi: la verifica di correttezza un processo finito. Ogni elemento di specifica, progettazione e codifica viene esaminato ed approvato dallintero team. Gli errori vengono individuati prima rispetto allo unit testing. La qualit ottenuta mediante progettazione rigorosa. Resistenze: diffusa convinzione che sia troppo teorico, troppo matematico, troppo radicale per essere utilizzato. Richiede la padronanza dei metodi formali o altre tecniche a base matematica. Richiede la sostituzione dello Unit Testing con le verifiche di correttezza e il controllo statistico della qualit. Immaturit dellindustria software. Linvestimento necessario per implementare Cleanroom elevato. Unified Process: processo di sviluppo, orientato allo sfruttamento delle caratteristiche UML (non uno standard). E utilizzato in ambiti applicativi molto diversi. Risponde agli obbiettivi primari di time to market, controllo del rischio e visibilit degli stati di avanzamento. Le caratteristiche principali del processo RUP(schema generale di processo) sono: guidato dai casi duso (Use cases), incentrato sullarchitettura del sistema, iterativo ed incrementale. Fasi di RUP Avvio: definizione dei limiti, della fattibilit tecnica e della giustificazione economica dellintervento. Questa fase si pu considerare conclusa quando gli obbiettivi vengono consolidati e reputati fattibili. Elaborazione: approfondimento dei requisiti e delle caratteristiche funzionali, strutturali e tecniche del sistema. Questa fase si pu considerare conclusa quando larchitettura e i requisiti sono consolidati. Costruzione: produzione incrementale del sistema. Questa fase si pu considerare conclusa quando il prodotto software completamente testato, sufficientemente stabile da poter essere sottoposto agli utilizzatori. Transizione: completamento del sistema, attraverso rimozione degli errori e produzione della versione rilasciabile. Questa fase si pu considerare conclusa quando il committente soddisfatto e tutti sono concordi nel considerare il progetto completato. Per ogni fase sono previste pi iterazioni a grana fine. - Discipline di RUP: in ogni fase si svolgono diverse tipologie di attivit, denominate discipline. Alcune vengono svolte una tantum altre iterativamente e sono: Business modeling, requirements, analysis e design, implementation, test, deployment, config. e change management, project management, environment. Vantaggi: processo ampiamente utilizzato, sperimentato e consolidato. Comprende una notevole mole di documenti, linee guida, esempi Definisce in modo molto approfondito i ruoli coinvolti nel processo di sviluppo, le attivit da effettuare, i documenti in input e output alle diverse attivit, gli strumenti per supportare il processo di sviluppo. Svantaggi: ha costi piuttosto elevati in termini di impatto organizzativo, impatto culturale, impatto tecnologico.
Processi agili
Extreme Programming (XP): una disciplina di sviluppo sw basata su valori di semplicit, comunicazione , feedback continuo e basata su una serie di pratiche tra cui: Whole Team: rifiuta la suddivisione dei compiti in ruoli rigidi. Ogni persona coinvolta nel processo di sviluppo. Il committente fa parte del team e lavora con gli sviluppatori per lintera durata del processo. Planning Game: Prevede due tipi di pianificazione: Release Planning: il committente presenta al team I propri requisiti che vengono valutati in termini di costi e difficolt di realizzazione(stima imprecisa). Iteration Planning: costruisce il codice mediante iterazioni di durata prefissata con lobbiettivo di produrre sw funzionante al termine di ogni iterazione. Il committente vede crescere il prodotto e pu controllare il progetto. Customer Test: il committente definisce obbligatoriamente i test di accettazione. Small Releases: il team realizza piccoli rilasci, release parziali del prodotto da consegnare. Simple Design: si cerca di scegliere sempre la soluzione pi facile ad un problema.
Pair Programming: lattivit di stesura del codice svolta da coppie di programmatori che lavorano sulla stessa macchina. Produce codice migliore, pi efficiente e con meno errori. Si diffonde la conoscenza attraverso il team, se le coppie cambiano durante lo sviluppo del progetto. Test-Driver Development: sviluppo ossessivamente guidato dai test che devono essere eseguiti con esito positivo ogni volta che un programmatore modifica una singola riga di codice sorgente. Continous Integration: ogni modifica apportata al codice da ogni singolo membro del team di sviluppo, viene integrata attraverso un processo di build che ne verifica, la qualit e la coesione con il resto del codice. Collective Code Ownership: ogni coppia di programmatori pu liberamente modificare porzioni di codice scritte da altri. Il codice riceve le attenzioni di pi programmatori e risulta migliore e meno incline agli errori. Coding Standard: XP incoraggia ladozione di stili e standard di codifica comuni per tutti gli sviluppatori, in modo che sembri sviluppato da una sola persona (codice autoesplicativo). Metaphor : XP promuove ladozione di terminologia comune allinterno di team per evitare incomprensioni. Sustainable Pace: livello di sollecitazione e impegno sostenibile da tutti quelli del team per un periodo di durata indefinita. Vantaggi: Processo molto efficiente, in grado di fare fronte al cambiamento di requisiti. Risultati migliori di qualit del prodotto, favorisce la creazione di team coesi, molto apprezzato da chi lo pratica. Svantaggi: lazienda difficilmente mette a disposizione una propria persona per lintera durata del progetto. Profonde trasformazioni degli aspetti organizzativi e delle politiche del personale. Non tutti sono in grado di lavorare in gruppi. Richiede lutilizzo di strumenti di sviluppo evoluti. Scrum: prodotti intermedi flessibili, pianificazione flessibile, gruppi piccoli, revisioni frequenti, collaborazione, approccio orientato agli oggetti. Pre-Game e Post-Game sono processi definiti e i loro input e output sono definiti. Game composto da un numero imprecisato di sprints (processo empirico che richiede controlli dallesterno). Le caratteristiche del prodotto possono essere modificate durante Pre-Game e Game. Pre-Game Planning: definizione del prodotto basata su gli elem. in possesso del gruppo di lavoro (requisiti del committente, conoscenza del dominio applicativo, esperienza del team, strumenti di sviluppo,). Architecture: definizione delle modalit con cui i requisiti verranno soddisfatti. Game: serie di attivit intensive a durata limitata, denominate sprint che si articola in 4 parti: Develop: normale ciclo di sviluppo (analisi, design, sviluppo, test, stesura di documentazione). Wrap: assemblaggio dei componenti al fine di creare un prodotto intermedio eseguibile. Review: incontro dei team per discutere del proprio lavoro e dei problemi. Adjust: il risultato dellincontro si traduce in aggiustamento dei componenti. Durante lo sprint obbligatorio effettuare quotidianamente uno scrum(riunione di 15 min) per identificare i colli di bottiglia dello sviluppo. Post-Game: Closure: avviene quando il management stabilisce che gli sprint hanno portato al miglior compromesso possibile fra le variabili che influenzano il progetto. Vantaggi: permette di lavorare in modo produttivo anche in situazioni caotiche. Orientato ai risultati concreti e alla gestione dei cambiamenti. Favorisce la creazione di team coesi. Pu essere adottato da ogni organizzazione. Svantaggi: definisce solo pratiche di project management, deve essere integrato con altri approcci per coprire le parti mancanti.
l paradigma orientato agli oggetti (OOP): OOP permette di descrivere un problema reale nei termini
del problema reale. Oggetto= rappresentazione di un elemento del problem space.
Oggetto: entit strutturata dotata di identit(espressa da un nome comprensibile), stato(include i nomi degli attributi),comportamento(rappresentato da metodi,che utilizzano/cambiano il valore degli attributi delloggetto) la cui struttura invisibile allesterno delloggetto. Variabili di istanza: variabili contenute nelloggetto che rappresentano il suo stato interno. Messaggio: richiesta ad un oggetto di invocazione di uno dei suoi metodi. Metodo: azione che accede/manipola lo stato interno delloggetto. Classe: nome collettivo di tutti gli oggetti con stessi metodi,variabili di istanza, aventi le stesse caratteristiche.
Il modello di processo ad oggetti: il modello a oggetti influenza tutte le fasi del ciclo di vita.
Object-Oriented Analysis (OOA) Object-Oriented Design (OOD) Object-Oriented Programming (OOP)
un linguaggio di modellazione standard, progettato per agevolare il processo di elaborazione di modelli: visualizzare il sistema, specificare la struttura ed il comportamento del sistema, implementare il sistema, documentare tutte le decisioni prese durante le varie fasi di lavoro. UML definisce 5 punti di vista sullarchitettura di un sistema: degli Uses Cases: coinvolge utenti e sistemi esterni: descrive cosa far il sistema senza specificare come lo far. del progetto:descrive gli elementi strutturali, dinamici e comportamentali del sistema. del processo: descrive gli aspetti legati al flusso di controllo del sistema ed alla sua temporizzazione. dellimplementazione: descrive i vari componenti del sistema, prodotti dai vari attori del processo, che devono essere assemblati al fine di implementare la soluzione software. del deployment: descrive la topologia del sistema: si focalizza sulla distribuzione dei vari componenti sw e hw.
Operazioni (metodi)
Tutti gli elementi possono essere omessi ad eccezione del nome dellattributo. Visibilit: indica se lattributo pubblico o privato. Nome: identificativo univoco dellattributo allinterno della classe. Tipo: data type dellattributo. Pu essere predefinito (integer, boolean) oppure una classe definita dallutente. Molteplicit: indica quanti elementi costituiscono lattributo. *1+ *0...1+ *0*+ Stringa di propriet: si utilizza per specificare caratteristiche aggiuntive dellattributo. {ordered} {readOnly} Le operazioni sono espresse nella forma: visibilit nome : (parametro : tipo, parametro tipo, ):tipo Esempio: + controllaData (data : date) : boolean
Associazione: modo alternativo per rappresentare una propriet. E il tipo pi comune di Relazione fra classi.
La direzione della freccia indica la navigabilit dellassociazione. Lassociazione Ordine -> RigaOrdine indica che RigaOrdine un attributo della classe Ordine.
Gli attributi dentro la classe vengono usati per i dati di minor rilevanza, come date o flag booleani. Gli oggetti pi complessi e strutturati, per i quali si definisce una classe apposita, si usa lassociazione fra classi, che permette inoltre la rappresentazione della relazione molti-a-uno fra classi.
Associazione Bidirezionale
Classi di associazioni
Viene utilizzata per modellare associazioni complesse che al di l delle classi che collegano, presentano caratteristiche peculiari. Utile nel caso di relazioni molti-a-molti. Es. LibroAutore mette in relazione un Autore con un Libro specificando il ruolo di quella relazione: lAutore pu essere lautore principale,un collaboratore, leditor
Generalizzazione: tipo di relazione che viene utilizzata quando una classe un caso particolare di unaltra.
La generalizzazione la rappresentazione UML di uno dei concetti portanti della programmazione ad oggetti: lereditariet. Tutti i linguaggi ad oggetti permettono di definire classi derivandole da altre classi gi esistenti: la sottoclasse eredita tutte le caratteristiche della classe base e le integra con altre.
Aggregazione
Tipo particolare di associazione: una relazione tutto/parte nella quale una classe parte di unaltra classe. La classe associata al rombo la classe intera, la classe allaltro estremo la sua parte. Se unistanza della classe aggregata viene eliminata, allora anche la corrispondente istanza della classe parte viene eliminata, in quanto non ha pi ragione di esistere. - Diagramma degli oggetti: del tutto analogo al diagramma delle classi, con la differenza che vengono rappresentate istanze delle classi. Nome della classe a cui loggetto appartiene viene specificato dopo un segno di due punti; se necessario il nome proprio delloggetto (istanza viene rappresentato prima dei due punti. Il nome delloggetto sottolineato. Ogni attributo della classe ha un valore specifico per ogni oggetto appartenente a quella classe(istanza).
Tuttavia utile per raggruppare le caratteristiche comuni a tutte le forme geometriche(calcolo della posizione) e dichiarare quali sono le caratteristiche che tutte le figure geometriche devono possedere (il calcolo dellarea). Classe concreta: una classe dalla quale possibile istanziare oggetti.
Steriotipi: Gli stereotipi sono unestensione al vocabolario di base UML, al fine di rappresentare costrutti di
modellazione simili ad elementi UML gi esistenti (Es. interface, create,become..).
Vincoli
Costrutto UML utilizzato per estendere la semantica di un elemento del modello. Vengono utilizzati nei diagrammi UML per specificare delle condizioni che devono essere sempre soddisfatte da un elemento del modello. Possono essere applicati a attributi di una classe o a relazioni fra classi.
Template
Un Template di classi un costrutto che rappresenta una famiglia di potenziali classi. Un template presenta un insieme di parametri formali. Un tipico esempio di template sono le Classi Contenitore. Classe contenitore: classe progettata per contenere oggetti di altre classi, in modo tale che pu contenere qualunque tipo di oggetti, il numero di oggetti da contenere non noto a priori e pu variare dinamicamente al runtime, possibile accedere agli elementi contenuti in modo semplice e intuitivo.
Package: raggruppamento concettuale di elementi che fanno parte del modello. Utili per
suddividere il modello in sottosistemi anche al fine di suddividere il lavoro su pi team di sviluppo. In genere vengono usati per raggruppare classi. Unica regola: un elemento di un modello UML pu appartenere ad un solo package.
Use cases: rappresentano la specifica UML per lidentificazione dei requisiti del sistema. Gli Use Cases prevedono
dei ruoli interpretati dagli Attori del sistema. Un Attore rappresenta: un ruolo interpretato da un utente nellinterazione con il sistema oppure unentit allesterno del sistema stesso. Un utente pu prendere parte a pi use cases. Use Case sono una sequenza di azioni compiute da un attore allinterno del sistema al fine di ottenere un determinato scopo. Linsieme di tutti gli Use Cases di un sistema esprime i requisiti funzioni espressi dal committente.
Flussi di eventi: rappresentano la sequenza di azioni dellattore e risposte del sistema a tali azioni, che si
susseguono durante il processo di interazione fra lutente ed il sistema. In ogni sistema di delineano due tipologie di flussi di eventi: - Flusso di eventi principali: descrive il fluire del processo di interazione che si verifica in mancanza di errori da parte degli attori o del sistema. Ogni Use Case deve avere un flusso di eventi principale. - Flusso di eventi eccezionale: un percorso attraverso lo Use Case che descrive una condizione di errore o quantomeno una situazione limite che si verifica raramente.
Analisi di robustezza: consiste nellanalisi del testo di uno use case, nellidentificazione di un primo insieme di
oggetti che vi prenderanno parte e nella classificazione di tali oggetti in base alle loro caratteristiche. E in diretta relazione con i diagrammi di interazione: diagramma di sequenza, diagramma di comunicazione. Parte integrante dellanalisi di robustezza la definizione delle Classi di Analisi, che costituiscono il nucleo del modello di analisi. Esistono tre tipi di classi di analisi: classi di confine, classi entit, classi di controllo. - Un oggetto confine un elemento con il quale interagisce un attore in uno use cases. - Un oggetto identit contiene informazioni persistenti (es. dati memorizzati in un database). - Un oggetto controllo viene utilizzato per rappresentare concetti come il coordinamento e la sequenza di eventi oppure interazioni che coinvolgono pi oggetti entit in presenza di segnali provenienti da oggetti confine. Esempio LUtente clicca sul pulsante Login nella Home Page. Il sistema visualizza la pagina di accesso al sistema. Lutente digita il suo codice identificativo e la sua password, poi clicca OK. Il sistema convalida i dati inseriti dallutente confrontandoli con quelli presenti nel Profilo Utente, e in caso positivo fa tornare lutente alla Home Page.
- Diagrammi di Interazione: sono ideali per modellare levoluzione di un singolo use case. -
Diagramma di sequenza: presenta unorganizzazione pi rigida e si focalizza sulla sequenza temporale delle interazioni fra gli oggetti.
- Diagramma di sequenza: si focalizza sullordinamento temporale dei messaggi che vengono scambiati fra gli oggetti. Messaggio: si definisce messaggio una comunicazione fra due oggetti che d origine ad una attivit. Unattivit implica una o pi azioni. Azioni: consistono in istruzioni eseguibili aventi come risultato il cambiamento di valore di uno o pi valori di ritorno alloggetto che ha inviato il messaggio. Esistono 5 tipi di azioni: Azione di chiamata: consiste nellinvocazione di un metodo di un oggetto. Un oggetto pu eseguire unazione di chiamata su altri oggetti, ma anche su se stesso. - Azione di risposta: consiste nella restituzione di un valore in risposta ad unazione di chiamata. Il meccanismo di chiamata e risposta sincrono. Nei diagrammi di sequenza, non deve obbligatoriamente esserci corrispondenza 1-1 fra chiamata e risposta: se la risposta deducibile dal contesto, si possono anche indicare azioni di chiamata senza le relative azioni di risposta. - Azione di creazione: crea un oggetto, ossia unistanza di una classe. - Azione di distruzione: distrugge un oggetto.
- Azione di invio: invia un segnale ad un oggetto. Un segnale un elemento di comunicazione asincrona fra oggetti.
- Diagrammi degli Stati: rappresenta la macchina a stati di un oggetto. Rappresenta un costrutto ideale per la modellazione di un oggetto che presenta queste caratteristiche: ammette un numero limitato di valori, ha delle restrizioni sulle transazioni fra questi valori. Eventi: un evento un qualcosa che accade ed ha rilevanza per un oggetto. UML supporta la rappresentazione di 4 tipi di eventi: - Segnale: comunicazione asincrona fra oggetti. - Evento di chiamata: comunicazione sincrona durante la quale un oggetto invoca un metodo di un altro oggetto, oppure un proprio metodo. - Evento temporale: avviene dopo un periodo di tempo specificato. - Evento di cambiamento: avviene quando verificata una particolare condizione. Stati, Transizioni,Azioni Stato: condizione nella quale un oggetto, durante il suo ciclo di vita, pu trovarsi per un periodo di tempo finito. Stato iniziale, stato finale Transizione: passaggio di un oggetto da uno stato ad un altro. Pu avvenire in corrispondenza di un evento oppure incondizionatamente. Azione di entrata: eseguita da un oggetto subito dopo essere passato in uno stato. Azione di uscita: eseguita da un oggetto subito prima di uscire da uno stato. Stati compositi: sono stati che contengono altri stati, detti sottostati. Sottostati sequenziali: oggetto che in un determinato - Sottostati concorrenti: oggetto che in un momento pu trovarsi solo in uno dei sottostati di determinato momento pu trovarsi in pi sottostati uno stato composito. di uno stato composito.
History states: interruzione del flusso interno di uno stato composito,con successivo recupero nel punto in cui stato interrotto.
Design Pattern:
costituiscono soluzioni sperimentate a problemi ricorrenti, utilizzabili in contesti applicativi differenti. I pattern costituiscono un bagaglio pubblicamente disponibile di esperienza e di soluzioni, a cui il progettista pu attingere nel momento in cui si trova di fronte a problemi che non ha mai affrontato, o per i quali ritiene sia utile confrontarsi con punti di vista diversi dal proprio.
I principi di analisi: lanalisi dei requisiti deve essere articolata secondo i seguenti principi operativi: Analisi del dominio delle informazioni: definire le tipologie, gli attributi, le relazioni dei dati. Analisi delle funzionalit: identificare le funzioni che operano sui dati, indicare il flusso dei dati attraverso il sistema, identificare produttori e consumatori di dati. Analisi del comportamento: identificare i diversi stati del sistema, specificare gli eventi che causano le transizioni fra gli stati.
Specifica dei requisiti Il prodotto finale delle attivit di individuazione e analisi dei requisiti il documento di specifica dei requisiti che formalizza e descrive dettagliatamente: le informazioni gestite dallapplicazione, le funzionalit dellapplicazione, le modalit di interazione con lapplicazione, le prestazioni attese, i vincoli del sistema, i criteri di validazione dei requisiti. Lo standard internazionale per la stesura del documento di specifica dei requisiti lo IEEE std 830-1998 (SRS) Secondo la norma, una buona SRS deve essere: - Corretta: ogni requisito espresso nel documento rappresenta un requisito che il software deve soddisfare. - Non ambigua: ogni requisito espresso nella SRS ha una sola possibile interpretazione. - Completa: la SRS deve contenere la definizione di tutte le funzionalit, gli attributi, i vincoli, le interazioni del sistema, la risposta del sistema a tutte le possibili classi di dato in ingresso. - Consistente: i requisiti non devono essere in conflitto tra loro. - Classificata: i requisiti sono accompagnati da indicatori di importanza e priorit temporale. - Verificabile: ogni requisito deve essere accompagnato da criteri di validazione oggettivi. - Modificabile: La SRS deve essere strutturata in modo da seguire levoluzione dei requisiti nel tempo. - Tracciabile: la SRS deve presentare un indice delle revisioni.
La progettazione del software: la rappresentazione ingegneristica dellapplicazione che deve essere realizzata, a
partire dai requisiti del cliente e nel pieno soddisfacimento dei requisiti di qualit. Si concentra su quattro aree: dati, architettura, interfacce, componenti. Il prodotto finale della fase di progettazione il documento di specifiche di progetto (IEEE std 1016-1998, SDD) che formalizza e descrive dettagliatamente: le funzioni, larchitettura, le interfacce, i componenti, gli stati e le transizioni, lorganizzazione dei dati, gli algoritmi di processo dei dati del sistema. Modellazione: la progettazione del software si fonda su unintensa attivit di modellazione. Per progetti sviluppati con tecnologie ad oggetti lo standard lUML; esistono tuttavia altre tipologie di diagrammi, utilizzabili anche in progetti condotti con metodologie tradizionali: - ERD diagramma entit-relazioni - DFD diagramma di flusso di dati - STD diagramma stati-transizioni Linsieme dei tre diagrammi comunemente denominato Modello Concettuale.
Architettura del software: si riferisce alla struttura complessiva del sistema e ai modi con cui tale struttura sorregge
lintegrit concettuale del sistema stesso. La progettazione dellarchitettura riguarda la struttura gerarchica dei componenti di un programma, la modalit con cui tali comportamenti interagiscono, la struttura dei dati manipolati.
A livelli
Il paradigma MVC: uno stile di architettura molto comune, soprattutto quando si ha a che fare con programmi che hanno un certo grado di interazione con lutente. Si presta molto bene alla progettazione di programmi dotati di interfaccia grafica. Pu essere considerato un caso particolare di architettura a livelli. E fondato sullidea di separare tra loro alcune funzionalit fondamentali di unapplicazione, suddividendone gli elementi in tre categorie: - Gli oggetti Modello: contengono un modello del funzionamento, solo la base della conoscenza, sono i depositari del modo di lavorare. Raramente hanno una rappresentazione visibile. Sono oggetti molto importanti, costituiscono il nucleo dellapplicazione. - Gli oggetti Vista: rappresentano qualcosa direttamente visibile su uno schermo e in generale rappresentano un modo per esporre e rendere disponibile qualcosa. Un oggetto Vista rappresenta dei dati e modalit di interazione. - Gli oggetti Controllore: si trovano a met strada tra gli oggetti Vista e gli oggetti Modello. Se gli oggetti Vista sono solo la Forma e gli oggetti Modello sono pura sostanza, chi si preoccupa di mediare tra questi due estremi sono gli oggetti Controllore.
Concetti di progettazione
Modularit: Suddivisione del software in elementi distinti, etichettati e indirizzabili, combinati al fine di soddisfare i requisiti del problema. I singoli elementi sono detti moduli. La modularit fornisce enormi vantaggi in termini di gestione della complessit.
Indipendenza funzionale: si raggiunge sviluppando moduli dedicati ad una sola funzione ed evitando eccessive interazioni fra i moduli. Rappresenta un obbiettivo di progettazione del software che mira alla creazione di moduli tali che: ogni modulo di riferisce ad una determinata sottofunzione dei requisiti; ogni modulo una uninterfaccia semplice e ben definita verso gli altri elementi del programma. Encapsulation e Information Hiding sono assiomi che favoriscono lindipendenza funzionale dei moduli di un programma ad oggetti. Lindipendenza funzionale ottenuta dalla combinazione di due diversi aspetti: - Coesione: un modulo coeso se esegue un singolo compito allinterno del sistema, espone uninterfaccia limitata agli altri moduli, ha poche interazioni con procedure eseguite da altre parti del programma. - Accoppiamento: una misura dellinterconnessione dei moduli di unapplicazione. Dipende dalla complessit dellinterfaccia dei moduli, e dalla quantit di dati e procedure visibili trasversalmente nellapplicazione.
Terminologia: la terminologia adottata relativamente al collaudo del software prevede le seguenti definizioni:
Verifica: insieme delle attivit volte a stabilire se il programma costruito soddisfa le specifiche. Testing: particolare tipo di verifica fatta mediante esecuzione del programma, selezionando alcuni dati di ingresso e valutando i relativi risultati. Il testing permette di individuare la presenza di errori nel programma, ma non la loro localizzazione allinterno del codice. Test case: singola unit di testing, volta a verificare un sottoinsieme di risultati a fronte di un sottoinsieme di dati in ingresso. Convalida: processo che permette di stabilire che le specifiche funzionali sono corrette, ossia descrivono i veri requisiti dellutente. Debugging: processo che permette di localizzare e correggere gli errori nel codice. Programmazione difensiva: insieme di tecniche di programmazione che aumentano probabilit di correttezza e facilitano verifica e debugging.
Tecniche di collaudo del software - White-box: fondato su test cases che esercitano determinati cammini logici allinterno del programma. Per
cammino logico si intende una determinata sequenza di scelte logiche o procedurali nel corso del flusso del programma. I diversi metodi di collaudo white-box permettono la costruzione di test cases che si focalizzano su aspetti diversi: Collaudo per copertura delle istruzioni: test set tale che ogni istruzione sia eseguita almeno una volta. Collaudo per copertura dei rami: test set tale che ogni ramo del flusso di controllo sia attraversato almeno una volta. Collaudo per copertura delle condizioni: test set tale che ogni condizione semplice assuma almeno una volta il valore vero e il valore falso e ogni componente di una condizione composta assuma almeno una volta il valore vero e il valore falso. Collaudo per copertura dei cammini di base: una tecnica di collaudo mediante la quale possibile: calcolare una misura complessiva della complessit logica di un programma, ricavare da tale misura indicazioni per la scelta di un insieme di cammini di esecuzione, realizzare dei test cases per linsieme di cammini in modo da garantire che ogni istruzione del programma sia eseguita almeno una volta. Si basa sul grafo di flusso del programma, che rappresenta il flusso logico di controllo del programma. Il grafo di flusso composto da: Nodi: raggruppano una sequenza di blocchi flowchart. Lati: connettono i nodi del grafo. Regioni: aree racchiuse da un insieme di lati. Il nodo da cui parte il flusso detto Nodo Iniziale. Il nodo in cui termina detto in Nodo Finale. Un nodo da cui partono due lati detto Nodo Predicato. Complessit ciclomatica= 4
Si definisce Cammino una sequenza di nodi del grafo di flusso che permette di attraversare lintero grafo dal nodo iniziale al nodo finale. Un cammino detto indipendente se attraversa almeno un lato non ancora percorso da altri cammini. Il grafo dellesempio presenta i seguenti cammini indipendenti: Cammino 1: 1 - 11 Cammino 2: 1 - 2,3 - 4,5 - 10 - 1- 11 Cammino 3: 1 - 2,3 - 6 - 7 - 9 - 10 - 1 - 11 Cammino 4: 1 - 2,3 - 6 - 8 - 9 - 10 - 1 - 11 Si definisce Complessit Ciclomatica di un programma la misura della complessit logica di un programma. E indicata con V(G). Nellambito dei cammini di base, corrisponde al numero massimo di cammini indipendenti che possibile individuare nel grafo di flusso. La complessit ciclomatica pu essere calcolata in pi modi: V(G)= NR (numero di regioni) V(G)= E - N + 2 (E=numero di lati, N=numero di nodi) V(G)= P + 1 (P=numero di nodi predicato) Il collaudo per cammini di base prevede la preparazione di 4 test cases per avere la certezza che ogni istruzione del programma sia eseguita almeno una volta. Va detto per che normalmente i cammini indipendenti hanno un peso diverso allinterno del programma. Per costruire dei test cases pesati, utile ricorrere ad una rappresentazione tabellare del grafo di flusso, detta Matrice del grafo di Flusso. Ogni 1 in tabella rappresenta un lato del grafo. In questo modo ogni lato ha peso 1; assegnando pesi diversi ai lati possibile costruire dei test cases pesati.
Copertura: le tecniche di collaudo white-box si basano sul concetto di copertura: dove Nc il numero di elementi coperti, Ntot il numero totale di elementi. -
Black-box: le metodologie di collaudo black-box derivano i test cases dalle specifiche. Lobbiettivo costruire
insiemi di condizioni di ingresso che esercitino completamente tutti i requisiti funzionali del programma. Mediante il collaudo black-box, si verificano i dati di output a fronte di determinati input di programma, dunque si tratta di una metodologia adatta per rilevare: funzionalit errate o mancanti, errori di interfaccia utente, errori nellaccesso a dati esterni, limiti prestazionali, crash di sistema.
Il dominio di input: linsieme di tutti i possibili valori assunti dai dati di ingresso dellapplicazione.
Equivalence partitioning La Suddivisione in classi di equivalenza un metodo di collaudo black-box che suddivide il dominio di input in base a criteri di equivalenza. I Sottodomini sono classi di equivalenza dove lequivalenza definita empiricamente. In base al Principio della copertura completa, linsieme dei test cases deve essere composto in modo da contenere almeno un elemento per ciascun dominio.
Boundary value analysis: lanalisi dei valori limite una tecnica complementare alla suddivisione in classi di
equivalenza. Lanalisi dei valori limite prevede la selezione dei casi di prova ai confini della classe, cio selezionando i valori limite della classe. Le linee guida BVA prevedono: - Se una condizione di ingresso specifica un intervallo di valori delimitato da a e b, necessario costruire dei test cases per i valori di input a e b. - Se una condizione di ingresso specifica un set di valori, necessario costruire dei test cases per i valori minimo e massimo. - Se lapplicazione presenta strutture dati con dimensione predefinita, necessario costruire dei test cases che esercitino le strutture dati ai valori limite. Collaudo ad array ortogonale: una tecnica di testing a base statistica, volta a verificare le interazioni fra i parametri di input. Un array si dice ortogonale se, prese due colonne qualsiasi, tutte le possibili combinazioni dei parametri si presentano una ed una sola volta.
Strategie di collaudo del software: rappresenta un insieme di attivit che comprende: pianificazione, allestimento
dellambiente del test, progettazione dei test cases, esecuzione dei test cases, raccolta e valutazione dei risultati. E possibile individuare elementi comuni ad ogni strategia di collaudo: - Il collaudo inizia a livello di singolo componente e prosegue verso lesterno fino a comprendere lintegrazione dellintera applicazione. - E opportuno adottare diverse tecniche di collaudo. - Il collaudo deve essere condotto dagli stessi sviluppatori e da un gruppo indipendente (software testers). - Il collaudo deve includere prove a basso livello e prove di interfaccia ad alto livello. - Lo stato di avanzamento dei collaudi deve essere misurabile e prevedere una serie di milestones da presentare alla direzione.
Il team di collaudo
Gli sviluppatori: sono coloro che meglio conoscono i moduli da loro realizzati, spesso hanno poca visione dinsieme dellintera applicazione, spesso sono (inconsciamente) portati a difendere il proprio operato cio tendono a realizzare test cases che dimostrano che il programma funziona. I software testers (SQA): hanno visione dellintera applicazione, quindi con facilit realizzano prove che coinvolgono lintero applicativo, hanno difficolt a comprendere i dettagli interni di un modulo, quindi spesso devono rivolgersi agli sviluppatori, hanno la missione di demolire il prodotto, individuando quanti pi errori possibile.
Lambiente di test: lesecuzione dei test richiede lallestimento di un particolare ambiente detto Scaffolding.
AUT: lapplicazione da testare. Pu essere il programma completo, oppure un suo sottoprogramma. Driver: programma esterno che utilizza lapplicazione da testare. Stub: eventuali moduli esterni richiamati dallapplicazione da testare. Oracolo: programma esterno in grado di controllare la corrispondenza fra il risultato prodotto dalla AUT e dei risultati di riferimento.
Problemi dello scaffolding - Il costo per la creazione dellambiente di test non trascurabile. - La differenza fra AUT e programma effettivamente commercializzato non permette di individuare alcune categorie di errori. - Non sempre le applicazioni producono risultati facilmente osservabili. - Gli oracoli sono strumenti sofisticati e fragili. - Volatilit dei test cases in seguito a modifiche introdotte nella AUT.
La documentazione di test: si tratta di uno o pi documenti nei quali si descrivono dettagliatamente: le persone
coinvolte nelle attivit di collaudo e validazione, le modalit e le tecniche utilizzate, gli ambienti di test, gli strumenti, le procedure da mettere in atto in caso di individuazione di malfunzionamenti, le fasi del collaudo. Lo standard internazionale per la stesura di piani di test lo IEEE Std 730-1998.
Unit test: si concentra sulla verifica della pi piccola unit di progettazione software (es. componente,modulo,classe).
E basato principalmente su tecniche white-box. Il collaudo per cammini di base ha ampia applicazione nello unit test; vista lelevata complessit ciclomatica delle applicazioni, necessario limitarsi ad una bassa copertura. Il collaudo per condizioni, per flusso di dati e per cicli permette di individuare particolari categorie di errori. Nello unit test vengono applicate anche tecniche black-box. Il collaudo di unit unattivit molto onerosa. Tuttavia: Nellambito di un progetto complesso, il collaudo di pi moduli pu essere condotto in contemporanea. Se la unit una classe fortemente coesa, cio con poche interconnessioni con altri moduli, la realizzazione di driver e stub molto semplice.
Integration Test
Il collaudo di integrazione una tecnica sistematica per la costruzione della struttura di un programma conducendo allo stesso tempo prove tese a rilevare errori relativi allinterfacciamento e allinterconnessione fra i moduli. Le tecniche di integrazione incrementale permettono di costruire il programma assemblando piccolo sottosistemi che vengono fatti crescere fino a costruire lintera applicazione. Integrazione Top-Down: una tecnica di integrazione incrementale che partendo dal main, prevede la graduale sostituzione degli stubs con moduli reali, procedendo dal modulo principale verso i moduli foglia. Ad ogni sostituzione necessario rieseguire parte dei test effettuati in precedenza. Vantaggi: il fatto di arrivare fino ai moduli foglia permette di testare un sottoinsieme di funzionalit reali dellapplicazione. E possibile avere risultati tangibili in tempi relativamente rapidi. Svantaggi: ci sono molti moduli fittizi quindi difficile progettare test cases significativi. Se i moduli dei livelli pi alti dipendono da elaborazioni effettuate nei livelli pi bassi, i primi step di integrazione non producono risultati significativi. Integrazione Bottom-Up: tecnica di integrazione incrementale, complementare alla precedente. I componenti di basso livello vengono aggregati in cluster che realizzano una particolare sottofunzione. I drivers vengono via via sostituiti con moduli reali, fino ad arrivare al modulo principale. Vantaggi: facile costruire test cases significativi allinterno dei cluster. Se i cluster sono fortemente coesi, laggiunta di nuovi moduli driver ha poche probabilit di causare errori a livello pi basso. Svantaggi: i primi risultati tangibili arrivano pi tardi rispetto allintegrazione Top-Down, perch il tempo necessario per creare un cluster pu essere lungo. Integrazione Sandwich: tecnica di integrazione incrementale mista che prevede lutilizzo del metodo TopDown per i livelli pi alti dellintegrazione, e Bottom-Up per i livelli pi bassi. Smoke Testing: tecnica di integrazione big-bang utile per realizzare prodotti sw in breve tempo. In ogni fase del processo di sviluppo, tutte le parti del programma realizzate fino a quel punto vengono messe insieme in un programma che viene testato costantemente. Vantaggi: si riducono i rischi derivanti dallintegrazione fra moduli. Eventuali errori di progettazione dellarchitettura vengono individuati molto presto. La rispondenza del programma alle specifiche funzionali pu essere verificata fin dalle prime fasi. Svantaggi: difficile localizzazione degli errori.
Validation test: dopo il collaudo di integrazione, il software viene assemblato in un pacchetto unitario. La fase
successiva il collaudo di validazione, durante il quale laccento viene posto sulladerenza dellapplicazione ai requisiti. Si tratta di una fase molto lunga al termine della quale lesito positivo certifica laccettazione del prodotto software da parte del committente. Il collaudo di validazione viene condotto con metodologie black-box. La validazione viene effettuata da gruppi misti che coinvolgono la software house e lutente finale. Per prodotti complessi, si divide in due fasi ben distinte: Alfa test: condotto presso la software house, vede coinvolti i software testers con la collaborazione degli sviluppatori. Beta test: condotto presso un insieme selezionato di clienti con il supporto dei software testers.
System test: in generale il sw commissionato al produttore deve interagire con elementi esterni preesistenti.
Lapplicazione che ha superato i test di accettazione deve essere messa alla prova nellambito dellintero sistema informatico. Deve essere eseguito il collaudo di sistema. Recovery testing: verifica la tolleranza del sistema a malfunzionamenti generati dallapplicazione. Security testing: verifica i meccanismi di sicurezza che impediscono laccesso a dati sensibili o a procedure riservate a determinati utenti. Prove di stress: verifica la rispondenza del sistema a particolari condizioni di carico dellapplicazione.
Il debugging: in tutte le fasi del collaudo viene rilevata una notevole mole di malfunzionamenti, che devono essere
esaminati e corretti dagli sviluppatori con lattivit di debugging. Il processo di debugging prevede: analisi del malfunzionamento, identificazione delle cause, classificazione dellerrore, stima del tempo necessario per la correzione, correzione, creazione di nuovi test case.
Indipendente dal linguaggio di programmazione: le metriche si devono fondare su analisi, progettazione e struttura del programma, non sul linguaggio di programmazione utilizzato. Facilmente intellegibile: deve fornire al tecnico informazioni utili a migliorare la qualit del software.
Metriche Dimensionali
Le metriche dimensionali si ottengono normalizzando le misure di qualit e produttivit sulla base delle dimensioni del software prodotto, espresse in LOC.
Metriche FP Estese
- 3D Function Points: il calcolo analogo a FP, ma oltre ai 5 parametri di misurazione FP si prendono in esame anche: T: numero di trasformazioni dei dati, R: numero di transizioni di stato del sistema. In questo modo oltre alla dimensione dati si tengono in considerazione anche le dimensioni funzioni e controlli. - COSMIC-FFP: metriche basate su FP ma adatte anche alla misurazione di sistemi realtime, sistemi distribuiti, sistemi per le telecomunicazioni, sistemi operativi. Sono compatibili con i principi O-O e con le specifiche UML.
Backfiring: esprime la connessione fra la dimensione del programma espressa in LOC e la dimensione espressa in FP.
Si parte da un coefficiente LC dipendente dal linguaggio di programmazione utilizzato (Es C++=29). Parallelamente va calcolato il coefficiente di complessit BAF che tiene conto di tre aspetti: complessit del problema, complessit delle strutture dati, complessit del codice. Ad ognuno dei tre aspetti va assegnato un valore che va da 1 a 5. La somma dei tre valori la complessit totale CT. La somma dei tre valori la complessit CT: BAF = 0.7 + 0.05 * ( CT 3 ) Da cui si ottiene il coefficiente di backfiring: backfiring= LC * BAF (esprime il numero di LOC per FP)
Metriche di Lorenz-Kidd: altro insieme di metriche per i sistemi orientati agli oggetti.
CS (Class Size): data dalla somma non pesata dei metodi e degli attributi della classe. Analogamente a WMC, una classe di dimensione elevata rende difficile il riuso ed potenzialmente pi esposta agli errori. NOO (Number of Overridden Operations): numero di metodi di classi dei livelli superiori della gerarchia ridefiniti nella classe in esame. Un NOO elevato indica che poche operazioni della gerarchia sono state raccolte a fattor comune nelle classi di livello pi alto, e generalmente questo un indice di cattiva progettazione. La gerarchia fragile e il prodotto pi difficile da collaudare e manutenere. NOA (Number of Operations Added): numero di metodi implementati nella classe in esame, che non sono ridefinizioni di metodi delle classi superiori. Al crescere di NOA, la classe si allontana dallastrazione rappresentata dalla sua classe base, perch significa che la specializzazione elevata. Una classe altamente specializzata rende difficile il riuso.
Metriche MOOD: Insieme di 6 indicatori per il grado di utilizzo di information hiding, ereditariet e polimorfismo in
un progetto orientato agli oggetti. MHF (Method Hiding Factor): grado di utilizzo della information hiding in un sistema orientato agli oggetti. E basato sul calcolo del Fattore di Visibilit VF: VF = (somma accessi ai metodi da altre classi / n. classi - 1) / totale metodi Da cui si ricava: MHF = ( 1 - VF ) * 100 AHF (Attribute Hiding Factor): analogo al precedente, ma applicato agli attributi. Idealmente, tutti gli attributi dovrebbero essere privati, quindi il valore consigliato AHF = 100%. MIF (Method Inheritance Factor): grado di utilizzo dellereditariet in un sistema orientato agli oggetti. MIF = n. metodi ereditati / n. totale metodi * 100 Il range consigliato 20% < MIF < 80%. AIF (Attribute Inheritance Factor): analogo al precedente, ma applicato agli attributi. Il range consigliato AIF < 48%. PF (Polymorphism Factor): misura del grado di ridefinizione dei metodi di una gerarchia. PF = n. metodi ridefiniti / n. totale metodi * 100 Il range consigliato PF > 20% (senza un limite superiore). CF (Coupling Factor): indicatore di accoppiamento fra classi. E calcolato come il CBO delle metriche CK. Il range consigliato CF < 12% (senza un limite inferiore).
Metriche per il collaudo: le metriche per il collaudo sono in realt metriche per la complessit computazionale
dellapplicazione: infatti maggiore la complessit e maggiore sar il numero di test cases necessari per effettuare il collaudo. La complessit ciclomatica di Tom McCabe una delle principali misure per il collaudo. Misure di Halstead In un programma, date le seguenti grandezze: n1 = numero di operatori distinti n2 = numero di operandi distinti N1 = numero totale delle occorrenze di operatori N2 = numero totale delle occorrenze di operandi Si definisce difficolt del programma: D = ( n1 / 2 ) * ( N2/ n2 ) Si definisce vocabolario del programma: n = n1 + n2 Si definisce lunghezza del programma: N = n1 log2 n1 + n2 log2 n2 Si definisce volume del programma: V = N log2 n Si definisce impegno del programma: e=V*D
Secondo una denominazione piuttosto diffusa: per operatori si intendono i costrutti di controllo del flusso, i costrutti condizionali e le formule matematiche. Per operandi si intendono le variabili e le costanti del programma. n1 = 6 n2 = 5 N1 = 8 N2 = 35
Il Software Maturity Index (SMI) un indicatore che definisce il grado di stabilit di un prodotto software sulla base di delle modifiche via via apportate alle nuove versioni del prodotto. Dati: MT = numero totale di moduli nella versione corrente. Fc = numero di moduli modificati nella versione corrente. Fa = numero di moduli aggiunti nella versione corrente rispetto alla precedente. Fd = numero di moduli eliminati nella versione corrente rispetto alla precedente. Si definisce: SMI = [ MT ( Fc + Fa + Fd ) ] / MT Al tendere di SMI a 1, il prodotto tende a stabilizzarsi.
Attivit del Software Project Manager: pianificazione, prevedere costi/tempi/uso risorse/volume di software da
sviluppare, pianificare le attivit, allocare e gestire le risorse, avviare le attivit, coordinare lo svolgimento dei lavori, controllare lo stato di avanzamento dei lavori, chiudere il progetto.
Il Software Project Manager prima di tutto un uomo di relazioni: raccoglie permanentemente informazioni
tecniche e non, risultati, impressioni e le consolida in delle previsioni che aggiorna di continuo. Attraverso le relazioni con una serie di interlocutori cerca di far accettare idee di cambiamento, cerca di capire cosa crea ostacoli e di eliminarlo, in un continuo compromesso tra il voler far meglio e il fare il possibile. Gli interlocutori del Project Manager sono normalmente chiamati Stakeholders. Il ruolo professionale del Software Project Manager richiede: capacit relazionali, competenze tecniche.
Pianificazione di progetto: scopo della pianificazione di progetto definire una strategia pratica per controllare,
coordinare e monitorare un progetto tecnico complesso. Gli obiettivi della pianificazione di un progetto software sono quelli di stabilire un quadro di riferimento che permetta al capo progetto di stimare realisticamente le risorse, i costi e i tempi di progetto.
La portata del software: la portata del software descrive i dati e i controlli che devono essere elaborati, le funzioni, i
vincoli, le interfacce e il grado di prestazioni e affidabilit che il sistema deve garantire.
Fattibilit: Una volta stimata la portata del software, bisogna stabilire se il progetto: possibile dal punto di vista
tecnico, possibile dal punto di vista delle risorse disponibili, conveniente dal punto di vista economico e/o organizzativo.
Le risorse: il secondo compito della pianificazione la stima delle risorse necessarie per portare a compimento lo
sviluppo del software. Risorse umane: compito del pianificatore determinare limpegno richiesto dal progetto in termini di risorse umane. Lesame delle risorse umane necessarie deve tenere conto di aspetti diversi: o Numero di persone necessarie o Livello di specializzazione delle persone o Costo delle persone o Disponibilit temporale o Organizzazione dei team di lavoro Componenti software riusabili: lutilizzo di architetture software orientate alla modularit ed al riuso offre alle software house la possibilit di riutilizzare componenti software. I componenti software si possono suddividere in 4 categorie: o Componenti di serie: software esistente e funzionante, sviluppato in proprio o da terzi, pronto alluso, certificato e documentato. o Componenti gi sperimentate: specifiche, progetti, codice o dati per collaudi sviluppati per progetti precedenti, largamente simili al progetto in esame. I membri dellattuale team di sviluppo hanno una sufficiente conoscenza di questi componenti e del loro ambito applicativo, quindi le modifiche da apportare comportano rischi ridotti.
o o
Componenti parzialmente sperimentati: simili ai precedenti, ma necessitano di modifiche sostanziali per poter essere utilizzati nel progetto corrente. Nuovi componenti: componenti software che devono essere necessariamente sviluppati ex novo per il progetto corrente.
Strumenti hardware e software o SEE (Software Engineering Environment): ambiente costituito dallinsieme di strumenti hardware e software necessari per sviluppare lapplicazione. o Target environment: ambiente sul quale dovr essere realmente eseguito il software, una volta consegnato allutente finale.
Stima ed incertezza: spesso viene richiesta una stima sulla base di pochi elementi. Una stima accurata richiederebbe
requisiti precisi, una fase di progettazione relativamente dettagliata, la conoscenza di chi svilupper il prodotto. Daltra parte una stima di massima e spesso necessaria per verificare la percorribilit del progetto. Dobbiamo stimare di fronte allincertezza.
Certezza e Accuratezza
Una stima certa e una stima che sicuramente comprende nel proprio range il valore vero. Una stima accurata ha un errore relativo basso, es. 1%.
Stime Model-based: le stime Model-based applicano modelli matematici ad una stima dimensionale del
prodotto da realizzare. Si tratta quindi di stime di secondo livello: - Prima si stima la dimensione del prodotto (in LOC o FP) poi si applicano modelli matematici su questa stima, per determinare sforzo e tempo (incertezza). o Il modello COCOMO (COnstructive COst MOdel): basato su un modello algoritmico. Si basa sul processo di sviluppo a cascata e consente di calcolare, tramite una serie di formule ed in base a parametri, una stima di: quantit di lavoro M (espressa in m-m) tempo di sviluppo T (espresso in mesi)
COCOMO divide le applicazioni in tre tipi: Semplici (Organic Mode): applicazioni semplici e di dimensioni limitate, senza requisiti particolarmente stringenti. Intermedie (Semi-detached Mode): complessit e dimensioni medie. Complesse (Embedded Mode): attento controllo del processo di sviluppo, rigida applicazione di precise normative di controllo qualit. Per ognuno dei tre modelli sono definite le formule per la stima di M e T, secondo un livello di dettaglio crescente. 1) Basic COCOMO: stima i costi sulla base della sola dimensione complessiva. Si adatta ai progetti pi semplici. b d M = ab* S b T = cb * M b I valori ab, bb,cb, db variano in funzione del tipo di applicazione Esempio: Consideriamo unapplicazione Organic Mode di dimensione stimata S = 32 KDSI. Indicatori derivati: 1.05 1.05 M = 2.4 (S) = 2.4 (32) = 91 m-m Productivity: 32,000 DSI / 91 m-m = 352 DSI/m-m 0.38 0.38 T = 2.5 (M) =2.5 (91) = 14 mesi Average staffing: 91 m-m / 14 mesi = 6.5 FSP 2) Intermediate COCOMO: la stima di M viene raffinata mediante luso di coefficienti correttivi (detti cost drivers) relativi a caratteristiche e vincoli di progetto. Il valore di T viene calcolato allo stesso modo del modello Basic. ci < 1 fattore che agevola lo sviluppo bi d M = ai * S * cj T = cb * M b ci = 1 fattore ininfluente ci > 1 fattore che ritarda lo sviluppo 3) Detailed COCOMO: fornisce alcuni miglioramenti alle limitazioni dellintermediate cocomo: Phase-Sensitive Effort Multipliers: introduce dei moltiplicatori di quantit di lavoro a livello di fase di progetto. Three-Level Product Hierarchy: tratta in modo differenziato: - Effetti che tendono a variare con ogni modulo sono trattati a livello modulo. - Effetti che variano meno frequentemente sono trattati a livello sottosistema. - Effetti come la dimensione totale del prodotto sono trattati a livello sistema. Ipotesi alla base di COCOMO Il modello COCOMO si basa su alcune assunzioni: - Modello di sviluppo a cascata - Requisiti ritenuti sostanzialmente stabili - Progetto svolto da poche persone molto capaci e con profonda conoscenza del dominio applicativo - Progetto di dettaglio, codifica e test a livello di modulo compiuti in parallelo da vari team di programmazione - Documentazione scritta in modo incrementale
Equazione del Software (Putnam): un modello di stima multivariabile che prevede una particolare distribuzione dellimpegno nel corso di un progetto di sviluppo software. Nella sua formulazione 1/3 4/3 originale, lequazione : Project Size = (Process Productivity) ( Effort / Skill factor ) ( Time ) Lequazione del software contiene due parametri di stima indipendenti, una stima dimensionale in LOC, una stima della durata del progetto in mesi. 1/3 4/3 Equazione risolta per produttivit: PP = (LOC) / ( E / SF ) ( T ) Dove PP = Process Productivity, SF = Skill Factor. 3 4 Risolta per Effort, lequazione diventa: E = [ LOC / PP ] * SF * ( 1 / T )
Expert estimate: prevede la scomposizione dello sviluppo in una serie di attivit, ad ognuna delle quali
viene assegnato un impegno espresso in m-m, sulla base di esperienze precedenti. E opportuno fornire stime pessimistiche, probabili e pessimistiche in termini di impegno e generare una media pesata in base a fattori di correzione. Limpegno E del progetto dato dalla somma degli impegni delle varie attivit.
Make or buy: In ogni progetto software, in molte aree applicative il management si trova davanti ad una scelta fra
sviluppo interno (make) o acquisto di componenti software da fornitori esterni (buy). Lacquisto pu essere di tre tipi: 1. Software gi commercializzato come pacchetto 2. Componenti software gi sperimentati, che devono essere modificati per poter essere incorporati nellapplicazione 3. Outsourcing: software commissionato ad un produttore esterno, al quale vengono fornite le specifiche.
Analisi e gestione dei rischi: ogni progetto software caratterizzato da un certo margine di rischio, che pu
coinvolgere alcune parti del progetto e, nei casi peggiori, far fallire lintero progetto. Compito dellingegnere del software comprendere i rischi e prendere le misure preventive necessarie per evitarli o gestirli. Gestire un rischio significa: identificarlo, stimare la probabilit che si verifichi, stimare limpatto dellevento sul progetto, stabilire un piano da attuare nel caso in cui il problema dovesse effettivamente verificarsi.
Classificazione del rischio: i rischi vengono classificati in base alla loro probabilit ed in base alla gravit delle
conseguenze. Un indicatore di gravit lesposizione al rischio, definita dalla seguente espressione: ER = P(EN) * C(EN). P(EN) la probabilit che si verifichi levento EN, C(EN) la perdita economica (stimata) conseguente allevento EN.
Livello di riferimento per i rischi: il verificarsi di un rischio di progetto causa un impatto su: tempi di sviluppo, costi
di sviluppo, decadimento delle prestazioni, necessit di supporto. Per un rischio ri, si definisce Punto di rottura il punto nello spazio tempi/costi tale che, per costi superiori e per tempi superiori non ha pi senso continuare il progetto. La curva che unisce i punti di rottura di tutti i rischi detta Livello di riferimento per i rischi.
Pianificazione temporale e controllo dei progetti: il risultato dellattivit di pianificazione temporale il piano di
progetto, documento che descrive dettagliatamente: i singoli compiti che costituiscono il progetto, i responsabili dei vari compiti, la pianificazione temporale dei compiti, i punti di controllo.
Diagramma di Gantt: Le attivit sono rappresentate mediante barre orizzontali in scala temporale. Ad ogni attivit
vengono assegnati: un ID univoco, data di inizio, durata, vincoli. Le milestones sono delle attivit a durata 0. E possibile definire delle attivit riepilogo, che raggruppano altre attivit. Diagrammi PERT/CPM (PERT: Program Evaluation and Review Technique, CPM: Critical Path Method) Sono strumenti quantitativi che consentono al project manager di: Rappresentare graficamente la sequenza delle attivit (non in scala temporale) Stabilire le stime dei tempi necessari per il completamento delle singole attivit Definire la finestra temporale entro la quale ciascuna attivit deve iniziare e terminare Determinare il cammino critico, ossia la sequenza di compiti che determina la durata complessiva del progetto
Analisi del valore acquisito: lanalisi del valore acquisito (EVA Earned Value Analysis) una tecnica quantitativa
per valutare i progressi durante lavanzamento di un progetto. Consente di calcolare la percentuale di completamento del progetto, con un ragionevole grado di approssimazione. 1. Indicatori di avanzamento: Si basano sullesame dei costi preventivi delle attivit (Budgeted Cost of Work Scheduled/Performed). BCWSi= costo previsto per lattivit i del progetto, espresso in giorni-uomo. E data dalla durata prevista dellattivit i moltiplicata per il numero di persone assegnate ad essa. Budget At Completion BAC = BCWSi per i = tutte le attivit del progetto. In un tempo t dellavanzamento del progetto, si calcolano: BCWP = BCWPk per k = attivit del progetto che sono state effettivamente completate al tempo t. BCWS = BCWSk per k = attivit del progetto il cui completamento era stato pianificato entro t. Con queste grandezze possibile calcolare i seguenti indicatori: Schedule Performance Index: SPI = BCWP / BCWS Schedule Variance: SV = BCWP BCWS % completamento prevista = BCWS / BAC % completamento effettiva = BCWP / BAC Un valore di SPI prossimo a 1 indica una buona pianificazione del progetto. 2. Indicatori di controllo dei costi: i calcoli visti finora si riferiscono ai costi budget, ossia costi preventivi. Esistono altri indicatori, che fanno uso dei costi consuntivi delle varie attivit. Actual Cost of Work Performed ACWPi = costo effettivo dellattivit i del progetto, espresso in giorni-uomo. E data dalla durata effettiva dellattivit i moltiplicata per il numero di persone che hanno lavorato ad essa. ACWP = ACWSk per k = attivit del progetto che sono state effettivamente completate al tempo t. Si ottengono cos gli indicatori: Cost Performance Index: CPI = BCWP / ACWP Cost Variance: CV = BCWP ACWP Un valore di CPI prossimo a 1 indica un buon controllo dei costi di progetto. Esempio:
Gestione delle Configurazioni: unattivit volta a garantire che tutte le informazioni relative ad un progetto siano
consistenti in ogni istante del ciclo di vita. Ogni elemento interessato alla SCM detto SCI (Sw. Configuration Item): Dati: Documenti: Programmi: - Strutture dati esterne ai programmi - Documenti di progetto - Codice sorgente - Manuali utente - Eseguibili - Test Cases Il database che tiene traccia di tutte le versioni dei SCI detto Repository. La fotografia di tutti gli SCI in uno stato consistente detta Baseline.
Processo di Gestione delle Configurazioni: in un progetto reale i SCI possono essere migliaia. La necessit di
modificarli molto frequente. Le modifiche sono a carico di persone diverse, e non possono essere introdotte in contemporanea. Per evitare il caos, necessario definire il Processo di Gestione delle Configurazioni del progetto. Il processo prevede le seguenti attivit: - Allestimento di un repository definendo quali sono gli elementi interessati alla SCM. - Definizione di una serie di procedure aziendali che regolano le modifiche ai SCI. - Definizione dellente aziendale che controlla lintroduzione di nuove modifiche nel repository.
Check-Out: estrazione dal repository di una copia locale del SCI. Normalmente solo una sola persona alla volta pu modificare un SCI: il sistema pone un lock sullelemento, e il checkout detto esclusivo. Se invece pi persone in contemporanea possono modificare lo stesso SCI, il check-out detto condiviso. Dopo aver effettuato il check-out, lutente pu modificare la versione locale del SCI senza che questo interferisca con il lavoro degli altri membri del team. Una volta ultimate le modifiche, lutente sottopone al CCB una richiesta di introduzione di modifiche. Normalmente questo viene fatto tramite un documento nel quale si specifica: motivazione della modifica, tipologia della modifica, descrizione tecnica, SCI correlati, test effettuati, grado di rischio. Il CCB si riunisce periodicamente ed esamina tutte le richieste pervenute. Sulla base degli elementi riportati in una richiesta, il CCB pu decidere di: approvare la richiesta, richiedere nuove modifiche, respingere la richiesta. In caso di approvazione, lutente autorizzato ad introdurre la propria versione del SCI nel repository. Questo viene fatto mediante un Check-In dellelemento. Il check-in rilascia leventuale lock sullelemento e crea una nuova versione del SCI nel repository. Lintroduzione di pi modifiche che generano una nuova situazione consistente porta alla definizione di una nuova baseline per il progetto.
Versioning: la gestione dellevoluzione delle varie versioni di tutti i SCI possibile solo con lutilizzo di strumenti di
Versioning, che permettono: Gestione delle versioni, con regolamentazione degli accessi al repository da parte di tutti i membri del team. Confronto fra versioni diverse dello stesso file. Memorizzazione di commenti di check-in, per una facile tracciabilit delle modifiche introdotte. Assegnamento di tag a particolari versioni di un file, al fine di identificare versioni particolarmente significative. Gestione di modifiche concorrenti allo stesso file. Annullamento di modifiche con regressione a versione precedente. Possibilit di sviluppi paralleli. Allineamento automatico delle modifiche.
Refactoring: uno dei principi fondamentali del refactoring la bassissima probabilit di introdurre nuovi bachi
effettuando la reingegnerizzazione. Il risultato ottenuto attraverso lesecuzione sistematica di test sullapplicazione. Il refactoring: migliora il design della soluzione software, aiuta ad eliminare duplicazioni di codice, migliora la comprensibilit del codice, aiuta a scoprire errori e bachi, aiuta a migliorare le performance dellapplicazione, permette di aumentare la produttivit degli sviluppatori. I Processi Agili fondano la loro stessa natura sul refactoring continuativo della soluzione in via di sviluppo.
Catalogo dei refactorings: tutti i refactorings presentati nel testo hanno la seguente forma:
Nome: identificativo univoco del re factoring. Descrizione: breve descrizione del refactoring, accompagnata da diagrammi UML e/o codice sorgente per illustrare la soluzione prima e dopo il refactoring. Motivazione: descrizione delle finalit del refactoring, dei casi in cui pu essere applicato, dei casi in cui deve essere evitato. Meccanica: descrizione dettagliata dei passi da compiere per effettuare il re factoring. Esempio: illustra un utilizzo molto semplice del re factoring. Il catologo presenta in totale 72 refactorings.
public static void P(){ // Entry while(A) { X; if (B) { if(C) Y; else Z; // p } else { V; W; } // q } // Exit: r } }
int trasformaVett(int A[], int N, int X) { int i = 0; while (i < N && A[i] < X) { if (A[i] < 0) A[i] = -A[i]; i++; } return 0; }