The REL framework includes a domain specific language to handle requirements in large software projects. It is used to create a requirements model, which consists of the specification and the actual requirements data.
The Requirements Specification (file extension rs) contains definitions of types and enumerations, which structure the requirements. For every project, it is necessary to define the requirements specification and adapt it to the project's needs.
The Requirements Data (file extension rd) contains the actual data. It consists of instances of the types defined in the specification, which carry the corresponding data.
Requirements Specification spec.rs
:
type Requirement
{
Unique_Id : id,
Text : string,
/* Defines the state of the requirement,
whether it is already accepted by
the product owner. */
State : RequirementState,
}
type Information
{
Unique_Id : id,
Text : string,
}
enum RequirementState
{
Draft,
In_Discussion,
Accepted,
Rejected,
}
Typically in the specification, a type Requirement is defined, which has a set of attributes, like the requirement text and a unique identifier. Additionally, enumerations can be used for further attributes and their discrete values.
Requirements Data req_data.rd
:
Requirement
{
Unique_Id : dsl1,
Text : "The REL language shall support comments in both
specification and data files.",
State : Accepted,
}
Within the data part, the type Requirement is instantiated multiple times, each instance containing the text of the requirement, its unique identifier and the current state of the requirement.
The following libraries and tools are part of the REL framework:
rel_lib - library containing the implementation of REL: Parser and model validation is located there. The library can be embedded into different tool environments.
rel_cli - command line interface for REL, to parse a requirements model and check its validity.
rel_ls - language server implementation for REL, which can be used in IDEs supporting the Language Server Protocol (LSP), to get syntax highlighting, online validation and more for REL within the IDE.
vscode-ext - Extension for Vidual Studio Code, using the language server implementation to support REL in this IDE.
rel_py - python3 integration of REL, so that developers can use python language to write project-specific data exporters and validators for their requirements model.
The REL project uses Bazel as build environment.
Branch main
is protected and pushes directly to the branch will be rejected. Create a feature branch and pull request, to get changes into main
.
Every PR that is supposed to go into main
is validated in CI via Github Action. The action builds all libraries and binaries of the framework, runs all test cases and validates REL's requirements with rel_cli
The following tools are required to build and run REL:
To process REL framework requirements, execute the following steps:
bazel build //rel-cli:rel_cli
bazel-bin/rel-cli/rel_cli -r -v ./requirements/
Additionally, the following projects give an impression of the language on a larger scale:
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4