CODICE 109208 ANNO ACCADEMICO 2023/2024 CFU 6 cfu anno 3 INFORMATICA 8759 (L-31) - GENOVA SETTORE SCIENTIFICO DISCIPLINARE INF/01 LINGUA Italiano SEDE GENOVA PERIODO 1° Semestre MATERIALE DIDATTICO AULAWEB PRESENTAZIONE L’insegnamento fornisce un’introduzione di alcuni strumenti (ovvero tool/framework) e servizi utili allo sviluppo e gestione del software, con l'obiettivo di formare figure professionali che contribuiscano alla realizzazione di progetti software avendo anche consapevolezza delle esigenze gestionali. OBIETTIVI E CONTENUTI OBIETTIVI FORMATIVI L'insegnamento ha l'obiettivo primario di aumentare la consapevolezza degli studenti sugli strumenti e servizi legati allo sviluppo e gestione del software, con particolare riferimento agli aspetti di: sviluppo e debugging del codice realizzato tramite ambienti di sviluppo integrato (IDE), building automatico, gestione delle dipendenze nei progetti, configuration management e versioning, testing, continuos integration e delivery/deployment. OBIETTIVI FORMATIVI (DETTAGLIO) E RISULTATI DI APPRENDIMENTO Questo insegnamento riprende alcuni strumenti per lo sviluppo e gestione del software già introdotti durante il corso di laurea (ad esempio IDE e sistemi di versioning, quali Git) e li integra con altri strumenti e servizi che possono essere utilizzati per effettuare il building automatico, gestire le dipendenze, effettuare l’integrazione continua del codice (Continuos Integration) e il deployment. L’insegnamento è pratico ed ha come obiettivo formativo quello di introdurre gli studenti allo sviluppo moderno del software così come viene svolto in un ambito lavorativo reale. Al termine dell’insegnamento, lo studente sarà in grado di: Utilizzare un IDE (ad esempio Eclipse IDE o Visual Studio Code) per svolgere alcuni task, quali: creare un progetto software, effettuare le operazioni di import/export di un progetto, eseguire il running e il debugging di un programma, eseguire il refactoring del codice, gestire le dipendenze, eseguire una testsuite di casi di test di unità; Utilizzare uno strumento di gestione delle dipendenze e building automatico (ad esempio Maven o Gradle) per svolgere task quali: compilazione, packaging, esecuzione dei test, generazione della documentazione; Utilizzare un sistema per il controllo di versione (ad esempio Git) ed effettuare l’integrazione continua del codice tramite piattaforme Web tali come, ad esempio, GitHub o GitLab; Automatizzare le diverse fasi del ciclo di vita del software, dalla compilazione al testing e infine al deployment attraverso CI tool quali, ad esempio, Jenkins o GitHub Actions; Creare, mantenere e utilizzare i container (ad esempio Docker container) ed effettuare il deploy di un container su un nodo in modo automatico. I container sono una tecnologia utilizzata per raggruppare un’applicazione con tutti i file necessari in un unico ambiente di runtime. Il container può essere facilmente deployato ed eseguito su diveri sistemi operativi. PREREQUISITI Conscenze dei fondamenti della programmazione; Conoscenza di un linguaggio di programmazione orientato agli oggetti (ad esempio Java e/o C#); Conoscenze base di Ingegneria del software. Risulta utile possedere alcune conoscenze e capacità di comprensione della terminologia dell'Ingegneria del software e delle tecniche di base di gestione del processo di sviluppo del software, di progettazione del software e di verifica e convalida. MODALITA' DIDATTICHE Lezioni pratiche di laboratorio svolte in piccoli Team (2/3 studenti). Ogni strumento trattato verrà corredato da immediata sperimentazione pratica, al fine di acquisire rapidamente confidenza e manualità. I laboratori saranno guidati e le attività integrative saranno rese disponibili su AulaWeb. AulaWeb verrà usata per tre scopi: come repository del materiale del corso; come canale per le comunicazioni burocratiche, le spiegazioni e le discussioni inerenti il corso; e infine per facilitare il lavoro di gruppo. PROGRAMMA/CONTENUTO L'insegnamento, che è di natura pratica, introduce alcuni (e a diverso livello di dettaglio di approfondimento) tra i seguenti strumenti/ambienti e servizi per lo sviluppo e gestione del software: Ambienti di sviluppo integrato (ad esempio Eclipse IDE o Visual Studio Code); Strumenti di gestione delle dipendenze e building automatico (ad esempio Maven o Gradle); Sistemi per il controllo di versione (ad esempio Git); Servizi di hosting per progetti software (ad esempio GitHub o GitLab); Strumenti per automatizzare il flusso di lavoro degli sviluppatori, come ad esempio l’integrazione continua e il testing (ad esempio Jenkins o GitHub Actions); Strumenti per la creazione ed utilizzo di container (ad esempio Docker); Strumenti per effettuare il deployment (ad esempio Heroku); Al termine del corso lo studente possiederà conoscenze specialistiche avanzate nell'ambito dello sviluppo e gestione dei moderni sistemi software. In particolare sarà in grado di: selezionare alcuni tra gli strumenti più popolari per lo sviluppo e gestione del software; impostare efficacemente processi di sviluppo, testing e manutenzione di software basati su meccanismi avanzati di continuous integration TESTI/BIBLIOGRAFIA Documentazione online dei vari strumenti e servizi selezionati. DOCENTI E COMMISSIONI FILIPPO RICCA Ricevimento: Su appuntamento (mandare una mail) Commissione d'esame FILIPPO RICCA (Presidente) MAURA CERIOLI MAURIZIO LEOTTA (Presidente Supplente) LEZIONI INIZIO LEZIONI In accordo con il calendario didattico approvato dal Consiglio dei Corsi di Studio in Informatica Orari delle lezioni L'orario di questo insegnamento è consultabile all'indirizzo: Portale EasyAcademy ESAMI MODALITA' D'ESAME L'obiettivo della procedura di verifica consiste nel quantificare, per ogni studente, il livello di raggiungimento degli obiettivi formativi precedentemente indicati. La procedura di verifica consiste nella valutazione di alcuni laboratori guidati e in una prova scritta. L'esame è composto dalle seguenti seguenti attività Attività di laboratorio Scritto Attività di laboratorio L'insegnamento prevede delle attività di laboratorio da svolgersi in gruppo. Per alcune di queste attività verrà richiesta la consegna del lavoro svolto. Per altre verrà semplicemente monitorata la partecipazione degli studenti. Attività alternative da consegnare tramite AulaWeb verranno proposte a chi (es. studenti lavoratori) è impossibilitato a frequentare le attività in laboratorio. Scritto La prova scritta sarà costituita da domande a risposta multipla. Le domande saranno sia di tipo teorico che pratico e verteranno sugli argomenti/strumenti trattati a lezione. Durante le lezioni verranno discussi alcuni esempi di possibili domande ed esercizi per ogni argomento, in modo che a fine corso sia chiara la tipologia di prova. MODALITA' DI ACCERTAMENTO L'attività di laboratorio mira ad accertare: (1) la conoscenza degli strumenti proposti e (2) le abilità collaborative nel risolvere problemi nell'ambito delle tematiche affrontate nel corso. Lo scritto ha il duplice obbiettivo di verificare la conoscenza degli aspetti di base della disciplina e appurare la partecipazione degli studenti ai laboratori guidati. In entrambe le prove verranno considerate le conoscenze specifiche della materia e la capacità di ragionamento critico. Calendario appelli Data appello Orario Luogo Tipologia Note 18/01/2024 09:30 GENOVA Laboratorio 12/02/2024 09:30 GENOVA Laboratorio 11/06/2024 09:30 GENOVA Laboratorio 17/07/2024 09:30 GENOVA Laboratorio 19/09/2024 09:30 GENOVA Laboratorio