Teaching in italian
Subject area
Reference degree course
Course type
Master's Degree
Teaching hours
Frontal Hours: 0.0
Academic year
Year taught
Course year
Reference professor for teaching

Teaching description

Teaching program is provisional and may be subject to changes

The prerequisites for attending the corse are the knowledge of structured programming languages (Java) and the fundamentals of computer science.

After the course the student should be able to: a. Apply main software engineering principles and control software qualities (both internal and external); b. Design and implement software following industrial standards (UML) and structured software production processes; c. Manage the software engineering i.e. execute tasks as planning, organizing, staffing, controlling, estimating (software cost and size); d. Design the software adopting standard software architectures; e. Select and adopt software design patterns (creational patterns, structural patterns, behavioral patterns); f. Verify the software exploiting standard tools and adopting well-known metrics; g. Develop complex model-view-controller web and mobile software systems, exploiting at the back end the Spring framework, and at the front end the Angular framework, connecting them through REST/JSON web services; h. Manage the fundamentals of modern cloud computing and cloud service deployment; i. Use the main open source tools for the software testing and refactoring, and for the software configuration management.

The main goal of the course is to deepen students’ knowledge on modern design and development techniques for interactive software systems. In particular, methods and tools for automated software testing, agile processes organization and design patterns selection will be analyzed. All concepts will be experimented by students designing, developing and testing a software prototype of a service based web application with a mobile extension (app). The software prototype will be developed on top of modern frameworks (Spring, Angular, Ionic, Amazon AWS).

Online or classroom lessons, classroom practice, project work in pair programming.

The exam consists of two tests: a written test, intended to verify the theory of software engineering concepts (10 points out of 30); a software prototype implementation, intended to verify the practice of design patterns, MVC architectures and tests, which will be discussed during an oral examination (20 points of 30). Both written test and software prototype implementation are mandatory. The software prototype should be developed in pairs. The software system must be designed using UML, adopting standard design patterns. The software system must be developed starting from MVC frameworks (Spring, Angular, Ionic, AWS), using a structured programming language, and must be systematically tested collecting metrics. A mobile extension of the software system is required. The software prototype must be developed following an agile process and must be documented. A month before the end of the course, the general requirements of the software prototype will be published by the teacher, a new requirements set for each year. The requirements will be effective till a new set of specifications will appear. The mark of the written exam has the same temporal extension of the project's requirements.


Software engineering principles: 

   - Software qualities and software engineering principles;

   - Software production process;

   - Management of software engineering.

Software architectures: 

   - Design and software architectures;

   - Software architectures specification.

Software design pattern: 

   - Introduction to standard architectures and design patterns;

   - How to select and adopt a design pattern;

   - Creational patterns, structural patterns, behavioral patterns.

Software verification: 

   - Introduction to man software verification methods;

   - Black-box and white-box methods;

   - Test in the large, test in the small, correctness proofs;

   - Software metrics.

Introduction to Spring framework: 

   - Introduction to Java EE;

   - Creating a dynamic web project with Java EE;

   - Introduction to Spring framework and development environment setup;

   - Developing a Spring MVC application;

   - Accessing Data Layer with Spring Data JPA;

   - Building a RESTful Web Service.

Software development and verification tools: 

   - Unit testing with JUnit and Refactoring;

   - Versioning control and code sharing with GIT.

Cloud computing with Amazon Web Services and EC2: 

   - Introduction to Amazon EC2 platform;

   - Introduction to Amazon API Gateway;

   - Configuring an EC2 instance and publishing API.

Mobile apps development with AngularJS: 

   - Angular: Project Setup;

   - Angular: Component, Template & Data Binding;

   - Angular: Forms (Input, Validation, Template-Driven);

   - Angular: Services, Routing, HTTP;

   - Developing Cross-platform Mobile App with Ionic.

1. Ghezzi, Jazayeri, Mandrioli - Fundamentals of Software Engineering (2nd edition) - Pearson College Div 2002.

2. Fowler - UML Distilled (3rd edition) - Addison Wesley Object Technology 2003.

3. Gamma, Helm, Johnson, Vlissides - Design patterns - Addison Wesley 2002.

4. Larman - Agile and Iterative Development: A Manager's Guide - Addison-Wesley Professional 2003.

5. Beck - Test Driven Development: By Example - Addison-Wesley Professional 2002.

Second Semester (dal 01/03/2018 al 01/06/2018)

Exam type

Type of assessment
Oral - Final grade

Course timetable

Download teaching card (Apre una nuova finestra)(Apre una nuova finestra)