1. Introduzione - Cosa, Quando, Come e Perchépolini/downloads/SE0708/IdS_1.pdf(Ingegneria del...

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

Transcript of 1. Introduzione - Cosa, Quando, Come e Perchépolini/downloads/SE0708/IdS_1.pdf(Ingegneria del...

1. IntroduzioneCosa, Quando, Come e Perché

Andrea Polini

Ingegneria del SoftwareCorso di Laurea in Informatica

(Ingegneria del Software) 1. Introduzione 1 / 27

Sommario

1 Informazioni Generali

2 Ingegneria del Software - generalità

3 Prodotto vs. Processo

(Ingegneria del Software) 1. Introduzione 2 / 27

Informazioni Generali

Sommario

1 Informazioni Generali

2 Ingegneria del Software - generalità

3 Prodotto vs. Processo

(Ingegneria del Software) 1. Introduzione 3 / 27

Informazioni Generali

Corso e Docente

Ingegneria del Software + Laboratorio di Ingegneria del Softwareorario:

IdS: Martedì dalle 09:00 alle 11:00 – Giovedì dalle 15:00 alle 17:00Lab: Mercoledì dalle 11:00 alle 13:00Dott. Oliviero Riganelli Ma . . .

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

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

(Ingegneria del Software) 1. Introduzione 4 / 27

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 / 27

Informazioni Generali

Materiale di studio

Testo di riferimento:

Ian SommervilleIngegneria del Software, 7a Ed. ItalianaAddison-Wesley, 2006.

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 / 27

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 di Web Engineering

Gruppi di 3 persone. . . nella lezione del 23 lista dei vari gruppiI membri del gruppo presentano il progetto tutti insieme nella stessasessioneParziali progetto in itinere (??)

Prova orale su tutto il contenuto del corso

(Ingegneria del Software) 1. Introduzione 7 / 27

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

Cenni alla Gestione dei Progetti SoftwarePianificazioneDeliverableMilestone

(Ingegneria del Software) 1. Introduzione 8 / 27

Informazioni Generali

Contenuto del Corso. . . continua

RequisitiClassificazioneTecniche di elicitazioneModelli di specifica

Modelli OperazionaliModelli Descrittivi

ProgettazioneArchitettura del SoftwareSistemi a ComponentiSistemi Distribuiti

(Ingegneria del Software) 1. Introduzione 9 / 27

Informazioni Generali

Contenuto del Corso. . . continua

Sviluppo del SoftwareProgrammazione Orientata agli oggettiDesign PatternsSistemi Distribuiti e Middleware

Verifica e ValidazioneManutenzione del Software

EvoluzioneReingegnerizzazione

(Ingegneria del Software) 1. Introduzione 10 / 27

Ingegneria del Software - generalità

Sommario

1 Informazioni Generali

2 Ingegneria del Software - generalità

3 Prodotto vs. Processo

(Ingegneria del Software) 1. Introduzione 11 / 27

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 fù poi dismesso.

(Ingegneria del Software) 1. Introduzione 12 / 27

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 fù poi dismesso.

(Ingegneria del Software) 1. Introduzione 12 / 27

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 fù 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 fù 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 13 / 27

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 fù 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 fù 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 13 / 27

Ingegneria del Software - generalità

Un po’ di storia...continua

Mars Climate Orbiter (1999)La sonda Mars Climate Orbiter fù “smarrita” dopo il decollo con unaperdita economica di circa 125 milioni di dollari. Successiveinvestigazioni sulle responsabilità appurarono che in fase diprogettazione non fù 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 fù incapace di adattarsi amodifiche nei tassi di calcolo. Il sistema fù sottoposto a sole seisettimane di test di accettazione.

(Ingegneria del Software) 1. Introduzione 14 / 27

Ingegneria del Software - generalità

Un po’ di storia...continua

Mars Climate Orbiter (1999)La sonda Mars Climate Orbiter fù “smarrita” dopo il decollo con unaperdita economica di circa 125 milioni di dollari. Successiveinvestigazioni sulle responsabilità appurarono che in fase diprogettazione non fù 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 fù incapace di adattarsi amodifiche nei tassi di calcolo. Il sistema fù sottoposto a sole seisettimane di test di accettazione.

(Ingegneria del Software) 1. Introduzione 14 / 27

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 15 / 27

Ingegneria del Software - generalità

Lezione e possibili fattori di fallimento?

Dimensione

DistribuzioneComunicazioneEterogeneità dei linguaggi e delle piattaformeIntegrazione e riuso di software pre-esistenteTime-to-Market. . .

(Ingegneria del Software) 1. Introduzione 16 / 27

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 17 / 27

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 18 / 27

Ingegneria del Software - generalità

Il progetto del software oggi - versione semiseria

(Ingegneria del Software) 1. Introduzione 19 / 27

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 20 / 27

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 20 / 27

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 20 / 27

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 21 / 27

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 22 / 27

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

(Ingegneria del Software) 1. Introduzione 23 / 27

Prodotto vs. Processo

Sommario

1 Informazioni Generali

2 Ingegneria del Software - generalità

3 Prodotto vs. Processo

(Ingegneria del Software) 1. Introduzione 24 / 27

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

(Ingegneria del Software) 1. Introduzione 25 / 27

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 26 / 27

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 27 / 27