Sds Template
Sds Template
Sds Template
Specification Template
Table of Contents
1.
INTRODUCTION...................................................................................................................................1
1.1. DOCUMENT OUTLINE..........................................................................................................................2
1.2. DOCUMENT DESCRIPTION...................................................................................................................4
1.2.1.
Introduction.............................................................................................................................4
1.2.2.
System Overview.....................................................................................................................5
2.
DESIGN CONSIDERATIONS..............................................................................................................5
2.1.
2.2.
2.3.
2.4.
3.
ARCHITECTURAL STRATEGIES.....................................................................................................6
4.
SYSTEM ARCHITECTURE.................................................................................................................7
4.1. SUBSYSTEM ARCHITECTURE...............................................................................................................8
5.
6.
CLASSIFICATION..................................................................................................................................9
DEFINITION .........................................................................................................................................9
RESPONSIBILITIES.............................................................................................................................10
CONSTRAINTS...................................................................................................................................10
COMPOSITION...................................................................................................................................10
USES/INTERACTIONS.........................................................................................................................10
RESOURCES .......................................................................................................................................10
PROCESSING......................................................................................................................................10
INTERFACE/EXPORTS.........................................................................................................................11
DETAILED SUBSYSTEM DESIGN........................................................................................................11
7.
GLOSSARY...........................................................................................................................................11
8.
BIBLIOGRAPHY..................................................................................................................................11
1. Introduction
The following is an attempt to put together a complete, yet reasonably flexible
template for the specification of software designs. Wherever possible, I have tried to provide
guidelines (instead of prescribing requirements) for the contents of various sections and
subsections of the document. Some may prefer to require more detailed subsections of a
particular section, choosing one or more of the subsection topics from the list of guidelines
provided. In this sense, this document is really a template for a template.
In devising this template, I have gleaned information from many sources, including
various texts on Software Engineering (Pressman, Sommerville, and Van Vliet), ObjectOriented Development (Booch, Rumbaugh, Berard, and Wirfs-Brock), various SEI reports,
/var/www/apps/conversion/tmp/scratch_5/298298517.doc
Page 2 of 12
It should be able to adequately serve as training material for new project members,
imparting to them enough information and understanding about the project
implementation, so that they are able to understand what is being said in design
meetings, and won't feel as if they are drowning when they are first asked to create or
modify source code.
It should serve as "objective evidence" that the designers and/or implementers are
following through on their commitment to implement the functionality described in the
requirements specification.
It needs to be as detailed as possible, while at the same time not imposing too much of a
burden on the designers and/or implementers that it becomes overly difficult to create
or maintain.
Please note that there are no sections in this document for describing administrative or
business duties, or for proposing plans or schedules for testing or development. The sections
in this document are concerned solely with the design of the software. While there are places
in this document where it is appropriate to discuss the effects of such plans on the software
design, it is this author's opinion that most of the details concerning such plans belong in one
or more separate documents.
Introduction
System Overview
Design Considerations
o Assumptions and Dependencies
o General Constraints
/var/www/apps/conversion/tmp/scratch_5/298298517.doc
Page 3 of 12
/var/www/apps/conversion/tmp/scratch_5/298298517.doc
Page 4 of 12
you have an automated method of converting the journal into a formal document, then this
problem is solved.)
1.2.1.
Introduction
Note:
For the remaining sections of this document, it is conceivable (and perhaps even
desirable) that one or more of the section topics are discussed in a separate design document
within the project. For each section where such a document exists, a reference to the
appropriate design document is all that is necessary. All such external (or fragmented) design
documents should probably be provided with this document at any design reviews.
1.2.2.
System Overview
Provide a general description of the software system including its functionality and
matters related to the overall system and its design (perhaps including a discussion of the
basic design approach or organization). Feel free to split this discussion up into subsections
(and subsubsections, etc ...).
/var/www/apps/conversion/tmp/scratch_5/298298517.doc
Page 5 of 12
2. Design Considerations
This section describes many of the issues which need to be addressed or resolved
before attempting to devise a complete design solution.
/var/www/apps/conversion/tmp/scratch_5/298298517.doc
Page 6 of 12
For each such goal or guideline, unless it is implicitly obvious, describe the reason for
its desirability. Feel free to state and describe each goal in its own subsubsection if you wish.
3. Architectural Strategies
Describe any design decisions and/or strategies that affect the overall organization of
the system and its higher-level structures. These strategies should provide insight into the key
abstractions and mechanisms used in the system architecture. Describe the reasoning
employed for each decision and/or strategy (possibly referring to previously stated design
goals and principles) and how any design goals or priorities were balanced or traded-off. Such
decisions might concern (but are not limited to) things like the following:
Use of a particular type of product (programming language, database, library, etc. ...)
Reuse of existing software components to implement various parts/features of the
system
Future plans for extending or enhancing the software
User interface paradigms (or system input and output models)
Hardware and/or software interface paradigms
Error detection and recovery
Memory management policies
External databases and/or data storage management and persistence
Distributed data or control over a network
Generalized approaches to control
Concurrency and synchronization
Communication mechanisms
Management of other resources
Page 7 of 12
reference here of course). Make sure that when describing a design decision that you also
discuss any other significant alternatives that were considered, and your reasons for rejecting
them (as well as your reasons for accepting the alternative you finally chose). Sometimes it
may be most effective to employ the "pattern format" for describing a strategy.
4. System Architecture
This section should provide a high-level overview of how the functionality and
responsibilities of the system were partitioned and then assigned to subsystems or
components. Don't go into too much detail about the individual components themselves (there
is a subsequent section for detailed component descriptions). The main purpose here is to gain
a general understanding of how and why the system was decomposed, and how the individual
parts work together to provide the desired functionality.
At the top-most level, describe the major responsibilities that the software must
undertake and the various roles that the system (or portions of the system) must play. Describe
how the system was broken down into its components/subsystems (identifying each top-level
component/subsystem and the roles/responsibilities assigned to it). Describe how the higherlevel components collaborate with each other in order to achieve the required results. Don't
forget to provide some sort of rationale for choosing this particular decomposition of the
system (perhaps discussing other proposed decompositions and why they were rejected). Feel
free to make use of design patterns, either in describing parts of the architecture (in pattern
format), or for referring to elements of the architecture that employ them.
If there are any diagrams, models, flowcharts, documented scenarios or use-cases of
the system behavior and/or structure, they may be included here (unless you feel they are
complex enough to merit being placed in the Detailed System Design section). Diagrams that
describe a particular component or subsystem should be included within the particular
subsection that describes that component or subsystem.
Note:
This section (and its subsections) really applies only to newly developed (or yet-tobe developed) portions of the system. If there are parts of the system that already existed
before this development effort began, then you only need to describe the pre-existing parts
that the new parts of the system depend upon, and only in enough detail sufficient to describe
the relationships and interactions between the old parts and the new parts. Pre-existing parts
that are modified or enhanced need to be described only to the extent that is necessary for the
reader to gain a sufficient understanding of the nature of the changes that were made.
/var/www/apps/conversion/tmp/scratch_5/298298517.doc
Page 8 of 12
the component in its own design document). If necessary, describe how the component was
further divided into subcomponents, and the relationships and interactions between the
subcomponents (similar to what was done for top-level components in the System
Architecture section).
If any subcomponents are also deemed to merit further discussion, then describe them
in a separate subsection of this section (and in a similar fashion). Proceed to go into as many
levels/subsections of discussion as needed in order for the reader to gain a high-level
understanding of the entire system or subsystem (but remember to leave the gory details for
the Detailed System Design section).
If this component is very large and/or complex, you may want to consider
documenting its design in a separate document and simply including a reference to it in this
section. If this is the option you choose, the design document for this component should have
an organizational format that is very similar (if not identical to) this document.
Choice of which specific product to use (compiler, interpreter, database, library, etc. ...)
Engineering trade-offs
Coding guidelines and conventions
The protocol of one or more subsystems, modules, or subroutines
The choice of a particular algorithm or programming idiom (or design pattern) to
implement portions of the system's functionality
Plans for ensuring requirements traceability
Plans for testing the software
Plans for maintaining the software
Interfaces for end-users, software, hardware, and communications
Hierarchical organization of the source code into its physical components (files and
directories).
How to build and/or generate the system's deliverables (how to compile, link, load,
etc. ...)
Each particular policy or set of tactics employed should probably be discussed in its
own subsection, or (if it is large or complex enough) in a separate design document (with an
appropriate reference here of course). Make sure that when describing a design decision that
you also discuss any other significant alternatives that were considered, and your reasons for
rejecting them (as well as your reasons for accepting the alternative you finally chose). For
/var/www/apps/conversion/tmp/scratch_5/298298517.doc
Page 9 of 12
this reason, it may frequently be convenient to use one of the more popular "pattern formats"
to describe a given tactic.
For this particular section, it may become difficult to decide whether a particular
policy or set of tactics should be discussed in this section, or in the System Architecture
section, or in the Detailed System Design section for the appropriate component. You will
have to use your own "best" judgement to decide this. There will usually be some global
policies and tactics that should be discussed here, but decisions about interfaces, algorithms,
and/or data structures might be more appropriately discussed in the same (sub)section as its
corresponding software component in one of these other sections.
6.1. Classification
The kind of component, such as a subsystem, module, class, package, function, file,
etc. ....
6.2. Definition
The specific purpose and semantic meaning of the component. This may need to
refer back to the requirements specification.
6.3. Responsibilities
The primary responsibilities and/or behavior of this component. What does this
component accomplish? What roles does it play? What kinds of services does it provide to its
clients? For some components, this may need to refer back to the requirements specification.
6.4. Constraints
Any relevant assumptions, limitations, or constraints for this component. This
should include constraints on timing, storage, or component state, and might include rules for
interacting with this component (encompassing preconditions, postconditions, invariants,
other constraints on input or output values and local or global values, data formats and data
access, synchronization, exceptions, etc.)
/var/www/apps/conversion/tmp/scratch_5/298298517.doc
Page 10 of 12
6.5. Composition
A description of the use and meaning of the subcomponents that are a part of this
component.
6.6. Uses/Interactions
A description of this components collaborations with other components. What other
components is this entity used by? What other components does this entity use (this would
include any side-effects this entity might have on other parts of the system)? This concerns
the method of interaction as well as the interaction itself. Object-oriented designs should
include a description of any known or anticipated subclasses, superclasses, and metaclasses.
6.7. Resources
A description of any and all resources that are managed, affected, or needed by this
entity. Resources are entities external to the design such as memory, processors, printers,
databases, or a software library. This should include a discussion of any possible race
conditions and/or deadlock situations, and how they might be resolved.
6.8. Processing
A description of precisely how this components goes about performing the duties
necessary to fulfill its responsibilities. This should encompass a description of any algorithms
used; changes of state; relevant time or space complexity; concurrency; methods of creation,
initialization, and cleanup; and handling of exceptional conditions.
6.9. Interface/Exports
The set of services (resources, data, types, constants, subroutines, and exceptions)
that are provided by this component. The precise definition or declaration of each such
element should be present, along with comments or annotations describing the meanings of
values, parameters, etc. .... For each service element described, include (or provide a
reference) in its discussion a description of its important software component attributes
(Classification, Definition, Responsibilities, Constraints, Composition, Uses, Resources,
Processing, and Interface).
Much of the information that appears in this section is not necessarily expected to be
kept separate from the source code. In fact, much of the information can be gleaned from the
source itself (especially if it is adequately commented). This section should not copy or
reproduce information that can be easily obtained from reading the source code (this would be
an unwanted and unnecessary duplication of effort and would be very difficult to keep up-todate). It is recommended that most of this information be contained in the source (with
appropriate comments for each component, subsystem, module, and subroutine). Hence, it is
expected that this section will largely consist of references to or excerpts of annotated
/var/www/apps/conversion/tmp/scratch_5/298298517.doc
Page 11 of 12
diagrams and source code. Any referenced diagrams or source code excerpts should be
provided at any design reviews.
7. Glossary
An ordered list of defined terms and concepts used throughout the document.
8. Bibliography
A list of referenced and/or related publications.
Brad Appleton <brad@bradapp.net>
http://www.bradapp.net
/var/www/apps/conversion/tmp/scratch_5/298298517.doc
Page 12 of 12