After this course, students will be able to:|
evaluate design choices.
use state-of-the-art tools for testing, debugging, refactoring and code analysis.
describe their design using the standard terminology of design patterns.
create a design and implementation of re-usable, extensible software.
evaluate the quality of program code and tests.
explain and apply the most common design patterns.
This course teaches different idioms, patterns, and best practices for developing high-quality software. This comprises getting familiar not only with the theory of these techniques, but also with tools that support developers in applying them. The course has a focus on the "detailed design" and the "construction" phases of the software engineering process. Requirements engineering and architectural design are out of the course's scope. The topics covered in this course are:
In this course, we will mainly focus on practices and techniques that are essential to create a state-of-the art software development pipeline, processes, and an environment to produce quality software, achieving the goals of modularity, re-usability, extensibility, flexibility, maintainablity and correctness. After completing this course students will be able to apply the aforementioned topics to a real life situation.
- Principles of good software design
- Quality goals and trade-offs between them
- Metrics for assessing the design
- Practices that foster good design
- Best practices
- Continuous integration
- Test-driven developments
- Coding conventions
- Tools for software analysis, metrics and debugging
- Refactoring and design patterns
- Agile software development principles and practices
Assessment and Organization:
In a practical assignment carried out throughout this course, students (working in small groups) will apply the taught practices and techniques. During this assignment they will assess their solution and evaluate the benefit of applying the techniques in a mid-scale project. They will also learn to reason about the benefits and drawbacks of alternative solutions and pick the best trade-offs. Deliverables include presentations, documentation, source code, and an elaborate report. The report discusses the application of principles and tools as well as design decisions made during the project, as well as a reflection on this.
The deliverables used for grading. In addition, all students will be interviewed individually to determine whether they reached the learning objectives to the degree as is documented by the group's report. This is to ensure that both group members equally contributed to the solution. If significant differences become obvious in this interview, the grading will be differentiated for both students.
Assumed previous knowledge |Required materials-Recommended materials|
|Course materialThe course provides all necessary material in the slides and as online references|
|BookBertrand Meyer, “Agile”, Springer, 2014|
|BookErich Gamma, Ralph Johnson, Richard Helm, John Vlissides. "Design Patterns: Elements of Reusable Object-Oriented Software" (2nd edition), Addison Wesley, 1998|
|BookMartin Fowler, and Kent Beck. "Refactoring: improving the design of existing code", Addison-Wesley, 1999|