Curriculum “Foundations of Software”

06 java eclipse

Obiettivi

Questo percorso, completamente erogato in lingua inglese, è pensato per formare studenti capaci di progettare e analizzare in modo rigoroso sistemi software complessi, con un’attenzione particolare alla modellazione astratta, alla verifica formale e allo sviluppo sistematico di software corretto, sicuro ed efficiente. Alla base del percorso c’è una visione dell’ingegneria del software come disciplina al tempo stesso scientifica e pratica, che bilancia teoria e applicazione concreta.

Gli studenti approfondiranno le metodologie formali per la specifica, la modellazione e la verifica degli artefatti software, imparando a garantirne la correttezza funzionale, l’affidabilità e la sicurezza negli ecosistemi digitali contemporanei. Il piano formativo riflette la crescente diffusione in ambito industriale di assistenti automatici per le dimostrazioni e di strumenti di verifica, in continuità con l’evoluzione che in passato ha portato all’adozione di sistemi di tipi e contratti d’interfaccia nello sviluppo software.

Attraverso una sequenza ben strutturata di insegnamenti obbligatori e opzionali, il percorso affronta le sfide scientifiche e ingegneristiche della costruzione del software su infrastrutture digitali avanzate, come multiprocessori, sistemi embedded, piattaforme distribuite e nuovi paradigmi computazionali. Temi centrali come programmazione avanzata, compilazione, analisi statica, verifica del software e logiche di programmazione sono affiancati da corsi opzionali in ambiti che spaziano dagli algoritmi distribuiti al quantum computing e al machine learning.

Un ruolo fondamentale è attribuito alla formazione laboratoriale, che consente agli studenti di confrontarsi con progetti concreti e di fare esperienza con strumenti e metodologie all’avanguardia, impiegati sia nella ricerca accademica che nel contesto industriale. Questa integrazione tra teoria e pratica prepara i laureati a guidare l’innovazione nello sviluppo software e ad affrontare problemi complessi in molteplici ambiti tecnologici.

I laureati del percorso Foundations of Software acquisiscono competenze avanzate nella progettazione, analisi e verifica di sistemi software complessi. La solida preparazione in metodi formali, analisi dei programmi e sviluppo a livello di sistema li rende candidati ideali per ruoli relativi allo sviluppo software ad alta affidabilità, l’ingegneria dei sistemi sicuri e le applicazioni ad alte prestazioni.

Opportunità di carriera

Le opportunità di carriera spaziano tra le principali aziende del settore ICT, come Google, Microsoft, IBM e molte altre, in cui le metodologie rigorose di ingegneria del software sono fondamentali. I laureati sono inoltre ben preparati per ruoli in enti pubblici, laboratori di ricerca e aziende che sviluppano software per sistemi distribuiti, piattaforme embedded o tecnologie computazionali emergenti.
Il percorso offre anche un’ottima preparazione per proseguire gli studi in programmi di dottorato in Informatica o in discipline affini, sia in Italia che all’estero.

Piano di studi

L’attuale struttura del percorso Software è stata riprogettata con un’attenzione specifica su metodi formali, correttezza dei programmi e modellazione astratta. Gli insegnamenti fondamentali pongono l’accento sui fondamenti teorici, come la semantica dei programmi, il ragionamento logico e l’analisi statica, attraverso corsi come Models for Programming Paradigms, Program Analysis e Software Verification.

Queste competenze sono sempre più essenziali in un contesto in cui il codice è spesso generato o assistito da intelligenze artificiali generative, e deve quindi essere validato da esseri umani per quanto riguarda l’affidabilità, la sicurezza e la coerenza rispetto alle intenzioni.

Il percorso mira a sviluppare la capacità di comprendere e ragionare su schemi di programmazione complessi. La componente teorica non è separata dalla pratica: ci sono corsi dedicati, progettati proprio per applicare sperimentalmente i principi introdotti negli insegnamenti a orientamento teorico.

La conoscenza di base in algoritmica resta parte integrante della formazione culturale del percorso, ma è stata spostata tra gli insegnamenti opzionali per consentire un’esplorazione più mirata del ragionamento formale e della verifica del software.

Primo Anno

Semestre 1

CFU

Semestre 2

CFU

Models for programming paradigms (*) 9 Compilation Techniques (*) 9
Advanced Programming 9 Program Analysis 6
Gruppo: SW affini da 9 cfu 9 Gruppo: SW affini da 9 cfu 9
Gruppo: a libera scelta 9
27 33

(*) Nota che:

  • Models for programming paradigms sostituisce Principles for software composition
  • Compilation Techniques sostituisce Languages, compilers and interpreters

Secondo anno

Semestre 3

CFU

Semestre 4

CFU

Software Verification: Principles and Techniques (*) 9 Software Verification Laboratory (*) 9
Gruppo: SW affini 6 cfu 6
Gruppo: SW affini 6 cfu 6
Gruppo: SW affini 6 cfu 6 Prova Finale 24
27 33

(*) Nota che:

  • Software Verification: Principles and Techniques: questo corso non sarà attivo nell’a.a. 2025/26. Rimpiazzerà Software validation and verification attivo invece nell’a.a. 2025/26.
  • Software Verification Laboratory: questo corso non sarà attivo nell’a.a. 2025/26. Rimpiazzerà Laboratory for innovative software attivo invece nell’a.a. 2025/26.

Group: SW electives  da 9 CFU

Advanced Databases (Sem. 2)
Advanced Software Engineering (Sem. 1)
Algorithm Engineering (Sem. 1)
Algorithm Design (Sem. 2)
Computational Mathematics for Learning and Data Analysis (Sem. 1)
Data Mining (Sem. 1)
Machine Learning (Sem. 1)
Mobile and Cyber-Physical Systems (Sem. 2)
Parallel and Distributed Systems: Paradigms and Models (Sem. 2)
Peer to Peer Systems and Blockchains (Sem. 2)

Gruppo: SW Affini da 6 CFU

3D Geometric Modeling & Processing (Sem. 1 )
Accelerated Computing (Sem. 1)
Algorithmic Game Theory (Sem. 2)
Artificial Intelligence Fundamentals (Sem. 1)
Bioinformatics (Sem. 2)
Business Process Modelling (Sem. 1)
Competitive Programming and Contests (Sem. 1)
Computational Models for Complex Systems (Sem. 2)
Distributed Algorithms (Sem. 1)
Foundations of Computing (Sem. 2) (non attivo nell’a.a. 2025/26)
Information Retrieval (Sem. 1)
Introduction to Quantum Computing (Sem. 2)
Scalable Distributed Computing (Sem. 1)
Social and Ethical Issues in Computer Technology (Sem. 2)

Gli studenti immatricolati prima dell’anno accademico 2025/2026 possono far riferimento al precedente piano di studi (si veda il seguente documento)

Descrizione del curriculum e dei syllabi da scaricare (PDF)