Skip to main content

Script to generate the lobster common interchange format from a doxygen XML output.

Project description

lobster-doxygen

License Repo Status CI

Overview

lobster-doxygen is a python commandline tool to extract requirement annotations from doxygen comments using doxygen's XML output format. It produces the LOBSTER common interchange format as output. A major advantage of lobster-doxygen is that the XML input files can come from every doxygen supported programming language, including C, C++, Python, Java, Objective-C, PHP, Fortran, and more. This allows a straightforward and standardized integration into the LOBSTER TRLC toolchain. Note, at the moment C and C++ are in focus!

Using doxygen aliases inside source code comments makes tracing from code quite simple. The following aliases are supported:

  • @implements{<REQ-ID>} to link to requirments for tracing.

  • @justification{<JUSTIFY-PLEASE>} to justify why no tracing is required, but the code fragment is needed.

[!NOTE]
lobster-doxygen is not a standalone solution, but a component extending the BMW LOBSTER tooling. Understanding of the LOBSTER tool purpose and usage is required to benefit from lobster-doxygen.

The following diagram shows how lobster-doxygen fits into the LOBSTER toolchain. It provides a data flow path from source code to the LOBSTER common interchange format.

lobster-doxygen in LOBSTER toolchain

Safety Manual

For information about using the lobster-doxygen tool in a safety-related project, see the safety manual.

Installation

  • git clone https://github.com/NewTec-GmbH/lobster-doxygen.git to clone repository.
  • cd lobster-doxygen to go to root directory.
  • It is recommended to use a virtual environment:
    • In VS-Code: Ctrl+Shift+P type Python: Create Environment: select Venv.
      • When asked, select the Python version you want to work with, based on the versions installed in your machine.
      • When asked, select dev to be installed. This will set-up the development environment, including all the tools used in this template.
      • In the background, VS Code will install all the dependencies. This may take some time.
      • To activate the virtual environment, close all terminal panels inside of VS-Code. You can double check if the virtual environment is active, e.g. by pip -V the displayed path should point to your virtual environment.
    • In PowerShell:
      • python -m venv .venv to create the virtual environment.
      • .venv\Scripts\Activate.ps1 to activate it.
      • pip install -e . to install required packages.
      • pip install -e .[dev] to install additional packages for development.
    • Under Linux / MacOS:
      • python -m venv .venv to create the virtual environment.
      • source .venv/bin/activate to activate it.
      • pip install -e . to install required packages.
      • pip install -e .[dev] to install additional packages for development. For more details about handling Venv, see Python venv: How To Create, Activate, Deactivate, And Delete

Usage

Tool

lobster-doxygen is a command line application that is configured via command line arguments.

usage: lobster-doxygen [-h] [--version] [-o OUTPUT] [-v] doxygen_xml_folder

Convert doxygen XML output to lobster common interchange format.

- The source code header requires a doxygen header with at least the @file tag.
  - Rational: The doxygen XML output will consider the aliases on file level only if the file has the @file tag.
- Tracing supports the following levels:
  - Class/Struct/Union/Namespace
  - Method
  - Function
- Tracing on file level is possible, but not recommended and therefore the tool will abort with an error.

To specify a requirement use @implements{REQ}.
To specify a justification use @justification{JUSTIFICATION}.

positional arguments:
  doxygen_xml_folder        Path to the doxygen XML output folder.

options:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  -o OUTPUT, --output OUTPUT
                        Output file name. Default: lobster.json
  -v, --verbose         Enable verbose output.

Sourcecode

The following example shows how requirement annotations in source code will look like, using doxygen annotation.

/**
 * @brief This is my class.
 *
 * @implements{SwRequirement.myClass}
 */
class MyClass;

/**
 * @brief This is my function.
 *
 * @implements{SwRequirement.myFunc}
 */
extern myFunc();

/**
 * @brief This is my class to show a justification.
 *
 * @justification{This is my justification ...}
 */
class JustifyMeClass;

Please be aware of how to document in general using doxygen, see the attention hint in the doxygen documentation. Otherwise traces may be missed or undocumented code will be hidden.

Doxygen Configuration

In order to feed lobster-doxygen with the correct data, Doxygen needs to be configured. The following ALIASES definitions inside the Doxyfile are needed to support the requirement annotations:

ALIASES                = "implements{1}=@xrefitem implements \"Implements\" \"Requirement Traceability\" Requirement: \1" \
                         "justification{1}=@xrefitem justified \"Justified\" \"Justification Overview\" Justification: \1"

Change the extract settings as follows to instruct Doxygen to use all entities in documentation:

EXTRACT_ALL            = YES
EXTRACT_PRIVATE        = YES
EXTRACT_PRIV_VIRTUAL   = YES
EXTRACT_PACKAGE        = YES
EXTRACT_STATIC         = YES
EXTRACT_LOCAL_CLASSES  = YES
EXTRACT_LOCAL_METHODS  = YES
EXTRACT_ANON_NSPACES   = YES

Finally enable the XML output generation:

GENERATE_XML           = YES

Once doxygen has run successfully, the xml directory can be used as the doxygen_xml_folder when calling lobster-doxygen. An example Doxyfile can be found in the examples directory.

Examples

Check out the Examples subpage for using the included example(s).

SW Documentation

More information on the deployment and architecture can be found in the documentation subpage.

For Detailed Software Design run in folder ./tools the make_html to generate the detailed design documentation. The generated SW Document is stored in ./tools/deployDoc/build/html/index.html.

Used Libraries

Used 3rd party libraries which are not part of the standard Python package:

Library Description License
toml Parsing TOML MIT
trlc Treat Requirements Like Code GPL-3.0
doxmlparser Parsing Doxygen XML GPLv2
rich Console output MIT

Issues, Ideas And Bugs

If you have further ideas or you found some bugs, great! Create an issue or if you are able and willing to fix it by yourself, clone the repository and create a pull request.

License

The whole source code is published under GNU General Public License Version 3. Consider the different licenses of the used third party libraries too!

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, shall be licensed as above, without any additional terms or conditions.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lobster_doxygen-1.1.0.tar.gz (22.3 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lobster_doxygen-1.1.0-py3-none-any.whl (36.4 kB view details)

Uploaded Python 3

File details

Details for the file lobster_doxygen-1.1.0.tar.gz.

File metadata

  • Download URL: lobster_doxygen-1.1.0.tar.gz
  • Upload date:
  • Size: 22.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.1

File hashes

Hashes for lobster_doxygen-1.1.0.tar.gz
Algorithm Hash digest
SHA256 fd32131c4a07e147a06ac6fd6b1b3efb404089af80047b8a10789e7d5dfea070
MD5 f6a6f6295cc9b3fa2adf57e0ec7efbf9
BLAKE2b-256 f8eb50644b3d611ce8a2ad0f03a9f8b69b35382849c2544a8e879eb49f8e785d

See more details on using hashes here.

File details

Details for the file lobster_doxygen-1.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for lobster_doxygen-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b92efad6f27cbbff81114326d9c7f40b6a585bbc81040ab9acaba41f57850ab3
MD5 9a286f5468b6caf807269d40afdca666
BLAKE2b-256 30f4317e31c5ba158151cf579712ef7e53e94d3fa2d7e56b496148a64400a618

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page