Ingegneria del Software

Moreno Marzolla

marzolla@dsi.unive.it

http://www.dsi.unive.it/~marzolla

Università di Ferrara

Copyright © 2004 Moreno Marzolla

This work is licensed under the Creative Commons Attribution-Noncommercial-Share Alike 2.5 Italy License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.5/it/ or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.

Dettagli Preliminari

Docente:
Moreno Marzolla (marzolla@dsi.unive.it)

Pagina del corso
http://www.dsi.unive.it/~marzolla/teaching.html

Orario delle lezioni:

Giovedì	10:30 – 13:30

Venerdì	10:30 – 13:30

Ricevimento:

“On demand”, previo accordo a lezione o via mail

Libri di Testo

Ian Sommerville,
Software Engineering (7th ed), Addison-Wesley 2004, ISBN 0-321-21026-3

Roger S. Pressman,
Principi di Ingegneria del Software (quarta edizione), McGraw-Hill 2004, ISBN 88-386-6216-9

Altri testi utili:

Frederick P. Brooks, Jr.
The Mythical Man-Month – Essays on Software Engineering, Addison-Wesley 1999, ISBN 0-201-83595-9

M. Fowler, UML Distilled (terza edizione), Addison-Wesley, 2004, ISBN 88-7192-207-7

Modalità d'esame

Progetto facoltativo assegnato durante il corso

Il progetto può essere svolto da soli, o in gruppi di due persone

Il voto del progetto sarà compreso nell'intervallo [-2,4]

Prova scritta obbligatoria

Chi ottiene almeno 18/30 sommando il voto dello scritto con quello del progetto può registrare il voto oppure sostenere un orale facoltativo per migliorare (o peggiorare...) il risultato

Perché siete qui?

Il 4 giugno 1996 il razzo Ariane 5 è esploso in volo dopo 40 secondi dal decollo

Il razzo trasportava un cluster di satelliti del valore di 500M$ (di allora)

Il costo totale di sviluppo del razzo era circa 8 Miliardi di $

L'esame dei dati ha indicato in un malfunzionamento software la causa del disastro
http://sunnyday.mit.edu/accidents/Ariane5accidentreport.html

Il Therac-25 / 1

Era un dispositivo com-puterizzato per la radio-terapia dei pazienti af-fetti da cancro

Tra giugno 1985 e gen-naio 1987 sei pazienti sono stati uccisi o feriti seriamente da dosi ec-cessive di radiazioni

Il Therac-25 / 2

Il responsabile era il software di controllo, scritto da un unico programmatore

La sincronizzazione di diversi task era realizzata in modo dilettantesco e improvvisato, e ciò ha causato i problemi

Non erano stati effettuati test formali o verifiche, non esisteva alcuna documentazione del software

I problemi esistevano nel precedente modello Therac-20, ma moduli di controllo hardware bloccavano la macchina evitando la somministrazione di dosi eccessive

I controlli hardware erano stati eliminati e sostituiti da controlli software, probabilmente per contenere i costi

Maggiori dettagli su
http://www.computer.org/computer/homepage/misc/Leveson/index.htm

Preambolo

Programma

Programming
System
Product

Programming
System

Interfacce, Integrazione nel sistema

Programming
Product

Generalizzazione, Testing, Documentazione, Mantenibilità

3x

3x

L'Ingegneria del Software

Obiettivi della lezione:

Definire cosa si intende per Ingegneria del Software

Discutere i concetti di prodotto software e di processo software

Spiegare il concetto di visibilità di processo

Introdurre la nozione di responsabilità professionale

Ingegneria del Software / 1

Le economie di tutti i paesi sviluppati dipendono dal software, e la maggior parte dei sistemi sono controllati da software

L'Ingegneria del Software ha a che fare con teorie, metodi e strumenti per progettare, costruire e mantenere sistemi software di grandi dimensioni

Ingegneria del Software / 2

Il software costa più dell'hardware

Il mantenimento di un software complesso costa più dello sviluppo dello stesso, specialmente per sistemi con lunga vita

L'Ingegneria del Software si pone come obbiettivo lo sviluppo cost-effective del software

FAQs sull'Ingegneria del Software

Cosa è il software?

Quali sono le caratteristiche di un buon software?

Cosa è l'Ingegneria del Software?

Quale è la differenza tra Ingegneria del Software e Informatica?

Quale è la differenza tra Ingegneria del Software e Ingegneria di Sistema?

FAQs sull'Ingegneria del Software

Cosa si intende per processo di produzione del Software?

Cosa è un modello di produzione del software?

Quali sono i costi nel processo di produzione software?

Quali sono le sfide che l'Ingegneria del Software si trova ad affrontare?

Cos'è il Software?

Un insieme di programmi per computer e la documentazione associata

manuale di configurazione, manuale utente...

Software
Generici

Sviluppati per essere venduti ad una vasta gamma di utenti

Contribuiscono alla maggior spesa di software

Software Personalizzati

Sviluppati per un utente specifico in base alle sue esigenze

Richiedono il maggiore sforzo per lo sviluppo

Le caratteristiche del software

Il software si sviluppa o si struttura, non si fabbrica nel senso tradizionale

Lo sviluppo del software e la progettazione dell'hardware sono attività profondamente diverse.

Il software non si “consuma”

Mentre l'industria si dirige sempre più verso un assemblaggio a componenti, la maggior parte del software viene realizzato in modo specifico

Curva dei guasti per l'hardware

Curva dei guasti per il software

Caratteristiche di un prodotto Software

Mantenibilità

Evolvere in rapporto alla modifica di requisiti

Affidabilità

Ci si deve poter fidare del prodotto Software

Correttezza, Robustezza, Verificabilità, Sicurezza - Innoquità

Efficienza

Non deve sprecare risorse (memoria, tempo,...)

Usabilità

Deve avere interfaccia e documentazione appropriate

I diversi tipi di software / 1

Software di sistema

Collezione di programmi al servizio di altri programmi (compilatori, editor, strumenti per la gestione di file...)

Software real-time

E' il software che sorveglia, analizza, controlla eventi esterni mentre avvengono

Software gestionale

Elaborazione di dati aziendali

Software scientifico e per l'ingegneria

Algoritmi di calcolo intensivo (astronomia, vulcanologia, biologia molecolare, terremoti...)

I diversi tipi di software / 2

Software embedded

Risiede generalmente in memorie per sola lettura e ha lo scopo di controllare prodotti e sistemi di consumo o industriali

Software per i personal computer

Elaborazione testi, fogli elettronici, grafica, programmi multimediali...

Software basato sul Web

CGI, PHP, JSP...

Software per l'intelligenza artificiale

Algoritmi non numerici (euristici) per la risoluzione di problemi complessi

Cos'è l'Ingegneria del Software?

L'Ingegneria del Software è una disciplina che riguarda tutti gli aspetti della produzione del software

Un Ingegnere del Software dovrebbe...

...adottare un approccio sistematico e organizzato al proprio lavoro

...usare strumenti e tecniche appropriate in base al problema da risolvere, ai vincoli imposti e alle risorse disponibili

I miti del software per il management / 1

“Abbiamo standard e procedure da seguire nello sviluppo. Non ci serve altro”

Gli standard sono applicati? I programmatori li conosco-no? Gli standard funzionano? Sono ottimizzati in modo da migliorare i tempi di consegna mantenendo la qualità?

“Abbiamo i più moderni sistemi di sviluppo. Acquistiamo i computer sempre più recenti”

Sviluppare non è una attività facilmente automatizzabile. Gli strumenti CASE sono importanti ma gli sviluppatori lo sono di più

I miti del software per il management / 2

“Se siamo in ritardo, possiamo recuperare aumentando il numero di programmatori”

Adding manpower to a late project makes it later
Fred Brooks

“Se faccio realizzare un progetto software in outsourcing, io posso restare tranquillo”

Se non so creare software in proprio, cosa ci sto a fare?

I miti del software per il cliente

“Un'affermazione generica di cosa deve fare un programma è sufficiente per iniziare a scrivere codice”

Una insufficiente descrizione preliminare è una garanzia di fallimento

“I requisiti mutano di continuo, ma i cambiamenti si gestiscono facilmente grazie alla flessibilità del software”

L'effetto della modifica delle specifiche è tanto più costoso quanto più viene effettuata tardi nella fase di sviluppo

L'effetto delle modifiche

Costo di

una

modifica

1X

1,5-6X

60-100X

Definizione

Sviluppo

Dopo la consegna

I miti del software per il programmatore / 1

“Una volta messo in opera il programma, il nostro lavoro è finito”

Tra il 60% e l'80% del lavoro speso su un programma avviene dopo la consegna della prima versione al cliente

“Fino a quando il programma non è in condi-zione di essere eseguito, non c'è modo di valu-tarne la qualità”

Revisioni tecniche formali si possono applicare fin dall'inizio

I miti del software per il programmatore / 2

“Il solo prodotto di un progetto concluso è il pro-gramma funzionante”

Non basta. C'è la documentazione, la guida all'uso e alla manutenzione

“L'ingegneria del software ci farà scrivere un'inutile e voluminosa documentazione che inevitabilmente rallenterà la cose”

L'ingegneria del software si occupa di creare qualità. Una migliore qualità porta a minor lavoro, e minor lavoro porta a tempi di consegna pià rapidi

Ingegneria del Software e Informatica

L'Informatica è una scienza che si occupa dei fondamenti (linguaggi, algoritmi, complessità...)

L'ingegneria del software si occupa degli aspetti pratici che riguardano lo sviluppo di software di qualità

Le teorie informatiche risultano al momento insufficienti per fornire una base completa dell'Ingegneria del software

Ingegneria del Software e Ingegneria di Sistema

L'Ingegneria di Sistema ha come oggetto tutti gli aspetti dello sviluppo di un sistema basato su computers, inclusi gli aspetti hardware, software e di processo.

L'Ingegneria del Software può essere vista come una parte dell'Ingegneria di Sistema.

Gli Ingegneri del Software collaborano

alla specifica del sistema

alla progettazione architetturale

all'integrazione con le altre componenti.

Processo di produzione Software

Il processo di produzione software è un insieme di attività il cui fine è lo sviluppo oppure la modi-fica di un prodotto software

Attività generiche in tutti i processi di produzione del software:

Specifica – cosa deve fare il sistema e quali sono i vincoli per la progettazione

Sviluppo – produzione del sistema software

Validazione – verifica che il software faccia ciò che il cliente richiede

Evoluzione – modificare il software in base alla modifica delle esigenze

Modello di processo Software

Una rappresentazione semplificata di un proces-so di sviluppo del software, osservata da uno specifico punto di vista. Ad esempio:

Workflow: sequenza di attività

Data-Flow: scambio di informazioni

Role/Action: chi fa cosa

Alcuni modelli di processo generici:

A cascata

Sviluppo evolutivo

Trasformazione formale

Integrazione di componenti riusabili

Modelli di processo

A cascata

Fasi distinte di specifica e sviluppo

Modello evolutivo

Specifica e sviluppo interagiscono

Modello trasformazionale

Un sistema matematico è trasformato formalmente in una implementazione

Sviluppo basato sul riutilizzo

Il sistema è ottenuto combinando componenti esistenti

Problemi nel processo di sviluppo software

Specifiche incomplete/incoerenti

Mancanza di distinzione tra specifica, progetta-zione e implementazione

Assenza di un sistema di validazione

Il software non si consuma: la manutenzione non significa riparare alcune componenti rotte, ma modificare il prodotto rispetto a nuove esigenze

Visibilità del processo di sviluppo

I sistemi software sono intangibili

Pertanto è necessario documentare e tenere traccia di ciò che si sta facendo

Deliverable-Oriented Process

Ogni fase del processo di produzione deve sfornare qualche documento

Tali documenti rendono visibile il processo di produzione del software

Problemi nella produzione di documenti

I manager si basano sui documenti per prendere le decisioni

I documenti potrebbero non essere pronti quando richiesti, perché i tempi di sviluppo possono non coincidere con quelli in cui si devono prendere le decisioni

La necessità di approvare documenti rallenta il processo di sviluppo

Il tempo necessario per revisionare ed approvare i documenti può essere significativo

Costi nel processo di produzione del Software

Circa il 60% dei costi è legato allo sviluppo, il 40% sono costi per la verifica e validazione (testing).

I costi variano a seconda del tipo di sistema che deve essere sviluppato e da requisiti quali le prestazioni o l'affidabilità del sistema.

La distribuzione dei costi nelle varie fasi del pro-cesso di produzione del software dipende dal modello di processo.

Metodi dell'Ingegneria del Software

Approcci strutturati di sviluppo software, che includono:

Descrizione di Modelli

Descrizione di modelli che devono essere prodotti

Regole

Vincoli applicati ai modelli del sistema

Suggerimenti di disegno

Suggerimenti su buone pratiche di disegno

Guide al Processo di Sviluppo

Quali attività seguire

Quali sono le sfide dell'Ingegneria del Software?

Legacy systems

Sistemi vecchi ma ancora molto utilizzati che devono essere mantenuti e aggiornati

Eterogeneità

Sistemi distribuiti, che includono una varietà di componenti hardware e software diversi

Tempi di Consegna

C'è una continua pressione per ottenere software di qualità in tempi sempre più rapidi

Responsabilità professionale

Non limitarsi agli aspetti tecnici, ma guardare anche ai risvolti etici, sociali e alle responsabilità professionali: essere onesti non è solo rispettare le leggi.

Confidenzialità

Competenza

Diritti di proprietà intellettuale

Uso inappropriato dei computer

Vedi “ACM/IEEE Code of Ethics”

Moreno Mazolla

2002-10-04T11:33:33