Skip to content

Instantly share code, notes, and snippets.

@insooth
Last active May 19, 2020 11:28
Show Gist options
  • Save insooth/670fedb631930eb74e5a1a5d0dfd2246 to your computer and use it in GitHub Desktop.
Save insooth/670fedb631930eb74e5a1a5d0dfd2246 to your computer and use it in GitHub Desktop.
Extending Doxygen tool for requirements traceability

Since the above mentioned idea came from me, I will elaborate a little bit on the approach.

The goal is to generate, through the Doxygen tool source code extension, an index page, and accompanied set of pages of documentation. An index page shall contain a list of all the requirement strings (i.e. identifiers) where each one such string shall be referenced in the parsed source code through the designed @req{<req-string-id>} command. That means there shall be no "global" database of available requirement string identifiers planned to be read by the Doxygen tool directly.

Each position on the list of requirement string identifiers shall be an URL with title req-string-id and href pointing to a generated subpage. A subpage shall contain req-string-id, calculated req-string-id-header, req-string-id-body, req-string-id-url information strings, and list of URLs to locations (lines or blocks) within a source code where the actual @req{<req-string-id>} happened. Locations should include code snippets (lines or block) of the actual source code (NOTE: this depends on user-defined configuration of Doxygen tool).

Since the designed extension to Doxygen tool shall not use an external database with the requirements' specification directly in order to determine calculated information, a Doxyfile configuration item with key REQ_PROVIDER and a value which is a string to an executable (e.g. a script). Doxygen tool shall run the REQ_PROVIDER value against req-string-id to get JSON of the following format and contents that shall be used to fill in the calculated data:

{
  "id":"<req-string-id>"
, "url":"<req-string-id-url>"
, "header":"<req-string-id-header>"
, "body":"<req-string-id-body>"
}

Additionally, Doxyfile shall offer a REQ_PREFIX configuration item which value is a colon-separated string of label-prefix pairs, so that optional notation @req{<label>:<req-string-id>} is interpreted by Doxygen tool as @req{<prefix><req-string-id>} for given

REQ_PREFIX=<label-0>:<prefix-0> \
           <label-1>:<prefix-1> \
           ...                  \
           <label-n>:<prefix-n>

Example: REQ_PREFIX=SYS:REQ_SYS_FOOBAR_ with @req{SYS:100} produces @req{REQ_SYS_FOOBAR_100}.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment