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 configuration of a game board
(how large it is, where the double and tripple letter/word spaces are -
for testing purposes you will want to input smaller boards than the rules call for),
- the points associated with the various letters,
- the current letter placement on the game board,
- the letters/wildcards on your rack,
- a dictionary of legal words
(to make things easier for you, only explicitly listed words can be selected -
for testing purposes you will want to input smaller dictionaries such as
Basic English Word List).
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).
- Requirements
Understand the game and what you are being asked to do.
- 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.
- Design
Decide on the algorithm,
design the data structures you will use,
and document them.
- 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.
- 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).
- (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).
- (10%) Detailed time logs and detailed defect logs that you
used to come up with the summary.
- (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.
- (40%) Printouts of the requirements, specification, design, code,
and tests you used (with results).
- (10%) Does it work efficiently?
- (10%) An insightful software engineering commentary
on the experience. What did you learn?
How do you think this generalizes?
Notes:
- Work alone. You may consult others and/or your professor
but do not take away anything written by somebody
else, and be sure to record the time under the
requirements, specification or design phases.
- As an exception to the work alone rule, the class may share
amongst themselves sample test input files
(i.e., work together to create sample inputs that you can all use
to speed up test case generation). Share them on the Blackboard forum.
- It's ok to skip around from phase to phase.
Decide immediately after the fact into what phase your efforts belong.
- Start tomorrow: Immediately start recording your time.
- You do have to make the program work for full marks.
- In certain marking categories, the perfect mark is attained
only as a relative ranking.
For perfect marks,
it must be better than what the other good solutions are doing
(see the
marking scheme for details).
- Make sure the code is easy to read and well-documented.
Use a previous year's sample solution as your guide (e.g.,
http://www.cs.toronto.edu/~penny/teaching/csc444-06f/slider.cpp.html
).