Template for
SYSTEM DESIGN DOCUMENT  (SDD)


1. Introduction

Briefly describe the purpose of the system, for an audience of developers.


2. Current software architecture

Describe the current software architecture for the system, if there is one.  If this is a new system, mention that fact.


3. Proposed software architecture

3.1  Overview

Provide a bird's-eye view of the software architecture. 

3.2  Subsystem decomposition

Using UML class diagrams (or similar graphical depiction), present the subsystems of the architecture and their connections, omitting details about their specific interfaces.  Each subsystem should correspond to a C++ class.  Also list the subsystems, with a brief description of the functionality of each.

3.3  Hardware/software mapping

If there is any non-standard hardware involved, describe how subsystems are assigned to these components.

3.4  Persistent data management

Describe the file format(s) used by the system, as well as the format of any other type of persistent object (e.g., database).

3.5  Access control and security

If the system performs any kind of access control (e.g., user account access using passwords), provide the access matrix and describe the use of encryption, the authentication mechanism used, the management of keys, etc.

3.6  Global software control

Describe any synchronization and concurrency issues, such as constraints upon the order of class construction/destruction or interaction between multiple threads.

3.7  Boundary conditions

Describe the startup, shutdown, and error behavior of the system.  Include concepts like command-line parameters, types of exceptions that may be thrown, and who is responsible for catching exceptions, and what happens when an exception is caught.


4. Subsystem services

For each subsystem, provide an external reference specification (ERS) that captures its interface.  Be sure to include all important details that are needed by anyone using the subsystem.  This section will serve as an initial reference manual for all developers, as well as a starting point for those implementing the subsystems.

>