CSC444'06F Assignment 1
Due October 16 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 C, C++, C#, Java, or any other similar
procedural language that solves a slide puzzle.
For example, compute the smallest number of moves to transform
an N by N matrix of tiles from something like this:
4 | 8 | 2 | 12
| 1 | 10 | 14 | 11
| 3 | | 15 | 5
| 13 | 6 | 9 | 7
|
| Into this:
|
| By sliding tiles up, down, left, or right into the empty slot.
|
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:
- Specification
Decide on the precise inputs and outputs and document it.
- 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.
Hand in the following:
- (10%) An estimate in advance (before you start anything)
of how many minutes you would expect to spend in each of the 4 phases
(no marks are awarded for "getting it right" - just please give your best guess
in advance).
- (10%) Time summary sheet detailing exact time spent (to the minute)
in every phase.
- (10%) Defect summary sheet showing the total number of defects
found in each phase, and to which phase the defects were attributed.
- (20%) Detailed time logs and detailed defect logs that you
used to come up with the summary.
- (40%) Printouts of the specification, design, code, and tests you used
(plus results).
- (10%) A commentary on how what actually happened differed from
what you thought would happen.
Notes:
- Work alone. You may consult others and/or your professor
on the algorithm, but do not take away anything written by somebody
else, and be sure to record the time under the design phase.
- It's ok to skip around from phase to phase.
Decide immediately after the fact into what phase your efforts belong.
- Use a recursive backtracking algorithm constraining the number
of steps to first 1, then 2, then 3, and so on up.
- Start tomorrow: Immediately start recording your time.
- You do have to make the program work for full marks.