CSC444'09F Assignment 1

Due October 19 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 packs rectangular boxes of varying sizes into as many large rectangular shipping containers as required. Use a heuristic algorithm (such as first fit decreasing, for example).

You should decide on some file-based means of getting data into your program (to save time for this assignment you do not need not perform input validation), and a textual way of reporting the optimal packing order back (again, to save time, do not write a GUI). The results should also include the run-time and how efficiently the containers were packed.

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:

  1. Specification
    Decide on the precise inputs and outputs and document them. Note that every detail of the input file format should be specified.
  2. Design
    Do research. Study the above link. Decide on the algorithm, design the data structures you will use, and document them.
  3. 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.
  4. 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. (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).
  2. (20%) Detailed time logs and detailed defect logs that you used to come up with the summary.
  3. (5%) Time summary sheet detailing exact time spent (to the minute) in every phase.
  4. (5%) Defect summary sheet showing the total number of defects found in each phase, and to which phase the defects were attributed.
  5. (40%) Printouts of the specification, design, code, and tests you used (plus results).
  6. (10%) Does it work? Algorithm quality.
  7. (10%) An insightful software engineering commentary on the experience. What did you learn? How do you think this generalizes?

Notes: