A new Software Engineering Book
A Structured Journey from Inception to Delivery.
This book emerged from our experience teaching software engineering to both bachelor’s and master’s students, as well as from our collaboration with practitioners and companies within industrial settings.
Several excellent books on software engineering have been published, each contributing valuable perspectives to the field. This book distinguishes itself by delving more deeply into the technical underpinnings of key concepts and by emphasizing precision and practical applicability. While providing exhaustive coverage of all methods and techniques in software engineering would be impossible, our goal is to offer a detailed and insightful exploration of those most essential to practice. In the book, we present specific technical and methodological approaches to address the key concepts, including requirements gathering and analysis, software design, quality assurance, and project management, offering, for each of them, an “in-practice” chapter that aims at elaborating on how the presented approaches are applied in concrete cases.
In this book, we aim to present the foundational problems and solutions spanning the entire software development life cycle. While we cover all major phases, we place particular emphasis on three core areas: requirements analysis and management, software design, and software verification. For each, we offer detailed explanations, practical insights, and illustrative examples to guide application in real-world contexts.
A central principle underpinning this book is the use of models as essential tools for analyzing problems and guiding decisions throughout the software development process.
To ensure simplicity and consistency, we have adopted a single, widely recognized modeling language—UML—which is used uniformly throughout the book. While more specialized or advanced modeling approaches exist, UML was chosen for its accessibility, broad industry adoption, and versatility in representing a range of analysis and design concerns.
Software engineering is a foundational discipline that encompasses a wide range of perspectives and levels of abstraction. It is applicable to software systems of varying scale and complexity. To reflect this diversity, the book has been structured in a modular way, enabling individual sections to be adapted and integrated into a variety of course formats and educational contexts.


