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 su https://e-l.unifi.it/course/view.php?id=4537
Obiettivi Formativi
Conoscenza e comprensione: 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)
Capacità di applicare conoscenza e comprensione: 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.
Strumenti a supporto della didattica: http://e-l.unifi.it.
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).