INGEGNERIA DEL SOFTWARE
AA. 2011/’12
Tino Cortesi
DAIS
Università Ca’ Foscari
Venezia
Obiettivi della lezione
 Descrivere gli obiettivi e le modalità di svolgimento del
corso
 Fornire un’introduzione generale ai contenuti
 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
Outline
 Obiettivi (learning outcomes)
 Dettagli tecnici: libri, lezioni, esami, ecc.
 Ingegneria del Software: perché è importante
10 domande e 10 risposte
Obiettivi
 Il corso di Ingegneria del Software presenta i metodi, le tecniche e gli
strumenti fondamentali di documentazione della specifica, analisi e
progetto di sistemi software complessi da un punto di vista
architetturale, con enfasi speciale sulla parte di analisi/specifica dei
requisiti e progettazione a oggetti usando UML. Analizziamo in
particolare le tecnologie di costruzione di documenti di supporto alla
progettazione.
Dettagli sul corso
 URL: http://www.dsi.unive.it/~ingsw
 Mail Address: [email protected]
 Lezioni: Lunedi e Giovedi dalle 8.45 alle 10.15
 Ricevimento: Giovedi 10.30-12.00 (su appuntamento)
Libri di testo:
 Roger Pressmann,
Principi di Ingegneria del
Software, quinta ed.
McGraw Hill
ISBN 9788838662164
oppure
 Ian Sommerville,
Ingegneria del Software,
settima ed.
Pearson Education,
ISBN 9788871923543
Modalità d’esame
 Per chi frequenta (min 70% delle lezioni):
 Verranno assegnati 4 tasks durante il corso
 Da svolgere in gruppi di 4 persone
 Da consegnare tassativamente entro la scadenza fissata
 Per superare l’esame, deve essere consegnata la versione rivista
dei tasks entro la data del primo appello.
 La valutazione = valutazione dei tasks + valutazione revisione
 Per chi non frequenta:
 una prova scritta negli appelli d’esame (mooooolto difficile!).
Perché un corso di Ingegneria del
Software?
 E’ importante distinguere:

i sistemi semplici (uno sviluppatore, un utente, prodotto sperimentale)
 dai sistemi “hard” (molti sviluppatori, molti utenti, “prodotto vero”)
 L’esperienza acquisita nello sviluppo di sistemi semplici non è
scalabile! Analogia con la costruzione di un ponte:


Su un ruscello = facile, basta una persona
Sul ponte di Messina … ?
 Il problema è la complessità


UNIX contiene 4 milione di linee di codice
Windows 2000 contiene 108 linee di codice
L’Ingegneria del Software ha a che fare
con la gestione della complessità.
Contesto mondiale
 L'incremento del Pil mondiale, pari al 4,9% nel 2005 e aumentato al
5,1% nel 2006, è stato superato dall'accelerazione registrata dal
settore ICT, il cui tasso di crescita è stato del 6,1% nel 2005 e del
5,5% nel 2006 (dove la flessione è data dall'assestamento della
crescita delle Tlc).
 Nel confrontare la crescita dell' It in Italia con i dati analoghi a livello
mondiale, i curatori rilevano che:
 La spesa IT ha un enorme ritardo;
 A partire dal 2004, la spesa IT è cresciuta in misura molto più
accelerata rispetto al mondo, con un divario che è stato in
attenuazione: 5,8 nel 2003, 4,8 nel 2004, 4,3nel 2005, 4,2 nel
2006.
(Rapporto Aitech-Assinform 2007)
Il mercato IT in Italia
Ingegneria del Software
 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
 Qual’è l’impatto potenziale del software?

In negativo
 Riduzione di posti di lavoro
(http://www.developerdotstar.com/mag/articles/read_impact.html)
 Perdita di vite umane
(http://www.baselinemag.com/article2/0,1397,1543590,00.asp)
 In positivo
 Ricerca sul Genoma (http://www.genome.gov/)
 Previsioni del tempo (http://www.hpcc.gov/pubs/blue97/accweather.html)
10 domande sull’ingegneria del software
1.
2.
3.
4.
5.
6.
Cos’è il software?
Quali sono gli attributi di un software di qualità?
Cos’è l’ingegneria del software?
Qual’è la differenza tra ingegneria del software e
informatica?
Qual’è la differenza tra ingegneria del software e
ingegneria di sistema?
Cosa si intende per processo di produzione del
software?
10 domande sull’ingegneria del software
Cos’è un modello di processo di produzione
software?
8. Quali sono i costi nel processo di produzione
software?
9. Quali sono i metodi dell’ingegneria del software?
10. Quali sono le sfide che l’ingegneria del software si
trova ad affrontare?
7.
1. Cos’è un prodotto software?
 Qualcosa di più di un insieme di linee di codice…
 Un insieme di linee di codice, strutturato in packages
 Tutta la documentazione che descrive la struttura del
sistema
 I dati di configurazione, che permettono di installarlo
 Il manuale utente
Prodotti software:
una prima classificazione
1.
2.
3.
4.
5.
6.
7.
System software – operating systems, drivers,
compilers, etc.
Application software – Custom business apps.
Engineering/Scientific software – Mentor Graphics,
ANSYS.
Embedded software – Cell phones, PDAs.
Product software – Word, Excel.
Web Applications
Artificial Intelligence software
Prodotti Software:
un’altra classificazione
 Prodotti Generici
Sistemi stand-alone prodotti da un’organizzazione di sviluppo e
venduti sul mercato ad ogni cliente
 Prodotti Dedicati
 Sistemi che sono commissionati da un cliente specifico e
sviluppati appositamente

 La maggior spesa di software riguarda sistemi generici, ma il maggior
sforzo di sviluppo è su prodotti dedicati
 La differenza principale? Chi dà la specifica del prodotto (il produttore
o il consumatore).
Le caratteristiche del prodotto software
 Il software si sviluppa o si struttura, non si “costruisce” come negli altri
processi manifatturieri
 Lo sviluppo del software e la produzione dell’hardware sono due
processi profondamente diversi
 In comune c’è la tensione a semplificare la produzione riducendola ad
un “Assemblaggio di componenti”
Curva dei guasti per l’hardware
Curva dei guasti per il software
2.
Attributi di qualità di un prodotto
software
 Affidabilità
 Correttezza
 Robustezza
 Verificabilità
 Sicurezza - Innoquità
 Efficienza (Produttività)
 Non deve sprecare risorse (memoria, tempo,...)
 Usabilità
 Deve avere interfaccia e documentazione appropriate
 Manutenibilità
 Capacità di evolvere in rapporto alla modifica di requisiti
Il triangolo di McCall
Maintainability
Flexibility
Testability
PRODUCT REVISION
Portability
Reusability
Interoperability
PRODUCT TRANSITION
PRODUCT OPERATION
Correctness
Usability
Efficiency
Integrity
Reliability
3. Cos’è l’Ingegneria del Software?
 Definizione IEEE:
“The application of systematic, disciplined, quantifiable
approach to the development, operation, and
maintenance of software;
that is,
the application of engineering to software.”
Cos’è l’ingegneria del software?
 “Software engineering” è una disciplina che cerca di
fornire le regole per il processo di produzione del software
 Un ingegnere del software dovrebbe:
 adottare un approccio sistematico e organizzato al
proprio lavoro
 usare strumenti e tecniche appropriate, che dipendono
dal problema che deve essere risolto, dai vincoli
presenti e dalle risorse disponibili.
Vista a layers
dell’Ingegneria del Software
tools
methods
process model
a “quality” focus
Definizione dei layers
 Il layer dei processi è la base per la gestione di ogni
progetto software.
“Un processo definisce chi fa cosa,
e quando e come si raggiunge un certo obiettivo.”
 Il layer dei metodi descrive come all’interno di un singolo
processo si realizzano i singoli passi che lo compongono.
 Il layer dei tools descrive strumenti che supportano lo
sviluppo delle attività.
4. Ingegneria del software e
informatica
 L’informatica è una scienza: il “cuore” sono i fondamenti
teorici: linguaggi – algoritmi – complessità – formalismi
ecc.
 L’ingegneria del software ha a che fare con aspetti più
“pratici”: come pianificare e sviluppare la produzione di
software di qualità.
 Ad un ingegnere del software le conoscenze di base
dell’informatica servono quanto la fisica ad un ingegnere
elettrico
5. 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.
6.
Processo di produzione software
 Il processo di produzione software è un insieme di attività
il cui fine complessivo è

lo sviluppo di un prodotto software oppure

la modifica di un prodotto software
7.
Attività richieste
nel processo di sviluppo software
 Specifica
 Progettazione
 Implementazione
 Validazione
 Installazione
 Manutenzione
 Smaltimento
Caratteristiche del processo
 Comprensibilità
 Visibilità
 Supportabilità (CASE )
 Accettabilità
 Robustezza
 Mantenibilità
 Rapidità
Problemi nel processo di sviluppo
del software
 Specifiche incomplete/incoerenti
 Mancanza di distinzione tra specifica, progettazione 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
8. I costi di un prodotto software
 All’incirca 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 la performance o
l’affidabilità del sistema.
 La distribuzione di costi nelle varie fasi del processo di
produzione del software dipende dal modello di processo.
Costi relativi nell’intero ciclo di vita del sw
Costo di una modifica
9. Modelli di processo di
produzione software
 Una rappresentazione semplificata del processo di
produzione software a partire da una certa prospettiva
 Esempi di prospettiva da cui si può modellare il processo
di produzione sw:
 Workflow - sequenza di attività
 Data-flow - flusso di informazione
 Role/action - chi fa cosa
Le sfide ed i problemi
 Skill shortage
Secondo una ricerca condotta da EITO nel 2003, in Europa ci sono 1
milione e 700 mila posti nell'Information & Communication
Technology che non riescono ad essere coperti perché mancano le
giuste risorse.
In Italia la carenza di risorse è calcolata in 167 mila unità.
 Skill gap
Problema ancor più grave è lo Skill gap, ossia la distanza fra le
competenze tecniche richieste dal mercato ICT e la professionalità
degli operatori del settore.
 Alta percentuale di fallimento
Indagine dello Standish Group, basata su un campione di 28.000
progetti e pubblicata da Computer Weekly il 9 luglio 1998:
Miti dell’ingegneria del software
Software Myth #1
“Se sforiamo i tempi previsti, basta aggiungere
programmatori e ce la faremo!”
 Non basta aggiungere risorse ad un progetto per
accelerarne la realizzazione.
 Lettura consigliata:
Frederick Brooks, The Mythical Man-Month
“Adding manpower to a late project makes it later”
Miti dell’ingegneria del software
Software Myth #2
“Se sappiamo a grandi linee cosa deve fare il
sistema, possiamo già iniziare a programmare”
 Avere chiari gli obiettivi è un buon inizio, ma
l’attività di codifica inizia molto più tardi!
Miti dell’ingegneria del software
Software Myth #3
“Una volta scritto il programma e fatto girare,
il nostro lavoro è finito”
 Scrivere programmi è solo una parte molto
piccola dell’intero processo.
Miti dell’ingegneria del software
Software Myth #4
“Finché il programma non gira,
non c’è modo per giudicarne la qualità”
 L’attività di revisione durante il processo di
progettazione è una condizione indispensabile
per garantire la qualità del prodotto finale.
Miti dell’ingegneria del software
Software Myth #5
“Se segui buoni processi di sviluppo software
e ti adegui agli standards,
un buon prodotto finale è garantito.”
 La qualità di processo è una condizione
necessaria, ma non sufficiente, per la qualità di
prodotto.
Miti dell’ingegneria del software
Software Myth #6
“I requisiti variano continuamente,
ma ogni richiesta di cambiamento può essere
facilmente soddisfatta, perché il software è
flessibile”
 E’ vero che I requisiti cambiano, ma la facilità con
viene soddisfatta la richiesta di modifica dipende
dalla fase del processo in cui avviene la richiesta.
Concludendo
 Ingegneria del software = una disciplina metodologica
che studia principi, tecniche, metodi e strumenti che
supportanto il processo di produzione del software.
Scarica

IS_01_2011_2012 - Università Ca` Foscari di Venezia