Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per...

35
Corso di Ingegneria del Software Paolo Bottoni Principi dell’Ingegneria del Software Lucidi tradotti e adattati a partire dalla versione in inglese presente a http://www.prenhall.com/ghezzi/

Transcript of Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per...

Page 1: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Corso di Ingegneria del Software

Paolo Bottoni

Principi dell’Ingegneria del Software

Lucidi tradotti e adattati a partire dalla versione in inglese presente a http://www.prenhall.com/ghezzi/

Page 2: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 2

Obiettivi

• Mostrare principi base per metodi, tecniche,

metodologie e strumenti

• Illustrare sette principi usabili in ogni fase

sviluppo software

• Evidenziare modularità come principio

fondamentale per progetto software

Page 3: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 3

Applicazione

• Principi applicati a processo e prodotto

• Messi in pratica via metodi e tecniche

– organizzati in metodologie

– supportate da strumenti (tool)

Principles

Methodologies

Principles

Methods and techniques

Methodologies

Tools

Page 4: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 4

Principi Chiave

• Rigore e formalità

• Separation of concerns

• Modularità

• Astrazione

• Anticipazione del cambiamento

• Generalità

• Incrementalità

Page 5: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 5

Rigore e formalità

• Software engineering attività creativa

MA

• Deve essere esercitata sistematicamente

• Rigore è complemento a creatività

– aumenta fiducia in passi sviluppati

• Formalità è rigore al grado più alto

– processo guidato e valutato con leggi matematiche

Page 6: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 6

Esempi: prodotto

• Analisi matematica (formale) correttezza programmi

• Derivazione sistematica (rigorosa) dati di test

Page 7: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 7

Esempi: processo

• Documentazione rigorosa passi di sviluppo per

– gestione progetto

– valutazione tempestività (timeliness)

Page 8: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 8

Studio di caso: compilatore

• Costruzione di compilatori è area con metodi di

progetto sistematico (formali)

– es. BNF per descrizione formale sintassi linguaggio

<type declaration> ::= <class declaration> | <interface declaration> | ;

<class declaration> ::= <class modifiers>? class <identifier> <super>?

<interfaces>? <class body>

<class body> ::= { <class body declarations>? }

Page 9: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Studio di caso: Angry Birds

• Definizione matematica leggi fisiche in Box2D

Principi Ingegneria del Software 9

Page 10: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 10

Separation of concerns

• Metodo per controllare complessità

• Separare tematiche

• Concentrarsi su una tematica per volta

• Divide et impera

• Favorisce:

• parallelizazione sforzi

• separazione responsabilità

Page 11: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 11

Esempi

• Processo

• Procedere una fase per volta (modello a cascata)

– Separa attività nel tempo

– Stabilire incremento (modelli incrementali o agili)

– Indica su quali problemi concentrarsi

• Prodotto

• Mantenere requisiti prodotto separati:

– Funzionalità

– Prestazioni

– Interfaccia utente e usabilità

Page 12: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 12

Separation of concerns per compilatore

• Progettazione algoritmi allocazione ottimale registri

vs

• Progettazione messaggi diagnostici

• runtime efficiency separata da user friendliness

Page 13: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Separation of concerns per Angry Birds

• Separazione fra

– Rappresentazione grafica

– Gestione interazione

– Calcolo effetti

– Gestione profili

• Separazione in Box2D

– Definizione forme

– Definizione collisioni

Principi Ingegneria del Software 13

Page 14: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 14

Modularità

• Sistema complesso diviso in parti più semplici – moduli: sistema modulare

• Favorisce separation of concerns

– trattando modulo, possiamo ignorare dettagli altri moduli

Page 15: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 15

Modularità per compilatore

• Processo decomposto in fasi

– Analisi lessicale

– Analisi sintattica (parsing)

– Generazione codice

• Fasi associate con moduli

Page 16: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 16

Struttura modulare per compilatore

Albero

di

analisi

Codice

sorgente

Tabella dei

simboli

Codice

oggetto

Codice

“tokenizzato”

Analisi

sintattica

Generazione

del codice

Diagnostica

lessicale

Diagnostica sintattica

Analisi

lessicale

“scatole” = moduli “frecce” = interfacce

Page 17: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 17

Iterazione del processo di

decomposizione in moduli

Generazione

codice intermedio Albero di

analisi

Codice

oggetto

Generazione

del codice Codice

intermedio

Tabella dei simboli

Generazione

codice macchina

Modularizzazione generazione codice

Page 18: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Modularità per Angry Birds

Moduli:

gestori eventi

gestori utenti

gestori animazioni

gestori partite e gestori livelli

Principi Ingegneria del Software 18

Page 19: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 19

Coesione e accoppiamento

• Ogni modulo altamente coeso

– Interpretabile come unità significativa

– Componenti modulo strettamente correlati

• Moduli a basso accoppiamento

– Moduli hanno bassa interazione con altri

– Possono essere compresi separatamente

Page 20: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 20

Visione schematica

Alto accoppiamento Basso accoppiamento

Page 21: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 21

Astrazione

• Identificare aspetti importanti di fenomeno

• Ignorare dettagli

• Caso particolare di separation of concerns

• Astrazione da applicare dipende da scopo

Page 22: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 22

Astrazione

• Ignora dettagli – Esempio: equazioni per descrivere circuiti complessi

permettono ragionamenti a progettista

– Equazioni approssimano descrizione e ignorano dettagli che producono effetti trascurabili

• Produce modelli – Esempio: analisi requisiti porta a modello per applicazione

– Modello può essere descrizione formale o semiformale

– Ragionare su sistema tramite ragionamento su modello

Page 23: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 23

Esempi

• Prodotto

• Semantica linguaggio data da macchina astratta:

• ignora dettagli macchine reali per implementazione

• rappresentazione numeri

• meccanismi di indirizzamento

• Processo

• Stima costi basata solo su fattori chiave

• Considera similarità con sistemi precedenti, ignorando

differenze di dettaglio

Page 24: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 24

Astrazione per compilatore

• Applicata in molti casi

– sintassi astratta trascura dettagli sintattici

– es. begin…end vs. {…} per blocchi di istruzioni

– codice macchina intermedio per portabilità

– es. Java Bytecode

Page 25: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Astrazione per Angry Birds

Astrazione:

forme astratte

eventi astratti (caricamento, rilascio, impatto)

Principi Ingegneria del Software 25

Page 26: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 26

Anticipazione del cambiamento

• Capacità di supportare evoluzione software

richiede anticipazione possibili cambiamenti futuri

• Base per evolvibilità del software

• Es.: ambiente gestione configurazioni per progetto

Page 27: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 27

Anticipazione del cambiamento per compilatore

• Considerare possibili cambiamenti di

– Linguaggi sorgente (comitati di standardizzazione)

– Processore bersaglio

– Dispositivi di I/O

Page 28: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Anticipazione cambiamento per Angry Birds

Supporto al cambiamento

Indipendenza da piattaforma

Linee di prodotto

Attività collegate

Principi Ingegneria del Software 28

Page 29: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 29

Generalità

• Problema x

– È caso particolare di problema generale y?

– È istanza di classe di problemi X?

– Soluzione del caso più generale riusabile

• Bilancio fra generalità e prestazioni/costi

• A volte più semplice risolvere caso generale

Page 30: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 30

Generalità per compilatore

• Parametrizzare rispetto a macchina bersaglio

• codice intermedio

• Sviluppare strumenti per generazione di

compilatori e non compilatore singolo

Page 31: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Generalità per Angry Birds

Modello generale di gioco interattivo

Principi Ingegneria del Software 31

Page 32: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 32

Incrementalità

• Processo avanza a passi discreti (incrementi)

• Esempi (processo)

– Consegnare sottoinsiemi di sistema per feedback rapido

– Nuove caratteristiche aggiunte incrementalmente

– Trattare prima funzionalità, poi prestazioni

– Consegnare primo prototipo

– Sforzo incrementale per trasformare prototipo in prodotto

Page 33: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Principi Ingegneria del Software 33

Incrementalità per compilatore

– Versione base per sottoinsieme linguaggio sorgente

– Sottoinsiemi progressivamente più grandi

– Consegnare con diagnostica/ottimizzazione limitate

– Aggiunta successiva

Page 34: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Incrementalità per Angry Birds

Incrementalità

nuove tipologie di attaccanti

nuove tipologie di difensori

nuove tipologie di materiale

Principi Ingegneria del Software 34

Page 35: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/... · •Mostrare principi base per metodi, tecniche, metodologie e strumenti •Illustrare sette principi usabili in ogni

Un insieme diverso di principi: Wasserman

Astrazioni

Notazioni e metodi per analisi e progetto

Prototipazione di interfacce utente

Architettura software

Processo software

Riuso

Misura

Strumenti e ambienti integrati

Principi Ingegneria del Software 35