- Teaching in italian
- SOFTWARE ENGINEERING
- SOFTWARE ENGINEERING
- Subject area
- Reference degree course
- COMPUTER ENGINEERING
- Course type
- Laurea Magistrale
- Teaching hours
- Ore Attività frontale: 81.0
- Academic year
- Year taught
- Course year
- PERCORSO COMUNE
- Reference professor for teaching
- MAINETTI LUCA
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.
- 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.
- 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.
Secondo Semestre (dal 01/03/2021 al 11/06/2021)
Type of assessment
Orale - Voto Finale