Software engineering

A.Y. 2021/2022
Overall hours
Learning objectives
The aim is to provide knowledge of models and tools for the analysis, design, development, and testing of software systems, in order to develop the abilities needed to design, develop, and test software systems
Expected learning outcomes
Students will be able to plan the development of medium size software projects. They will have skills on modeling software requirements, developing code from models and performing code testing. They have also skills on design and architectural patterns
Course syllabus and organization

Single session

Lesson period
First semester
More specific information on the delivery modes of training activities for the academic year 2021-22will be provided over the coming months, based on the evolution of the public health situation.

The entire teaching material of the course is available on the following Ariel site.
Course syllabus
1. PRODUCT AND PROCESS. Software properties. Properties of secure software. Software life cycle: software development steps, life cycle models. Security in the software life cycle. The vulnerability cycle. Design-level attacks. Implementation-level attacks. Operations-level attacks.
2. MODEL-DRIVEN ENGINEERING. Principles of the MDE. Models and meta-models. UML profiles for Domain-Specific Languages specification.
3. SOFTWARE MODELING. Properties of secure software models. Operational specification methods: Finite state machines. Communicating Machines. Declarative specification methods: Design by contract. Il Java Modeling Language tool.
4. UML MODELLING: STRUCTURAL SPECIFICATION. Class diagrams and object diagrams. Constraint specification in OCL. Design patterns.
5. UML MODELLING: BEHAVIORAL SPECIFICATION. Interaction diagrams, state machines, activity diagrams.
6. SOFTWARE ARCHITECTURE. Principles of security architecture. The Java sandbox. MDA (model-driven architecture),
7. UNIFIED PROCESS AND ARCHITECTURE DESIGN. Process UP. SW architecture design. UML architecture: component diagram and deployment diagram.
8. DESIGN PATTERNS: Structural Pattern and Architectural Patterns.
9. IMPLEMENTATION. Good and bad implementation practices. Security level of programming languages. Security violations in C code. Secure C code. An introduction to the Java Language. From models to code: finite state machines in Java.
5. TESTING. The testing activity within the software life cycle. Kinds of testing. Validation and verification techniques. Testing limits. Program-based testing. Program flow chart. Statement coverage, branch coverage, decision and condition coverage. MCC and MCDC methods. Tools Emma and JUnit.

Program of the lab activities:
- Design contract specification in Java Modeling Language.
- Unit Testing of Java code
- Code coverage
- Use of the MODELIO framework
- UML diagrams development in MODELIO
- Specification and design of a software system starting from informal requirements
- Java code from UML models
Prerequisites for admission
Skills acquired in the courses of Computer Programming 2 is fundamental for this course. Passing this exam is strongly recommended.
Teaching methods
Lessons and lab activities. Attending the teaching activities is strongly recommended.
Teaching Resources
· Mark G. Graff, Kenneth R. van Wyk. Secure Coding: Principles and Practices. O'Reilly, 2003.
· Ghezzi Carlo, Jazayeri Mehdi, Mandrioli Dino. Ingegneria del software. Fondamenti e principi. Pearson Education Italia, 2004, 2ª ed.
· Glenford J. Myers, Corey Sandler, Tom Badgett, Todd M. Thomas. The Art of Software Testing. John Wiley & Sons; 2 edition, 2004.
· Martin Fowler. UML distilled. Guida rapida al linguaggio di modellazione standard, Pearson Education Italia, 2010, 4ª ed.
· Luciano Baresi, Luigi Lavazza, Massimiliano Pianciamore. Dall'idea al codice con UML 2. Guida all'utilizzo di UML attraverso esempi. Con CD-ROM., Pearson Education Italia, 2006.
· Craig Larman. Applying UML and Patterns. An Introduction to Object-Oriented Analysis and Design and Iterative Development (3rd Edition) - Prentice Hall (2004).
Assessment methods and Criteria
The exam consists of two written tests and a project, all parts are mandatory. The written tests, lasting two hours, aim to verify the student's knowledge on the theoretical aspects of the subject (through open-ended questions and / or exercises). The project consists in the development of a UML model and subsequent implementation in Java, of informal requirements provided by the teacher. This test aims to assess the student's skills on software modeling using UML and its implementation in Java. The written tests and the UML/Java project are evaluated in thirties and the final mark is the average of the evaluations.

Possible online exams will be taken as follows: written test will be taken on the platform (following the indications given at the University website) and will have the same structure as in presence, but slightly reduced time; the discussion of the project will be taken by the ZOOM platform.
Unita' didattica A
INF/01 - INFORMATICS - University credits: 4.5
Lessons: 36 hours
Unita' didattica B
INF/01 - INFORMATICS - University credits: 1.5
Laboratories: 24 hours
Professor: Braghin Chiara
Unita' didattica C
INF/01 - INFORMATICS - University credits: 4.5
Lessons: 36 hours
Unita' didattica D
INF/01 - INFORMATICS - University credits: 1.5
Laboratories: 24 hours
Professor: Braghin Chiara
Educational website(s)
on appointment
Dept. of Computer Science