Academic Year 2023-2024



Vincenzo Riccio
Course Year
Unit Credits
Teaching Period
First Period
Course Type
Prerequisites. Knowledge of object-oriented programming, algorithms, and data structures.
Teaching Methods. Lectures and computer exercises. The topics covered in the lectures and exercises are presented with the aid of detailed slides, made available to the students in the teaching material through the official website of the instructor.
Verification of Learning. Written exam divided into 3 parts: 1. Exercises on analysis and modeling; 2. Exercises on software quality; 3. Theoretical questions.
The course objectives are:

– introducing basic concepts, principles, and techniques of Software Engineering (SE), i.e. the discipline of Computer Science devoted to the professional and industrial development of software.

– understanding the main problems arising during the software development process.

– knowing how the software development process is organized and executed;

– knowing how to organize a software model and how to craft a software specification

– ability to organize and develop automated tests.


The student will have to:

1. Knowledge and understanding:

Acquiring specific knowledge of the main concepts and basic principles of SE. Knowing the various development models exploited for producing software, the various phases of the software life cycle, both for traditional software and for innovative software. Knowing the different techniques for analysis and design, including: languages such as UML, Data Flow Diagrams, and the SOLID principles of OO Design. Knowing the major critical problems encountered in software development. Knowing the main verification and validation techniques, including testing, software inspection and maintainability and testability metrics. Knowing the new agile methodologies for software development.

2. Ability to apply knowledge and understanding:

Knowing how to analyze and represent the results of analysis and design in a specific application context.


The student will have to:

1. Autonomy of judgment:

Be able to independently evaluate the characteristics of a computer application and to be able to represent the results of analysis and design.

2. Communicative skills:

Acquiring the ability to describe effectively and through appropriate models the most relevant aspects of a software project

3. Learning skills:

Be able to learn the basics of SE, in order to possibly later refine and deepen specific areas of the discipline.

* Introduction to Software Engineering: A brief history of software engineering. Process and product. Software quality factors. Principles of software engineering.

* Software life cycle: Waterfall model; feedback model. Evolutionary models. Transformational model. V-model. Agile methodologies.

* Cost estimation: General overview of cost estimation.

* Requirements analysis and specification: Types of requirements – user, system, and domain requirements, functional and non-functional requirements. Completeness, consistency, verifiability, and traceability of requirements. The Software Requirements Specification (SRS) document. Use case modeling.

* Object-oriented modeling: The UML language: class diagrams, interaction diagrams, state diagrams, activity diagrams, component diagrams, package diagrams, deployment diagrams. Analysis and design in UML. Architectural and design patterns.

* Software verification and validation: Basic principles. Objectives and planning of testing. Black-box and white-box testing techniques. Unit, integration, system, acceptance, and regression testing. Structural testing, coverage criteria. Cyclomatic complexity. Combinatorial testing.

* Software quality metrics and models: Software metrics. Software quality models; the ISO 9126 standard.

* I. Sommerville, Software Engineering, 10° ed, Pearson, 2017

* M. Fowler, Uml Distilled: A Brief Guide To The Standard Object Modeling Language, Pearson, 3rd Ed – 2015