ITALIANO
Italian
Lo studente dovrebbe avere familiarita` con almeno un linguaggio di programmazione, preferibilmente orientato agli oggetti ed una IDE di sviluppo
The student should be familiar with at least one programming language, preferably an object-oriented one, and an IDE for writing code
- Lezioni di teoria: 50 ore
- Esercitazioni: 22 ore
- Theory: 50 hours
- Exercises: 22 hours
L’insegnamento vuole far conoscere allo studente tecniche avanzate per la realizzazione di progetti software complessi. Tra le problematiche affrontate vi saranno: (i) comprensione ed implementazione di design pattern avanzati (es. Model-View-Control, Publish/Subscribe, Visitor, ...); (ii) utilizzo di framework di sviluppo basati su MVC e persistenza degli oggetti (es. Spring, Hibernate, ...); (iii) applicazione di tecniche di validazione e testing automatico del software (es. unit testing, test di integrazione, system testing, ecc); (iv) progettazione e implementazione di pipeline automatizzate di continuous-integration/continuous-delivery (es. Maven, Jenkins, ...); (v) utilizzo di strumenti di sviluppo collaborativo (es. git). Il corso terminerà presentando le architetture a microservizi, un paradigma sempre più richiesto dalle aziende di sviluppo software.
Lo studente sarà in grado di lavorare in team con altri colleghi al fine di progettare e implementare un’applicazione Web caratterizzata da una complessità medio-alta. Per realizzare tale applicazione, il team
utilizzerà il framework MVC e il framework ORM introdotti durante il corso. Il team procederà con la definizione di suite di validazione dell’applicazione precedentemente realizzata, e configurerà una pipeline di continuous integration/continous-delivery che ad ogni aggiornamento del software richiamerà i passaggi di compilazione, collaudo e delivery del codice, applicando le tecniche illustrate durante il corso.
Il corso è fortemente basato sulla progettazione condivisa, brainstorming e suddivisione dei compiti. Questo favorisce lo sviluppo di varie competenze trasversali, quali la capacità di lavorare in gruppo, la gestione dei conflitti, la comunicazione efficace, la capacità di ascolto e di sintesi di idee differenti. A ciascun gruppo sarà richiesto di individuare autonomamente un contesto applicativo reale su cui basare la realizzazione dell’applicazione Web. Questo, assieme alla presenza delle sessioni di brainstorming, favorirà, la capacità, da parte degli studenti, di confrontarsi con scenari reali e molto stimolanti, consentendo di sperimentare in anticipo un modus operandi tipico del mondo del lavoro.
First of all, this course aims at allowing students to learn the techniques for the realization of real-world complex software projects. The course will cover the following topics: (i) understanding and implementation of advanced design patterns (e.g. Model-View-Control, Publish/Subscribe, Visitor, ...); (ii) use of frameworks based on MVC and object persistence (e.g. Spring, Hibernate, ...); (iii) application
of techniques for software development and automated software testing (e.g. unit, integration, and system testing); (iv) design and implementation of continuous-integration/continuous-delivery automated pipelines (e.g. Maven, Jenkins, ...); (v) use of tools for collaborative software development (e.g. git). The course will also present microservice architectures, an emerging paradigm more and more used by software industries.
The students will experience team-working with their colleagues in order to design and implement a Web application characterized by a medium-high complexity. To realize this application, the team will use the MVC based framework and the ORM-based framework introduced along the course. The team will then proceed with the design and implementation of a test suite for the Web application previously realized. Finally, a
continuous-integration/continuous-delivery pipeline will be designed and implemented, for automatically building, testing and delivery the application at every version bump.
This course is strongly based on group projects, brainstorming and distribution of tasks. This promotes the development of various transversal skills, such as the ability to work in a team, conflict management, effective communication, the ability to listen to and synthesize different ideas. Every group will be asked to autonomously identifying a real application context motivating the development of their Web application. This, together with the presence of brainstorming sessions, will promote the students’ ability to deal with real-world and challenging scenarios, allowing them to experience in advance a modus operandi typical of the software industry.
- Sviluppo collaborativo (T)
+ GIT (E)
- Design pattern avanzati (T + E)
+ Visitor, MVC, Observer
- JEE
+ Specifiche enterprise (T)
+ Enterprise Java Beans (?), Java Persistence API (?)
+ Specifiche web (T)
+ Servlets (?), Java Server Faces (?)
+ Specifiche web service (T)
+ Java API for JSON (?) and RESTful WS (?)
+ Referencing runtimes (ex Application servers)/Glassfish (o JBoss?) (E)
+ Hibernate (E)
+ Spring (E)
- Build-automation (T)
+ Maven (E)
- Validazione
+ Unit testing (T)
+ JUnit (E)
+ Test di sistema e integrazione (T)
- CI/CD (T)
+ Jenkins (E)
- Architetture a microservizi/Spring boot (T)
- Collaborative development (T)
+ GIT (E)
- Advanced design patterns (T + E)
+ Visitor, MVC, Observer
- JEE
+ Enterprise Specification (T)
+ Enterprise Java Beans (?), Java Persistence API (?)
+ Web Specifications (T)
+ Servlets (?), Java Server Faces (?)
+ Web Service Specifications (T)
+ Java API for JSON (?) and RESTful WS (?)
+ Referencing runtimes (ex Application servers)/Glassfish (E)
+ Hibernate (E)
+ Spring (E)
- Build-automation (T)
+ Maven (E)
- Validation
+ Unit testing (T)
+ JUnit (E)
+ System and Integration Testing (T)
- CI/CD (T)
+ Jenkins (E)
- Microservice Architectures/Spring boot (T)
Il livello di apprendimento degli studenti verra` valutato mediante due prove, da sostenere all'interno dello stesso anno accademico:
- un progetto da svolgere in gruppo
- una prova orale individuale
Lo studente deve mostrare, attraverso la prova orale, di comprendere i principi di progettazione, implementazione e validazione di un software complesso. Attraverso il lavoro di gruppo deve invece dimostrare di (i) saper adattare tali principi al caso di studio e al gruppo di lavoro con cui collabora, e (ii) saperli mettere in pratica per realizzare un prodotto funzionante.
Viene attribuito un voto in trentesimi, con eventuale lode.
Il voto minimo per il superamento dell’esame è 18/30.
Perché l'esito complessivo della valutazione sia positivo, lo studente deve conseguire almeno 18/30 sia nel progetto sia in quella orale. Il voto complessivo è dato dalla media dei voti ottenuti nelle due prove
The proficiency level of the students will be assessed by means of two assignments, to be completed within the same academic year:
- a group project
- an oral examination
The student should prove, through the oral examiation, that he/she understands the principles of designing, implementing, and validating a complex software system. Through the group work the student should prove that (i) he/she can adapt such principles to the case study and to his/her working team, and (ii) he/she can apply them in order to produce a working software.
The grades are given in thirtieths. The minimum grade for passing the exam is 18/30.
In order to pass the exam, the student must obtain at least 18/30 both in the group project and in the oral examination. The final grade will be the average of the grades obtained in the project and in the oral examination.
Materiale didattico disponibile sul sito https://learn.univpm.it/
"Java Persistence with Hibernate", C. Bauer, G. Kin, Ed. Manning
"Spring in Action", C. Walls, Ed. Manning
Slide and other supporting material at https://learn.univpm.it/
"Java Persistence with Hibernate", C. Bauer, G. Kin, Ed. Manning
"Spring in Action", C. Walls, Ed. Manning
NO
NO
Università Politecnica delle Marche
P.zza Roma 22, 60121 Ancona
Tel (+39) 071.220.1, Fax (+39) 071.220.2324
P.I. 00382520427