StrictDoc Requirements Specification (L2)

SDoc data model

Data model

UID:

SDOC-SRS-18

StrictDoc shall be based on a data model.

COMMENT:

Verification: data model diagram TBD.

Parents:

Requirement model

UID:

SDOC-SRS-26

StrictDoc’s data model shall support a “Requirement” model.

Parents:

Requirement model fields

UID:

SDOC-SRS-100

StrictDoc’s “Requirement” model shall support configurable fields system.

Parents:

Requirement model default fields

UID:

SDOC-SRS-132

By default, the Requirement shall support the following fields:

  • MID

  • UID

  • STATUS

  • TITLE

  • STATEMENT

  • RATIONALE

  • COMMENT.

RATIONALE:

These fields are the most typical fields found in requirement documents.

Parents:

Document model

UID:

SDOC-SRS-98

StrictDoc’s data model shall support a “Document” model.

Parents:

Document metadata

UID:

SDOC-SRS-110

StrictDoc’s data model shall support a Document metadata model including at least:

  • UID

  • Document version

  • Document classification

  • Document authors.

Parents:

Section model

UID:

SDOC-SRS-99

StrictDoc’s data model shall support a “Section” that nests other Sections, Requirements, Texts.

RATIONALE:

“Section” corresponds to a chapter or a section in a document and helps to organize a document by grouping text nodes, requirements and other sections.

Parents:

Free text

UID:

SDOC-SRS-135

STATUS:

Active

StrictDoc’s data model shall support a “Free Text” model, representing non-normative documentation content.

RATIONALE:

Documentation comprises normative components, such as uniquely identifiable elements like requirements or design items, and non-normative components, including introductory text, overview chapters, and other content. The non-normative parts help provide a general understanding for the reader but do not contribute to traceability information. StrictDoc’s free text is designed to store this type of non-normative information in SDoc documents.

Parents:

Composeable document

UID:

SDOC-SRS-109

STATUS:

Active

StrictDoc’s data model shall allow composing a Document from other Documents.

RATIONALE:

The logic behind the parent requirement remains fully relevant. Additionally, an alternative approach could involve using a dedicated entity, like “Fragment”, to allow a Document to be composed of includable sections or document fragments. Managing composition at the Document level eliminates the need in additional entities like “Fragment”, streamlining both the conceptual understanding and the practical implementation of composability.

COMMENT:

The corresponding UI capability for Fragments CRUD is TBD.

Parents:

Requirement relations

UID:

SDOC-SRS-31

STATUS:

Active

The StrictDoc data model shall support connecting requirements using Parent and Child relations.

RATIONALE:

Support of both Parent and Child relations allows to build typical requirements relations such as child-to-parent and less common relations when one document can have parent links to a parent document and child links to a child document (e.g., the so-called “compliance” or “tailoring matrix” documents may use this structure).

Parents:

Requirement relation roles

UID:

SDOC-SRS-101

Each SDoc relation shall be optionally configurable with a relation role.

NOTE: A relation role is a string value. Typical examples: “refines”, “verifies”, “implements”.

Parents:

SDoc text markup

SDoc markup language

UID:

SDOC-SRS-20

STATUS:

Active

StrictDoc shall implement its own text markup language called S-Doc (strict-doc).

RATIONALE:

The most commonly used Markdown format lacks the ability to store requirements metadata. While the RST syntax does allow for customization with directives to implement metadata extensions, its visual appearance contradicts other requirements of StrictDoc, such as the type-safety of the grammar and visual readability. Therefore, a markup language tailored specifically to the needs of the requirements tool provides direct control over the capabilities implemented in both the markup and the user interface.

Parents:

SDoc and Git storage

UID:

SDOC-SRS-127

STATUS:

Active

StrictDoc shall assume and implement capabilities for storage of SDoc files using Git version control system.

Parents:

SDoc file extension

UID:

SDOC-SRS-104

STATUS:

Active

The SDoc markup content shall be stored in files with .sdoc extension.

RATIONALE:

Given that the name of the model is S-Doc (strict-doc), it is reasonable to make the document files have the .sdoc extension. This helps to identify the document files.

Parents:

One document per one SDoc file

UID:

SDOC-SRS-105

StrictDoc’s SDoc file shall represent content of a single document.

COMMENT:

A “Document” corresponds to a “Document” of the SDoc data model.

Parents:

Fixed grammar

UID:

SDOC-SRS-19

STATUS:

Active

StrictDoc’s markup language shall be based on a well-defined grammar.

Parents:

Default grammar fields

UID:

SDOC-SRS-93

STATUS:

Active

The StrictDoc grammar shall have at least the following fields activated by default:

  • UID

  • STATUS

  • LINKS (references to other requirements)

  • TITLE

  • STATEMENT

  • RATIONALE

  • COMMENT.

Parents:

Custom grammar / fields

UID:

SDOC-SRS-21

STATUS:

Active

The SDoc markup shall support custom grammars.

RATIONALE:

A custom grammar allows a user to define their own configuration of requirement fields.

Parents:

Importable grammars

UID:

SDOC-SRS-122

STATUS:

Active

StrictDoc shall support an inclusion of a grammar stored in a separate file.

RATIONALE:

A single grammar defined for several documents helps to standardize the structure of all documents in a documentation tree and removes the effort needed to create identical grammars all the time.

Parents:

UID identifier format

UID:

SDOC-SRS-22

The SDoc markup shall only accept UID identifiers that consist of alphanumeric characters separated by “_” and “-” characters.

RATIONALE:

A standardized UID format supports the parent requirement of unique identification of requirements. It is easier to visually identify UIDs that look similar and common to a given industry.

COMMENT:

This requirement may need a revision to accommodate for more UID formats.

Parents:

Support RST markup

UID:

SDOC-SRS-24

STATUS:

Active

StrictDoc shall support the RST markup.

Parents:

MathJAX

UID:

SDOC-SRS-27

STATUS:

Active

StrictDoc’s markup shall enable support integration with MathJax.

Parents:

No indentation

UID:

SDOC-SRS-23

STATUS:

Active

SDoc text markup blocks shall all start from column 1, i.e., the nesting of the blocks is not allowed.

RATIONALE:

Nesting large text blocks of free text and requirements compromises readability.

Parents:

Type-safe fields

UID:

SDOC-SRS-25

SDoc markup shall provide “type safety” for all fields.

NOTE: “Type safety” means that each field has a type and a corresponding set of validation checks.

Parents:

Graph database

Traceability index

UID:

SDOC-SRS-28

StrictDoc shall maintain a complete Traceability Index of all documentation- and requirements-related information available in a project tree.

Parents:

Uniqueness UID in tree

UID:

SDOC-SRS-29

For each requirement node, the Traceability Index shall ensure its uniqueness throughout the node’s lifecycle.

Parents:

Automatic resolution of reverse relations

UID:

SDOC-SRS-102

The StrictDoc’s graph database shall maintain the requirement relations and their reverse relations as follows:

  • For a Parent relation, the database shall calculate the reverse Child relation.

  • For a Child relation, the database shall calculate the reverse Parent relation.

RATIONALE:

The calculation of the reverse relations allows the user interface code to get and display both requirement’s parent and child relations.

COMMENT:

Example: If a child requirement REQ-002 has a parent requirement REQ-001, the graph database first reads the link REQ-002 -Parent> REQ-001, then it creates a corresponding REQ-001 -Child> REQ-002 on the go. Both relations can be queried as follows, in pseudocode:

get_parent_requirements(REQ-002) == [REQ-001]
get_children_requirements(REQ-001) == [REQ-002]

Parents:

Documentation tree

Finding documents recursively

UID:

SDOC-SRS-115

STATUS:

Active

StrictDoc shall discover SDoc documents recursively based on a specified input path.

RATIONALE:

Recursive search allows working with documents located in multiple folders, potentially spanning over several Git repositories.

Parents:

Web/HTML frontend

General export requirements

Export to static HTML website

UID:

SDOC-SRS-49

STATUS:

Active

StrictDoc shall support generating requirements documentation into static HTML.

Parents:

Web interface

UID:

SDOC-SRS-50

STATUS:

Active

StrictDoc shall provide a web interface.

Parents:

Export to printable HTML pages (HTML2PDF)

UID:

SDOC-SRS-51

STATUS:

Active

StrictDoc shall provide export to printable HTML pages.

Parents:

Preserve generated file names

UID:

SDOC-SRS-48

STATUS:

Active

For all export operations, StrictDoc shall maintain the original filenames of the documents when producing output files.

RATIONALE:

Name preservation helps to visually identify which input file an output file corresponds to.

Parents:

Screen: Project tree

View project tree

UID:

SDOC-SRS-53

StrictDoc’s “Project tree” screen shall provide browsing of a documentation project tree.

Parents:

Create document

UID:

SDOC-SRS-107

STATUS:

Active

StrictDoc’s Project Tree screen shall allow creating documents.

Parents:

Delete document

UID:

SDOC-SRS-108

STATUS:

Active

StrictDoc’s Project Tree screen shall allow deleting documents.

Parents:

Screen: Document (DOC)

Read document

UID:

SDOC-SRS-54

STATUS:

Active

StrictDoc’s Document screen shall allow reading documents.

Parents:

Update document

UID:

SDOC-SRS-106

STATUS:

Active

StrictDoc’s Document screen shall allow updating documents.

Parents:

Edit requirement nodes

UID:

SDOC-SRS-55

STATUS:

Active

StrictDoc’s Document screen shall allow editing requirements.

Parents:

Move requirement / section nodes within document

UID:

SDOC-SRS-92

STATUS:

Active

StrictDoc’s Document screen shall provide a capability to move the nodes within a document.

RATIONALE:

Moving the nodes within a document is a convenience feature that speeds up the requirements editing process significantly.

Parents:

Edit Document grammar

UID:

SDOC-SRS-56

STATUS:

Active

StrictDoc’s screen shall allow editing a document’s grammar.

RATIONALE:

Editing document grammar allows a user to customize the requirements fields.

Parents:

Edit Document options

UID:

SDOC-SRS-57

STATUS:

Active

StrictDoc’s Document screen shall provide controls for configuring the document-specific options.

Parents:

Auto-generate requirements UIDs

UID:

SDOC-SRS-96

STATUS:

Progress

StrictDoc’s Document screen shall provide controls for automatic generation of requirements UIDs.

Parents:

Buttons to copy text to buffer

UID:

SDOC-SRS-59

STATUS:

Active

StrictDoc shall provide a “copy text to buffer” button for all requirement’s text fields.

Parents:

Screen: Table (TBL)

View TBL screen

UID:

SDOC-SRS-62

STATUS:

Active

StrictDoc’s Table screen shall allow reading documents in a table-like manner.

Parents:

Screen: Traceability (TR)

View TR screen

UID:

SDOC-SRS-65

StrictDoc shall provide a single document-level traceability screen.

NOTE: This screen helps to read a document like a normal document while the traceability to this document’s parent and child elements is visible at the same time.

Parents:

Screen: Deep traceability (DTR)

View DTR screen

UID:

SDOC-SRS-66

STATUS:

Active

StrictDoc shall provide a deep traceability screen.

Parents:

Screen: Project statistics

Display project statistics

UID:

SDOC-SRS-97

STATUS:

Active

StrictDoc shall provide a Project Statistics screen that displays the following project information:

  • Project title

  • Date of generation

  • Git revision

  • Total documents

  • Total requirements

  • Requirements status breakdown

  • Total number of TBD/TBC found in documents.

RATIONALE:

TBD

Parents:

Screen: Traceability matrix

Traceability matrix

UID:

SDOC-SRS-112

STATUS:

Active

StrictDoc shall provide a traceability matrix screen.

Parents:

Screen: Project tree diff

Project tree diff

UID:

SDOC-SRS-111

STATUS:

Active

StrictDoc shall provide a project tree diff screen.

Parents:

Requirements-to-source traceability

Annotate source file

UID:

SDOC-SRS-34

STATUS:

Active

StrictDoc shall support a dedicated markup language for annotating source code with links referencing the requirements.

Parents:

Single-line code marker

UID:

SDOC-SRS-124

STATUS:

Active

StrictDoc’s source file marker syntax shall support single-line markers.

NOTE: A single-line marker points to a single line in a source file.

RATIONALE:

The advantage of a single-line marker compared to a range marker is that a single-line marker is not intrusive and does not clutter source code. Such a single-marker can be kept in a comment to a function (e.g., Doxygen), not in the function body.

Parents:

Generate source coverage

UID:

SDOC-SRS-35

STATUS:

Active

StrictDoc shall generate project source code coverage information.

NOTE: Source code information can be visualized using both web or CLI interfaces.

Parents:

Generate source file traceability

UID:

SDOC-SRS-36

STATUS:

Active

StrictDoc shall generate single file traceability information.

RATIONALE:

With this capability in place, it is possible to focus on a single implementation file’s links to requirements which helps in the code reviews and inspections.

Parents:

Export/import formats

RST

Export to RST

UID:

SDOC-SRS-70

StrictDoc shall allow exporting SDoc content to the RST format.

RATIONALE:

Exporting SDoc content to RST enables:

  1. Generating RST to Sphinx HTML documentation.

  2. Generating RST to PDF using Sphinx/LaTeX.

Parents:

Docutils

UID:

SDOC-SRS-71

STATUS:

Active

StrictDoc shall generate RST markup to HTML using Docutils.

RATIONALE:

Docutils is the most mature RST-to-HTML converter.

COMMENT:

TBD: Move this to design decisions.

Parents:

ReqIF

Export/import from/to ReqIF

UID:

SDOC-SRS-72

STATUS:

Progress

StrictDoc shall support exporting/importing requirements content from/to ReqIF format.

Parents:

Standalone ReqIF layer

UID:

SDOC-SRS-73

STATUS:

Active

StrictDoc shall maintain the core ReqIF implementation as a separate software component.

RATIONALE:

ReqIF is a well-defined standard which exists independently of StrictDoc’s development. It is reasonable to maintain the ReqIF codebase as a separate software component to allow independent development and easier maintainability.

Parents:

Excel and CSV

Export to Excel

UID:

SDOC-SRS-74

StrictDoc shall allow exporting SDoc documents to Excel, one Excel file per document.

Parents:

Selected fields export

UID:

SDOC-SRS-134

STATUS:

Active

StrictDoc Excel export shall allow exporting SDoc documents to Excel with only selected fields.

Parents:

Graphviz/Dot export

Export to Graphviz/Dot

UID:

SDOC-SRS-90

STATUS:

Active

StrictDoc shall support exporting requirements information to PDF format using Graphviz.

RATIONALE:

Graphviz is one of the most capable tools for visualizing graph information, which makes it a perfect tool for visualizing requirements graphs create in StrictDoc.

Parents:

Command-line interface

General CLI requirements

Command-line interface

UID:

SDOC-SRS-103

StrictDoc shall provide a command-line interface.

Parents:

Command: Manage

Command: Auto UID

Auto-generate requirements UIDs

UID:

SDOC-SRS-85

STATUS:

Active

StrictDoc shall allow automatic generation of requirements UIDs.

Parents:

Python API

StrictDoc Python API

UID:

SDOC-SRS-125

STATUS:

Active

StrictDoc shall provide a Python API for its core functions:

  • Reading SDoc files

  • Creating traceability graph

  • Generating HTML exports

  • Converting SDoc to other formats.

Parents:

Web server

Web server

UID:

SDOC-SRS-126

STATUS:

Active

StrictDoc shall provide a web server.

RATIONALE:

A web server is a precondition for StrictDoc’s web interface. A web server can be available to a single user on their local machine or it can be deployed to a network and be made accessible by several computers.

Parents:

User experience

Strict mode by default

Warnings are errors

UID:

SDOC-SRS-6

STATUS:

Active

StrictDoc’s default mode of operation shall treat all warnings as errors.

Parents:

Configurability

strictdoc.toml file

UID:

SDOC-SRS-37

StrictDoc shall support a configuration of project-level options through a TOML file named strictdoc.toml.

Parents:

Feature toggles

UID:

SDOC-SRS-39

StrictDoc shall allow a user to select a subset of StrictDoc’s available features by listing them in the strictdoc.toml file.

Parents:

‘Host’ parameter

UID:

SDOC-SRS-119

StrictDoc shall support configuring a host/port on which the StrictDoc web server is run.

Parents:

Performance

Process-based parallelization

UID:

SDOC-SRS-1

STATUS:

Active

StrictDoc shall support process-based parallelization for time-critical tasks.

RATIONALE:

Process-based parallelization can provide a good speed-up when several large documents have to be generated.

Parents:

Caching of parsed SDoc documents

UID:

SDOC-SRS-95

STATUS:

Active

StrictDoc shall implement caching of parsed SDoc documents.

Parents:

Incremental generation of documents

UID:

SDOC-SRS-2

StrictDoc shall support incremental generation of documents.

NOTE: “Incremental” means that only the modified documents are regenerated when StrictDoc is run repeatedly against the same project tree.

Parents:

Caching of RST fragments

UID:

SDOC-SRS-3

StrictDoc shall cache the RST fragments rendered to HTML.

RATIONALE:

Conversion of RST markup to HTML is a time consuming process. Caching the rendered HTML of each fragment helps to save time when rendering the HTML content.

Parents:

On-demand loading of HTML pages

UID:

SDOC-SRS-4

StrictDoc’s web interface shall generate the HTML content only when it is directly requested by a user.

RATIONALE:

Generating a whole documentation tree for a user project can be time consuming. The on-demand loading ensures the “do less work” approach when it comes to rendering the HTML pages.

Parents:

Precompiled Jinja templates

UID:

SDOC-SRS-5

StrictDoc shall support a precompilation of HTML templates.

RATIONALE:

The StrictDoc-exported HTML content visible to a user is assembled from numerous small HTML fragments. Precompiling the HTML templates from which the content gets rendered improves the performance of the HTML rendering.

Parents:

Development process requirements

General process

Priority handling of critical issues in StrictDoc

UID:

SDOC-SRS-133

All critical issues reported in relation to StrictDoc shall be addressed with utmost priority.

RATIONALE:

Prioritizing major issues ensures StrictDoc remains stable and reliable, preventing serious problems that could compromise its performance and integrity.

Parents:

Requirements engineering

Requirements-based development

UID:

SDOC-SRS-128

STATUS:

Active

StrictDoc’s development shall be requirements-based.

Parents:

Self-hosted requirements

UID:

SDOC-SRS-91

STATUS:

Active

StrictDoc’s requirements shall be written using StrictDoc.

Parents:

Implementation requirements

Programming languages

Python language

UID:

SDOC-SRS-8

STATUS:

Active

StrictDoc shall be written in Python.

RATIONALE:

Python has an excellent package ecosystem. It is a widely used language. It is most often the next language for C/C++ programming community when it comes to the tools development and scripting tasks.

Parents:

Cross-platform availability

Linux

UID:

SDOC-SRS-9

STATUS:

Active

StrictDoc shall support the Linux operating systems.

Parents:

macOS

UID:

SDOC-SRS-10

STATUS:

Active

StrictDoc shall support the macOS operating system.

Parents:

Windows

UID:

SDOC-SRS-11

STATUS:

Active

StrictDoc shall support the Windows operating system.

Parents:

Implementation constraints

Use of open source components

UID:

SDOC-SRS-89

STATUS:

Active

StrictDoc shall be built using only open source software components.

RATIONALE:

No commercial/proprietary dependency chain ensures that StrictDoc remain free and open for everyone.

Parents:

No heavy UI frameworks

UID:

SDOC-SRS-14

STATUS:

Active

StrictDoc shall avoid using large and demanding UI frameworks.

NOTE: An example of frameworks that require a very specific architecture: React JS, AngularJS.

Parents:

No use of NPM

UID:

SDOC-SRS-15

STATUS:

Active

StrictDoc shall avoid extending its infrastructure with anything based on NPM-ecosystem.

RATIONALE:

StrictDoc already deals with the Python/Pip/Pypi ecosystem. The amount of necessary maintenance is already quite high. NPM is known for splitting its projects into very small parts, which increases the complexity of maintaining all dependencies.

Parents:

No use of JavaScript replacement languages (e.g., Typescript)

UID:

SDOC-SRS-16

STATUS:

Active

StrictDoc shall avoid using JavaScript-based programming languages.

RATIONALE:

The development team does not have specific experience with any of the JS alternatives. Staying with a general subset of JavaScript is a safer choice.

Parents:

Monolithic application with no microservices

UID:

SDOC-SRS-87

STATUS:

Active

StrictDoc shall avoid using microservices and microservice-based architectures.

RATIONALE:

The project is too small to scale to a multi-service architecture.

COMMENT:

This requirement could be re-considered only if a significant technical pressure would require the use of microservices.

Parents:

No reliance on containerization

UID:

SDOC-SRS-88

STATUS:

Active

StrictDoc shall avoid using containers and containerization technologies.

RATIONALE:

Containers are significant extra layer of complexity. They are hard to debug.

COMMENT:

This constraint does not block a StrictDoc user from wrapping StrictDoc into their containers.

Parents:

Coding constraints

Use of asserts

UID:

SDOC-SRS-40

StrictDoc’s development shall ensure a use of assertions throughout the project codebase.

NOTE: At a minimum, the function input parameters must be checked for validity.

Parents:

Use of type annotations in Python code

UID:

SDOC-SRS-41

StrictDoc’s development shall ensure a use of type annotations throughout the project’s Python codebase.

Parents:

Linting

Compliance with Python community practices (PEP8 etc)

UID:

SDOC-SRS-42

StrictDoc’s development shall ensure that the project’s codebase is compliant with the modern Python community’s practices.

Parents:

Static analysis

Static type checking

UID:

SDOC-SRS-43

STATUS:

Active

StrictDoc’s development shall include a continuous type checking of StrictDoc’s codebase.

Parents:

Testing

Unit testing

UID:

SDOC-SRS-44

STATUS:

Active

StrictDoc’s development shall provide unit testing of its codebase.

Parents:

CLI interface black-box integration testing

UID:

SDOC-SRS-45

StrictDoc’s development shall provide complete black-box integration testing of its command-line interface.

Parents:

Web end-to-end testing

UID:

SDOC-SRS-46

STATUS:

Active

StrictDoc’s development shall provide complete end-to-end testing of the web interface.

Parents:

At least one integration or end-to-end test

UID:

SDOC-SRS-47

STATUS:

Active

Every update to the StrictDoc codebase shall be complemented with a corresponding provision of at least one test as follows:

  • For web interface: at least one end-to-end test.

  • For command-line interface: at least one black-box integration test.

  • For internal Python functions: at least one unit test.

NOTE: This requirement implies that no modifications to StrictDoc’s functionality can be merged unless accompanied by at least one test.

RATIONALE:

This requirement ensures that every new feature or a chance in the codebase is covered/stressed by at least one test, according to the change type.

Parents:

Code hosting and distribution

Code hosting

GitHub

UID:

SDOC-SRS-12

STATUS:

Active

StrictDoc’s source code shall be hosted on GitHub.

Parents:

StrictDoc license

UID:

SDOC-SRS-118

STATUS:

Active

All StrictDoc software shall be licensed under the Apache 2 license.

Parents:

  • [SDOC-SSS-40] Free