CSC444'10 Assignment 1

Due October 18 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 attempts to join an AD account name to an e-mail address based on an inexact name match.

You are given two text files. The first file contains, on each line, an AD account name (a single token), followed by whitespace, followed by a name until the end of the line. The name might be in various formats, such as "First Last", "Last, First", "First MI Last", "FI Middle Last", and others (use your imagination). The second file is similarly formatted, but contains an email address as the first token. The goal is match AD account names and e-mail addresses. You should anticipate various problems, such as multiple exact matches, names that do not match, use of name abbreviations (e.g., "William" in one file and "Bill" in the other), and misspellings (such as two letters "tranpsosed"). The person using the program should have a means of supplying supplemental information to assist in the matching process as you are expecting updates of the files, and will want to build on previous work.

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 file formats should be specified.
  2. Design
    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. Includes test automation code.
  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. (10%) 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. (50%) Printouts of the specification, design, code, and tests you used (with results). Note the tests must be automated.
  6. (10%) Does it work, is it convenient, and is it useful?
  7. (10%) An insightful software engineering commentary on the experience. What did you learn? How do you think this generalizes?

Notes: