CSE 432S/533S: Project Implementation
This page is intended to help each project team define its
implementation for the first project cycle. The implementation
defined in this stage will also carry forward into the evaluation
stage and into the second project cycle, with refinements to the
implementation from the first cycle being driven both by lessons you
learned in the evaluation that will follow your implementation, and by
the requirements you establish for the second project cycle.
Guidelines for the Implementation Document
Each project's implementation document should provide a complete
and detailed listing of the software itself, including (1) code
files containing all necessary declarations and definitions in the
target implementation language, (2) instructions for how to build and
run your software, and (3) a technical summary of the implementation
using English text (and if you would like any technical diagrams you
find useful) to illustrate class structure, class associations, and
interactions among the different classes, functions, etc. in the
implementation.
In general, the level of functionality you should be aiming for by the
implementation document deadline is for a "working prototype", i.e.,
one that (1) can exercise the major subsystems of your design, and (2)
for each subsystem can demonstrate the basic functions you have
designed for a single scenario with no bad inputs, or other
complications - this scenario is sometimes called the "happy path"
scenario. In the evaluation stage, however, you will then refine your
testing and evaluation code further to address scenarios involving
problematic inputs, and other situations that could break the
prototype code - basically your job in that last stage will be to try
to make your prototype as robust, efficient, etc. as possible, beyond
the level expected for the implementation stage which is simply to
have a reasonable basic functionality working.
Each project's implementation document should provide a
narrative describing (and comments in your declaration and
definition files should point out) how the low level design is mapped
into the implementation, which is the first working prototype of the
system. This should be an English summary of how you
converted and extended (and possibly revised) the class and function
layouts given in your low level design document to achieve the working
prototype. You should be especially careful to explain how the
associations and interactions between the classes (1) impacted how you
wrote the definitions of the functions and class methods, and (2) were
leveraged by those functions and class methods to implement the
interactions between the classes that you specified in your high level
and low level design documents. The idea of this summary is to give
the reader of your implementation document a single place where they
can see how you moved from low level design to implementation.
Deliverable: Implementation Document
Using Word, LaTeX, or other editing tools as you prefer, you will
produce a document that describes your team's implementation for the
current development cycle of your project and that contains the
following sections:
- a cover page with the title of the project, the nature
of the document (implementation), the names of the team members who
contributed materially to the document, and the date the document was
submitted. In creating your implementation document, you can either
add the following new sections to your low level design document, or if
you prefer you can create a separate implementation document.
- an implementation overview section that describes how
you mapped your low level design into your implementation, and gives
an English explanation of the code files (described in the next
sections) and their contents, especially focusing on the class and
function definitions in the source file listings in the last section
of this document. In this section you should describe how the class
associations and interactions specified in your high level and low
level design documents both shaped and were shaped by your
implementation of those definitions.
- a project implementation code file outline section that will serve as
a "packing slip" for the code files in your implementation. Please make sure that if you have
added/removed/renamed/etc. any classes/methods/member variables/functions/etc. since your
low level design, those changes are reflected in this list. It should:
- state the language (or languages) in which you are implementing your project,
- list the names of the source and header code files that contain your
implementation,
- list the classes and functions that appear in those files, saying whether
each class or function is declared or defined in that file, and
- list the associations (for example, inheritance, ownership, reference counting,
etc.), between the classes and describes how each association is declared.
- a project declaration and definition code file listing
section that contains the code files holding the declarations and
definitions of the classes, functions, member functions, and member
variables in your implementation. The comments in the listing should
reflect a summary of the information provided in (1) the
implementation overview section of this document, and also (2) the
high level and low level design overviews from the previous two
documents. Thus, the comments in the code should offer a pretty
thorough view of the design patterns you chose, how they mapped into
the high level and low level designs, and then into your
implementation, but in contrast to the implementation overview section
where the entire summary is in one place, the comments should reflect
how each function, etc. plays its part locally in that overall
technical structure.
- an instructions for building and running the prototype
section, that gives step by step instructions for building and running
your code on a platform that is available in one of the CEC Windows or
Linux labs. If there are any libraries, etc. that need to be
downloaded in order to build or run your prototype, you should also
say what they are and give step by step instructions for downloading
them and using them in your project. One option is to set up
a demo environment in your team account on the CEC machines, and
provide directions (including if necessary directions for gaining
access permissions) for running your implementation there.
Participation: every member of your team should be
significantly involved in the production of the code and the writing
of this document, though how you structure the interactions within the
team is up to you. For example, it's fine for one person to capture
notes from a group discussion of the implementation document and write
it up as long as the other team members contributed materially to the
discussion that is captured. Similarly, some team members may develop
different parts of the implementation code, while others may
contribute by testing and debugging it.
Deadline: by 11:59pm on Friday, June 12, 2009,
please e-mail your team's implementation document to Prof. Gill at
cdgill@cse.wustl.edu.
As with the requirements, high level design, and low level design
documents, your team should treat this implementation document as a
"work in progress", evolving it appropriately throughout the
development cycle, and by the evaluation stage the documents you have
produced previously should constitute most of your evaluation report,
other than the evaluation results and analysis which you will add in
that last stage of the cycle.