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:
- Specification
Decide on the precise inputs and outputs and document them.
Note that every detail of the
file formats should be specified.
- 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.
Includes test automation code.
- 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).
- (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%) Detailed time logs and detailed defect logs that you
used to come up with the summary.
- (5%) Time summary sheet detailing exact time spent (to the minute)
in every phase.
- (5%) Defect summary sheet showing the total number of defects
found in each phase, and to which phase the defects were attributed.
- (50%) Printouts of the specification, design, code,
and tests you used (with results).
Note the tests must be automated.
- (10%) Does it work, is it convenient, and is it useful?
- (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 specification
and 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
).