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:
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.
- 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
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.
|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|
|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|
|Self study without assistance|