New topics: Your Pet, IOU, Baby IQ, The Poisons, Birther II, Games, Future Power

Welcome to the Tech Space!

Webmaster Issues

Skip to end of metadata
Go to start of metadata

Project Title
Project Specification

Confidential And Proprietary
Distribution without Non-Disclosure Agreement is Prohibited

Table of Contents

About this specification

...............................................................................

About this specification
This specification was written using a Confluence wiki template designed by Garnet R. Chaney from "A Software Design Specification Template", by Brad Appleton brad@bradapp.net, Copyright 1994-1997 by Bradford D. Appleton. Permissions was granted to make and distribute verbatim copies of the document provided the copyright notice and this permission notice are preserved on all copies.

Additional sections have been added from "Software Functional Specification Template"

This wiki template has placed Brad's notes as right shifted instruction notes. When specification has reached a certain level of maturity, these instructional notes may be removed. It is recommended that each of these sections actually be prepared as children subpages of the main project specification page, and included in this document. This has many benefits:

  • the versions for each section can be tracked separately,
  • enhances the ability for collaborative viewing and separate editing of the various sections of this document
  • allows each section to have its own internal headings and table of contents separate from the main table of contents
  • allows all the sections to be aggregated for viewing in this master document.

The appropriate include statements have been inserted in this template. To easily get from this document to each section for editing, each section should begin with a link to its individual page, such as

_This section located at [Project Specification - Introduction]_

Here is a section for Brad's notes on the design of the specification document: Software Design Specification Introduction

Introduction

Unable to render {include} Couldn't find a page to include called: Project Specification - Introduction

Specification Distribution Restrictions

This document is confidential and proprietary. This document may only be distributed to individuals who have signed a non-disclosure agreement.

Out of scope for this document

  • This document is intended to provide a long term roadmap concerning a wide variety of technologies, components, applications and deliverables related to Web Thresher development. It is not specific to a particular release. Therefore some things are out of scope for this document, and are best placed in some other documents:
  • Resource planning is not part of this document. Please see [Project Resource Plan and Timeline]
  • Scheduling is not part of this document. Please see [Project Resource Plan and Timeline]

Document Archive Locations

  • This document is located at Please enter URL to this document

Other references

  • Related Documents
  • Prerequisite Documents: None
  • Background/Context documents: None
  • Test Plans:
  • Development Plans
    • [Project Direction]

...............................................................................

Instructions for Introduction
Provide an overview of the entire document:
  • Describe the purpose of this document
  • Describe the scope of this document
  • Describe this document's intended audience
  • Identify the system/product using any applicable names and/or version numbers.
  • Provide references for any other pertinent documents such as:
    • Related and/or companion documents
    • Prerequisite documents
    • Documents which provide background and/or context for this document
    • Documents that result from this document (e.g. a test plan or a development plan)
    • Define any important terms, acronyms, or abbreviations
    • Summarize (or give an abstract for) the contents of this document.
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.

System Overview

Unable to render {include} Couldn't find a page to include called: Project Specification - System Overview

...............................................................................

Instructions for 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 ...).

Design Considerations

Unable to render {include} Couldn't find a page to include called: Project Specification - Design Considerations

...............................................................................

Instructions for Design Considerations
This section describes many of the issues which need to be addressed or resolved before attempting to devise a complete design solution.

Assumptions and Dependencies

Unable to render {include} Couldn't find a page to include called: Project Specification - Assumptions and Dependencies

...............................................................................

Instructions for Assumptions and Dependencies
Describe any assumptions or dependencies regarding the software and its use. These may concern such issues as:
  • Related software or hardware
  • Operating systems
  • End-user characteristics
  • Possible and/or probable changes in functionality

General Constraints

Unable to render {include} Couldn't find a page to include called: Project Specification - General Constraints

...............................................................................

Instructions for General Constraints
Describe any global limitations or constraints that have a significant impact on the design of the system's software (and describe the associated impact). Such constraints may be imposed by any of the following (the list is not exhaustive):
  • Hardware or software environment
  • End-user environment
  • Availability or volatility of resources
  • Standards compliance
  • Interoperability requirements
  • Interface/protocol requirements
  • Data repository and distribution requirements
  • Security requirements (or other such regulations)
  • Memory and other capacity limitations
  • Performance requirements
  • Network communications
  • Verification and validation requirements (testing)
  • Other means of addressing quality goals
  • Other requirements described in the requirements specification

Goals and Guidelines

Unable to render {include} Couldn't find a page to include called: Project Specification - Goals and Guidelines

...............................................................................

Instructions for Goals and Guidelines
Describe any goals, guidelines, principles, or priorities which dominate or embody the design of the system's software. Such goals might be:
  • The KISS principle ("Keep it simple stupid!")
  • Emphasis on speed versus memory use
  • working, looking, or "feeling" like an existing product

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.

Development Methods

Unable to render {include} Couldn't find a page to include called: Project Specification - Development Methods

...............................................................................

Instructions for Development Methods
Briefly describe the method or approach used for this software design. If one or more formal/published methods were adopted or adapted, then include a reference to a more detailed description of these methods. If several methods were seriously considered, then each such method should be mentioned, along with a brief explanation of why all or part of it was used or not used.

Architectural Strategies

Unable to render {include} Couldn't find a page to include called: Project Specification - Architectural Strategies

...............................................................................

Instructions for 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

Each significant strategy employed should probably be discussed in its own subsection, or (if it is 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). Sometimes it may be most effective to employ the "pattern format" for describing a strategy.

Intellectual Property

Unable to render {include} Couldn't find a page to include called: Project Specification - Intellectual Property

...............................................................................

Instructions for Intellectual Property
Describe any intellectual property that is to be developed during the project. Can include ideas for patentable inventions, innovations, trade secrets, and trademarks.

System Architecture

Unable to render {include} Couldn't find a page to include called: Project Specification - System Architecture

...............................................................................

Instructions for 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 higher-level 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-to-be 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.

Subsystem Architecture

Unable to render {include} Couldn't find a page to include called: Project Specification - Subsystem Architecture

...............................................................................

Instructions for Subsystem Architecture
If a particular component is one which merits a more detailed discussion than what was presented in the System Architecture section, provide that more detailed discussion in a subsection of the System Architecture section (or it may even be more appropriate to describe 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.

Policies and Tactics

Unable to render {include} Couldn't find a page to include called: Project Specification - Policies and Tactics

...............................................................................

Instructions for Policies and Tactics
Describe any design policies and/or tactics that do not have sweeping architectural implications (meaning they would not significantly affect the overall organization of the system and its high-level structures), but which nonetheless affect the details of the interface and/or implementation of various aspects of the system. Such decisions might concern (but are not limited to) things like the following:
  • 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 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.

Detailed System Design

Unable to render {include} Couldn't find a page to include called: Project Specification - Detailed System Design

...............................................................................

Instructions for Detailed System Design
Most components described in the System Architecture section will require a more detailed discussion. Other lower-level components and subcomponents may need to be described as well. Each subsection of this section will refer to or contain a detailed description of a system software component. The discussion provided should cover the following software component attributes:
Classification The kind of component, such as a subsystem, module, class, package, function, file, etc. ....
Definition The specific purpose and semantic meaning of the component. This may need to refer back to the requirements specification.
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.
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.)
Composition A description of the use and meaning of the subcomponents that are a part of this component.
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.
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.
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.
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-to-date). 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 diagrams and source code. Any referenced diagrams or source code excerpts should be provided at any design reviews.

Detailed Subsystem Design

Unable to render {include} Couldn't find a page to include called: Project Specification - Detailed Subsystem Design

...............................................................................

Instructions for Detailed Subsystem Design
Provide a detailed description of this software component (or a reference to such a description). Complex diagrams showing the details of component structure, behavior, or information/control flow may be included in the subsection devoted to that particular component (although, unless they are very large or complex, some of these diagrams might be more appropriately included in the System Architecture section. The description should cover any applicable software component attributes (some of which may be adequately described solely by a source code declaration or excerpt).

Glossary

Unable to render {include} Couldn't find a page to include called: Project Specification - Glossary

Alpha: A product which still has major features that are not yet complete.

Beta: Major features are mostly complete and usable, but additional development is required to complete the features, test the features, and address user feedback.

Beta Test: The testing of a pre-release (possibly unreliable) software product by selected users in a live setting.

CM, Configuration Management: The process of configuring the pieces of a software system, systematically controlling changes to the configuration, and maintaining the integrity and traceability of the system throughout the software lifecycle. Also referred to as “revision control” or “version control."

Defect: An unwanted and/or unintended property of a software product that causes it to malfunction. A defect can be due to any number of causes, including programming error, system incompatibility, or improper specification.

Defect Severity: A description of the seriousness of the defect in terms of its consequences to the user of the product. Defects fall into five severity levels:

  • Critical (severity 1): The defect causes the system to crash, or causes irretrievable data loss, or major portions of the system are unusable. There is no reasonable workaround. [Note: The reasonableness of the workaround should take into account the intended end user of the system and seriousness of the consequences caused by the bug.]
  • High (severity 2): The defect causes a major portion of the system to be unusable or
    very difficult to use, but reasonable workarounds exist.
  • Medium (severity 3): The defect causes some portion of the system to not work as the
    developer intended or the user preferred, resulting in some noticeable deficiency or
    difficulty, but still allowing system use. Simple workarounds are obvious, and no loss of data is possible.
  • Low (severity 4): The defect is a minor imperfection that does not impede system
    functionality in any way, but should be fixed anyway.
  • Enhancement (severity 5): The defect is not really a defect in the current system, but is a description of a desired enhancement or new feature.

FCS: First Customer Ship. Refers to the first customer shipment of the product as it will be sold/deployed. Pre-releases such as beta test versions do not qualify as FCS.

GUI: Graphical User Interface. That portion of the product which the user uses to interact with the program, including the keyboard, mouse, buttons, pictures, menus, windows, and dialogs.

Mercurial Revision Control System: A powerful distributed version control system to be used in this project.

Metasearch: The process of aggregating primary search results from various sources such as search engines, indexing agents, or databases.

PT: Problem tracking. Usually refers to problem- or defect-tracking software packages for use by development and quality assurance staff for reporting and tracking product defects.

QA: Quality Assurance. A planned and systematic process necessary to provide adequate confidence that the product optimally fulfills customer expectations.

Regression Testing: The retesting of previously tested features and components to ensure that no new defects have been introduced by the addition of new features and fixes.

Waterfall Model: The waterfall model is a sequential design process, often used in software development processes, in which progress is seen as flowing steadily downwards (like a waterfall) through the phases of Conception, Initiation, Analysis, Design, Construction, Testing, Production/Implementation and Maintenance. http://en.wikipedia.org/wiki/Waterfall_model

...............................................................................

Instructions for Glossary
An ordered list of defined terms and concept used throughout the document.

References and Bibliography

.

Labels:
None
Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.