CSE 403, Spring 2014
Assignment #8: Release Candidate and User Testing

Due: Friday, May 30, by 23:00 [extended to Saturday, May 31, by 11:00]
Turnin: via your repository

A release candidate is a version of your system that you believe is complete in every way. No bugs remain that mar the user experience. The user manual (and/or online help) is complete and accurate, and makes a positive difference for users. The system is packaged in a way that permits a user to easily begin using it, or a developer to easily begin extending it. The requirements and design are accurately documented (in their final form: all documents have been updated as appropriate). The code is commented: both its overall structure, and individual design patterns, algorithms, and procedures. Automated tests (both unit tests and integration/system tests) cover most or all of your system, and the most important or error-prone modules have extra tests and/or correctness arguments.

In other words, you would be willing to release your project as is. (But you call this a “release candidate” just in case you learn of some problem at the last moment. On a well-run project, there won't be anything.)

Since all features were complete last week, the release candidate is an opportunity to refactor your implementation and to fix bugs, and for you to evaluate whether your system meets the needs of users. To do so, you will perform code reviews and user tests, and will submit a document about each.

Code reviews

In addition to testing, code reviews are an excellent way to identify weaknesses in your implementation. Please choose one or more important parts of your implementation, or one whose quality you are particularly concerned about. (You will be graded down if you choose a trivial or uninteresting part of your code.) Then, have a member of your team who has not been involved in that part of the implementation review that code. Finally, improve the code according to the results of the review.

It is generally best if the person doing the review understands the programming language that the code is written in, and you should strive to make that correct. However, code reviews can be quite productive even if the reviewer doesn't know the programming language. The reviewer can still ensure that the overall architecture is clear, that the code is well-structured and commented, that the overall algorithms and data structures are appropriate, and so forth.

Deliverable: Write a brief (one-page) description of what you learned from the review and what you changed. Be sure to indicate what code was reviewed. We will examine that code (and possibly code related to it). We also reserve the right to examine any code, so it is to your benefit to review and improve the code that you are most unsure about.

User testing

For your user tests, you must use 5 people, none of whom are CSE majors or have a career in computing. Furthermore, your users should have no previous experience with your system. In other words, we want you to test your system on real users (like those your customers will be), not on people like yourselves. You may fix problems in between the users, so start early! Each user test should last about one hour. You can ask the users to first perform some tasks of your choosing (much like you did for the paper prototype assignment), but you should also leave time for the user to explore your application. The rules of a user evaluation are like those for the paper prototype:

For projects with a real customer, you must do user testing first with users that you recruit. After that is complete and you have corrected any problems that were revealed, you must do user testing with your real customer. The total number of users must be at least 5; you don't have to have 5 people in each round.

Deliverable: Write a 2-page description of your user evaluation. It should describe your design (what you asked users to do, any other details); who the people were and their background; a description of what occurred; what you learned (about your product, and also about doing a user evaluation); and what you changed as a result. As always, this should go in your repository so that future developers can benefit from it.