A specification document is one that lays out the purpose and design of your project. It is a common form of documentation to accompany the development of a piece of software. In a waterfall environment, it may be written early in the process and serve as the basis for the design. In an Agile environment, it will also be written early in the process, but treated more as a living document, i.e. one that is frequently revised to keep in-line with the evolving product.
A good structure for a specification is this one, adapted from a University of Kentucky rubric:
Introduction
- Briefly Describe the real-world problem being solved
- Mention the most important program features and constraints
- Describe the purpose, scope, and intended audience of the document.
Project Overview
- Provide background information on the general factors affecting this product and its requirements
- Identify the client, stakeholders, and users of the system
- Provide a complete description of the problem being solved
- Describe the main features of your proposed system
- Mention the most important constraints influencing design decisions
Development and Target Environments
- Describe the physical environment in which your project will be used, including systems with which it will interface
- Describe the hardware and software resources necessary to build and maintain the product
System Model
- Present a high-level view showing the major components of your proposed system and their relationships
- Use text descriptions which can refer to graphical diagrams (i.e. UML) included as figures or presented in the appendices
User Interaction
- Describe the actions of the program from the point of view of the user
- Provide a sufficient level of detail to let tester determine the system satisfies requirements
Functional Requirements
- Describe in clear, unambiguous terms the functional requirements of the system
- Provide sufficient level of detail for testers to determine if these requirements have been met
Nonfunctional Requirements
- Describe the non-functional requirements under which your system must operate
- Provide sufficient level of detail for testers to determine if these requirements have been met
Semester Goals
- Sketch out two versions of your system: a minimum viable product that meets the essential needs of your customers, and an enhanced version that incorporates all desired features
Appendices
- System Diagrams, Entity Relation or Database Diagrams, Use-case diagrams, User Interface Mockups, etc.