Requirements
The requirements tracer keeps the requirements of a product, its design, its tests and its risks as documents of numbered items, each in a tree of headings and items with a title, Markdown text, a status and attributes of your own, such as a priority or the method of a test. Items are joined across documents by typed links - a test verifies a requirement, a piece of design satisfies it, a requirement mitigates a risk - made from the item or by ticking cells in a traceability matrix. Rules of your own say which links every item needs, and the tracer shows, item by item, what meets them and what nothing yet covers.
When a requirement is reworded, every link to it goes suspect until someone has looked at the test or the design at the other end, and the item shows everything the change reaches, directly or through other items. Baselines record the project as it stood, to compare with now or go back to. The project is kept as JSON; a document goes out and comes back as CSV, the whole project as an Excel workbook, and a PDF report holds the documents, the coverage, the suspect links and the changes since a baseline. It is for the person who has to show that each requirement of a product is designed, tested and still agreed.
Try it with your own requirements in confidence: projects, CSV files and workbooks are opened by your browser, on your device. Nothing is uploaded, no copy reaches us or anyone else, and nothing is kept once you close this tab.
A garden irrigation controller, traced
The Runnel 6 is a made-up six-zone garden irrigation controller from an invented maker, Larchmere Garden Controls: eleven system requirements under four headings, eight items of design, eleven tests and six risks, every one of them written by this page. Add the coverage rules, find the requirements nothing verifies, link the rain-delay test that was written but never linked, read the coverage again and take the project away as CSV, an Excel workbook and a PDF report.
// Node 20 or later, from the Gold package: stop a release while a requirement has no test or a link has gone suspect.
import { readFileSync, writeFileSync } from 'node:fs';
import { readProject, coverageAll, suspectLinks, writeRequirementsXlsx, writeRequirementsPdf } from './dist/node/bmx-requirements-tracer.mjs';
const { project, warnings } = readProject(readFileSync('runnel-6.json', 'utf8'));
for (const w of warnings) console.warn(w);
for (const c of coverageAll(project)) {
const missing = c.items.filter(i => !i.by.length).map(i => i.key);
console.log(`${c.rule.doc} ${c.rule.kind} ${c.rule.other}: ${c.covered} of ${c.total}`, missing.join(', '));
if (c.rule.kind === 'verifies' && missing.length) process.exitCode = 1;
}
const suspect = suspectLinks(project);
if (suspect.length) {
console.log(`${suspect.length} suspect links to look at`);
process.exitCode = 1;
}
writeFileSync('runnel-6.xlsx', await writeRequirementsXlsx(project));
writeFileSync('runnel-6.pdf', await writeRequirementsPdf(project, { title: 'Runnel 6 requirements' }));
A requirement reworded after the design review
At the Runnel 6's second design review - made up, like the controller - the rain-sensor requirement was tightened: the valves must now close within one second, not two, and stay closed until the sensor has been dry for half an hour. Record the project as the review found it, reword the requirement and watch its links go suspect, see everything the change reaches, add the design it needs, compare with the baseline, mark the links reviewed, and go back to the baseline and undo it again.
Get the code
<script src="/assets/bmx-components.min.js"></script> <bmx-requirements-tracer id="rc" label="Runnel 6 after the design review" file-name="runnel-6-review-2" user="Mira Haldane" style="inline-size: 100%; --bmx-requirements-tracer-height: 32rem"></bmx-requirements-tracer>