CSC444'11 Assignment 1

Due October 17 at Start of Class

 

The purpose of this assignment is for you to become more aware of what you do when you program, and develop an understanding of how individual programmer productivity links to team and project productivity.

Write a program in an object-oriented or procedural language of your choice that helps you to select the next move in Scrabble.

The input is

The output is either "pass" if no word can be found that fits; or the highest scoring possible word, its placement, and its score if one can be found.

To keep the time spent on this assignment in check, you are not required (nor will receive adidiotnal marks for) extensive input validation, automated testing, fancy user interfaces, or advanced game play (i.e., choosing a word that will also make things more difficult for your opponent and/or easier for you on the next go).

Estimate and then keep track of the exact time spent in each phase of development, and the exact number of defects along the way. Divide your development into the following phases (though jump around as you please).

  1. Requirements
    Understand the game and what you are being asked to do.
  2. Specification
    Decide on the precise inputs and outputs and document them. Note that every detail of the file formats and i/o should be specified - that is the purpose of this phase.
  3. Design
    Decide on the algorithm, design the data structures you will use, and document them.
  4. Code and Unit test
    Write code and run smaller tests as the code is created to ensure it works properly. Finish when you believe the program is code complete.
  5. System Test
    Test the software using a wider range of test cases. Fix any defects you encounter.

You will hand in (and/or be marked on) the following (see also the marking scheme and sheet).

  1. (20%) A sequence of estimates for how many hours you would expect to spend on the entire assignment.
    Provide an estimate at the start (along with a work breakdown structure as justification).
    Provide a re-estimate (with justification) after the specification is done, and another after the design is mostly set and you have just started into the coding. When re-estimating, be sure to note the time recorded to-date as at the re-estimate.
    (No marks are awarded for "getting it right" - just give your best guess in advance).
  2. (10%) Detailed time logs and detailed defect logs that you used to come up with the summary.
  3. (10%) Time summary sheet detailing exact time spent in every phase, and a defect summary sheet showing the total number of defects found, classified in some meaningful way.
  4. (40%) Printouts of the requirements, specification, design, code, and tests you used (with results).
  5. (10%) Does it work efficiently?
  6. (10%) An insightful software engineering commentary on the experience. What did you learn? How do you think this generalizes?

Notes: