CODICE 101808 ANNO ACCADEMICO 2023/2024 CFU 6 cfu anno 1 COMPUTER SCIENCE 10852 (LM-18) - GENOVA SETTORE SCIENTIFICO DISCIPLINARE INF/01 LINGUA Inglese SEDE GENOVA PERIODO 2° Semestre MATERIALE DIDATTICO AULAWEB PRESENTAZIONE L'obbiettivo di questo insegnamento è introdurre il test funzionale e di sicurezza nello sviluppo del software. Il testing è un attività chiave per garantire la qualità del software. Durante la fase di testing devono essere considerati sia gli aspetti funzionali che quelli di sicurezza. OBIETTIVI E CONTENUTI OBIETTIVI FORMATIVI Learning the fundamentals in functional and security testing of software systems, with special emphasis on challenges posed by Web and Mobile applications, and getting acquainted with automated tools used to practice testing techniques. OBIETTIVI FORMATIVI (DETTAGLIO) E RISULTATI DI APPRENDIMENTO Gli studenti apprenderanno i fondamenti dei test funzionali e di sicurezza dei sistemi software, con particolare attenzione alle sfide poste dalle applicazioni Web e mobili e all'utilizzo di strumenti di test automatizzati. Gli studenti vedranno le molteplici sfaccettature del problema e apprenderanno metodologie, approcci e tecniche per verificare la qualità di sistemi software complessi. Dopo il completamento del corso, i partecipanti saranno in grado di: Comprendere e applicare le differenze tra test funzionale e di sicurezza Comprendere i concetti fondamentali del test del software (ad es. test manuale vs automatizzato) Utilizzare tecniche/approcci/strumenti consolidati per la progettazione e l'esecuzione di test funzionali Scoprire come gli aggressori riescono a violare le applicazioni Comprendere le possibilità di attacco delle app Web (ad es. SQL injection) Comprendere le vulnerabilità "Top Ten" proposte da OWASP Applicare tecniche di test delle applicazioni Web e mobili (sia funzionali che di sicurezza), utilizzando, ad es. il Framework Selenium, la suite Burp e altri strumenti di test automatizzati Incorporare il test del software come un processo continuo di sviluppo PREREQUISITI Fondamenti di programmazione Object Oriented e procedurale (in particolare, conoscenza di base dei linguaggi Java, Javascript, PHP e SQL) conoscenza di base delle applicazioni Web e Mobile MODALITA' DIDATTICHE L'insegnamento è una combinazione tra presentazione di concetti teorici ed esercitazioni pratiche. È orientato al dialogo e con un approccio pratico. Agli studenti verranno forniti compiti obbligatori che dovranno essere completati durante il corso. PROGRAMMA/CONTENUTO Testing funzionale: Introduzione al corso: fondamenti di test funzionali e di sicurezza Test manuali vs test automatizzati Tecniche essenziali di test del software Introduzione ai test continui (DevOps) Introduzione a una piattaforma CI/CD (ad es. Jenkins o GitHub Actions) Strumenti di automazione per test di unità (ad es. xUnit e TestNG) Test di app Web e dispositivi Mobili Approccio di test E2E Differenza tra test web e mobile Approcci per la generazione di casi di test E2E Introduzione a Selenium IDE e Selenium WebDriver Test cross-browser Best practice per l'automazione dei test Page Object Model Testing tools Cattura/riproduzione vs programmabile Basato su DOM rispetto a Visual Test dell'API Introduzione a POSTMAN Laboratorio Sviluppo di suite di test per app Web Selenium IDE, Selenium WebDriver, Appium, POSTMAN, Katalon, Jenkins (o altri strumenti simili) Test di sicurezza: Introduzione Principi di sicurezza (e.g., CIA Triad) Overview of 'common misconceptions' che portano a vulnerabilità validazione Client-side Approfondimenti su alcune tipologie di vulnerabilità OS Command Injections SQL Injections Cross-Site Scripting Laboratorio Development of vulnerable-by-design web applications Testing techniques for each vulnerability Remediation TESTI/BIBLIOGRAFIA Web Application Security: Exploitation and Countermeasures for Modern Web Applications by Andrew Hoffman Web Security Academy - https://portswigger.net/web-security/learning-path Hands-On Selenium WebDriver with Java by Boni Garcia DOCENTI E COMMISSIONI FILIPPO RICCA Ricevimento: Su appuntamento (mandare una mail) ENRICO CAMBIASO Commissione d'esame FILIPPO RICCA (Presidente) MAURIZIO LEOTTA (Presidente Supplente) ENRICO CAMBIASO (Supplente) DARIO OLIANAS (Supplente) LEZIONI INIZIO LEZIONI In accordo con il calendario didattico approvato dal Consiglio dei Corsi di Studio in Informatica e Computer Science. Orari delle lezioni L'orario di questo insegnamento è consultabile all'indirizzo: Portale EasyAcademy ESAMI MODALITA' D'ESAME L'esame consiste in una discussione delle esercitazioni pratiche svolte durante il corso. L'esercitazione pratica deve essere completata e approvata prima che uno studente possa presentarsi per l'esame finale. Gli elaborati sono valutati come superati o falliti e costituiranno il punto di partenza della discussione. MODALITA' DI ACCERTAMENTO Un esame orale consentirà di verificare che lo studente abbia compreso le problematiche relative ai test funzionali e di sicurezza, e le idee fondanti dei metodi e delle tecniche proposte. Gli esercizi pratici di laboratorio e la loro discussione consentiranno di valutare la capacità dello studente di applicare al meglio le tecniche e i metodi presentati. Calendario appelli Data appello Orario Luogo Tipologia Note 16/02/2024 09:00 GENOVA Esame su appuntamento 07/06/2024 09:00 GENOVA Esame su appuntamento 13/09/2024 09:00 GENOVA Esame su appuntamento 10/01/2025 09:00 GENOVA Esame su appuntamento