- Sviluppo software strutturato e orientato agli oggetti
- Sistemi in tempo reale e embedded
- Ingegneria dei sistemi
Obiettivi Formativi - Parte A
- Conoscenza dei principi dello sviluppo software strutturato e orientato agli oggetti.
- Conoscenza di metodi generali di studio di un linguaggio di programmazione orientato agli oggetti.
- Conoscenza delle caratteristiche dei sistemi in tempo reale e dei sistemi operativi real-time in tempo reale.
- Conoscenza degli algoritmi di scheduling basilari per sistemi in tempo reale.
- Conoscenza di metodi e tool avanzati per la progettazione, analisi e testing di sistemi software in tempo reale.
- Esperienza pratica nella progettazione e sviluppo di sistemi software in tempo reale.
Prerequisiti - Parte A
Il corso è rivolto a studenti con una buona conoscenza del linguaggio C. Una buona comprensione di principi di ingegneria del software, conoscenza di nozioni matematiche, e attitudine alla formalizzazione dei concetti facilitano la comprensione dei temi del corso ma non costituiscono prerequisiti.
Metodi Didattici - Parte A
Le lezioni sono tenute presentando i temi del corso principalemente attraverso slide.
Esercitazioni di programmazione real-time in laboratorio e di programmazione c++ in aula sono inoltre svolte da un tutor didattico (Dott. Imad Zaza).
Altre Informazioni - Parte A
Gli studenti sono invitati a prendere visione della pagina del corso su Moodle (https://e-l.unifi.it) per maggiori informazioni.
Modalità di verifica apprendimento - Parte A
L'esame è volto ad accertare le competenze teoriche e pratiche acquisite sugli argomenti del corso.
Nel caso di corso a 9 crediti, l’esame consiste nella discussione di un piccolo elaborato (self-assignment) sviluppato individualmente più una prova orale sui contenuti del corso, OPPURE nella discussione di un elaborato sviluppato da uno studente o da un gruppo di (tipicamente due o tre) studenti (in quest’ultimo caso, assicurarsi che il contributo di ciascuno studente sia chiaramente identificabile).
- Prova orale con discussione di un self-assignment: inviare una breve relazione sul self-assignment almeno una settimana prima dell’esame.
- Discussione di un elaborato: inviare una mail per concordare il tema dell’elaborato.
Nel caso di corso a 6 crediti, le modalità di esame sono le stesse del caso a 9 crediti, ma riguardano un sottoinsieme dei contenuti del corso.
- Prova orale con discussione di un self-assignment: inviare una mail per concordare I temi di esame; inviare una breve relazione sul self-assignment almeno una settimana prima dell’esame.
- Discussione di un elaborato: inviare una mail per concordare il tema dell’elaborato.
Programma del corso - Parte A
Sviluppo software strutturato e orientato agli oggetti
- Riferimenti al linguaggio C; analisi, progettazione e programmazione strutturata.
- Software testing (metodologia di testing, control flow testing, data flow testing, finite state testing).
- Elementi del linguaggio C++.
- Elementi di analisi, progettazione e testing orientato agli oggetti.
Sistemi in tempo reale e embedded
- Algoritmi di scheduling per sistemi in tempo reale (rate monotonic, earliest deadline first, ...).
- Protocolli per l’accesso a risorse condivise (priority inheritance protocol, priority ceiling protocol, ...).
- Sistemi operativi in tempo reale e relativi standard.
- Il sistema operativo real-time VxWorks.
- Sviluppo di applicazioni per Rasberry Pi.
- Temi avanzati riguardanti lo scheduling di sistemi in tempo reale (time Petri nets, preemptive time Petri nets, timed automata, real-time testing, ...).
Ingegneria dei sistemi
- Modelli e standard per cicli di vita del software (VModel, MIL-STD-498,...).
- Elementi di ingegneria dei sistemi basata su modelli (SysML).