CompSci 308
Fall 2019
Advanced 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

Complete the following parts in the appropriate repositories noted for each (as well as a form):

Specifications

This analysis is your opportunity to demonstrate your knowledge of design concepts represented (or not) in the project's code. The course staff 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.

Personal Project Report

This Google form 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 written report represents your personal 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.

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.

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.

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's 01_game folder without renaming them so we can easily compare them to previous versions (you do not have to include other files they depend on as we will not be compiling these versions, just commenting on them).

Your masterpiece code must total between approximately 150-300 lines, including comments.