Design_in-the-large
Design del Software In-Large Panoramica
Obiettivi di Progettazione
Obiettivo della Fase di Progettazione:
Dominare la complessità nello sviluppo dei prodotti software.
Come Raggiungere:
Decomporre il problema in segmenti più piccoli e gestibili.Avere come obiettivo che la "somma delle complessità" dei problemi più piccoli sia inferiore alla complessità totale.
Obiettivi Specifici nella Progettazione Software
Progettare per il Cambiamento
Anticipazione dei Cambiamenti:
Considerare i potenziali cambiamenti futuri invece delle sole esigenze attuali.Esempio: Il prototipazione evolutiva consente di adattarsi ai cambiamenti.
Concetto di Famiglia di Programmi
Concettualizzare un programma e le sue varianti come parte di una famiglia, concentrandosi sulla progettazione dell'intera famiglia, non solo dei singoli componenti.Esempio: Sistemi di prenotazione di strutture.Per gli hotel: prenotazioni per camere, ristoranti, spazi per conferenze, ecc.Per le università: molte funzionalità condividono somiglianze, anche se possono esistere differenze.
Cambiamenti Probabili nei Sistemi Software
Tipi di Cambiamenti Possibili
Algoritmi: Esempio: Cambiamento da bubblesort a quicksort.
Strutture Dati: Una parte significativa dei costi di manutenzione deriva dai cambiamenti (il 17% attribuito ai dati errati).
Macchine Astratte Sottostanti: Cambiamenti nell'hardware, sistemi operativi o DBMS, che portano a problemi di portabilità.
Cambiamenti Ambientali: Esempio: Cambiamenti normativi (come l'EURO).
Strategie di Sviluppo: Esempio: Dimensioni dovute alla prototipazione evolutiva.
Architettura Software
Definizione
Risultato della fase di progettazione che produce l'architettura software, definendo i componenti computazionali e le loro interazioni (Garlan & Shaw, 1996).
Componenti e Interazioni
Definiti a diversi livelli di astrazione e prospettive.
Meccanismi:
Quali sono i costituenti e come sono strutturati?
Stili:
Quali stili architettonici possono essere applicati?
Meccanismi vs. Stili
Distinzioni nell'Architettura Software
Meccanismi: Descrivono come l'architettura è costruita (es. costituenti della scocca di una macchina).
Stili: Caratterizzano le architetture relative l'una all'altra (es. coupé vs. furgone).
Meccanismi e stili offrono due viste dell'architettura, con distinzioni a volte sfumate.
Concetti e Principi di Progettazione Chiave
Principi Fondamentali:
Decomposizione, Astrazione, Nascondimento delle Informazioni, Modularità, Estensibilità, Gerarchia, Struttura delle Macchine Virtuali, Famiglie di Programmi.
Obiettivi:
Gestire la complessità software, migliorare i fattori di qualità software, facilitare il riutilizzo sistematico.
Moduli e Interfacce
Definizione e Scopo
Un Modulo: Una parte di un sistema che fornisce un insieme di servizi ad altri moduli.
Servizi: Elementi computazionali utilizzati da altri moduli.
Interfacce: Definisce l'insieme di servizi del modulo (contratto) con gli utenti, composto da un'interfaccia e dalla sua implementazione.
Relazioni tra i Moduli
USES: Definisce le dipendenze dove un modulo dipende da un altro per i servizi.
È_COMPONENTE_DI: Descrive moduli di livello superiore creati da più moduli di livello inferiore.
EREDITA: Pertiene ai sistemi orientati agli oggetti e alla loro gerarchia.
Progettazione dei Moduli
Criteri per l'Identificazione
Identificare i moduli in base alle funzionalità e a come si connettono con altri moduli.Minimizzare le interconnessioni tra i moduli.
Progettazione delle Interfacce del Modulo
Distinguere tra le funzioni del modulo per gli altri e le meccaniche interne.Mira a nascondere le informazioni per massimizzare la modificabilità.
Conclusioni sulla Progettazione Modulare
Un modulo incapsula la sua logica interna e protegge i suoi meccanismi interni.Cambiamenti nei componenti nascosti non dovrebbero influenzare l'utente finale se le interfacce sono mantenute.
Studio di Caso: Il Sistema di Indicizzazione KWIC
Breve Panoramica
Il sistema KWIC (Key Word In Context) crea un indice di spostamento circolare da un insieme di righe e lo presenta in ordine alfabetico.
Cambiamenti Previsti
Cambiamenti negli algoritmi per ottimizzare le prestazioni, alterazioni nella rappresentazione dei dati per l'efficienza e potenziali miglioramenti come la rimozione delle parole di rumore.
Confronto delle Soluzioni
La decomposizione funzionale consente flessibilità ai cambiamenti, ma può portare a complicazioni man mano che i requisiti crescono.Il metodo di Parnas promuove l'astrazione e la divisione delle preoccupazioni mentre distacca le interdipendenze.I tubi e filtri semplificano il flusso di dati, ma mancano di persistenza della memoria, portando a potenziali complessità.