|
| 1 | +# Exploring possibilities for integrating StrictDoc with ELISA’s requirements template approach for the Linux kernel |
| 2 | + |
| 3 | +This demonstrates how to realize the tool-agnostic |
| 4 | +[ELISA Kernel Requirements Template](https://docs.google.com/document/d/1c7S7YAledHP2EEQ2nh26Ibegij-XPNuUFkrFLtJPlzs/edit?tab=t.0) |
| 5 | +proposal by using [StrictDoc](https://strictdoc.readthedocs.io) as requirements processing tool. The repository contains a filtered (for brevity) |
| 6 | +copy of the Linux kernel with requirements and tests from Alessandro Carminat and Gabriele Paoloni ([^1], [^2]) applied on top. ELISA's |
| 7 | +[`SPDX-*` tagging scheme]((https://docs.google.com/document/d/1c7S7YAledHP2EEQ2nh26Ibegij-XPNuUFkrFLtJPlzs/edit?tab=t.0#heading=h.9dudo2y6dlhf)) |
| 8 | +was [added](https://github.com/strictdoc-project/linux-strictdoc/commit/a876ef7671c4c17396b871643f46eb15c7afea73) along |
| 9 | +with a minimal StrictDoc project configuration. |
| 10 | + |
| 11 | +[^1]: https://lore.kernel.org/all/20250910170000.6475-1-gpaoloni@redhat.com/ |
| 12 | +[^2]: https://lore.kernel.org/linux-trace-kernel/20250814122206.109096-1-gpaoloni@redhat.com/#r |
| 13 | + |
| 14 | +Go to [rendered requirements](https://strictdoc-project.github.io/linux-strictdoc/). |
| 15 | + |
| 16 | +#### Demonstrated features |
| 17 | + |
| 18 | +- Use `strictdoc export .` to generate a nice |
| 19 | + [static HTML document tree](https://strictdoc-project.github.io/linux-strictdoc/linux-strictdoc/Documentation/requirements/charmisc.html) |
| 20 | + with visual representation of the |
| 21 | + [traceability graph](https://strictdoc-project.github.io/linux-strictdoc/linux-strictdoc/Documentation/requirements/charmisc-TRACE.html#DOC-SUBSYS-CHARMISC), |
| 22 | + validation results and full-text search. Other output formats as e.g. PDF are available. |
| 23 | +- Do it in |
| 24 | + [in CI](https://github.com/strictdoc-project/linux-strictdoc/blob/strictdoc/.github/workflows/ci.yaml). |
| 25 | +- Parses source code |
| 26 | + [SPDX-Req-* tags proposed by ELISA](https://docs.google.com/document/d/1c7S7YAledHP2EEQ2nh26Ibegij-XPNuUFkrFLtJPlzs/edit?tab=t.0#heading=h.9dudo2y6dlhf) |
| 27 | + and translates them to StrictDocs internal model. |
| 28 | +- Sidecar: Proposed by ELISA to hold additional requirement meta data outside source code. Realized as |
| 29 | + [separate sdoc file](https://github.com/strictdoc-project/linux-strictdoc/blob/strictdoc/Documentation/requirements/tracing.sdoc)s |
| 30 | + containing requirement stubs. Stubs are merged with source code tags by matching on `SPDX-Req-ID`. |
| 31 | +- Use `strictdoc manage auto-assign` to generate SPDX-Req-ID and SPDX-Req-HKey as suggested by Linux kernel |
| 32 | + requirements template. The hash generation method is `echo -nE "${PROJECT}${FILE_PATH}${INSTANCE}${CODE}" | sha256sum`. |
| 33 | + See [commit 2214a368](https://github.com/strictdoc-project/linux-strictdoc/commit/2214a368) |
| 34 | + for the auto-generated changes. |
| 35 | +- Tracing: Requirements, tests and functions become individual nodes in the traceability graph and are connected |
| 36 | + by their stable IDs. |
| 37 | +- Custom validations: Use plugin API to |
| 38 | + [provide a check](https://github.com/strictdoc-project/linux-strictdoc/blob/strictdoc/tools/requirements/validation_plugin.py#L28) |
| 39 | + to see if each requirement has at least one associated test, and each function expectations has at least one dedicated |
| 40 | + test. |
| 41 | +- Drift detection: As kernel development goes on, occasionally rerun `strictdoc manage auto-assign`. If `SPDX-Req-HKey` |
| 42 | + changes, this means that some semantic aspect of the requirement may have changed. |
| 43 | + |
| 44 | +For a thorough documentation of StrictDocs features see |
| 45 | +[StrictDoc User Guide ](https://strictdoc.readthedocs.io/en/stable/stable/docs/strictdoc_01_user_guide.html) |
| 46 | + |
| 47 | +#### Usage |
| 48 | + |
| 49 | +```sh |
| 50 | +pipx install git+https://github.com/haxtibal/strictdoc.git@linux-strictdoc/integration |
| 51 | +git clone https://github.com/strictdoc-project/linux-strictdoc |
| 52 | +cd linux-strictdoc |
| 53 | +strictdoc export . # validate and render to HTML |
| 54 | +strictdoc manage auto-uid . # regenerate hashes for drift detection |
| 55 | +``` |
| 56 | + |
| 57 | +Note: Changes under development are planned to be released with strictdoc 0.16.0. Once published |
| 58 | +```sh |
| 59 | +pipx install strictdoc |
| 60 | +``` |
| 61 | +will be enough to install. |
| 62 | + |
| 63 | +#### Explanation of Content and Processing |
| 64 | + |
| 65 | +``` |
| 66 | +. |
| 67 | +├── Documentation |
| 68 | +│ └── requirements |
| 69 | +│ ├── charmisc.sdoc # sidecar |
| 70 | +│ └── tracing.sdoc # sidecar |
| 71 | +├── drivers |
| 72 | +│ └── char |
| 73 | +│ └── mem.c # Linux code with inlined LLRs |
| 74 | +├── kernel |
| 75 | +│ └── trace |
| 76 | +│ └── trace_events.c # Linux code with inlined LLRs |
| 77 | +├── strictdoc_config.py # StrictDoc project configuration |
| 78 | +└── tools |
| 79 | + ├── requirements |
| 80 | + │ └── validation_plugin.py # custom requirement validations |
| 81 | + └── testing |
| 82 | + └── selftests |
| 83 | + └── devmem |
| 84 | + └── tests.c # tests for /dev/mem LLRs |
| 85 | +``` |
| 86 | + |
| 87 | +StrictDoc performs the following notable process steps: |
| 88 | +- parse \*.sdoc files to create the initial traceability index (a DAG structure) |
| 89 | +- parse \*.c files using tree-sitter, read SPDX tags from it and merge it into the DAG |
| 90 | +- perform built-in validations and calculate built-in statistics |
| 91 | +- perform custom validations |
| 92 | + * check if all requirements have at least one related test |
| 93 | + * check if all function expectations are mentioned by one related test |
| 94 | +- render the DAG into a HTML document tree where all nodes are traceable, including |
| 95 | + requirements text, visual graph representation and source code view |
0 commit comments