160 likes | 260 Views
La progettazione. È applicata indipendentemente dal modello di processo software utilizzato. Parte dal punto in cui sono stati analizzati e modellati i requisiti del software
E N D
La progettazione • È applicata indipendentemente dal modello di processo software utilizzato. • Parte dal punto in cui sono stati analizzati e modellati i requisiti del software • È l’ultima azione di ingegneria del software che rientra nell’attività di modellazione, getta le basi per le attività di costruzione • Generazione e collaudo del codice Introduzione
Modello progettuale Diagrammi di stato Diagrammi di sequenza Modelli dinamici Progettazione a livello dei componenti Testo dei casi d’uso Diagramma dei casi d’uso Diagramma di attività Modello analitico Progettazione dell’interfaccia Modelli comportamentali Modelli strutturali Progettazione dell’architettura Diagrammi di classi Progettazione dei dati e delle classi Modello progettuale Introduzione
Dal modello analitico al modello progettuale • Ogni elemento del modello analitico fornisce informazioni necessarie per produrre i modelli progettuali necessari per una specifica completa del progetto. Introduzione
Il documento di progetto • Progetto dei dati • Progetto delle classi • Progetto dell’architettura • Progetto dell’interfaccia • Progetto a livello dei componenti Introduzione
Qualità della progettazione Attributi di qualità • FURPS: • Funzionalità: valutata controllando le capacità del programma, generalità delle funzioni e sicurezza del sistema globale • Usabilità: valutata considerando i fattori umani, l’estetica generale, la coerenza e la documentazione • Affidabilità: valutata misurando la frequenza e la gravità dei guasti, la precisione dei risultati di output, il tempo Meantimetofailure (MMTF), la capacità di recuperare una situazione di guasto e la prevedibilità del programma • Prestazioni: misurate in termini di velocità di elaborazione, tempo di risposta, consumo di risorse, produttività ed efficienza • Supportabilità: combina • l’estendibilità -capacità di estendere il programma- + • la facilità di servizio + • l’adattabilità = • Facilità di manutenzione Con • Collaudabilità • Compatibilità • Configurabilità – capacità di organizzare e controllare gli elementi della configurazione del software • Facilità di installazione • Facilità di individuazione dei problemi Introduzione
Principi della progettazione (1/2) • Astrazione: • nel considerare una soluzione modulare a un problema si esprime la soluzione a grandi linee nel linguaggio del contesto del problema: astrazione elevata, si procede poi via via a livelli di astrazione inferiori adottando descrizioni più dettagliate • Modularità: • Myers 78.il software viene suddiviso in più componenti chiamati moduli che vengono integrati per soddisfare i requisiti del problema, la modularità rende più gestibile il problema • Information hiding: • Parnas 72. i moduli devono essere caratterizzati in base alle decisioni progettuali in modo tale che le informazioni (dati e algoritmi) risultino inaccessibili ad altri moduli che non necessitano di tali informazioni. Utile in fase di collaudo e manutenzione: un errore introdotto in fase di modifica si propagherà con minore probabilità alle altre parti del software Introduzione
Principi della progettazione (2/2) • Indipendenza funzionale: • Proposta da Wirth 71 e Parnas 72. deriva dai precedenti tre principi. Si vuole progettare software in modo che ciascun modulo svolga una determinata sottofunzione dei requisiti e abbia un’interfaccia semplice, se considerata con le altre parti della struttura del programma • Facilita manutenzione e collaudo, poiché sono limitati gli effetti secondari provocati da una modifica al progetto o al codice, si riduce la propagazione degli errori. • È valutata mediante criteri qualitativi: • Coesione: forza funzionale relativa di un modulo • Accoppiamento : interdipendenza relativa fra moduli • Raffinamento: • stepwiserefinement, strategia di progettazione top down (Wirth, 71). Un programma viene sviluppato raffinando successivamente i vari livelli di dettaglio procedurale. • Un’istruzione o una astrazione procedurale viene progressivamente decomposta fino a raggiungere le istruzioni del linguaggio di programmazione. • È un processo di elaborazione • Astrazione e raffinamento sono concetti complementari • Rifattorizzazione: • Fowler 99. si tratta si tratta di un’attività progettuale introdotto per molti metodi agili • È una tecnica di riorganizzazione che semplifica la progettazione o la programmazione di un componente senza modificare la sua funzione o il suo comportamento, migliorando la struttura interna. • Esempio: esaminare il progetto alla ricerca di elementi ridondanti, non utilizzati algoritmi inefficienti, strutture dati mal realizzate o inappropriate • Esempio individuare un componente con scarsa coesione. Introduzione
Elementi progettuali • Architettura: • Architettura del software: fa riferimento alla struttura generale del software e alle modalità in cui tale struttura fornisce a un sistema un’integrità concettuale • Può essere rappresentata utilizzando uno o più modelli: • Modelli strutturali: • Rappresentano l’architettura come una raccolta organizzata di componenti; hanno un elevato livello di astrazione allo scopo di individuare elementi progettuali ripetibili dell’architettura presenti in applicazioni simili. • Modelli dinamici: • Riguardano gli aspetti comportamentali dell’architettura del programma, indicando come la configurazione o la struttura del sistema possono cambiare in funzione degli eventi esterni • Modello: • È la descrizione che fornisce l’astrazione di una soluzione valida ad un problema ricorrente in un determinato contesto sulla base di determinati vincoli, fornisce pertanto una struttura progettuale valutando le forze che possono avere impatto sul modo in cui tale modello è applicato ed utilizzato. • Lo scopo del modello progettuale è quello di fornire una descrizione mediante la quale stabilire se il modello: • È applicabile al lavoro corrente • Può essere riutilizzato • Può fungere da guida per sviluppare un modello simile ma funzionalmente o strutturalmente differente. Introduzione
Le classi progettuali ( ½) • Il modello analitico definisce un insieme di classi analitiche. • Ognuna descrive elementi del dominio del problema, evidenziando gli aspetti del problema visibili al cliente o all’utente. • Il modello progettuale definisce un insieme di classi di progettazione che: • Raffinano le classi analitiche fornendo i dettagli progettuali necessari all’implementazione • Completano l’insieme di classi analitiche, mediante la definizione di un nuovo insieme che consentano di implementare l’infrastruttura software necessarie per supportare la sioluzione operativa individuata. Introduzione
Le classi progettuali ( 2/2) • Classi dell’interfaccia utente: • Definiscono le astrazioni necessarie per le interazioni utente-macchina • Classi del dominio operativo: • Sono generalmente raffinamenti delle classi analitiche definite precedentemente: identificano metodi e attributi necessari per implementare gli elementi del dominio operativo • Classi di sistema: • Implementano le funzioni di gestione del software e di controllo che consentono al sistema di funzionare e di comunicare con l’ambiente di calcolo o con il mondo esterno • Classi dei processi: • Implementano le astrazioni operative di basso livello necessarie per gestire le classi del dominio operativo • Classi persistenti: • Rappresentano archivi di dati che persisteranno oltre l’esecuzione del software Introduzione
Qualità delle classi progettuali • Una classe progettuale deve essere: • Completa e sufficiente: • avere cioè un incapsulamento completo di tutti gli attributi e i metodi necessari alla classe stessa. • Avere: • Primitività: • I metodi associati alla classe devono garantire l’esecuzione di un servizio per la classe, una volta che questo è implementato la classe non deve fornire nessun altro modo per ottenere lo stesso servizio. • Elevata coesione: • Una classe è coesa se ha responsabilità limitate e specifiche, con metodi e attributi appropriati per implementare tali responsabilità • Basso Accoppiamento: • È necessario che le classi collaborino tra loro, tuttavia la collaborazione deve essere mantenuta a un livello minimo: • Se il modello è molto accoppiato tutte le classi collaborano con le altre, il sistema sarà difficile da implementare, collaudare, manutenere. Introduzione
Dimensioni del modello progettuale Alta Diagrammi delle classi Package analitici Modelli CRC Diagrammi delle collaborazioni Diagrammi flusso dei dati Diagrammi flusso di controllo Descrizione elaborazione Diagrammi delle classi Package analitici Modelli CRC Diagrammi delle collaborazioni Diagrammi flusso dei dati Diagrammi flusso di controllo Descrizione elaborazione Diagrammi di stato Diagrammi di sequenze Modello analitico Casi d’uso – testi Diagrammi casi d’uso Diagrammi attività Diagrammi delle collaborazioni Diagrammi di stato Diagrammi sequenze Requisiti: Vincoli Interoperabilità Obiettivi e configurazione Astrazione Realizzazione delle classi progettuali Sottosistemi Diagrammi delle collaborazioni Diagrammi componenti Classi progettuali Diagrammi delle attività Diagrammi sequenze Realizzazione classi progettuali Sottosistemi Diagrammi collaborazioni Diagrammi componenti Classi progettuali Diagrammi delle attività Diagrammi sequenziali Progettazione interfaccia tecnica Progettazione interfaccia navigazione Progettazione interfaccia grafica (GUI) Modello progettuale Raffinati in : Raffinati in : Realizzazione delle classi progettuali Sottosistemi Diagrammi delle collaborazioni Diagrammi componenti Classi progettuali Diagrammi delle attività Diagrammi di sequenze Bassa Diagrammi di deployment Elementi dell’architettura Elementi dell’interfaccia Elementi a livello dei componenti Elementi a livello di dispiegamento Processo Introduzione
Le dimensioni della progettazione • Differenze tra modello analitico e modello progettuale: • Gli elementi del modello progettuale usano più o meno gli stessi diagrammi UML impiegati nel modello analitico: • I diagrammi del modello analitico vengono raffinati ed elaborati nell’ambito del progetto • Vengono forniti maggiori dettagli implementativi e si pone definisce la struttura e lo stile dell’architettura • Si definiscono i componenti che costituiscono l’architettura • Si definisce l’interfaccia fra i componenti e l’ambiente esterno • Gli elementi del modello lungo l’asse orizzontale non vengono sviluppati in maniera sequenziale. • Generalmente si definisce per prima l’architettura per identificare l’insieme su cui si opererà • La progettazione dell’architettura è seguita dalla progettazione dell’interfaccia e dalla progettazione dei componenti, che generalmente si svolgono in parallelo. • Il modello di dispiegamento è generalmente completato al termine della realizzazione del progetto. Introduzione
Elementi del modello progettuale • Progettazione dei dati: • Crea il modello dei dati e delle informazioni rappresentate ad un elevato livello di astrazione • Progettazione dell’architettura: • Fornisce una visione globale del sistema software che si sta progettando • Progettazione dell‘interfaccia: • Mostra l’ingresso e l’uscita delle informazioni nel sistema e le comunicazioni che si svolgono fra i componenti definiti dall’architettura • Progettazione a livello dei componenti: • Descrive tutti i dettagli di ciascun componente software • Progettazione a livello di dispiegamento: • Descrive in che modo la funzionalità del software e dei sottosistemi verrà allocata nell’ambiente di calcolo fisico che supporterà il software. Introduzione
Fonti bibliografiche • R. S. Pressman, “Principi di Ingegneria del software”, IV edizione, Mcgraw-Hill, 2004. • G. Myers, “ Composite Structured Design”, Van Nostrand, 1978. • D.L. Parnas, “ On criteriatobeused in Decomposingsystemsintomodules”,, CACM, vol.14, no.1 April 1972, pp-221-227. • N. Wirth,” ProgramDevelopmentbystepwiserefinement”, CACM, vol.14, no.1, 1971. • M. Fowleret al. “ Refactoring: Improving the design ofexisting code”, Addison-wesley”, 2000. Introduzione