Contents:

Schedule

You'll do your project in phases, with the following milestones:

Phase Deliverables Due date
Preliminary Design Preliminary design document 4/18/07 8pm
Preliminary Release Source code, specifications, unit tests 5/1/07 8pm
Final Release Final design document, source code, specifications, unit tests, user manual, webstart packaging 5/14/07 8pm

In addition, there will be weekly meetings with your TA between April 9 and May 11, with a progress document due at each.

Grading

You will work in teams of three or four. Each team member should be responsible for a significant part of the design, documentation, code and testing. Each team will receive a single grade for the final project, determined approximately as follows:

Category Deliverable Due date % project grade Graded on
Design Preliminary design document 4/18/07
10%
Are key issues identified?
Final design document 5/14/07
25%
Is design clean, robust and flexible?
Team work Weekly meetings weekly
5%
Did team work well together? Did all members participate constructively?
Packaging User Manual 5/14/07
8%
Is the tool easy to use? Is the user manual clear and helpful?
Webstart delivery of executable 5/14/07
2%
Is the client packaged correctly?
Implementation Specifications, preliminary 5/1/07
5%
Are important interfaces identified and crucial parts well documented in Javadoc?
Specifications, final 5/14/07
5%
Are important interfaces well documented in Javadoc?
Unit tests, preliminary 5/1/07
5%
Are there good unit tests for non-trivial classes?
Unit tests, final 5/14/07
5%
Are there good unit tests for non-trivial classes?
Source code, preliminary 5/1/07
15%
Is the code clean and well structured? Basic functionality working?
Source code, final 5/14/07
15%
Is the code clean, well-structured and low in defects? How is the user experience? Is it easy-to-use? (For antichess:) How sophisticated is the computer player?

Each stage of this assignment should be committed to CVS by 8:00 PM on its due date.

Deliverables

Here is what each of the deliverables should contain:

Preliminary design document:
Includes basic decomposition, rationale (succinct informal narrative explaining why certain design decisions were made, and what alternatives were considered and rejected); and work allocation and milestones (how tasks will be divided amongst team members, and the dates on which tasks are expected to be completed). You should also include sketches of what your GUI will look like (if you draw by hand, make arrangements with your TA for turning that sketch in).It should be possible to read the document linearly, so you should minimize the use of forward references, and should provide enough overview and explanatory material to make the design artifacts comprehensible. The purpose in preparing the preliminary design is to identify and explore important issues, so the document will be judged on how well it does this, rather than on the quality of the design per se.

You should express your preliminary design in under 15 pages. Your document will be a subset of that described in the Documenting a Software System handout. You do not need to include information about your testing strategy or provide a reflection of your experience (after all, you haven't really finished the project yet).

The preliminary design should also include a project plan, which lists milestones for the team and allocation of tasks to each team member. A milestone is what you expect to be done by some date, such as a tested module or a working feature -- an achievement that is objective, easy to evaluate, and significant. There must be at least two milestones in the project between the preliminary design and the final deadline. The division of labor should be equitable. (It is most useful to combine the milestones and the task allocation into a single table with task, who, and when columns, rather than making the milestones and task allocation into to separate documents which cannot be easily related.)

Final design document:
Includes basic decomposition, rationale (succinct informal narrative explaining why certain design decisions were made, and what alternatives were considered and rejected); a brief description of your strategy for testing and validation; and a post mortem (a discussion of which design decisions turned out well, and which turned out badly, and why; whether the milestones were met, and what you did when they were not). Any changes between the preliminary and final design should be noted and explained.

It should be possible for you to describe your implementation and critique your design in under 20 pages (except for the Specifications, which may take another 5-10 pages and should be placed in an appendix). Conciseness is important. You should not include a printout of your code in your design document. Use the Documenting a Software System handout as a guide.

The final report includes a section on Design Changes. Detail what changes you have made to the design that described in your preliminary design document. Be precise. It is vitally important that your TA have versions of the descriptive parts of the Revised Specification, Implementation Overview, and Validation Strategy that accurately describe your submitted code and what you actually did for testing or validation.

User manual:
A standard user manual, intended for users not familiar with any of the course material. The better the design of the user interface of your client, the less you will need to explain in the user manual.
Specifications:
Every public method should have at least a minimal Javadoc specification. A careful pre-post specification should be written for any subtle or important method.
Unit tests:
Each test should have a brief comment explaining its purpose.
Preliminary Source code:
Will be judged by its correctness, clarity of structure, and the judicious use of runtime assertions and representation invariants.
Final Source Code:
Will be judged by its correctness, clarity of structure, and the judicious use of runtime assertions and representation invariants. You will also need to package your application using the Java Web Start (JAWS) tool. See the Final Project Tools handout for more information on JAWS.

Weekly Meetings with TA

Each team will meet with its TA once a week for a half-hour. You should contact your TA to schedule these meetings; one convenient time might be during the 1pm-2pm slot reserved for lectures. To receive full participation credit:

Although the progress document must be clear, it is short and informal. This document will form the basis of discussion during the meeting, and the TA will keep it on file as a record of progress made. The team should bring multiple copies to the meeting, one for each team member and one for the TA. This progress document should include the following information:

Further Information

Turn in

You should tag the code in your cvs repository for the preliminary release so that we can view the source code. You must do this by 8pm on May 1st. Tagging the code will allow you (and us) to go back to the codebase that you submitted for the preliminary release. If you do not do this by the deadline, you will not receive credit for the preliminary release.

Follow these steps to create the tag:

  1. Change to the directory of your cvs working directory.
  2. Use cvs update or Team » Update to ensure that this directory contains the version of your software which you wish to tag.
  3. Create the tag: cvs tag preliminary-release

Later, if you wish to go back to the tagged version, run cvs update -r preliminary-release. This will put that revision in your workspace. You will not be able to commit from that workspace. If you wish to go back to the main trunk, run cvs update -A.

You should email your TA with the following information:

  1. The location of your cvsroot.
  2. The name of the module to check out.
  3. Instructions for running each demo in the required functionality.

Your ta will run "cvs -d <your cvs root> co -r preliminary-release <your module>" and then follow your instructions to test the demo.