380 likes | 548 Views
Software Engineering & Software Design SWEBOK. 1. Progetto Software @ dmi.unict.it malus@freaknet.org. Software Design. Cosa tratteremo? - Cos’è il Software Design... - Pubblicazioni sul Software Design... - Struttura ed architettura del Software...
E N D
Software Engineering & Software Design SWEBOK 1 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design Cosa tratteremo? - Cos’è il Software Design... - Pubblicazioni sul Software Design... - Struttura ed architettura del Software... - Analisi della qualita' del Software... - Notazioni e linguaggi relativi al Software Design... - Strategie e metodi relativi al Software Design... 2 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design L'IEEE 610.12-90 definisce il design come “il processo di definizione della struttura, dei componenti, delle interfacce e altre caratteristiche unito al risultato di tale processo. Per definizione il Software Design e' l'essenza dell'ingegneria del software, tramite il quale i componenti vengono analizzati per ricavarne la struttura interna del software. 3 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design Ma a che ci serve questo lavoro? Grazie al Software Design si possono creare più modelli del progetto che si deve implementare. Possiamo quindi analizzarli e valutarli per decidere quale soddisfi meglio i requisiti richiesti. Infine è possibile sfruttare il modello per pianificare il lavoro. 4 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design Per l'IEEE/EIA 12207 (software life cycle processes) il Software Design consiste nell'unione dell'analisi dei requisiti con la costruzione del software. - Software Architectural Design: descrive la struttura di alto livello del software. - Software Detailed Design: descrive la struttura di basso livello, utile per la costruzione del software. 5 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design Della terminologia associata al Software Design se ne e' occupato Tom DeMarco [Dem99] e spiega che che esistono 3 livelli di conoscenza del Software Design: - D-design --> basso livello (decomposizione del software e analisi dei componenti). - FP-design --> family pattern (modelli ed interfacce). - I-design --> invention ( inventiva a run-time) 6 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design Ma... quali sono le basi del Software Design? - Idee generali: L'attenzione del Software Design non e' rivolta solo al prodotto finale ma anche alla risoluzione di difficili problemi. - Contesto del Software Design: tutto il ciclo di vita...... analisi dei requisiti --> progettazione --> costruzione --> testing --> 7 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design - Processo di progettazione del software: - organizzazione dei componenti. - progetto dettagliato dei componenti. - Tecniche abilitate: sono delle nozioni fondamentali per un buon approccio con diversi software. 8 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design - Astrazione: è un processo tramite il quale due componenti diverse sembrino identiche. - astrazione per parametrizzazione. - astrazione per specificazione. -- procedurale. -- dati. -- interazione. - Legame e coesione (coupling and cohesion): - legame: la forza con cui i moduli sono uniti. - coesione: come i moduli sono messi in relazione. 9 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design - Decomposizione e modularizzazione: è il decomporre e modularizzare il software in sotto-software ognuno dei quali svolge una funzione specifica. - Incapsulamento ed occultamento delle informazioni: pacchettizzazione degli elementi ed inaccessibilità dall'esterno ai dettagli riservati. 10 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design - Separazione di interfaccia ed implementazione: creazione di una interfaccia pubblica conosciuta dall'utente ma alla quale vengono celati i meccanismi ed i dettagli del funzionamento del software. - Adeguatezza, completezza e primitività: se il software ha questi attributi vuol dire che è un buon software. 11 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design Publicazioni sul Software Design ce ne sono state tante, alcune puntano alla qualità, altre all'organizzazione. Ogni progetto è indirizzato verso l'uno o l'altro aspetto. Inoltre ci sono pubblicazioni che puntano a quello che sta intorno all'applicazione. Tali pubblicazioni puntano quindi alla funzionalità del sistema ed alle performance. Elenchiamo alcune delle principali chiavi: 12 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design - coerenza: come decomporre il software in thread, processi, ecc. tutto in relazione allo schedulatore. - controllo e manipolazione degli eventi: organizzare e controllare il flusso dei dati e le chiamate agli eventi. - ripartizione dei componenti: controllare il supporto dell'hardware della macchina su cui il software deve girare. 13 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design - manipolazione degli errori e delle eccezioni e tolleranza dei fallimenti: come prevenirli. - interazione e presentazione: in che modo l'utente interagisce e capisce l'applicazione. - durata: il tempo necessario per l'implementaione. 14 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design Struttura ed architettura del Software. L'architettura del software si occupa della descrizione di sottosistemi e componenti ricavati dalla scomposizione di un'applicazione. Descrive quindi il modo in cui il Software è organizzato e costruito. Con l'avvento di questa disciplina a meta' degli anni '90 nacque lo stile di programmazione. Inoltre il progettare l'architettura di un software può essere utile per il riutilizzo dello stesso. I punti principali dell'architettura del software sono i seguenti: 15 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design - strutture e punti di vista architetturali: ogni minima sfaccettatura dovrebbe essere documentata. Le sfaccettature vengono spesso chiamate “views”. Una view rappresenta una parte del progetto e ne specifica le proprietà. Esse inoltre possono essere di tipo: - logico - applicativo - fisico - evolutivo - ecc. 16 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design - stile di architettura: uno stile di architettura è un set di regole, nonchè limitazioni, da seguire affinchè il software rientri in una data famiglia architetturale. Gli stili principali seguono delle linee guida che possono essere così schematizzate: -- struttura generale. -- sistemi distribuiti. -- sistemi interattivi. -- sistemi adattabili. -- altri. 17 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design - progetto dei modelli: il modello è una soluzione veloce ad un semplice problema relativo ad un contesto. i principali tipi di modelli sono: -- modello creativo. -- modello strutturale. -- modello comportamentale. 18 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design - famiglie di programmi e strutture: le famiglie di strutture sono molto importanti per il riutilizzo del software. Basta identificare le similitudini tra il software in questione ed una data famiglia di strutture. 19 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design - OO programming: La programmazione orientata agli oggetti svolge un ruolo fondamentale nella progettazione strutturale del software. Inoltre grazie ad essa e' piu' semplice inserire estenzioni (plugins) nel software. 20 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design Analisi della qualità e valutazione del Software Design. - attributi di qualità: vengono così suddivisi... -- ilities: mantenimento, portabilità, testing, debugging. -- nesses: correttezza, robustezza, sicurezza, usabilità. 21 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design - analisi della qualità e valutazione delle tecniche: ci sono tre step... -- revisione del software design: revisione, ispezione, tracciamento dei requisiti. -- analisi statica: revisione dello schema del progetto. -- analisi dinamica: simulazione, testing. 22 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design - misurazioni: servono a valutare ma soprattutto a quantificare vari aspetti del software. le misurazioni possono essere di due tipi... -- function oriented: effettua una scomposizione della struttura funzionale e i componenti vengono rappresentati tramite un diagramma gerarchico. -- object oriented: viene fatta una scomposizione al livello delle classi e viene rappresentata una gererchia delle stesse. 23 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design Notazioni per il Software Design. Esistono molti linguaggi, sia testuali che grafici, dediti alla rappresentazione dei prodotti del Software Design. Si dividono in due grandi gruppi - static view. Per la descrizione strutturale, spesso grafici puntano spesso alla comprensione delle interconnessioni tra i componenti. - dynamic view. Per la descrizione comportamentale, spesso testuali. 24 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design Elenchiamo ora vari linguaggi di tipo static view... -- architectural description languages (ADLs): linguaggi che descrivono le interconnessioni. -- class and object diagrams: relazioni tra le classi e gli oggetti. -- component diagrams: relazioni tra componenti fisiche e interfacce. -- collaboration responsabilities cards (CRCs): danno un nome, proprieta' e dipendenze ad una componente 25 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design -- deployment diagrams: rappresentano l'ambiente fisico in cui il software deve girare. -- entity-relationship diagrams: rappresentano un modello concettuale dell'immagazzinamento dei dati. -- interface description languages (IDLs): simili a linguaggi di programmazione definiscono le interfacce dei componenti software. 26 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design -- jackson structure diagrams: descrivono i meccanismi delle strutture. -- structure charts: tabelle che schematizzano le chiamate dei componenti. 27 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design E ora passiamo ai linguaggi di tipo dynamic view... -- activity diagrams: controllano il flusso di esecuzione. -- collaboration diagrams: controllano l'interazione tra gli oggetti e il modo in cui essi scambiano i messaggi. -- data flow diagrams: mostrano il flusso dei dati tra i processi. 28 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design -- decision tables and diagrams: mostrano le complesse condizioni e le relative azioni -- flowcharts and structured flowcharts: mostrano il flusso di controllo e le azioni associate. -- sequence diagrams: mostrano le interazioni tra gruppi di oggetti e soprattutto la cronologia degli scambi dei messaggi. -- state transition and state charts diagrams: mostrano il controllo di flusso al variare dello stato della macchina. 29 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design -- formal specification languages: linguaggi testuali che in maniera rigorosa ma astratta descrivono passo per passo lo stato del software. -- pseudo-code and program design languages (PDLs): simili a linguaggi di programmazione strutturata servono per dare una prima forma a procedure e metodi a livello detailed design. 30 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design Strategie e metodi del Software Design Nello sviluppo del software si possono adottare strategie e metodi. Le strategie sono quasi una guida mentre i metodi scendono di più nello specifico. I metodi inoltre provvedono alla scelta della notazione e a fornire delle linee guida per la progettazione. Elenchiamo alcune strategie e metodi... 31 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design - strategie generali: la guerra si combatte tra top-down e bottom-up. Le linee generali includono l'astrazione e l'incapsulamento, l'uso di modelli e modelli di linguaggio 32 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design - progettazione orientata alle funzioni: è il metodo classico, si individua la funzione principale e poi con strategia top-down si prosegue. 33 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design - metodo orientato agli oggetti: molti metodi di Software Designing sono basati sulla OO Programming. Si deve soprattutto sfruttare la potenza dell'astrazione permessa dai moderni linguaggi di alto livello. 34 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design - design basato su una struttura dati: si parte da un processo che produce e/o modifica dati e poi si costruisce il software attorno. 35 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design - design basato sui componenti: si sviluppano parallelamente le componenti per poi assemblarle. - altri... 36 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design Spero di essere stato chiaro e grazie per l'attenzione :-)))) 37 Progetto Software @ dmi.unict.it malus@freaknet.org
Software Design Se volete scaricare queste slides sono disponibili al sito http://www.maluslab.net/ per domande non fatte in questa sede malus@freaknet.org 38 Progetto Software @ dmi.unict.it malus@freaknet.org