Search for contacts, projects,
courses and publications

Software Engineering


Software engineering is the discipline of building software in a methodical way to ensure that the product satisfies its users' needs, is correct (or, more generally, dependable) and maintainable. The course teaches the students how to organize software development projects, how to analyze and specify software requirements, and how to verify software. The course will focus on the use of formal models and methods in software development. 1. Software lifecycle models. Project planning and management. Cost estimation. Standards. Maturity models. 2. Requirements elicitation and specification. 3. Notations and models for formal specification: state machines and Statecharts, Petri nets, declarative descriptions (Alloy). 4. Verification: testing, formal program verification, model checking. The course will be based on lectures and exercise sessions. The students will also be given assignments, which will be presented and discussed in class.



  • C. Ghezzi, M. Jazayeri, D. Mandrioli, Fundamentals of Software Engineering, 2nd Edition, Prentice Hall, 2002.
  • A. van Lamsweerde, Requirements Engineering, J. Wiley & Sons, 2009.
  • M. Pezzè, M. Young, Software Testing and Analysis: Process, Principles and Techniques, J. Wiley & Sons, 2007.
  • D. Jackson, Software Abstractions: Logic, Language, and Analysis, MIT Press, 2006.



Ghezzi C.

Course director

Mocci A.

Course director

Xin R.


Additional information

Academic year
Master of Science in Cyber-Physical and Embedded Systems, Elective course, Lecture, 1st and 2nd year

Master of Science in Informatics, Core course, Lecture, 1st and 2nd year

Master of Science in Management and Informatics, Elective course, Lecture, 2nd year

PhD programme of the Faculty of Informatics, Elective course, Lecture, 1st and 2nd year (4 ECTS)