Sommario dei Principi
- Introduzione
- Principi fondamentali
- Rigore e Formalità
- Separazione degli Interessi
- Modularità
- Anticipazione del Cambiamento
- Astrazione
- Generalità
- Incrementalità
- Esempio: produzione di un compilatore
Software Engineering Research LABoratory
Caivano - Piccinno - Barletta | Il Software e L'Ingegneria del Software
2
Introduzione ai Principi
Software Engineering Research LABoratory
3
Caivano - Piccinno - Barletta | Il Software e L'Ingegneria del Software
3
Principi dell'Ingegneria del Software
- I principi formano le basi dei metodi, tecniche, metodologie e
strumenti
- Sette principi sono fondamentali in tutte le fasi dello sviluppo
software:
❑
Produzione
❑
Manutenzione
- La modularità e la pietra angolare della progettazione dei
sistemi software
4
Caivano - Piccinno - Barletta | Il Software e L'Ingegneria del Software
Software Engineering Research LABoratory
4
Applicazione dei Principi
- I principi descrivono proprietà desiderabili dei prodotti e dei
processi in termini generali ed astratti
- I principi sono applicabili in tutti i processi di sviluppo del
software, indipendentemente da:
❑
Il contesto di sviluppo
❑
Il tipo di sistema da sviluppare
❑
L'ambiente di sviluppo
❑
L'ambiente target del sistema software
- I principi si trasformano in pratiche attraverso metodi e tecniche
❑
Spesso i metodi e le tecniche sono confezionate in metodologie
❑
Le metodologie possono essere supportate dagli strumenti che
potenziano gli sviluppatori
Software Engineering Research LABoratory
5
Caivano - Piccinno - Barletta | Il Software e L'Ingegneria del Software
5
Rappresentazione Grafica delle Relazioni
Principi
dell'Ingegneria
del Software
si fondano su
si fondano su
Tecniche
Metodi
usano
usano
Metodologie
supportano
Strumenti
Software Engineering Research LABoratory
6
Caivano - Piccinno - Barletta | Il Software e L'Ingegneria del Software
6
Rigore e Formalità
1
Software Engineering Research LABoratory
7
Caivano - Piccinno - Barletta | Il Software e L'Ingegneria del Software
7
Concetti di Rigore e Formalità
- L'Ingegneria del Software è un'attività creativa, ma deve
essere praticata sistematicamente
- Il RIGORE è il giusto complemento alla creatività per aumentare la
confidenza in tutto ciò che si sviluppa
- Il Rigore è la coerenza con le pre-condizioni e con lo scopo del
manufatto che si sta producendo oltre che con il metodo e le
tecniche che si intendono utilizzare nella produzione
❑
Inflessibilità, esattezza, precisione assoluta
- Esistono diversi livelli di rigore, quello più alto è la FORMALITÀ
- Formalità è l'uso esclusivo di formalismi matematici per guidare lo
sviluppo del software e per valutarlo
Software Engineering Research LABoratory
8
Caivano - Piccinno - Barletta | Il Software e L'Ingegneria del Software
8
Esempio di Prodotto Rigoroso
- Precondizione
❑
3 un Volo con un tempo di Durata prevista
❑
Il volo è classificabile come: Nazionale, Intracontinentale, Intercontinentale
- Postcondizione
❑
Definiti i Servizi di Ristoro da erogare
- Rigoroso
❑
Se Durata del Volo < 1hh: distribuire bevande
❑
Se Durata del Volo >1 hh e Tipo di Volo = Intracontinentale: Distribuire Bevande e
Snack
❑
Se
Durata
del
Volo
>1hh
e
Tipo
di
Volo
=
Intercontinentale:
Distribuire Bevande e Pranzo
di
Volo
=
Intercontinentale:
❑
Se
Durata
Volo
>
8hh
e
Tipo
Distribuire Bevande, Pranzo e Colazione.
. Consente di derivare rigorosamente e sistematicamente i dati
per la verifica dinamica
Software Engineering Research LABoratory
9
Caivano - Piccinno - Barletta | Il Software e L'Ingegneria del Software
9
Esempio di Prodotto Formale
- Formale
❑
Condizioni
Durata Volo : [1,8 [
Tipo di Volo : [Nazionale; Intracontinentale; Intercontinentale]
❑
Azioni
Distribuzione : [Bevande; Snack; Pranzo; Colazione]
Distribuzione = F (Durata Volo, Tipo Volo)
- Durata Volo
< 1
[1 ... 8]
> 8
- Tipo Volo
Nazionale
Intracontinentale or Intercontinentale
Nazionale
Intracontinentale
Intercontinentale
Nazionale or Intracontinentale
Intercontinentale
- Bevanda
X
X
X
X
- Snack
X
.
- Pranzo
.
.
X
- Colazione
x
1
2
3
4
5
6
7
10
Caivano - Piccinno - Barletta | Il Software e L'Ingegneria del Software
Software Engineering Research LABoratory
X
Esempio di Processo Rigoroso
- La descrizione rigorosa delle attività e delle relazioni tra loro
da eseguire durante lo sviluppo del software aiuta a:
❑
gestire il progetto
❑
accertare i tempi ed i costi del progetto
Software Engineering Research LABoratory
Caivano - Piccinno - Barletta | Il Software e L'Ingegneria del Software
11
Vantaggi del Rigore e Formalismo
- Il rigore consente di sviluppare software con buoni livelli di qualità
❑
La scrittura rigorosa della documentazione la rende comprensibile e tracciabile,
quindi l'applicazione software ha una buona manutenibilità
. Il formalismo consente la gestione automatica dello sviluppo
software
❑
Un programma specificato formalmente può essere generato automaticamente
❑
Un processo descritto formalmente può essere monitorato automaticamente e
se non sono implicate attività umane può essere eseguito automaticamente
- I concetti trattati nello sviluppo di un'applicazione sono ad alto contenuto
semantico, quindi sono difficilmente formalizzabili
. Pertanto è necessario che siano almeno rigorosi per evitare che si
realizzi software con dissonanze concettuali; questo è un rischio che
quando si verifica genera molte diseconomie
Software Engineering Research LABoratory
Caivano - Piccinno - Barletta | Il Software e L'Ingegneria del Software
12
Svantaggi del Rigore e Formalismo
- È difficile per uno sviluppatore mantenere sistematicamente lo
stesso
livello di rigore; spesso
egli
si
comporta
non
conformemente
- Il formalismo richiede molto impegno persona
Software Engineering Research LABoratory
Caivano - Piccinno - Barletta | Il Software e L'Ingegneria del Software
13
Separazione degli Interessi
2
SEPARAZIONE
DEGLI INTERESSI
Caivano - Piccinno - Barletta | Il Software e L'Ingegneria del Software
14
Software Engineering Research LABoratory
Concetti di Separazione degli Interessi
- Separare le decisioni necessarie per risolvere aspetti diversi
dello stesso problema
- Esistono diverse modalità di separazione:
❑
Per Tempo. Aspetti che si rilevano in tempi diversi
❑
Per Caratteristiche. Ogni aspetto rilevante corrisponde ad una
caratteristica, ognuna è analizzata separatamente dall'altra
❑
Per Prospettive. Ogni aspetto attiene alla prospettiva di un portatore di
interessi
❑
Per Parti. Ogni capacità del sistema deve riguardare una parte di esso
Software Engineering Research LABoratory
Caivano - Piccinno - Barletta | Il Software e L'Ingegneria del Software
15
Esempi di Separazione per Prodotto e Processo
- Separazione per Tempo. I problemi e le attività dell'analisi si separano
da quelli della progettazione
- Separazione per Caratteristiche. Si progetta prima il sistema software
con una elevata qualità della struttura. Successivamente, se fosse
necessario, si affina la struttura perché sia efficiente quanto è richiesto
- Separazione per Prospettive. Si struttura il sistema per assicurare una
buona usabilità; si rivede poi la struttura per assicurare una
manutenzione economica; si implementano le specifiche riusando
software disponibile per assicurare economia nello sviluppo; si
progetta l'interfaccia utente per rendere usabile il sistema; si prova il
sistema per verificare quanto sia efficiente
- Separazione per Parti. Le applicazioni devono essere progettate con le
seguenti parti:
❑
Gestire l'interfaccia
❑
Gestire le regole di dominio applicativo
❑
Gestire i dati persistenti
- Ognuna di queste parti deve essere suddivisa, sino ad arrivare alle capacità prime
che costituiranno l'architettura
Software Engineering Research LABoratory
Caivano - Piccinno - Barletta | Il Software e L'Ingegneria del Software
16
Vantaggi della Separazione degli Interessi
- I problemi da affrontare nello sviluppo di un'applicazione software
sono di diversi tipi ed in diversi domini. Tutti richiedono
compromessi specifici
- L'applicazione di questo principio consente di analizzare, uno per
volta, i differenti aspetti/interessi di un grande problema,
diminuendo
così
il numero di decisioni da assumere
contemporaneamente
Software Engineering Research LABoratory
Caivano - Piccinno - Barletta | Il Software e L'Ingegneria del Software
17
Svantaggi della Separazione degli Interessi
- Separare gli aspetti potrebbe far perdere la ottimizzazione
perché si assumono decisioni riguardanti aspetti differenti che
potrebbero trascurare la relazione esistente tra alcune di esse
❑
Per questo motivo due o più aspetti con caratteristiche comuni
conviene non separarli
Software Engineering Research LABoratory
Caivano - Piccinno - Barletta | Il Software e L'Ingegneria del Software
18
Modularità
3
MODULARITA
Caivano - Piccinno - Barletta | Il Software e L'Ingegneria del Software
19
Software Engineering Research LABoratory
Concetti di Modularità
- I Moduli sono parti del Sistema Software
❑
Ognuno realizza una parte delle sue funzioni
❑
Tutti cooperano tra loro per realizzare gli scopi del Sistema Software
- I moduli devono avere
❑
Alta coesione interna: misura la forza che giustifica la coesistenza
logica degli
elementi interni di un modulo (istruzioni, procedure,
metodi ... )
❑
Basso accoppiamento tra loro: misura la densità ed il tipo di
interdipendenza tra moduli
- Un'applicazione si può costruire secondo due vie
❑
Si scompone il problema in moduli e successivamente si dettaglia il
progetto di ognuno di essi: approccio Top Down
❑
Si parte dai moduli in dettaglio e si compongono per ricavare moduli
sempre più grandi: approccio Bottom Up
Software Engineering Research LABoratory
Caivano - Piccinno - Barletta | Il Software e L'Ingegneria del Software
20
Esempi di Struttura Modulare
Struttura ad
alto accoppiamento e
bassa coesione interna
Struttura con
alta coesione e
basso accoppiamento
Software Engineering Research LABoratory
21
Caivano - Piccinno - Barletta | Il Software e L'Ingegneria del Software