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à.