Kies de Nederlandse taal
Course module: 201700082
Programming Principles, Patterns, and Processes
Course info
Course module201700082
Credits (ECTS)5
Course typeCourse
Language of instructionEnglish
Contact persondr. P. van den Bos
dr. P. van den Bos
Contactperson for the course
dr. P. van den Bos
dr. A. Fehnker
Academic year2021
Starting block
Application procedureYou apply via OSIRIS Student
Registration using OSIRISYes
After this course, students will be able to:
  • Explain and apply software quality principles.
  • Demonstrate understanding the important software quality models.
  • Critically evaluate programming language features with respect to software quality.
  • Justify solutions to software quality problems using alternative programming language paradigms
  • Explain the applicability, structure, advantages, and disadvantages of common design patterns.
  • Recommend and apply design patterns for refactoring of code
  • Critically implement and evaluate agile software principles and practices.
Computer Programming is the process of writing, testing, troubleshooting, debugging and maintaining of a computer program. This course assumes good undergraduate programming skills, and prepares the student for programming in a software development environment. It discusses common challenges for developing modular software,  and covers principles of good software design, design patterns and refactoring, programming language features, and software development processes that address these challenges.
The topics covered in this course are:
  • Principles of good software design, and software quality models
  • Design Patterns and refactoring
  • Programming language features for software quality
  • Agile software development principles and practices
In this course, we will mainly focus on principles, practices, and processes for producing quality software; achieving the goals of modularity, re-usability, extensibility, flexibility, maintainability and correctness. After completing this course students will be able to apply the aforementioned topics to a real life situation. This course is not a programming course. Requirements engineering and architectural design are out of the course's scope.

Assessment and Organization
The assessment includes a review of literature on a software quality problem or anti-pattern, and their possible solutions. This review comprises a written essay and an oral presentation. 
In a final project of this course, students will have to create an automated software development pipeline and  implement appropriate agile software development processes in their project. Deliverables include documentation, source code, and a report. The report has to motivate the choices made in setting up the pipeline and processes. Students can work on a project in groups of three. The submission of report and documentation will take place in the exam period.

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 all group members equally contributed to the solution. If significant differences become obvious in this interview, the grading will be differentiated between students. The oral exam will take place in the exam period.
Participating study
Master Computer Science
Participating study
Master Internet Science and Technology
Required materials
Joost Visser, Sylvan Rigal, Gijs Wijnhold, Zeeger Lubsen. Building Software Teams: Ten Best Practices for Effective Software Development. O'Reilly Media; ISBN 978-1491951774
Bertrand Meyer, “Agile”, Springer, 2014. ISBN 978-3-319-05155-0
Recommended materials
Erich Gamma, Ralph Johnson, Richard Helm, John Vlissides. "Design Patterns: Elements of Reusable Object-Oriented Software", Addison Wesley, 1998. ISBN: 9780201633610
Martin Fowler, and Kent Beck. "Refactoring: improving the design of existing code", Addison-Wesley, 1999. ISBN: 978-0201485677
Instructional modes
Presence dutyYes


Presence dutyYes

Project unsupervised
Presence dutyYes

Self study without assistance


Kies de Nederlandse taal