36
1. Introduzione Cosa, Quando, Come e Perché Andrea Polini Ingegneria del Software Corso di Laurea in Informatica (Ingegneria del Software) 1. Introduzione 1 / 28

1. Introduzione - Cosa, Quando, Come e Perché

Embed Size (px)

Citation preview

Page 1: 1. Introduzione - Cosa, Quando, Come e Perché

1. IntroduzioneCosa, Quando, Come e Perché

Andrea Polini

Ingegneria del SoftwareCorso di Laurea in Informatica

(Ingegneria del Software) 1. Introduzione 1 / 28

Page 2: 1. Introduzione - Cosa, Quando, Come e Perché

Sommario

1 Informazioni Generali

2 Ingegneria del Software - generalità

3 Prodotto vs. Processo

(Ingegneria del Software) 1. Introduzione 2 / 28

Page 3: 1. Introduzione - Cosa, Quando, Come e Perché

Informazioni Generali

Sommario

1 Informazioni Generali

2 Ingegneria del Software - generalità

3 Prodotto vs. Processo

(Ingegneria del Software) 1. Introduzione 3 / 28

Page 4: 1. Introduzione - Cosa, Quando, Come e Perché

Informazioni Generali

Corso e Docente

Ingegneria del Software + Laboratorio di Ingegneria del Softwareorario:

IdS: Martedì dalle 11:00 alle 13:00 – Giovedì dalle 9:00 alle 11:00Lab: Mercoledì dalle 10:00 alle 13:00Dott. Oliviero Riganelli

web: http://www1.isti.cnr.it/˜polini/SEcamerino0809.html

Andrea Polinie-mail: [email protected]: http://www1.isti.cnr.it/˜poliniricevimento: il Mercoledì dalle ore 15:00

(Ingegneria del Software) 1. Introduzione 4 / 28

Page 5: 1. Introduzione - Cosa, Quando, Come e Perché

Informazioni Generali

Obiettivi Formativi

Al termine del corso il vostro bagaglio di competenze dovrebbeessersi arricchito con:

Metodologie e tecniche per lo sviluppo di sistemi softwarecomplessi

Al termine del corso dovreste esser capaci di:Comprendere le problematiche che influenzano il progetto disistemi software complessiSelezionare e giudicare gli approcci, le tecniche e gli strumentimigliori per lo sviluppo di sistemi software complessi

(Ingegneria del Software) 1. Introduzione 5 / 28

Page 6: 1. Introduzione - Cosa, Quando, Come e Perché

Informazioni Generali

Materiale di studio

Testo di riferimento:

Ian SommervilleIngegneria del Software, 8a Ed. ItalianaAddison-Wesley, 2008.

Testi di consultazione:

Carlo Ghezzi, Mehdi Jazayeri, Dino MandrioliFondamenti di Ingegneria del Software, 2a Ed. ItalianaPrentice Hall, 2004.

Bertrand MeyerObject-Oriented Software Construction, 2a Ed.Prentice Hall, 1998.

Roger S. PressmanPrincipi di Ingegneria del Software, 4a Ed. ItalianaMcGraw-Hill, 2004.

Materiale fornito dal docente(Ingegneria del Software) 1. Introduzione 6 / 28

Page 7: 1. Introduzione - Cosa, Quando, Come e Perché

Informazioni Generali

Esame!!!

I corsi di Ingegneria del Software (IdS) e di Laboratorio diIngegneria del Software (Lab) danno luogo ad un solo esame di12 crediti.

Modalità di Esame:Progetto

Gruppi di 3 persone. . . nella lezione del 15 definizione lista dei vari gruppiI membri del gruppo presentano il progetto tutti insieme nella stessasessioneTipologia (??) - UML, Eclipse, JavaParziali progetto in itinere (??)

Prova scritta su tutto il contenuto del corso

(Ingegneria del Software) 1. Introduzione 7 / 28

Page 8: 1. Introduzione - Cosa, Quando, Come e Perché

Informazioni Generali

Contenuto del Corso

Introduzione e caratterizzazione dell’Ingegneria del Software (IdS)Qualità del Software e dei processi di sviluppoProcessi di Sviluppo Software

Processo a cascataProcessi EvolutiviProcessi IterativiProcesso a SpiraleProcesso Unificato. . .

Cenni alla Gestione dei Progetti SoftwarePianificazioneDeliverableMilestone

(Ingegneria del Software) 1. Introduzione 8 / 28

Page 9: 1. Introduzione - Cosa, Quando, Come e Perché

Informazioni Generali

Contenuto del Corso. . . continua

RequisitiClassificazioneTecniche di elicitazioneTecniche di SpecificaModelli di specifica

Modelli OperazionaliModelli Descrittivi

ProgettazioneArchitettura del SoftwareSistemi a ComponentiSistemi DistribuitiPrincipi di progettazione delle interfacce utente

(Ingegneria del Software) 1. Introduzione 9 / 28

Page 10: 1. Introduzione - Cosa, Quando, Come e Perché

Informazioni Generali

Contenuto del Corso. . . continua

Sviluppo del SoftwareProgrammazione Orientata agli oggettiDesign PatternsSistemi Distribuiti e Middleware

Verifica e ValidazioneVerifica StaticaVerifica Dinamica

Manutenzione del SoftwareEvoluzioneReingegnerizzazione

Stima dei costi di produzione di un sistema software

(Ingegneria del Software) 1. Introduzione 10 / 28

Page 11: 1. Introduzione - Cosa, Quando, Come e Perché

Ingegneria del Software - generalità

Sommario

1 Informazioni Generali

2 Ingegneria del Software - generalità

3 Prodotto vs. Processo

(Ingegneria del Software) 1. Introduzione 11 / 28

Page 12: 1. Introduzione - Cosa, Quando, Come e Perché

Ingegneria del Software - generalità

Cos’è il software?

percezione differente per il produttore e l’utilizzatore del softwareIl termine software identifica un programma che specifica leistruzioni che un calcolatore deve eseguire per raggiungere unoscopo nonchè tutti i documenti che descrivono le fasi dellaproduzione del software stesso, le sue caratteristiche (strutturali,funzionali, extra-funzionali . . . ) e le sue possibili configurazionil’ingegneria del software agirà globalmente su tutte le possibilicomponenti del software

Software elemento logico, immateriale

(Ingegneria del Software) 1. Introduzione 12 / 28

Page 13: 1. Introduzione - Cosa, Quando, Come e Perché

Ingegneria del Software - generalità

Cos’è il software?

percezione differente per il produttore e l’utilizzatore del softwareIl termine software identifica un programma che specifica leistruzioni che un calcolatore deve eseguire per raggiungere unoscopo nonchè tutti i documenti che descrivono le fasi dellaproduzione del software stesso, le sue caratteristiche (strutturali,funzionali, extra-funzionali . . . ) e le sue possibili configurazionil’ingegneria del software agirà globalmente su tutte le possibilicomponenti del software

Software elemento logico, immateriale

(Ingegneria del Software) 1. Introduzione 12 / 28

Page 14: 1. Introduzione - Cosa, Quando, Come e Perché

Ingegneria del Software - generalità

Cos’è il software?

percezione differente per il produttore e l’utilizzatore del softwareIl termine software identifica un programma che specifica leistruzioni che un calcolatore deve eseguire per raggiungere unoscopo nonchè tutti i documenti che descrivono le fasi dellaproduzione del software stesso, le sue caratteristiche (strutturali,funzionali, extra-funzionali . . . ) e le sue possibili configurazionil’ingegneria del software agirà globalmente su tutte le possibilicomponenti del software

Software elemento logico, immateriale

(Ingegneria del Software) 1. Introduzione 12 / 28

Page 15: 1. Introduzione - Cosa, Quando, Come e Perché

Ingegneria del Software - generalità

Cos’è il software?

percezione differente per il produttore e l’utilizzatore del softwareIl termine software identifica un programma che specifica leistruzioni che un calcolatore deve eseguire per raggiungere unoscopo nonchè tutti i documenti che descrivono le fasi dellaproduzione del software stesso, le sue caratteristiche (strutturali,funzionali, extra-funzionali . . . ) e le sue possibili configurazionil’ingegneria del software agirà globalmente su tutte le possibilicomponenti del software

Software elemento logico, immateriale

(Ingegneria del Software) 1. Introduzione 12 / 28

Page 16: 1. Introduzione - Cosa, Quando, Come e Perché

Ingegneria del Software - generalità

Un po’ di storia...

Therac-25 (1985-1987)

Diversi pazienti furono irradiati con dosi massicce di raggi X daun’apparecchiatura per terapie contro il cancro.Sistema controllato da sistema di input software contenente unbaco. Almeno 5 persone furono uccise.

London Ambulance Service (1992)Il LAS introdusse un sistema automatico di selezione e invio delleunità mediche sostituendo le procedure manuali fino a quel punto inuso, introducendo meccanismi di selezione più avanzati. L’appaltofu bandito a giugno 1991 ed assegnato ad un costo di £1,1 millioni.Furono fissate precise scadenze non negoziabili. Il sistema malprogettato e realizzato causò, quando messo in opera, altissimiritardi nell’arrivo delle unità (anche 11 ore) e circa 30 personemorirono a causa dei ritardi. Il software fu poi dismesso.

(Ingegneria del Software) 1. Introduzione 13 / 28

Page 17: 1. Introduzione - Cosa, Quando, Come e Perché

Ingegneria del Software - generalità

Un po’ di storia...

Therac-25 (1985-1987)

Diversi pazienti furono irradiati con dosi massicce di raggi X daun’apparecchiatura per terapie contro il cancro.Sistema controllato da sistema di input software contenente unbaco. Almeno 5 persone furono uccise.

London Ambulance Service (1992)Il LAS introdusse un sistema automatico di selezione e invio delleunità mediche sostituendo le procedure manuali fino a quel punto inuso, introducendo meccanismi di selezione più avanzati. L’appaltofu bandito a giugno 1991 ed assegnato ad un costo di £1,1 millioni.Furono fissate precise scadenze non negoziabili. Il sistema malprogettato e realizzato causò, quando messo in opera, altissimiritardi nell’arrivo delle unità (anche 11 ore) e circa 30 personemorirono a causa dei ritardi. Il software fu poi dismesso.

(Ingegneria del Software) 1. Introduzione 13 / 28

Page 18: 1. Introduzione - Cosa, Quando, Come e Perché

Ingegneria del Software - generalità

Un po’ di storia......continua

Denver Airport Baggage System (1995)L’aeroporto di Denver doveva essere inaugurato nel 1995 e dovevabasarsi su di un avvenieristico sistema di smistamento dei bagagli.Il sistema software avrebbe dovuto controllare 26 miglia di nastritrasportatori indirizzando correttamente i bagagli. Il sistema perònon riusci mai a fornire le garanzie necessarie e ritardò l’aperturadello scalo per mesi al costo di un millione di dollari al giorno. Allafine il progetto fu abbandonato.

Il vettore spaziale Ariane 5 (1996)Il vettore Ariane 5 dell’agenzia spaziale europea esplose durante ilvolo inaugurale il 4 giugno 1996 dopo 39 secondi dal decollo.L’esplosione fu causata da un segnale di autodistruzione emessodal sistema di controllo che erroneamente, a causa di bufferoverflow, pensava di essere fuori rotta. La progettazione ecostruzione del vettore era costata 500 milioni di dollari.

(Ingegneria del Software) 1. Introduzione 14 / 28

Page 19: 1. Introduzione - Cosa, Quando, Come e Perché

Ingegneria del Software - generalità

Un po’ di storia......continua

Denver Airport Baggage System (1995)L’aeroporto di Denver doveva essere inaugurato nel 1995 e dovevabasarsi su di un avvenieristico sistema di smistamento dei bagagli.Il sistema software avrebbe dovuto controllare 26 miglia di nastritrasportatori indirizzando correttamente i bagagli. Il sistema perònon riusci mai a fornire le garanzie necessarie e ritardò l’aperturadello scalo per mesi al costo di un millione di dollari al giorno. Allafine il progetto fu abbandonato.

Il vettore spaziale Ariane 5 (1996)Il vettore Ariane 5 dell’agenzia spaziale europea esplose durante ilvolo inaugurale il 4 giugno 1996 dopo 39 secondi dal decollo.L’esplosione fu causata da un segnale di autodistruzione emessodal sistema di controllo che erroneamente, a causa di bufferoverflow, pensava di essere fuori rotta. La progettazione ecostruzione del vettore era costata 500 milioni di dollari.

(Ingegneria del Software) 1. Introduzione 14 / 28

Page 20: 1. Introduzione - Cosa, Quando, Come e Perché

Ingegneria del Software - generalità

Un po’ di storia...continua

Mars Climate Orbiter (1999)La sonda Mars Climate Orbiter fu “smarrita” dopo il decollo con unaperdita economica di circa 125 milioni di dollari. Successiveinvestigazioni sulle responsabilità appurarono che in fase diprogettazione non fu specificato il sistema di misura da utilizzare.Differenti team di sviluppo, nello sviluppo dei vari moduli fecerodifferenti assunzioni sul sistema di misurazione da applicare(metrico decimale ed imperiale).

Welfare Management System (2004)Un sistema di gestione della previdenza publica canadese costatodiverse centinaia di milioni di dollari fu incapace di adattarsi amodifiche nei tassi di calcolo. Il sistema fu sottoposto a sole seisettimane di test di accettazione.

(Ingegneria del Software) 1. Introduzione 15 / 28

Page 21: 1. Introduzione - Cosa, Quando, Come e Perché

Ingegneria del Software - generalità

Un po’ di storia...continua

Mars Climate Orbiter (1999)La sonda Mars Climate Orbiter fu “smarrita” dopo il decollo con unaperdita economica di circa 125 milioni di dollari. Successiveinvestigazioni sulle responsabilità appurarono che in fase diprogettazione non fu specificato il sistema di misura da utilizzare.Differenti team di sviluppo, nello sviluppo dei vari moduli fecerodifferenti assunzioni sul sistema di misurazione da applicare(metrico decimale ed imperiale).

Welfare Management System (2004)Un sistema di gestione della previdenza publica canadese costatodiverse centinaia di milioni di dollari fu incapace di adattarsi amodifiche nei tassi di calcolo. Il sistema fu sottoposto a sole seisettimane di test di accettazione.

(Ingegneria del Software) 1. Introduzione 15 / 28

Page 22: 1. Introduzione - Cosa, Quando, Come e Perché

Ingegneria del Software - generalità

Un po’ di storia...continua

Toyota Prius (2005)Errori nella programmazione delle schede di controllo dell’autocausarono il richiamo di oltre 160.000 unità. L’auto passavaall’alimentazione elettrica e proseguiva per pochi chilometri primadi arrestarsi quando lanciata ad alta velocità.

(Ingegneria del Software) 1. Introduzione 16 / 28

Page 23: 1. Introduzione - Cosa, Quando, Come e Perché

Ingegneria del Software - generalità

Lezione e possibili fattori di fallimento?

Dimensione

Distribuzione, Integrazione, ComunicazioneSicurezza (Safety)Eterogeneità dei linguaggi e delle piattaformeIntegrazione e riuso di software pre-esistenteTime-to-Market. . .

(Ingegneria del Software) 1. Introduzione 17 / 28

Page 24: 1. Introduzione - Cosa, Quando, Come e Perché

Ingegneria del Software - generalità

Prodromi alla nascita dell’Ingegneria del Software

Anni ’50 appaiono i primi linguaggi di alto livello (COBOL)I programmi cominciano a diventare via via più complessiProgrammare comincia a diventare un lavoro

Anni ’60-’70...la crisi del softwareLe tecniche di sviluppo adottate fino a quel punto risultano nonscalareGli sviluppatori sembrano incapaci di sviluppare software capace diutilizzare a fondo i miglioramenti nello hardware.

Conferenze NATO (1968 Garmisch-D, 1969 Roma-I)Vengono poste le basi per una nuova disciplinasono necessarie nuove metodologie, strumenti formali, nuoviprocessi, nuovi strumenti di sviluppo, nuovi modi di organizzare illavoro, etc..la produzione del software si deve trasformare da un’attivitàartigianale ad un’attività “ingegneristica”

(Ingegneria del Software) 1. Introduzione 18 / 28

Page 25: 1. Introduzione - Cosa, Quando, Come e Perché

Ingegneria del Software - generalità

Da allora....

Molti passi sono stati fatti ma da allora....La complessità dei sistemi continua a crescere vertiginosamenteil software viene continuamente applicato in nuovi dominile richieste sulle caratteristiche extra-funzionali del softwareseguono lo stesso trendmoltissimi sistemi software falliscono o vengono cancellati dopoesser partiti e trovandosi spesso anche in una fase avanzata dellosviluppospessissimo il rilascio del software avviene in ritardo rispetto allescadenze stabilitealtrettanto spesso la qualità del software rilasciato è “discutibile”

(Ingegneria del Software) 1. Introduzione 19 / 28

Page 26: 1. Introduzione - Cosa, Quando, Come e Perché

Ingegneria del Software - generalità

Il progetto del software oggi - versione semiseria

(Ingegneria del Software) 1. Introduzione 20 / 28

Page 27: 1. Introduzione - Cosa, Quando, Come e Perché

Ingegneria del Software - generalità

Qualche definizione

IEEE:Applicazione di un approccio sistematico, disciplinato equantificabilie allo sviluppo, supporto e manutenzione del softwareSommerville:L’Ingegneria del Software è una disciplina ingegneristica cheriguarda tutti gli aspetti della produzione del software. L’ingegneredel software deve adottare un approccio sistematico edorganizzato al suo lavoro ed utilizzare gli strumenti e le tecnichepiù appropriate dipendentemente dal problema da risolvere, daivincoli di sviluppo e dalle risorse disponibili.Ghezzi, Jazayeri, Mandrioli:L’Ingegneria del Software è la branchia della scienzadell’informazione che riguarda lo sviluppo di sistemi software lecui dimensioni richiedono l’intervento di uno o più team di sviluppo. . . programmare è principalmente un’attività personale, mentrel’ingegneria del software è essenzialmente un’attività di team.

(Ingegneria del Software) 1. Introduzione 21 / 28

Page 28: 1. Introduzione - Cosa, Quando, Come e Perché

Ingegneria del Software - generalità

Qualche definizione

IEEE:Applicazione di un approccio sistematico, disciplinato equantificabilie allo sviluppo, supporto e manutenzione del softwareSommerville:L’Ingegneria del Software è una disciplina ingegneristica cheriguarda tutti gli aspetti della produzione del software. L’ingegneredel software deve adottare un approccio sistematico edorganizzato al suo lavoro ed utilizzare gli strumenti e le tecnichepiù appropriate dipendentemente dal problema da risolvere, daivincoli di sviluppo e dalle risorse disponibili.Ghezzi, Jazayeri, Mandrioli:L’Ingegneria del Software è la branchia della scienzadell’informazione che riguarda lo sviluppo di sistemi software lecui dimensioni richiedono l’intervento di uno o più team di sviluppo. . . programmare è principalmente un’attività personale, mentrel’ingegneria del software è essenzialmente un’attività di team.

(Ingegneria del Software) 1. Introduzione 21 / 28

Page 29: 1. Introduzione - Cosa, Quando, Come e Perché

Ingegneria del Software - generalità

Qualche definizione

IEEE:Applicazione di un approccio sistematico, disciplinato equantificabilie allo sviluppo, supporto e manutenzione del softwareSommerville:L’Ingegneria del Software è una disciplina ingegneristica cheriguarda tutti gli aspetti della produzione del software. L’ingegneredel software deve adottare un approccio sistematico edorganizzato al suo lavoro ed utilizzare gli strumenti e le tecnichepiù appropriate dipendentemente dal problema da risolvere, daivincoli di sviluppo e dalle risorse disponibili.Ghezzi, Jazayeri, Mandrioli:L’Ingegneria del Software è la branchia della scienzadell’informazione che riguarda lo sviluppo di sistemi software lecui dimensioni richiedono l’intervento di uno o più team di sviluppo. . . programmare è principalmente un’attività personale, mentrel’ingegneria del software è essenzialmente un’attività di team.

(Ingegneria del Software) 1. Introduzione 21 / 28

Page 30: 1. Introduzione - Cosa, Quando, Come e Perché

Ingegneria del Software - generalità

Qualche definizione. . . continua

Emmerich:L’Ingegneria del Software è una branchia dell’ingegneria deisistemi che riguarda lo sviluppo di sistemi software complessi e digrandi dimensioni. Essa si focalizza su: obiettivi e limiti reali per iservizi forniti dai sistemi software; la precisa specifica dellastruttura di questi sistemi, del loro comportamento el’implementazione di tali specifiche; le attività richieste al fine digarantire che le specifiche e gli obiettivi siano raggiunti;l’evoluzione di tali sistemi nel tempo. Infine essa riguarda anche iprocessi, i metodi e gli strumenti per lo sviluppoeconomicamente vantaggioso e pianificato del software.

(Ingegneria del Software) 1. Introduzione 22 / 28

Page 31: 1. Introduzione - Cosa, Quando, Come e Perché

Ingegneria del Software - generalità

In evidenza

Metodologie per lo sviluppo di sistemi di medio/grandidimensioniRaccomanda disciplina e sistemicitàRaccomanda l’introduzione di metodi quantificabili al fine dipoter paragonare differenti possibili soluzioniriguarda lo sviluppo di sistemi che richiedono l’intervento di teamdi sviluppo. Dunque comunicazione diventa uno degli aspettipiù importanti.

(Ingegneria del Software) 1. Introduzione 23 / 28

Page 32: 1. Introduzione - Cosa, Quando, Come e Perché

Ingegneria del Software - generalità

In evidenza. . . continua

non riguarda soltanto la programmazione (per certi versi aspettomarginale)Costi di sviluppo e tempi sono un aspetto fondamentale dellosviluppoSi richiedono capacità di gestione e di pianificazioneObiettivo focale è la spinta verso la produzione di qualitàNecessità di applicare strumenti di supporto – Computer AidedSoftware Engineering (CASE)

(Ingegneria del Software) 1. Introduzione 24 / 28

Page 33: 1. Introduzione - Cosa, Quando, Come e Perché

Prodotto vs. Processo

Sommario

1 Informazioni Generali

2 Ingegneria del Software - generalità

3 Prodotto vs. Processo

(Ingegneria del Software) 1. Introduzione 25 / 28

Page 34: 1. Introduzione - Cosa, Quando, Come e Perché

Prodotto vs. Processo

ProdottoCosa?

Il prodotto è certamente l’obiettivo finale e più importante dellosviluppo e risponde alla domanda sul cosa si vuole “costruire”.con riferimento al prodotto il focus principale dell’Ingegneria delSoftware è quello di fornire metodi e strumenti affinchè la qualitàrisulti “massima”. (e.g. introduzione delle techniche diprogrammazione orientata agli oggetti). Obiettivo dell’ingegneriadel software non è quello di produrre documentazione!

(Ingegneria del Software) 1. Introduzione 26 / 28

Page 35: 1. Introduzione - Cosa, Quando, Come e Perché

Prodotto vs. Processo

ProcessoCome?

Il processo definisce quali sono e come organizzare le attività damettere in atto nello sviluppo di un prodotto software. In questosenso fornisce una risposta alla domanda sul come procederenella produzione di un prodotto software.l’Ingegneria del software ha affinato e definito molti diversi tipi diprocessi di sviluppo. Ognuno ha le sue peculiarità e qualità e siadatterà più o meno bene ai diversi ambiti di sviluppo. Un sistemasafety critical non sarà sviluppato seguendo gli stessi passi attuatinello sviluppo di un applicazione Web.il processo non è di per se un fine. L’ipotesi “nascosta” è cheadottando un disciplinato ed organizzato processo di sviluppo laqualità del prodotto e la sua economicità ne gioveranno.

(Ingegneria del Software) 1. Introduzione 27 / 28

Page 36: 1. Introduzione - Cosa, Quando, Come e Perché

Prodotto vs. Processo

Dicotomia o Dualità

Processo e Prodotto non devono essere viste come due cose supiani ortogonali ma più come due facce della stessa medaglia.Ad esempio dato un prodotto le informazioni sul processo seguitopermettono di contestualizzare meglio “l’oggetto” ed i suoipossibili ambiti di uso. Dunque il processo seguito fa in un certoqual modo parte delle caratteristiche del prodotto finale.

(Ingegneria del Software) 1. Introduzione 28 / 28