Insegnamento LABORATORIO INGEGNERIA DEL SOFTWARE
- Corso
- Programmazione e gestione di sistemi informatici
- Codice insegnamento
- A003659
- Curriculum
- Comune a tutti i curricula
- Docente
- Marco Matarazzi
- Docenti
-
- Marco Matarazzi
- Ore
- 36 ore - Marco Matarazzi
- CFU
- 3
- Regolamento
- Coorte 2023
- Erogato
- 2024/25
- Attività
- Altro
- Ambito
- Tirocini formativi e di orientamento
- Settore
- NN
- Tipo insegnamento
- Obbligatorio (Required)
- Tipo attività
- Attività formativa monodisciplinare
- Lingua insegnamento
Italiano- Contenuti
Viene illustrata la struttura di un'applicazione web monolitica scritta in PHP utilizzando il framework Symfony, con particolare attenzione ai design pattern implementati nel framework o che verranno utilizzati a lezione. Viene illustrato l'uso di Composer, il pattern Model-View-Controller, il Router Symfony, le viste con Twig, la gestione dei modelli tramite Doctrine ORM, l'utilizzo di Value Object e Data Transfer Object, il Repository pattern, i comandi della Symfony Console, la gestione dell'input dell'utente tramite Form e la validazione dello stesso tramite Symfony Validator; l'internazionalizzazione dell'interfaccia, i SOLID principles, il testing del software; l'utilizzo del debugger xdebug. La gestione degli utenti e dei permessi, il firewall applicativo.- Testi di riferimento
Gamma, Helm, Johnson, Vlissides, Design Patterns - Elements of Reusable Object-Oriented Software, 1995 Prentice Hall;
Fabien Potencier, Symfony 6: the fast track, 2024 leanpub.com;
Materiale fornito dal docente con riferimenti bibliografici.- Obiettivi formativi
L'obiettivo principale del corso è rendere lo studente in grado di comprendere, riconoscere e utilizzare i principali componenti di un'applicazione, sfruttando come esempio un'applicazione web basata su Symfony, in modo da comprenderne il funzionamento e da poterne realizzare una o studiarne una esistente, per trovare e risolvere eventuali errori e bug.
Le principali conoscenze acquisite saranno: struttura e organizzazione del codice in un'applicazione MVC, SOLID principles (Single Responsibility Principle, Open / Close Principle, Liskov Substitution Principle, Interface Segregation Principle, Dependency Inversion Principle), struttura e utilità dei design pattern MVC, Value Object, Data Transfer Object, Composite, Repository. Funzionamento e utilità di un Dependency Injection Container, di parametri e di variabili d'ambiente. Tipi di test e loro utilizzo, metriche di testing del codice.
Le principali capacità acquisite saranno quelle di modellazione delle entità di dominio (modelli) e dei loro vincoli tramite design pattern e costrutti della programmazione orientata agli oggetti; di gestione del ciclo di vita delle entità tramite un Entity Manager. Capacità di organizzare il codice in unità separate e componibili, di utilizzare e configurare un Dependency Injection Container per ottenere servizi quando necessario; di configurare un'applicazione per reagire a diversi ambienti di esecuzione;
Capacità di collegare le richieste dell'utente a controller e a viste e di renderizzarle; di gestire l'input dell'utente anche quando questo non è conforme alla struttura attesa e di fornire feedback; Capacità di verificare l'identità degli utenti e di convalidare le loro richieste con i permessi a loro assegnati; Capacità di pianificare la struttura di classi facilmente testabili in isolamento e di preparare i necessari test unitari; Capacità di architettare e realizzare classi testabili in integrazione e di redigere i relativi test di integrazione; Capacità di scrivere test funzionali. Capacità di utilizzare un debugger per l'analisi dell'esecuzione del codice.- Prerequisiti
È richiesta familiarità con i concetti e la sintassi della programmazione ad oggetti, preferibilmente il linguaggio PHP 8+: classi, visiblità di metodi e proprietà, ereditarietà, polimorfismo, incapsulamento, closure, eccezioni e flusso di controllo con try / catch / finally.
Non è richiesta conoscenza di HTML, CSS o JavaScript.- Metodi didattici
Lezioni pratiche in laboratorio.- Altre informazioni
Il docente è disponibile ad erogare lezioni frontali, esercitazioni e sessioni di esami in lingua Inglese.Il docente è disponibile a sostenere l'esame in lingua Inglese.- Modalità di verifica dell'apprendimento
Progetto di laboratorio individuale, di un'applicazione web Symfony 6.4 simile a quanto visto a lezione.- Programma esteso
Composer come strumento per la gestione di dipendenze e come autoloader.
Struttura delle directory di un progetto basato su Symfony, file di configurazione e ambienti di esecuzione.
Installazione e configurazione di PHPStan e PHP-cs-fixer per l'analisi statica e il linting dei sorgenti.
Pattern Model-View-Controller: I controller, le rotte, i parametri, il matching delle rotte.
Pattern Model-View-Controller: Le viste. Twig, ereditarietà e inclusione di template. Sintassi {{ }}, {% %}, {# #}, if, for. Traduzione e il filtro trans. Struttura tradizionale a tre livelli per i template.
Pattern Model-View-Controller: I modelli. Creazione di modelli come semplici oggetti PHP (POPO), proprietà obbligatorie e facoltative, metodo costruttore e istanziazione di entità "valide". Installazione e configurazione di Doctrine, aggiunta degli attributi Doctrine (Entity, Table, Id, GeneratedValue, Column) ai modelli. Relazioni dirette e inverse (attributi OneToOne, OneToMany, ManyToOne, ManyToMany, JoinColumn). Gestione delle migrazioni. Generazione di dati di prova con le fixture. Utilizzo dei Value Object per imporre la consistenza dei dati. Utilizzo del Repository pattern per l'astrazione dell'accesso al Database. Repository predefiniti e metodi magici. Repository personalizzati e QueryBuilder per la costruzione parametrica delle query. Paginazione delle query. Utilizzo dell'EntityManagerInterface per la gestione delle entità, problema delle N+1 query.
La console di Symfony: definizione di comandi, argomenti e opzioni, gestione di input e output.
Ricezione di input dagli utenti: definizione di form e il Composite pattern. Vincoli e validatori, applicazioni delle regole di validazione. Il pattern Data Transfer Object.
Principi SOLID, il container di iniezione delle dipendenze, definizione di servizi, parametri e variabili d'ambiente.
Il testing del software: la piramide dei test. PHPUnit e i test unitari. Oggetti test doubles e mocking. Test di integrazione e funzionali. Gestione del database e delle dipendenze esterne. Test coverage.
Autenticazione e autorizzazione: il firewall, i permessi e la gestione degli utenti.