1. Introduction
This document is to serve as a Software Requirements Specification for the GateBuilder application. The application is to be completed by the end of the fall semester of the 2000 2001 school year.
1.1
Purpose
The Software Requirements Specification (SRS) is a formalization of the specifications of the GateBuilder application. It contains both functional and non-functional specifications as well as use cases and a general overview of the product. It is intended to represent the overall requirements of the software and present some insight into the intended uses and general functionality of the software.
1.2
Overview
The GateBuilder application is a basic application for the building of simple circuits. It will have a graphical user interface with a very shallow learning curve. Its file format will also be easy to read and understand.
1.3
Definitions, Acronyms, and
Abbreviations
Back-end The internal goings on of the application that are hidden from the user.
Front-end The graphical user interface with which the user is initially presented
Gate Logic Gate. A logic gate is one of the core components of a computer circuit. A single gate performs a single function- such as or-ing its two inputs.
GUI Graphical User Interface. A GUI is any system by which the user can control certain functions by manipulating visual representations of files, folders, etc.
JVM Java Virtual Machine.
Macro A collection of gates that can be treated as a single object or gate.
XML - Extensible Markup Language. A markup language is a mechanism to identify structure within a document. The XML specification describes as standard way of adding markup to documents.
2
General Description
2.1
Product Perspective
This product will be entirely stand-alone on user workstations with a JVM. It may also run on a server with java-enabled clients at a later date.
2.2
Product Functions
Basic Circuit Building
Easily readable output file
2.3
User Characteristics
This system is being designed to be useable by users with as little technical knowledge as possible. GateBuilder is designed to be installed on a user workstation. It is intended to be as easily learned by students taking CS60 at Mudd. As such, it should require little or no knowledge other than basic circuitry.
3
Specific Requirements
3.1
Functional Requirements
The program should contain a palate-based GUI for use by the end users. This GUI should be fairly straight forward having basic graphic representations of the different gates as well as lines to connect the input of some gates with the output of another. Additionally there should be a method for user-defined input to a specific gate to allow users to test with many different inputs.
The output files must be readily readable so that graders may verify the output. That is, it should be easy enough that the graders may write programs that parse the output file and check it against known values for correct output.
Additionally users should be able to specify a group of gates as a macro. These macros should be able to be saved across sessions, although this is not a critical requirement. These macros should be able to be controlled as a single entity or gate. These macros should also be able to be copied and placed in various locations within the circuit.
3.2
Performance Requirements
Since GateBuilder is designed to run on user machines it should be as lightweight as possible. Also the JVM adds additional requirements on the user machine, which underlines the need to be as lightweight as possible.
4
Use Cases
Minimum
Requirements
Label: LOAD
Name: Load program, render GUI
Goal: Start up program
Actors: User
Initiator: User
Description: Initialize all systems so user can start using system
Pre-conditions: System not set up
Post-conditions: System set up
Extensions: None
Label: ADD
Name: Add object to circuit
Goal: Add a new object to the circuit user is currently working on
Actors: User
Initiator: User
Description: User selects the create object tool from palette by clicking on the particular object type to add, and then clicks on the work space to place the new object. The user can add more than one object by clicking on empty spots in the work space repeatedly.
Pre-conditions: None
Post-conditions: None
Extensions: None
Label: MOVE
Name: Move object
Goal: Move object in work space
Actors: User
Initiator: User
Description: Move object (gate or input) in work space. To do this the user will click on a move tool, and then click and drag the object to the new desired location. All connections will then follow the gate to the new location.
Pre-conditions: Object exists
Post-conditions: None
Extensions: None
Label: REMOVE
Name: Remove an object or connection from the workspace
Goal: To remove an unnecessary object or connection from the workspace
Actors: User
Initiator: User
Description: User clicks on the remove tool in the palette, and then clicks on the object or connection to be removed. More than one object connection can be removed this way, by clicking separately on each object or connection to be removed, after the remove tool has been selected. If an object being removed has connections to or from it, then those connections are also removed.
Pre-conditions: Object exists
Post-conditions: Object doesnt exist
Extensions: None
Label: CONNECT
Name: Make a Connection Between Two Objects
Goal: To connect the output of one object to the input of another, logically.
Actors: User
Initiator: User
Description: User selects the connection tool by clicking on it in the palette, and then clicks on one object and then another. A connection is formed from the output of the first object to the input of the second object. Connections can be made such that one output connects to two or more inputs, but an input can only be connected to one output. If this condition is not met, nothing happens.
Pre-conditions: None
Post-conditions: Two objects are now connected.
Extensions: None
Label: INPUT
Name: Specify Input
Goal: Specify input to input object
Actors: User
Initiator: User
Description: A user can specify the input they wish to give to a particular input object by selecting the input tool, and clicking on an existing input object. The user will also be given the chance to select an input when they first place the input object.
Pre-conditions: None
Post-conditions: None
Extensions: None
Label: CALCULATE
Name: Calculate output
Goal: To calculate the correct output.
Actors: User
Initiator: User
Description: Clicking a calculate button will run the specified input through the logic gates and put it into an output object. This output object will be created at the output of any gate that is not connected to any further gates. If there is a gate with too few inputs an error message will be displayed when calculate is clicked.
Pre-conditions: None
Post-conditions: None
Extensions: None
Label: STEP
Name: Step input
Goal: To calculate the next step in the logic gates
Actors: User
Initiator: User
Description: User clicks the step button, which runs the specified input through one level of logic gates. Each subsequent click on step moves the input through the next level of gates, until none are left. The evaluation restarts at the input every time something is changed.
Pre-Conditions: None
Post-Conditions: Execution is suspended in mid circuit
Extensions: None
Label: COPY COMPLEX
Name: Copy and place a complex object
Goal: To easily create a duplicate of a complex object from the workspace
Actors: User
Initiator: User
Description: User selects the complex object tool by clicking on it, and then selects a group of objects in the workspace by clicking and dragging a rectangle around them. Then, the user clicks on open space in the workspace to place a new copy of the selected objects (with connections) at that spot.
Pre-conditions: None
Post-conditions: None
Extensions: None
Label: SAVE
Name: Save workspace to a file
Goal: To create a file that specifies the state of the workspace for future use
Actors: User
Initiator: User
Description: User clicks on the save button, and then specifies a file path in a pop-up dialog box, where the file should be saved. If the file already exists, the user is asked to overwrite or specify a different file path.
Pre-conditions: None
Post-conditions: Object file created
Extensions: None
Label: OPEN
Name: Open a file
Goal: To open a file of a saved work space state, and restore that state to the work space
Actors: User
Initiator: User
Description: User clicks on the load button, and then specifies a file path in a pop-up dialog box, where the file should be loaded from. This state is then restored to the work space.
Pre-conditions: None
Post-conditions: Work space now reflects saved state.
Extensions: None
Extra Features
Label: SAVE COMPLEX
Name: Save a complex object to a file
Goal: To create an external file that contains a complex object definition
Actors: User
Initiator: User
Description: User clicks on the workspace and drags to select a number of logic gates and their connections, and then selects Save Object from the menu. The path where the file should be saved is specified in the resulting dialog box.
Pre-conditions: None
Post-conditions: Object file created
Extensions: None
Label: PLACE COMPLEX
Name: Read in a complex object file for placement
Goal: To read in an external object file and place it in the workspace
Actors: User
Initiator: User
Description: User selects Place Object from the menu, and specifies the path to a complex object file. The object is then read from the file and when the User clicks on the workspace, a copy of that complex object is placed there. The user may click multiple times to place multiple copies of the complex object.
Pre-conditions: Object file exists
Post-conditions: None
Extensions: None
Label: PRINT
Name: Print the workspace
Goal: To get a paper copy of the logic circuit diagram
Actors: User
Initiator: User
Description: User selects Print from the print menu, and then specifies a standard set of printing options.
Pre-conditions: None
Post-conditions: None
Extensions: None
Label: SCROLL
Name: Scroll the workspace
Goal: To view a different section of the workspace
Actors: User
Initiator: User
Description: User clicks on a scroll bar, causing the window pane to move the view of the workspace in a particular direction, displaying another section of the workspace.
Pre-conditions: None
Post-conditions: None
Extensions: None