Insegnamento INGEGNERIA DEL SOFTWARE

Corso
Informatica
Codice insegnamento
55024706
Curriculum
Comune a tutti i curricula
Docente
Alfredo Milani
Docenti
  • Alfredo Milani
Ore
  • 42 ore - Alfredo Milani
CFU
6
Regolamento
Coorte 2019
Erogato
2020/21
Attività
Caratterizzante
Ambito
Discipline informatiche
Settore
INF/01
Tipo insegnamento
Obbligatorio (Required)
Tipo attività
Attività formativa monodisciplinare
Lingua insegnamento
ITALIANO
Contenuti
Il software: processo e prodotto.Modelli di Ciclo di Vita del Software.Tecniche di Analisi. Linguaggi di modellazione: UML. Metriche di prodotto e di processo.Tecniche di Test e di Verifica Formale.Standard Valutazione del Software. Secure programming.Tecnologie di supporto al riuso. Design Pattern e integrazione SW.
Testi di riferimento
Testi di riferimento (riferirsi alle ultime edizioni):
Appunti del Docente disponibili sulla piattaforma di elearning http://www.unistudium.unipg.it

Testo di Riferimento
Sommerville, SOFTWARE ENGINEERING. Editore : Pearson Education Italia

Altri testi di consultazione:
su Progettazione del SW:
A. Binato, A. Fuggetta, L. Sfardini. Ingegneria del Software. Pearson, 2006.

su UML
G. Booch, J. Rumbaugh, I. Jacobson. The UML user guide. Addison Wesley, 1999.
J. Arlow, I. Neustadt. UML e Unified Process. McGraw-Hill, 2003.
S. Bennett, J. Skelton, K. Lunn. Introduzione a UML. McGraw-Hill, 2002.
E. Damiani, M. Madravio. UML pratico. Addison Wesley, 2003.
H.E. Eriksson, M. Penker. UML Toolkit. Pearson, 2004.

Argomento: Design Pattern
E. Gamma, R. Helm, R. Johnson, J. Vlissides. Design Patterns. Addison-Wesley, 2002.
C. Larman. Applicare UML e i pattern. Pearson, 2004.
Obiettivi formativi
Obiettivo del corso e' l'apprendimento delle tecniche della progettazione software e della gestione del processo di definizione dei requisiti, della progettazione, dello sviluppo, del test, della consegna, integrazione, inizializzazione e manutenzione dei sistemi informatici
in accordo con le principali metodologie, buone pratiche e standard accettate a livello internazionale.

Le conoscenze acquisite al termine del corso comprendono :

le principali tecniche e standard per la analisi, la progettazione, lo sviluppo, l'organizzazione dle processo di produzione software
le metriche di valutazione di un sistema informatico.
le principali tecniche di test software. Buone pratiche di programmazione sicura.
le tecniche di programmazione basate sui design pattern
le tecniche di integrazione software

Le abilita' acquisite al termine del corso comprendono

capacita' di applicare le tecniche di analisi, progettazione, test a casi di studio reali
capacita' di lavorare in gruppo e comprendere attraverso l'esperienza del progetto di gruppo le principali problematiche per la gestione del processo di sviluppo software
capacita' di riconoscere situazioni e applicabilita' delle metodologie di integrazione e soluzioni di design pattern.
Prerequisiti
I prerequisiti per apprendere e comprendere efficacemente i contenuti di questo insegnamento sono nozioni di base di programmazione e nozioni di programmazione ad oggetti, elementi di logica e comprensione degli elementi di base della complessita' ed efficenza degli algoritmi e delle strutture dati.
Metodi didattici
Lezioni frontali.
Esercitazioni, discussioni interattive su casi di studio.
Valutazione continua attraverso progetti ed esercizi di esonero.
Valutazione finale tramite prova scritta

Materiale, informazioni dettagliate e messaggi urgenti sulle lezioni e gli esoneri su http://www.unistudium.unipg.it

Date di Appello su http://www.informatica.unipg.it
Altre informazioni
Piattaforma di e-learning del corso con materiale e altre informazioni su http://www.unistudium.unipg.it
Modalità di verifica dell'apprendimento
L'esame consiste in una prova scritta e un progetto da sviluppare in gruppo e presentare al docente. Per gli studenti frequentanti alcune delle prove o parti di esse possono essere sostituite da prove in itinere.

La prova scritta della durata di due ore che verte sui principali argomenti affrontati durante il corso. Gli esercizi proposti ai candidati consistono nella risoluzione di problemi di analisi, modellazione di domini applicativi reali tramite techniche di ingegneria del software, nella costruzione di test, e in domande aperte su argomenti teorici sui metodi della ingegneria del software.

Il progetto consiste nello sviluppo di un progetto software in gruppo secondo le metodologie apprese in cui ciascuno studente svolge un ruolo operativo predeterminato. Il progetto prevede una relazione finale ed una presentazione da parte dei partecipanti che forma parte integrante della valutazione. Scopo del progetto e' acquisire esperienza pratica ed attitudine al lavoro di gruppo affrontando un problema reale.

Le prove in itinere vengono programmate durante il periodo di svolgimento delle lezioni e sono riservate agli studenti frequentanti.

Per informazioni sui servizi di supporto agli studenti con disabilità e/o DSA visita la pagina http://www.unipg.it/disabilita-e-dsa
Programma esteso
Programma:

1 Il software: processo e prodotto
- Introduzione
- Modelli di ciclo di vita del software: waterfall, modelli iterativi/incrementali modelli a spirale
- Tecniche, modelli e linguaggi per l' analisi dei requisiti , il progetto, l'implementazione e la verifica del software.
- La manutenzione del software
- Il linguaggio UML (Universal Modeling Language), concetti di base, principali diagrammi e loro correlazione con le fasi di analisi dei requisiti (requirement a.), progetto (design) e implementazione(implementation). Attori, casi d'uso, scenari, stereotipi. Diagrammi casi d'uso, diagrammi di classe/oggetti, diagrammi di sequenza, diagrammi di collaborazione, diagrammi di attività, diagrammi di stato, diagramma di componenti, diagrammi di rilascio/consegna (deployment).
- Esercizi di modellazione tramite UML su scenari applicativi reali. Utilizzo di strumenti UML in ambiente Netbeans o altri strumenti di modellazione basati su UML
- Strumenti e ambienti di sviluppo IDE, sistemi di gestione delle versioni (versioning).
- Strumenti per la generazione della documentazione: loro integrazione in IDE e ambienti UML.Strumenti autonomi (javadoc)

2 Metriche di prodotto e di processo
- Qualità del software
- Metriche di costo: metriche classiche, il metodo dei function point.

3 Tecniche per l'affidabilità e sicurezza
-- La fase di test: test in sviluppo, test del prodotto e test di manutenzione. Il concetto di copertura e classe di copertura di un test.
- Test sistematici e incrementali.
- Test Funzionali (black box), esercizi di creazione di casi di test
- Test Strutturali (white box), esercizi di creazione di casi di test
-- Secure Coding:
- Principali errori software e vulnerabilità (principi guida, aree e Common Weakness Enumeration)
- Standard e buone pratiche per la programmazione sicura. Il CERT Java: regole/raccomandazioni, struttura a livelli e valutazione del rischio vulnerabilità

4 Tecnologie di supporto al riuso
-- Design Pattern: concetti di base ed obiettivi dei design pattern ed esercizi di utlizzo e applicazione dei design pattern. Il pattern Model View Controller ed il pattern Observer, Iterator, Factory e GUI Factory. Classi di design pattern.
DP Strutturali(Adapter, Façade,Composite, Decorator, Proxy,Flyweight), DP
Creazionali(Factory,Abstract Factory,Singleton, Prototype) DP Comportamentali (Observer,Mediator, Iterator , Chain of Responsibility,Interpreter .
--Tecniche per l'Integrazione del software: il concetto di middleware
-integrazione orientata alle informazioni (IOAI), (data integration , interface
processing es.API, user interface, embedded device)
- integrazione orientata ai processi applicativi (BPAI) (applicazioni composte e event driven, autonome/distribuite)
- integrazione orientata ai servizi(SOAI)
- integrazione orientata ai portali(POAI): single system, multiple system, trading community.
Condividi su