Programmazione II e ingegneria del software (2019/2020)

Codice insegnamento
4S003714
Crediti
12
Coordinatore
Carlo Combi
Altri corsi di studio in cui è offerto
L'insegnamento è organizzato come segue:
Modulo Crediti Settore disciplinare Periodo Docenti
INGEGNERIA DEL SOFTWARE 6 INF/01-INFORMATICA Vedi pagina del modulo Vedi pagina del modulo
PROGRAMMAZIONE II 6 INF/01-INFORMATICA Vedi pagina del modulo Vedi pagina del modulo

Obiettivi formativi

Programmazione II
Il corso si propone di fornire le competenze necessarie alla comprensione, allo sviluppo e alla correzione di software realizzato in un linguaggio di programmazione a oggetti. Fornire le competenze relative alla strutturazione di progetti software di medie dimensioni.

Al termine del corso lo studente dovrà dimostrare di avere conoscenze e capacità di comprensione dei principi alla base della programmazione a oggetti e capacità di comprensione della struttura di un progetto software complesso; avere capacità di applicare le conoscenze acquisite e capacità di comprensione sviluppando in modo autonomo software in un linguaggio di programmazione a oggetti, 6 strutturato in un progetto di medie dimensioni; saper sviluppare le competenze necessarie per approfondire autonomamente lo studio di strumenti e tecniche informatiche per lo sviluppo del software in diversi contesti applicativi.

Ingegneria del software
Il corso si propone di fornire le competenze scientifiche e professionali di base dell'ingegneria del software, affrontando le diverse fasi di sviluppo e produzione del codice: pianificazione, progettazione, modellazione e specifica, implementazione, collaudo e verifica, valutazione, manutenzione. Con le attività di laboratorio sono inoltre fornite le competenze necessarie per lo sviluppo di interfacce grafiche in Java e Python.

Al termine del corso lo studente dovrà dimostrare di avere conoscenze e capacità di comprensione del processo di sviluppo di sistemi software e delle inerenti metodologie e tecniche di progettazione; avere capacità di applicare le conoscenze acquisite e capacità di comprensione per realizzare e documentare sistemi software e di sviluppare applicazioni con interfaccia grafica in ambiente Java/Pyhon; saper comunicare in modo proficuo con tutti gli attori coinvolti nella realizzazione e uso di un sistema software all'intero di organizzazioni complesse; saper sviluppare le competenze necessarie per proseguire gli studi in modo autonomo nell’ambito delle tecniche di progettazione e di sviluppo SW e per approfondire autonomamente lo studio di strumenti e tecniche informatiche per lo sviluppo del software in diversi contesti applicativi.

Programma

------------------------
MM: INGEGNERIA DEL SOFTWARE
------------------------
------------------------ MM: Teoria ------------------------ ------------------------ MM: Teoria ed esercitazioni ------------------------ * Introduzione all'ingegneria del software - Definizione di Ingegneria del Software - Tipi di Software - Caratteristiche dei software - Ingegneria del Software e aspetti etici * Processi software - Introduzione - Modelli dei processi software - Attività dei processi - Gestione dei cambiamenti * Sviluppo agile del sotware - Metodi agili - La metodologia SCRUM e sue applicazioni * Ingegneria dei requisiti - Requisiti funzionali e non funzionali - Processi di ingegneria dei requisiti - Ingegneria dei requisiti e UML Use Case * Progettazione architetturale - Introduzione - Pattern di architettura -- MVC -- Repository -- Client server -- Pipe and filter * Progettazione e implementazione con approccio agli oggetti - Caratteristiche principali - Metodologie ad oggetti: concetti di base - Modellazione di sistemi orientata agli oggetti con UML -- UML Class Diagram -- Use Case diagram -- Activity Diagram -- Sequence Diagram - Fasi della progettazione - Design pattern -- Introduzione -- Singleton -- Observer -- Template -- Iterator -- Factory -- Abstract factory -- Proxy -- Facade -- Decorator * Verifica e Validazione - Introduzione - Ispezione e test - Vari tipi di test - Progettazione basata su test * Evoluzione e mantenimento del software - Gestione del cambiamento del SW - Sistemi Legacy - Manutenzione del SW ------------------------ MM: Laboratorio ------------------------ - Introduzione alla libreria Swing per lo sviluppo di interfacce grafiche in Java. - Introduzione alle librerie TkInter, wxPython, pyGTK/PyGobject, e PyQt/PySide per lo sviluppo di interfacce grafiche in Python. - Introduzione ai tool Eclipse-Papyrus e StarUML per lo sviluppo di progetti UML. Modalità di erogazione della didattica - Lezioni frontali ed esercitazioni in laboratorio informatico. Materiale didattico (lucidi) ed ulteriori esercizi sulla piattaforma eLearning. Ricevimento individuale negli orari concordati con il docente. ------------------------ MM: Laboratorio ------------------------ - Introduzione alla libreria Swing per lo sviluppo di interfacce grafiche in Java. - Introduzione alle librerie TkInter per lo sviluppo di interfacce grafiche in Python. - Introduzione ai tool Eclipse-Papyrus e StarUML per lo sviluppo di progetti UML. Modalità di erogazione della didattica Lezioni frontali ed esercitazioni in laboratorio informatico. Materiale didattico (lucidi) ed ulteriori esercizi sulla piattaforma eLearning. Ricevimento individuale negli orari concordati con il docente.
------------------------
MM: PROGRAMMAZIONE II
------------------------
------------------------ MM: Teoria ------------------------ Java e bytecode. Strutturazione delle classi. Array. Ereditarietà. Metodi e late binding. Libreria standard e sue classi di base. Eccezioni. Input/output. Interfacce. Classi collezione. ------------------------ MM: Laboratorio ------------------------ Java e bytecode. Strutturazione delle classi. Array. Ereditarietà. Metodi e late binding. Libreria standard e sue classi di base. Eccezioni. Input/output. Interfacce. Classi collezione.

Modalità d'esame

------------------------
MM: INGEGNERIA DEL SOFTWARE
------------------------
------------------------ MM: Teoria ------------------------ ------------------------ MM: Teoria ed esercitazioni ------------------------ La verifica del profitto, sia per gli studenti frequentanti sia per i non frequentanti, avviene mediante un piccolo progetto, inerente l'attività di laboratorio, e un esame orale sugli argomenti del programma. Oltre alla capacità di presentare correttamente tutti gli aspetti di un progetto software, l'esame farà emergere sia aspetti di conoscenza astratta sia capacità di applicazione dei concetti appresi. ------------------------ MM: Laboratorio ------------------------ La verifica del profitto avviene mediante un piccolo progetto, inerente l'attività di laboratorio, che verrà poi discusso durante l'esame orale. ------------------------ MM: Laboratorio ------------------------ La verifica del profitto avviene mediante un piccolo progetto, inerente l'attività di laboratorio, che verrà poi discusso durante l'esame orale.
------------------------
MM: PROGRAMMAZIONE II
------------------------
------------------------ MM: Teoria ------------------------ Esame al computer sull'intero programma. ------------------------ MM: Laboratorio ------------------------ Si veda la parte di teoria del corso.