CompSci 308
Fall 2016
Software Design and Implementation

Game : Analysis

Now that the project has been turned in, take a few hours to relax and reflect, then analyze your experience. It is important for you to review your past performance, analyzing its positive and negative aspects. Typically such analyses are called post-project reviews or "postmortems" and their goal is to draw meaningful conclusions to help you learn from your past successes and failures. Despite its grim-sounding name, a postmortem, if taken seriously, can be an extremely productive method of improving your development practices.

Submission

In addition to documenting your project (and noting the cheat keys you installed in your README), complete the following two documents.

Written analysis: push a single file, ANALYSIS.md, to your analysis repository (it is an individual effort, like an exam). To make it as easy as possible for the course staff to read and give you individual feedback, it must be completed using Gitlab's markdown format (here is a web-based WYSIWYG editor for markdown).

Code masterpiece: create a separate commit within your project that contains one or more classes from your project that you have refactored. Each class that you want to be considered as part of your masterpiece must compile and have this comment at the top:

// This entire file is part of my masterpiece.
// YOUR NAME

Specifications

Your analysis should be divided into three parts:

Your analysis is your opportunity to demonstrate your knowledge of design concepts represented (or not) in the project's code. We can readily identify the good and bad aspects of project's design, so we are looking to see if you can also acknowledge these as well. If it is also an honest and thoughtful reflection, it can also help you identify specific actions you can do to improve future projects.

The following sections must be included in your analysis. Questions are provided to get you started thinking about what to consider within each section; you may, of course, include anything else you feel is relevant. In other words, do not be limited by these questions, but respond to them at least.

Project Journal

This section represents your view of the project's planning and progress. Analyze your plan and how the project's outcome could be improved. Describe specific, important, events during the project's time line to justify your comments rather than general terms like "always late", "bad code", etc.

Design Review

This section represents your view of how your program is organized and why it was done that way. It can be a chance for you to describe how you might fix a problem or refactor the design if you did not have time to actually change the code.

If you think something is good, justify your opinion. If you think something is bad, justify your opinion, and suggest how to improve it. Use specific code examples and reasons related to principles discussed in class or in the readings rather than general terms like "clearly/obviously", "good/sucks", "elegant/ugly", or "like/hate". Note, since no design is perfect, including both pros and cons of a design (i.e., its trade-offs) or alternate designs you considered is highly encouraged.

Code Masterpiece

Take part of the project and refactor it to demonstrate what you now think of as good design. It should represent a feature or component within your larger project that is small enough to be separable, but large enough to have some interesting design element. I use the term "component", rather than "class", because it may be several classes that work together, e.g., a few classes that work together or a superclass and its sub-classes. Note, if your component is specifically intended to be superclass, it must include enough detail that it is clear how to extend it and at least one example subclass to show it in "action".

In comments at the top of each class included, describe this code's purpose and why you think it is well designed (i.e., what you think it shows that you have learned so far in the course).