Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D Le Miniguide all'orientamento Gli eBook di Federica La Corte in Rete
 
I corsi di Ingegneria
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Porfirio Tramontana » 1.Introduzione


Presentazione del corso

Obiettivi del corso

  • Presentare le diverse tematiche dell’ingegneria del software, fornendo le basi per comprendere e partecipare a un moderno processo di sviluppo software e realizzare prodotti software che soddisfino requisiti di qualità predefiniti

Crediti didattici e durata del corso

  • 6 crediti per una durata di 52 ore

Materiale didattico

Libri di testo:
Ian Sommerville, Ingegneria del Software, 8 ed., Addison Wesley 2007 oppure (in alternativa)
M. Fowler, UML distilled, 3 edizione, Addison Wesley, 2004

Libri consigliati:
Roger S. Pressman, Principi di Ingegneria del Software, quinta edizione, Mc Graw Hill, 2007
L. A. Maciaszek, Sviluppo di sistemi informativi con UML, Addison Wesley –Pearson Education Italia, 2002

Strumenti per il laboratorio:
StarUML (o altri equivalenti) per la modellazione UML
Ambiente di sviluppo software a scelta
Altri piccoli programmi/ambienti descritti durante il corso

Contenuti del corso

  • Il processo software: Problemi della produzione del software. Cicli di vita del software.
  • Analisi e progettazione: Aspetti generali dell’analisi e della progettazione. Analisi e progettazione orientata agli oggetti. UML come linguaggio di analisi e progettazione. Pattern architetturali e di progettazione. Progettazione dell’interfaccia. Documentazione.
  • Testing, validazione e debugging: Obiettivi e pianificazione del testing. Progettazione e valutazione dei casi di test. Debugging.
  • Manutenzione: tipi e processi di manutenzione software. Gestione della configurazione.

Software ed Ingegneria del Software

  • Le economie di tutte le nazioni industrializzate dipendono dal software.
  • Sempre più sistemi sono controllati dal software.
  • Gli investimenti per il software rappresentano una parte significativa del PIL di tutte le nazioni industrializzate.
  • L’Ingegneria del Software è un insieme di teorie, metodi e strumenti per sviluppare software di qualità in maniera professionale.

Costi del Software

  • I costi del Software spesso dominano i costi complessivi dei sistemi informatici. Addirittura, nel caso di PC, i costi del software sono spesso maggiori dei costi dell’hardware stesso.
  • É più costoso manutenere il software piuttosto che svilupparlo, soprattutto per sistemi di vecchia data (i cosiddetti sistemi legacy).
  • L’Ingegneria del software ha come obiettivo riuscire a sviluppare software in maniera efficace e con costi contenuti (cost-effective).

Software

Una definizione:

  • non solo programmi, ma l’insieme degli ‘artifatti’ che lo compongono, prodotti durante il suo sviluppo
  • un programma verrà usato dal suo autore, che lo ha sviluppato senza preoccuparsi di altri utenti, di portabilità, affidabilità,…
  • un sistema software, essendo rivolto ad altri utenti, dovrà essere usabile, portabile, affidabile, etc…

La definizione IEEE (Institute of Electrical and Electronic Engineers)

  • insieme di programmi, procedure, regole, e ogni altra documentazione relativa al funzionamento di un sistema di elaborazione dati

Che cos’è l’ingegneria del software?

  • L’ingegneria del software è una disciplina ingegneristica che si occupa di tutti gli aspetti relativi allo sviluppo del software.
  • Gli ingegneri del software dovrebbero adottare:
    • un approccio sistematico e organizzato per il loro lavoro;
    • usando strumenti e tecniche appropriate;
    • variabili a seconda del problema da risolvere, dei vincoli di sviluppo, e delle risorse disponibili.

Perchè l’ingegneria del software è importante?

Il Software deve essere affidabile, sicuro, usabile e manutenibile. L’ingegneria del software punta a produrre software con queste caratteristiche e, diversamente dalla programmazione, non si preoccupa solo della funzionalità o di particolari caratteristiche del sistema.

L’ingegneria del software è particolarmente importante per sistemi da cui dipendono persone e processi di business, e che vengono usati per molti anni.

Quale è la differenza fra ingegneria del software ed informatica?

L’informatica si occupa delle teorie e dei metodi alla base dei sistemi software ed informatici; l’ingegneria del software si occupa degli aspetti pratici relativi alla produzione del software.

Anche se le teorie ed i principi informatici sono fondamentali, spesso vengono trascurati dagli ingegneri del software per questioni di praticità (diversamente da quanto accade in altre branche ingegneristiche).

Cos’è l’ingegneria dei sistemi?

  • L’ingegneria dei sistemi si occupa di tutti gli aspetti dello sviluppo ed evoluzione di un sistema informatico, dalla progettazione dell’hardware a quella dei processi fino all’ingegneria del software stessa.
  • Gli ingegneri dei sistemi si occupano di definire le specifiche del sistema, la sua architettura generale, e di integrarne le varie parti.
  • L’ingegneria del software è parte di questo processo e si preoccupa di sviluppare l’infrastruttura software, il controllo, le applicazioni ed il database.

Caratteristiche del Software

  • Il Software è intangibile
    • Difficile comprenderne la complessità, la qualità, lo sforzo necessario per lo sviluppo
  • Il Software è facile da riprodurre
    • I Costi maggiori sono nel processo di progettazione e sviluppo, diversamente da altri prodotti industriali
  • L’industria del software richiede un grosso impegno intellettivo
    • É difficile da automatizzare

Obiettivo dell’Ingegneria del software

  • Definire metodi e procedure per lo sviluppo del software, utili ad ottenere sistemi di grandi dimensioni, di alta qualità, a basso costo, ed in breve tempo.
  • Per conseguire tali obiettivi occorre puntare sulla qualità del processo di sviluppo del software
    • il software come altre industrie manifatturiere.

Modelli del CVS a cascata (Waterfall models)

  • Progressione sequenziale (in cascata) di fasi, senza ricicli, al fine di meglio controllare tempi e costi;
  • Ogni fase è caratterizzata da
    • attività (tasks),
    • prodotti di tali attività (deliverables),
    • controlli relativi (quality control measures);
  • La fine di ogni attività è un punto rilevante (milestone) del processo;
  • I deliverables prodotti in una fase sono input alla fase successiva;
  • I prodotti di una fase vengono congelati, ovvero non sono più modificabili se non innescando un processo formale e sistematico di modifica.

Modello a cascata (un esempio…)


Fasi del modello a cascata

Studio di fattibilità

  • stabilire se lo sviluppo debba essere avviato.
  • quali le alternative possibili e le scelte più ragionevoli.
  • stima delle risorse finanziarie e umane necessarie, per ciascuna possibilie soluzione.
  • redazione di un un Documento di Fattibilità.

Analisi e specifica dei requisiti

  • definizione, tramite ‘interviste’ con il commitente, di funzioni, vincoli, prestazioni, interfacce e di qualsiasi altra caratteristica che il sistema dovrà soddisfare.
  • redazione di un Documento di Specifica dei Requisiti Software, che sia completo, preciso, consistente, non ambiguo, comprensibile in maniera adeguata sia al committente che allo sviluppatore.
  • predisposizione di un piano di test e della versione 0 del manuale utente.

N.B. Definizione di che cosa deve essere fatto e non come.

Le fasi del modello a cascata

Progettazione

  • definizione dell’architettura del sistema: componenti del sistema e relazioni tra questi (progetto di alto livello – HLD).
  • definizione della struttura interna di ciascun componente (progetto di dettaglio – LLD).
  • definizione della struttura dei dati e delle interfacce utente.
  • redazione di un documento di Specifica di Progetto.

Codifica

  • Implementazione dei vari componenti definiti nel Progetto.

Testing

  • Definizione ed esecuzione di “casi di prova” sia per i singoli componenti che per l’intero sistema con l’intento di rilevare malfunzionamenti.

N.B. Il Testing ha lo scopo di rilevare malfunzionamenti

Le fasi del modello a cascata (segue)

Messa in esercizio

  • Insieme di tutte le operazioni necessarie per il rilascio, l’installazione e rendere operativo il sistema realizzato presso il committente.

Manutenzione

  • Processo di modifica di un sistema o di un componente software dopo il suo rilascio al fine di eliminare anomalie, migliorare le prestazioni o altri attributi di qualità, o adattarlo a mutamenti dell’ambiente operativo e/o del dominio applicativo.

Vantaggi e limitazioni del modello a cascata

Vantaggi

  • la fasi da seguire sono ben definite;
  • gli output di ciascuna fase precisamente individuati.

Svantaggi

  • il modello assume che i requisiti possano essere congelati alla fine della fase di specifica, ma ciò è impensabile per un sistema i cui requisiti non siano ben chiari neanche al committente;
  • in alcuni casi è auspicabile sviluppare prima una parte del sistema e poi completarlo (utente finale= mercato);
  • in alcuni casi lo sviluppo di tutta la documentazione richiesta è non necessaria (uso di ambienti di sviluppo visuali).

Quali sono i costi dell’ingegneria del software?

Circa il 60% dei costi è speso per le attività di sviluppo, il 40% per il testing. Per software personalizzato i costi per l’evoluzione spesso superano quelli di sviluppo.

I costi variano in base al tipo di sistema sviluppato e ai requisiti di qualità richiesti quali le prestazioni o l’affidabilità.

La distribuzione dei costi dipende anche dal tipo di modello di sviluppo adottato.

  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion