project. See Software Development Process and Development Methodology for the
context of this topic.
In the previous part we looked at the initial design phase. In this part we will
cover the detailed design of the proposed system.
Test Case Design and Construction
In this step we develop the test harness. This is done prior to code developmentso that coding has something to test against.
Write the tests with input values based on the use case parameters in the
precondition set up. Evaluate the return code for completeness and correctness,
and log any discrepancies.
Use Case Design
Here we document the flow of information in the system. With an OO design itcan be difficult to understand the interactions between objects, so we document
that here.
Most texts will suggest that sequence diagrams are the correct tool for this task.
However its been my experience that these diagrams are tedious and messy to
construct, and very quickly become difficult to follow in all but the simplest
scenarios. I prefer to use collaboration diagrams as they can more easily show
the flow of control for complex systems. It is also possible to convert trace
data from a running system into collaboration diagrams, thus documenting the
real situation.
System Test Support Design
Just as modern hardware has “Power On Self Test”, so should a software system.If we build support for system testing into the applications we can speed the
testing phase, and thus get the project completed sooner.
Persistent Storage Design
We need to define the format, and rules, that apply to the storage of theapplication’s data. This usually involves experts in the storage component,
and can to some extent be started prior to the application specific work. It
will usually involve creating some additional classes to interface the
application specific classes to the storage mechanisms.
Class Design
Based on the method specifications and use case design, document eachattribute’s visibility, type, and initial value and for each method in
the class document its signature, visibility, and type.
Review the design against established design patterns to ensure that the
design is complete.
You may be required to do this step in a design tool, but my preference, when
developing C++ code is to do this step by creating the header files for the
classes and including stub versions of the implementation with comments
describing the intended design.
Code Generators
Many large systems will have a fair amount of code that can be generated fromsignificantly simpler descriptions of data structures. You should review your
design at this point to determine if there are any candidates for code
generation (before some poor programmer tries to write them by hand).
In the next part we will look at the implementation tasks.
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
No comments:
Post a Comment