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}
.