From f622779206e79e9a568d9db43cc10b5e6034bea0 Mon Sep 17 00:00:00 2001 From: Manuel Hatzl Date: Thu, 16 Apr 2026 18:44:07 +0200 Subject: [PATCH 1/2] Adapt tool categories Makes the categories more open and clear for new tools --- .github/ISSUE_TEMPLATE/submit_tool.yml | 10 +-- .../components/ToolsList/available-tools.json | 14 ++--- .../src/components/ToolsList/toolsList.tsx | 61 ++++++++++++------- 3 files changed, 52 insertions(+), 33 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/submit_tool.yml b/.github/ISSUE_TEMPLATE/submit_tool.yml index 8a578777..ceeabbef 100644 --- a/.github/ISSUE_TEMPLATE/submit_tool.yml +++ b/.github/ISSUE_TEMPLATE/submit_tool.yml @@ -72,17 +72,17 @@ body: id: tool_type attributes: label: Tool category - description: Specific use and type of this tool + description: Specific use and type of this tool. For more details about the categories, please visit the https://arewesafetycriticalyet.org/tooling/tools-list website. options: - "code-coverage" - "requirements-traceability" - "compiler" - - "test-runner" + - "testing" - "formal-verification" - "static-analysis" - - "tests-generation" - "package-manager" - - "profiler" - - "debugger" + - "profiling" + - "debugging" + - "other" validations: required: false diff --git a/arewesafetycriticalyet.org/src/components/ToolsList/available-tools.json b/arewesafetycriticalyet.org/src/components/ToolsList/available-tools.json index e8571606..40cb03ff 100644 --- a/arewesafetycriticalyet.org/src/components/ToolsList/available-tools.json +++ b/arewesafetycriticalyet.org/src/components/ToolsList/available-tools.json @@ -70,7 +70,7 @@ }, { "name": "cargo-nextest", - "type": "test-runner", + "type": "testing", "url": "https://nexte.st", "description": "Next-generation test runner for Rust", "license": "Apache 2.0 & MIT" @@ -98,7 +98,7 @@ }, { "name": "defmt-test", - "type": "test-runner", + "type": "testing", "url": "https://github.com/knurling-rs/defmt", "vendor": "Ferrous Systems GmbH", "description": "Embedded testing framework", @@ -132,7 +132,7 @@ }, { "name": "flamegraph", - "type": "profiler", + "type": "profiling", "url": "https://github.com/flamegraph-rs/flamegraph", "description": "Flame graph profiler for Rust", "license": "Apache 2.0 & MIT" @@ -170,7 +170,7 @@ }, { "name": "Lauterbach Trace32 Debugger", - "type": "debugger", + "type": "debugging", "url": "https://www.lauterbach.com/", "vendor": "Lauterbach", "description": "Lauterbach‘s TRACE32® tools are a suite of leading-edge hardware and software components that enables you to analyze, optimize and certify all kinds of embedded systems.", @@ -193,7 +193,7 @@ }, { "name": "PLS UDE", - "type": "debugger", + "type": "debugging", "url": "https://www.pls-mc.com/products/universal-debug-engine/", "vendor": "PLS Programmierbare Logik & Systeme GmbH", "description": "UDE® Universal Debug Engine is the powerful development tool for debugging, tracing, and testing embedded software for a wide range of multicore SoCs and microcontrollers.", @@ -218,7 +218,7 @@ }, { "name": "TESSY", - "type": "test-runner", + "type": "testing", "url": "https://www.razorcat.com/en/product-tessy.html", "vendor": "Razorcat", "description": "Qualified unit testing tool", @@ -236,7 +236,7 @@ }, { "name": "VectorCast", - "type": "test-runner", + "type": "testing", "url": "https://www.vector.com/us/en/products/products-a-z/software/vectorcast/", "vendor": "Vector Software", "description": "Qualified test runner and generator for safety-critical applications", diff --git a/arewesafetycriticalyet.org/src/components/ToolsList/toolsList.tsx b/arewesafetycriticalyet.org/src/components/ToolsList/toolsList.tsx index 503407c9..115f9a48 100644 --- a/arewesafetycriticalyet.org/src/components/ToolsList/toolsList.tsx +++ b/arewesafetycriticalyet.org/src/components/ToolsList/toolsList.tsx @@ -4,14 +4,25 @@ import remarkGfm from "remark-gfm"; import Link from "@docusaurus/Link"; import styles from "./styles.module.css"; import raw_tools_list from "./available-tools.json"; +/* +* `testing` ... for tools that are primarily used while testing. Merging `test-runner` and `test-generation`. `mutest-rs` would imo also fall into this category, because it helps to improve your testsuite, and improving your testsuite is a testing activity. Without tests, `mutest-rs` would have nothing to check against. +* `formal-verification` ... It may be for testing, but can also be part of implementation. e.g. specifying contracts in your source code +* `static-analysis` ... `formal-verification` is part of this, so we could combine those two, but since we already have \~3 tools dedicated to `formal-verification` and I expect this to grow, having them separate is ok +* `profiling` ... rename of `profiler`, because it better fits the *activity* intent +* `debugging` ... same as `profiling` +* `code-coverage` ... although mostly used while testing, you could measure coverage while executing your regular application or benchmarks. The name is not that fitting for an activity, but I cannot think of a better name right now +* `requirements-traceability` ... is it's own activity, because you may trace requirements to source code, tests, or other artifacts +* `package-manager` ... not an activity, but e.g. `supply chain management` also doesn't feel right. `cargo` is also special, because it manages dependencies, builds, tests, publishes your Crates... for `cargo`, the tags approach would be good +* `compiler` ... `building` might be a better category name, but imo people looking for safety critical tools will expect a `compiler` category to be there, since a compiler is that important +*/ type ToolType = | "package-manager" | "compiler" - | "test-runner" + | "testing" | "formal-verification" - | "profiler" - | "debugger" + | "profiling" + | "debugging" | "requirements-traceability" | "static-analysis" | "code-coverage" @@ -50,17 +61,22 @@ type ToolsList = { tools: ToolEntry[]; }; -const TOOL_TYPE_LABEL: Record = { - "package-manager": "Package Managers", - compiler: "Compilers", - "test-runner": "Test Runners", - "formal-verification": "Formal Verification", - profiler: "Profilers", - debugger: "Debuggers", - "requirements-traceability": "Requirements Traceability", - "static-analysis": "Static Analysis", - "code-coverage": "Code Coverage", - other: "Other", +type ToolCategory = { + title: string, + description: string, +} + +const TOOL_TYPE_LABEL: Record = { + "package-manager": { title: "Package Managers", description: "Tools for automating the management of a project's dependencies, its compilation and linking." }, + compiler: { title: "Compilers", description: "Tools for transforming source code into either executable binaries or dynamic libraries." }, + testing: { title: "Testing", description: "Tools for evaluating the correctness of a program under a finite set of scenarios through its execution." }, + "formal-verification": { title: "Formal Verification", description: "Tools for obtaining mathematical assurance of the behavior of the program. Such as, for example, its required level of functional safety." }, + profiling: { title: "Profiling", description: "Tools for measurement of program performance along different types of resources." }, + debugging: { title: "Debugging", description: "Tools for interactively inspecting the dynamic behavior of a program." }, + "requirements-traceability": { title: "Requirements Traceability", description: "Tools to manage traces between requirements and related source and/or object code." }, + "static-analysis": { title: "Static Analysis", description: "Tools for analyzing source code without executing it." }, + "code-coverage": { title: "Code Coverage", description: "Tools for calculating the quality of a test suite, under the metric of code coverage." }, + other: { title: "Other", description: "Tools that fall under none of the other categories." }, }; const TOOL_TYPE_ORDER: ToolType[] = [ @@ -68,10 +84,10 @@ const TOOL_TYPE_ORDER: ToolType[] = [ "compiler", "static-analysis", "formal-verification", - "test-runner", + "testing", "code-coverage", - "debugger", - "profiler", + "debugging", + "profiling", "requirements-traceability", "other", ]; @@ -172,9 +188,9 @@ export default function ToolsList(): React.ReactElement { {TOOL_TYPE_ORDER.filter( (type) => (grouped_tools.get(type) ?? []).length > 0, ).map((type) => { - const anchor = "#" + TOOL_TYPE_LABEL[type] + const anchor = "#" + TOOL_TYPE_LABEL[type].title return ( -
  • {TOOL_TYPE_LABEL[type]}
  • +
  • {TOOL_TYPE_LABEL[type].title}
  • ) })} @@ -212,8 +228,11 @@ export default function ToolsList(): React.ReactElement { const toolsOfType = grouped_tools.get(type) ?? []; return ( -
    -

    {TOOL_TYPE_LABEL[type]}

    +
    +

    {TOOL_TYPE_LABEL[type].title}

    + +

    {TOOL_TYPE_LABEL[type].description}

    +
    Tool
    From 9af5658cba64801d05254e2080abfd5e2077b899 Mon Sep 17 00:00:00 2001 From: Manuel Hatzl Date: Thu, 16 Apr 2026 18:49:38 +0200 Subject: [PATCH 2/2] Remove category comment --- .../src/components/ToolsList/toolsList.tsx | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/arewesafetycriticalyet.org/src/components/ToolsList/toolsList.tsx b/arewesafetycriticalyet.org/src/components/ToolsList/toolsList.tsx index 115f9a48..8f70f09d 100644 --- a/arewesafetycriticalyet.org/src/components/ToolsList/toolsList.tsx +++ b/arewesafetycriticalyet.org/src/components/ToolsList/toolsList.tsx @@ -4,17 +4,6 @@ import remarkGfm from "remark-gfm"; import Link from "@docusaurus/Link"; import styles from "./styles.module.css"; import raw_tools_list from "./available-tools.json"; -/* -* `testing` ... for tools that are primarily used while testing. Merging `test-runner` and `test-generation`. `mutest-rs` would imo also fall into this category, because it helps to improve your testsuite, and improving your testsuite is a testing activity. Without tests, `mutest-rs` would have nothing to check against. -* `formal-verification` ... It may be for testing, but can also be part of implementation. e.g. specifying contracts in your source code -* `static-analysis` ... `formal-verification` is part of this, so we could combine those two, but since we already have \~3 tools dedicated to `formal-verification` and I expect this to grow, having them separate is ok -* `profiling` ... rename of `profiler`, because it better fits the *activity* intent -* `debugging` ... same as `profiling` -* `code-coverage` ... although mostly used while testing, you could measure coverage while executing your regular application or benchmarks. The name is not that fitting for an activity, but I cannot think of a better name right now -* `requirements-traceability` ... is it's own activity, because you may trace requirements to source code, tests, or other artifacts -* `package-manager` ... not an activity, but e.g. `supply chain management` also doesn't feel right. `cargo` is also special, because it manages dependencies, builds, tests, publishes your Crates... for `cargo`, the tags approach would be good -* `compiler` ... `building` might be a better category name, but imo people looking for safety critical tools will expect a `compiler` category to be there, since a compiler is that important -*/ type ToolType = | "package-manager"