Requirements

Requirements capture what the JabRef should do. Regard it as structured representation of implemented issues.

JabRef uses OpenFastTrace to identify each requirement and to link implementation, tests, and more to it. This enables forward and backward tracing. For instance, questions like: “How is the requirement implemented?” (forward trace) or “Which requirement lead to this implementation?” (backward trace).

Specifying requirements

One writes directly below a Markdown heading a requirement identifier.

Example:

### Example
` req~ai.example~1`

It is important that there is no empty line directly after the heading.

One needs to add <!-- markdownlint-disable-file MD022 --> to the end of the file, because the ID of the requirement needs to follow the heading directly.

The space has to be absent in real use. Above, the space is put to have traceRequirements not treating this example as real requirement.

After putting a heading and an identifier, one writes down at the requirement. Directly at the end, one writes that it requires an implementation:

Needs: impl

One can also state that there should be detailed design document (dsn). However, typically in JabRef, we go from the requirement directly to the implementation.

Linking implementations

After writing the requirement, at the implementation, a comment is added that this implementation is covered:

// [impl->req~ai.example~1]

Automated checks

When executing the gradle task traceRequirements, build/tracing.txt is generated. It captures the links between the artifacts (requirement, implementation, …)

In case of a tracing error, one can inspect build/tracing.txt to see which requirements were not covered.

More Information


Table of contents