Insegnamento mutuato da: B027540 - ADVANCED TECHNIQUES AND TOOLS FOR SOFTWARE DEVELOPMENT Laurea Magistrale in INFORMATICA Curriculum RESILIENT AND SECURE CYBER PHYSICAL SYSTEMS
Lingua Insegnamento
Italiano/Inglese
Contenuto del corso
Test automation dei programmi e Test-Driven Development sotto vari aspetti. Build Automation e Continuous Integration, usando il “cloud”. Tutti questi strumenti saranno "collegati" insieme, per un processo automatizzato di sviluppo e rilascio. Saranno utilizzati anche strumenti che analizzano la qualità del codice. Tutto il processo è pensato per lo sviluppo “collaborativo”. Useremo strumenti che virtualizzano l'ambiente e per una facile riproducibilità dei test.
Materiale didattico disponibile sul sito Moodle del corso.
I dettagli dei libri per il corso e per l'esame saranno riportati sul sito Moodle del corso.
Obiettivi Formativi
Il corso ha lo scopo di insegnare tecniche basate sul test automatico dei programmi (Test-Driven Development) sotto vari aspetti: Unit Testing (testare un singolo componente), Integration Testing (testare più componenti insieme) e Functional Testing (testare l'interfaccia utente, sia essa un programma in esecuzione sul PC o un’interfaccia Web). I test rappresenteranno un meccanismo per sviluppare molto più velocemente anche i programmi più complessi, usando fin dall'inizio una metodologia che renderà i programmi modulari. I test daranno una misura della qualità del software prodotto e permetteranno di testarlo in modo automatico. Infine, i test possono essere visti come strumenti di specifica del comportamento del software.
Inoltre, saranno mostrati strumenti di versionamento del codice (git, sia in locale che distribuito su Internet, Github) e per la Build Automation dei programmi, cioè la compilazione automatica di tutta l'applicazione e l'esecuzione di tutti i test dell'applicazione. Questi saranno usati nel contesto della Continuous Integration, affidandosi a server dedicati (ad es., Jenkins) e disponibili anche nel cloud, in modo gratuito (ad es., Travis-CI). Tutti questi strumenti saranno "collegati" insieme, per avere un processo automatizzato di sviluppo che consente il continuo monitoraggio del codice sviluppato e facilita la release dei programmi (Continuous Delivery). In questo processo saranno utilizzati anche strumenti che analizzano il codice e rilevano eventuali problemi di qualità che riguardano la "pulizia" del codice. Tutto il processo è pensato per lo sviluppo “collaborativo”, cioè all’interno di un team di sviluppo.
Oltre agli strumenti gratuiti e open source e quelli disponibili sul cloud, useremo anche strumenti che virtualizzano l'ambiente e permettono una facile riproducibilità del contesto in cui eseguire i test dell'applicazione (ad es., Docker). Questi permetteranno anche di testare facilmente l'applicazione in più contesti (ad es., usando differenti versioni delle librerie e server di terze parti che sono utilizzati dalla nostra applicazione).
Durante tutto il corso ci affideremo a strumenti che incrementano la produttività, in primis useremo un IDE (Eclipse).
Tutte le tecniche e gli strumenti saranno infine applicati allo sviluppo di applicazioni web in Java(*), testando i singoli componenti e il sito web finale. Per questa parte utilizzeremo come framework Spring Boot.
(*non incluse nel corso a 6 CFU)
Alla fine del corso gli studenti saranno in grado di sviluppare applicazioni guidate dai test e di scrivere test sotto i vari aspetti (unit test, integration test, functional test) e di metter su un meccanismo di Continuous Integration e Build Automation che tiene traccia dei vari test eseguiti e che analizza la qualità del codice.
Prerequisiti
Buona conoscenza della programmazione ad oggetti e in particolare Java.
Metodi Didattici
lezioni in aula e alcune esercitazioni in laboratorio
Altre Informazioni
Frequenza delle lezioni ed esercitazioni: raccomandata ma non necessaria.
Eventuali altre informazioni (incluse le modalità di ricevimento) saranno fornite durante il corso tramite il sito Moodle del corso.
Modalità di verifica apprendimento
La verifica finale consta di un progetto da svolgere a casa e da un esame orale.
Il progetto viene proposto dallo studente (o dal gruppo di studenti) e concordato col docente, utilizzando le tecniche mostrate durante il corso.
Il progetto è mirato a dimostrare le capacità di sviluppo guidato dai test, di testare ogni componente dell'applicazione, l'integrazione di vari componenti e l'applicazione finale. Per il corso da 9 CFU, l'applicazione svolta nel progetto dovrà essere un'applicazione web.
L'orale consisterà nella discussione del progetto svolto e in varie domande su tutti i contenuti del corso.
Il voto finale terrà conto della qualità del progetto e delle risposte all'esame orale.
Programma del corso
Il corso ha lo scopo di insegnare tecniche basate sul test automatico dei programmi (Test-Driven Development) sotto vari aspetti: Unit Testing (testare un singolo componente), Integration Testing (testare più componenti insieme) e Functional Testing (testare l'interfaccia utente, sia essa un programma in esecuzione sul PC o un’interfaccia Web). Inoltre, saranno mostrati strumenti di versionamento del codice (git, sia in locale che distribuito su Internet, Github) e per la Build Automation dei programmi, cioè la compilazione automatica di tutta l'applicazione e l'esecuzione di tutti i test dell'applicazione. Questi saranno usati nel contesto della Continuous Integration, affidandosi a server dedicati (ad es., Jenkins) e disponibili anche nel cloud, in modo gratuito (ad es., Travis-CI). Tutti questi strumenti saranno "collegati" insieme, per avere un processo automatizzato di sviluppo che consente il continuo monitoraggio del codice sviluppato e facilita la release dei programmi (Continuous Delivery). In questo processo saranno utilizzati anche strumenti che analizzano il codice e rilevano eventuali problemi di qualità che riguardano la "pulizia" del codice. Tutto il processo è pensato per lo sviluppo “collaborativo”, cioè all’interno di un team di sviluppo. Oltre agli strumenti gratuiti e open source e quelli disponibili sul cloud, useremo anche strumenti che virtualizzano l'ambiente e permettono una facile riproducibilità del contesto in cui eseguire i test dell'applicazione (ad es., Docker). Questi permetteranno anche di testare facilmente l'applicazione in più contesti (ad es., usando differenti versioni delle librerie e server di terze parti che sono utilizzati dalla nostra applicazione). Durante tutto il corso ci affideremo a strumenti che incrementano la produttività, in primis useremo un IDE (Eclipse).