CompSci 308
Spring 2018
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 to maximize what you learn from this experience. The goal of this retrospective is to draw meaningful conclusions to help you learn from your past successes and failures. They are an integral part of a project because, if taken seriously, they 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 parts directly in your portfolio_NETID repository:

Specifications

Your analysis document should be divided into two 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.

Your analysis must be completed using Gitlab's markdown format and must be named 01_game/ANALYSIS.md.

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 functionally significant 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 your design 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). Every line of code in the class(es) you submit will be reviewed, you cannot specify only part of a class to review or include large sections of commented out code. Simply copy only the Java code files you want us to grade from your project to your portfolio without renaming them so we can easily compare them to previous versions (you do not have to worry about other files they depend on).

Your masterpiece code must total between approximately 100-250 lines, including comments.