Hide menu

TDDB84 Design Patterns

Lab 3 — Improving Design

These instructions are valid from the fall of 2017.


The third and last assignment of the course is to explore the effects of design patterns on software quality attributes, as studied in seminar 3, in order to collect information that could be valuable to assess the effect that a design pattern has on software qualities.

The topic you work with in lab 3 shall be the basis for the final paper that you write in the course. Because you may choose to work on topics that differ with respect to the language/domain/design pattern of interest, you may work individually on this lab assignment. If you do work in pairs during lab 3, you must still present your solutions individually to your assistant at the end of the course.

You may choose to conduct modifications to the FreeCol code base, or taking examples from another language or programming paradigm or application framework, as suggested by the list of main topics. Flowchart for laboration 3

If you choose to modify FreeCol, you may select a location to work on from a set of suggested starting points given below. Alternatively, you may submit a proposal of how to improve the design elsewhere. If you choose the latter, or if you would like to work on something else entirely, your proposal has to be approved by your LAB1 assistant before you start so make sure that you submit it in time (see the timetable). The proposal should include your ideas of how the project will benefit from the changes that you would like to make from a design point of view. The proposal should be sent to the LAB1 assistant’s email address.


Regardless of whether you decide to work on a location suggested by us, you are supposed to demonstrate that you have mastered the topics of the course sufficiently well. To this end, in FreeCol you are asked to refactor the chosen part of the game by apply a design pattern that you think suits the best in this particular context. Make sure to keep in mind the design principles discussed throughout the course. If you choose your own code base to work on, please make sure to focus on the issue of how a particular design pattern affects particular software qualities.

As before, you should push your changes to GitLab so that they are easily accessible to your LAB1 assistant. Each of you will be assessed individually based on your understanding of all the changes and their purpose; see the passing requirements listed at the bottom of the page.

Suggested Starting Points

If you choose to modify FreeCol, you may select one of the following sites for structural modifications:

The choice is up to you; however, it might be helpful to give you some guidelines. Take a careful look at the functions and classes listed above. Try to identify potential problems associated with each of them based on the material covered in this course. Think about the impact of the current design on the understanding and further development of the corresponding functionality. It might be worth going through the list of the design principles that you have become familiar with in order to see which ones might be violated. Once you have a good understanding of what the problems are, try to sketch potential solutions. Which design patterns might be helpful to consider in each of the contexts? Finally, pick the problem that appeals to you the most and start to work through it.

Seminar Discussions

As with the previous labs, after your work is done, you will present it during the seminar pertaining to Lab 3 in order to discuss what you have accomplished. Before the seminar, you should submit your results to one another in writing, and

  • describe what you aimed to do, what you have done, and how you think you have achieved your goal;
  • describe how your changes affect the project in relation to how you believed the code could be improved structurally at the chosen location; and
  • describe the design decisions taken by you in terms of general design principles and the design patterns that you have chosen to implement.

Reporting Results

When you consider that you are done with the assignment, sign up for demonstrating your implementation during a lab session. The exact procedure will to be announced later on here as well as on the News page. Demonstrations are individual, which is further discussed below.

Each pair (or individual, if working individually) should submit a report to the email address of the corresponding LAB1 assistant following the general procedure described in relation to Lab 1. In the report,

  • introduce to the reader the problem that you worked on, motivating the need for a certain design pattern in solving a problem;
  • summarize what you have managed to achieve; and
  • summarize the feedback received from your discussions during the seminar.

You should also provide a link to your repository and grant to your teaching assistant the Reporter access to the repository.

Demonstrating Results

You should submit your results for review during a seminar as well as demonstrate them in person to your LAB1 assistant.

After the seminar pertaining to Lab 3, submit your results to your teaching assistant no later than the last time and date set for the lab; see the timetable and the submission instructions given for Lab 1.

The demonstration of the results is individual. Moreover, you will have to make reservations in advance for demonstrating the results to your LAB1 assistant during the final lab sessions.

During the individual examination, be ready to show your code using GitLab’s interface and run automated tests if appropriate. Bring a laptop and make sure you have all the relevant information open beforehand such as commits in browser tabs and the code that you wish to demonstrate in your favorite IDE.

Similar to the instructions for group discussions, during the seminar and individual examination, be ready to:

  • justify that your changes do not break the application by using the existing unit tests (in case you work on FreeCol) and verifying the outcome;
  • describe what you aimed to do, what you have done, and how you have achieved your goal;
  • describe the outcome of the discussion that you had with your team regarding you changes;
  • describe how your changes affect the project in relation to you believed the code base could be improved structurally; and
  • describe the design decisions taken by you in terms of general design principles and the design patterns that you have chosen to implement.

Passing Requirements

The following aspects will be assessed during the individual demonstration of your design changes:

  • your ability to present a working solution (as defined by passing tests),
  • the appropriateness of your solution with respect to the problem you were trying to solve, and
  • the appropriate application of design patterns and principles when solving the problem.

Page responsible: Alachew Mengist
Last updated: 2017-09-29