Università degli studi dell'Insubria

FONDAMENTI DI INGEGNERIA DEL SOFTWARE

A.A. di erogazione 2017/2018

Laurea Magistrale in INFORMATICA
 (A.A. 2017/2018)
Anno di corso: 
1
Tipologia di insegnamento: 
Caratterizzante
Settore disciplinare: 
SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI (ING-INF/05)
Crediti: 
9
Ore di attivita' frontale: 
72
Dettaglio ore: 
Lezione (72 ore)

Il corso ha lo scopo di fornire i fondamenti di Ingegneria del Software. In particolare, scopo del corso è fornire agli studenti le conoscenze fondamentali sull’organizzazione delle attività di sviluppo del software (cicli di vita), sulla specifica dei requisiti, su verifica e validazione, e sugli aspetti gestionali dello sviluppo. Inoltre il corso presenta i paradigmi computazionali e architetturali dei sistemi sequenziali, concorrenti e dtribuiti

I risultati di apprendimanto attesi sono i seguenti.

Conoscenza e capacità di comprensione
• Conoscenza delle caratteristiche dei processi di sviluppo del software e dei loro semilavorati (specifiche dei requisiti, modelli, test case, piani di sviluppo, ecc.).
• Conoscenza delle problematiche e dei metodi di analisi dei requisiti.
• Conoscenza delle problematiche e delle strategie di verifica e validazione del software.
• Conoscenza dei modelli computazionali e architetturali dei sistemi informatici
Conoscenza e capacità di comprensione applicate
• Conoscenza e capacità di applicare diverse tecniche e linguaggi di specifica dei requisiti (DFD, Reti di Petri, Z, TRIO).
• Conoscenza e capacità di applicare tecniche di stima dei costi (Per analogia, COCOMO, Function Point).
• Capacità di applicare diverse tecniche di testing (strutturale e funzionale) e di valutare la copertura ottenuta.
• Capacità di applicare i diversi paradigmi computazionali e architetturali nella definizione di un sistema.
Autonomia di giudizio
• Capacità di valutare le strategie di implementazione più convenienti, in base ai requisiti e vincoli presenti.In particolare, saper valutare quale tra i modelli di cicli di vita si adatta meglio alle caratteristiche tipiche di un dato prpocesso e prodotto software.
• Capacità di scegliere tecniche e linguaggi di specifica dei requisiti adatti alle caratteristiche del software da sviluppare.
• Capacità di scegliere le tecniche di verifica e validazione adatti alle caratteristiche del software, ai costi sostenibili e ai livelli di confidenza che occorre raggiungere.
• Capacità di individuare i paradigmi e i modelli computazionali più adeguati rispetto alle caratteristiche del sistema da realizzare
Capacità di apprendere
• Grazie alla capacità –sviluppata durante tutto il corso– di rapportare puntualmente tecniche, metodi e strumenti alle caratteristiche del software e delle relative attività di sviluppo, lo studente viene messo in grado di apprendere nuove tecniche, metodi e strumenti, e anche ad affinare ed adattare autonomamente quanto appreso nel corso.
Abilità comunicative
• Conoscere e saper usare i formalismi normalmente usati per descrivere analizzare e progettare sistemi software.
• Conoscere la terminologia inglese comunemente usata nel campo.

Non si richiedono conoscenze particolari oltre quelle acquisite in una laurea triennale di Informatica o Ingegneria Informatica

Introduzione all’ingegneria del software. Descrizione e analisi dei cicli di vita del software, con particolare enfasi su motivazioni e applicabilità. Modelli a cascata, iterativo, a spirale.
(6 ore di lez. 0 ore di esercitazione)

La specifica dei requisiti: caratteristiche e scopi. Tecniche e linguaggi: DFD, Reti di Petri, Z, TRIO.
(14 ore di lez. 9 ore di esercitazione)

Verifica e Validazione: problematiche, principi e limiti. Tecniche di analisi statica (Analisi di Data Flow). Analisi Dinamica (Fondamenti teorici del testing, testing strutturale e funzionale, criteri di copertura, testing in the large), Cenni all’esecuzione simbolica.
(10 ore di lez. 5 ore di esercitazione)

Stima dei costi dello sviluppo. Principi e tecniche (COCOMO-II, Punti Funzione).
(8 ore di lez. 4 ore di esercitazione)

I paradigmi dei linguaggi programmazione: linguaggi imperativi, funzionali e logici
(12 ore di lez. 6 ore di esercitazione)

I modelli concorrenti e i modelli distribuiti (memoria condivisa vs message passing)
(6 ore di lez. 0 ore di esercitazione)

Le lezioni frontali sono utilizzate per l’esposizione delle problematiche che caratterizzano il software e le varie attività di sviluppo, nonché dei principi e delle tecniche proposti a supporto di tali attività.
Le esercitazioni sono utilizzate per esemplificare e discutere le modalità di utilizzo delle tecniche e dei linguaggi visti a lezione.

Prova scritta costituita da esercizi da risolvere e domande teoriche

• Fundamentals of Software Engineering, 2nd Ed.
C. Ghezzi, M. Jazayeri, D. Mandrioli
Prentice Hall (2003)
• C. Ghezzi, M. Jazayeri, "Programming Language Concepts“, Wiley
Il corso si appoggerà inoltre su diverso materiale fornito dal docente: i lucidi utilizzati a lezione e articoli scientifici. Tale materiale sarà messo a disposizione sul sito e-learning

Il docente riceve per appuntamento entro 5gg lavorativi dalla richiesta che va inoltrata per email all'indirizzo alberto.coenporisini@uninsubria.it

Cerchi il programma? Potrebbe non essere ancora stato caricato o riferirsi ad insegnamenti che verranno erogati in futuro.
Seleziona l‘anno in cui ti sei immatricolato e troverai le informazioni relative all'insegnamento del tuo piano di studio.

A.A. 2016/2017

Anno di corso: 1
Curriculum: GENERICO

A.A. 2015/2016

Anno di corso: 1
Curriculum: GENERICO

A.A. 2014/2015

Anno di corso: 1
Curriculum: GENERICO

A.A. 2013/2014

Anno di corso: 1
Curriculum: GENERICO