Kies de Nederlandse taal
Course module: 201400170
Best Practices in Software Development
Course info
Course module201400170
Credits (ECTS)5
Course typeCourse
Language of instructionEnglish
Contact persondr. A. Fehnker
Contactperson for the course
dr. A. Fehnker
dr. A. Fehnker
Academic year2016
Starting block
Application procedureYou apply via OSIRIS Student
Registration using OSIRISYes
Learning goals
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:
  • 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
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.
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 material
The course provides all necessary material in the slides and as online references
Bertrand Meyer, “Agile”, Springer, 2014
Erich Gamma, Ralph Johnson, Richard Helm, John Vlissides. "Design Patterns: Elements of Reusable Object-Oriented Software" (2nd edition), Addison Wesley, 1998
Martin Fowler, and Kent Beck. "Refactoring: improving the design of existing code", Addison-Wesley, 1999
Instructional modes




Kies de Nederlandse taal