CODICE 109208 ANNO ACCADEMICO 2024/2025 CFU 6 cfu anno 3 INFORMATICA 8759 (L-31) - GENOVA SETTORE SCIENTIFICO DISCIPLINARE INF/01 LINGUA Italiano SEDE GENOVA PERIODO 2° 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 Lo scopo primario del corso è quello di aumentare la consapevolezza degli studenti sugli strumenti e i servizi utilizzati nello sviluppo e nella gestione del software. Oltre a ciò, si mira a fornire loro competenze pratiche per l'efficace utilizzo di tali risorse. Il corso approfondirà inoltre i concetti fondamentali del ciclo di vita del software e illustrerà come tali strumenti possano essere integrati per ottimizzare il processo di sviluppo e gestione del software. 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 ad altri strumenti e servizi che possono essere utilizzati per la gestione e il monitoraggio di progetti software, effettuare il building automatico, effettuare l’integrazione continua del codice (CI) e il deployment, ottimizzare il processo di sviluppo software. 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/la studentessa sarà in grado di: Utilizzare uno strumento per la gestione e il monitoraggio di progetti software (quali ad esempio Jira o Azure Boards), pianificando il lavoro in task da eseguire secondo una metodologia Agile (come Scrum o Kanban), ottimizzando i flussi di lavoro attraverso strumenti automatici e utilizzando i principali strumenti di monitoraggio; 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 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; Utilizzare metriche ingegneristiche, come le metriche DORA o il tempo di ciclo, per ottimizzare il processo di sviluppo software, utilizzando i dati disponibili nei sistemi di gestione e monitoraggio dei progetti (come i già menzionati JIra o Azure Boards) e nelle piattaforme Web che consentono l’hosting di progetti software (come GitHub o GitLab); 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#) o di scripting (ad esempio JavaScript e/o Python); 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 frontali e attività 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 organizzative, 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: Strumenti per la gestione di progetti software (ad esempio Jira o Azure Boards); Ambienti di sviluppo integrato (ad esempio Eclipse IDE o Visual Studio Code); 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); Metriche ingegneristiche per ottimizzare il processo di sviluppo software; Strumenti per la creazione ed utilizzo di container (ad esempio Docker). 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 CRISTIANO SPADARO Commissione d'esame CRISTIANO SPADARO (Presidente) MAURIZIO LEOTTA FILIPPO RICCA (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 16/01/2025 09:30 GENOVA Laboratorio 10/02/2025 09:30 GENOVA Laboratorio 05/06/2025 09:30 GENOVA Scritto 18/06/2025 09:30 GENOVA Scritto 02/07/2025 09:30 GENOVA Scritto 17/09/2025 09:30 GENOVA Scritto