Skip to content

Commit 663e8a9

Browse files
authored
docs: tooling subcommittee meeting minutes 2026-03-13 (Safety-Critical-Rust-Consortium#596)
1 parent 8ce6219 commit 663e8a9

1 file changed

Lines changed: 158 additions & 0 deletions

File tree

  • subcommittee/tooling/meetings/2026-03-13
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
# Tooling Subcommittee Meeting on 13 March 2026 @ 3pm GMT
2+
3+
| Search Key | Description |
4+
| :---- | :---- |
5+
| \[todo\] | Action Item |
6+
| \[decision\] | Something decided on |
7+
| \[important\] | Key information |
8+
9+
## Agenda
10+
11+
1. Solicitation of notetaker
12+
2. Review [last time’s meeting minutes](https://github.com/rustfoundation/safety-critical-rust-consortium/pull/580)
13+
3. Present new members
14+
4. Presentation of *mutation project work* by Zalan Balint Levi
15+
5. Tools-list website page PR [https://github.com/rustfoundation/safety-critical-rust-consortium/pull/578](https://github.com/rustfoundation/safety-critical-rust-consortium/pull/578)
16+
6. Category discussion for mutest-rs tool: test-runner \=\> testing, or new category?
17+
See: [https://github.com/rustfoundation/safety-critical-rust-consortium/issues/571](https://github.com/rustfoundation/safety-critical-rust-consortium/issues/571)
18+
7. Samuel Wright asks if we have “help wanted“ topics for the SCRC newsletter
19+
20+
## Check-in area
21+
22+
**Please add your name, and an emoji that describes your day.**
23+
24+
* Pete LeVasseur 🖖
25+
* Zalán Bálint Lévai 🤩
26+
* Oreste Bernardi 🪻
27+
* Arnaud Fontaine 😀
28+
* Manuel Hatzl
29+
* Tiago Manczak
30+
* Alexandru Radovici 🙂
31+
32+
**Notetaker:**
33+
34+
* Pete LeVasseur
35+
36+
## Housekeeping section
37+
38+
## Tasks
39+
40+
*
41+
42+
## Meeting Minutes
43+
44+
* Accepted last time’s meeting minutes
45+
* Intro of new members
46+
* Zalán 👏
47+
* Kartik 👏
48+
* Presentation of *mutation project work* by Zalan Balint Levi
49+
* Zalán \- PhD student, working on mutation testing project last four+ years
50+
* Bugs slip past, due to e.g. happy path, forgetting some edge case
51+
* Coupling between tests and code happens
52+
* Tests “good” only if they: capture all requirements, actually fail if code changes now violate requirements
53+
* Mutation testing: changing the code in deliberate ways to make faulty program behaviors to search for where we’ve not yet covered in testing
54+
* Mutations: small, subtle changes which mimic mistakes of experience developers
55+
* Tests should ideally reject faulty behavior caused by mutations
56+
* What about code coverage?
57+
* Function completely covered by tests example of bitwise arithmetic of configurations
58+
* However, no one checked if configuration was correctly checked; mutation mimics this subtle kind of error in programming
59+
* Safety-critical standards do mention kinds of mutation testing:
60+
* IEC 61508: Error Seeding for SIL 2-4 (Part 3, Annex B, Table B.2)
61+
* ISO 26262: Fault Injection Testing for ASIL A-D, “Coding Mutations” method (Part 6, Table 8\)
62+
* Using mutation testing on dependencies
63+
* More confident about any given dependency
64+
* Gives higher confidence in usage and choice of particular dependency when there are multiple options
65+
* Could be used to convince relevant leadership about dependency of particular dependency due to mutation testing as a quantitative measure
66+
* mutest-rs intro
67+
* Build on rustc for compiler analysis and only for “interesting” mutations that are not caught by the compiler
68+
* Call graph from test functions to “program” functions; only run relevant tests for each mutation which impacts it
69+
* Helps make this faster
70+
* Performing code mutations in Rust requires foresight; e.g. some may impact unsafe
71+
* Performance of mutest-rs
72+
* alacritty \- 79 tests; 1,808, \~60 seconds; with more threads \~11s, with some experimental features \~6s
73+
* (more testing results shown, couldn’t keep up 😅)
74+
* Using [mutest-rs](https://mutest.rs/)
75+
* `cargo mutest run` like you would `cargo test`
76+
* Web-based inspector `cargo mutest inspect`
77+
* Why mutation testing for safety-critical?
78+
* Changes to code will be in spaces where changes could have large impact
79+
* Mutation testing can help find those gaps when changing code
80+
* Future work
81+
* Improving reliability by working with Rust Compiler Team
82+
* Take what’s been learned on Rust analysis and code generation to other fields, e.g. for MC/DC tooling
83+
* Q\&A:
84+
* How can we define the single most common mutation errors? Statistics? Database?
85+
* Mutation testing as a discipline is not new; dates back to work from the late 1980s
86+
* Different domains, programming languages make things different, but there’s a consensus on more procedural programming languages on what’s most common and useful
87+
* Part of the research is focused on analyzing which pieces apply to Rust; in lieu of such a database for Rust much of the work is building that database
88+
* \~18 operators
89+
* Swapping operators; e.g. addition to subtraction but need to do this in a Rust-aware way to note that some are not possible depending on the types
90+
* Can enable/disable parts of the mutation testing framework; possible to scope this to areas of interest for your safety-critical setting
91+
* Can also define own operator implementations; part of the design goals to enable extension if say some certain pattern happens
92+
* If e.g. something is challenging to encode in the Rust programming language semantics
93+
* E.g. “please don’t do this” to the team can be turned into one of these things to check via mutation testing to simulate those sorts of faults
94+
* How deterministic is mutest-rs? Run twice, will you get the same result?
95+
* Everything about mutest-rs is deterministic; even things like storing things in a hashmap doesn’t change the order of mutations
96+
* Internal mechanisms have been implemented as a part of the design goal
97+
* Tests themselves may not be deterministic
98+
* In surveys across Rust open source repos hasn’t turned this issue up much in practice
99+
* But if there are flaky tests, this can show up as noise in mutation testing
100+
* Demo of mutest-rs
101+
* Run on alacritty
102+
* Took \~18 seconds in this case
103+
* Get Rust Compiler-style warnings and errors with helpful guidance on how to proceed
104+
* Get mutations for pieces of code under test
105+
* Get a breakdown of particular mutation operators
106+
* arg\_default\_shadow: tests whether dealt with a function argument at all; if not used clearly able to tell not exploring any code paths based on that
107+
* Get listing of number of mutations
108+
* Notes which were undetected
109+
* Web-based inspector tool
110+
* Shows pane / sidebar forms almost a todo list of what needs to be done and investigated
111+
* Can click on test cases and get more details
112+
* Able to see all the traces through the program, pieces of functions and hops through program which were exercised
113+
* Works with macro expanded code, since built on top of compiler
114+
* Q: Is there any study / mention in safety-critical standards on how to attach mutations to parts of programs or traceability guidance? Requirements traceability? E.g. “I’m violating this here, on this part of code, and these tests are relevant for this tests which were supposed to test these requirements.”
115+
* Aware of two for Rust
116+
* [tracey](https://crates.io/crates/tracey)
117+
* [mantra](https://docs.rs/mantra/latest/mantra/)
118+
* mantra is looking at statement coverage of tests already. so would already be based on the call graph
119+
* Q: “Is my mutation enough?” Concern on if there’s metrics for the mutation. For safety-critical not so important, but understands that it’s not possible to mutate everything.
120+
* If needs are specific/tailored you can turn things off and disable them
121+
* Seeing how things break down per test is important to see “what value” there is per test
122+
* e.g. on Alacritty there are a few tests which seem at surface-level that are not high value; may be able to prune or consolidate test suite based on these signals
123+
* Writing tests is good, but also removing them can be as well
124+
* Q: Combined into a binary and run, right? How does this work with unit and integration tests? Mutating source, building?
125+
* Large engineering challenge to get integration test support working, since these are separate compilation units
126+
* mutest-rs works as a replacement for rustc under the hood to produce binaries for mutation testing
127+
* Unit testing is simple
128+
* Integration testing becomes more complex; try to make use of as much of Cargo’s facilities as possible
129+
* When modified compiler is run against integration test, start building reachability analysis via call graph across crates
130+
* Use mapping and stable definition references, go back to original library writing test for and create “meta mutant” that’s a single dedicated library that attaches to this specific integration test suite
131+
* End up reflectively analyzed in the library with dedicated, mutated one
132+
* Honors that integration tests are separate compilation units
133+
* If unit tests \+ 3 x integration tests, end up with 4 x final compilation units, just like normal
134+
* Q: How does the packaging work for unit tests?
135+
* Generated all up-front, then generates a single large piece of program with all the branching built in
136+
* Allows for influencing which paths are taken at run time, just like the generated binary done normally for cargo test
137+
* Q: Lots of combinations, which seems to make the analysis complex as mutants are created. Does it hurt debug cycles by combining together into a single binary for the mutation testing?
138+
* When these are combined, it’s a fundamental constraint to toggle only one mutated code path to run at a time
139+
* Imagine that there’s an internal switchboard of sorts, which allows for toggling of one switch at a time
140+
* One test, one path, one mutation
141+
* Create effectively a match expression which branches for each and every mutation including original behavior to allow for switching easily
142+
* Q: How are teams in “real life” using this? Running locally to find more tests? CI for gatekeeping?
143+
* Want to hear everyone’s experiences
144+
* Been developing for \~4 years
145+
* Part of it is that research is being built on top of Rust itself, but also building it for practical usage
146+
* Always has been publicly available; only soft-launched this recently, e.g. since Rust Nation UK 2026 in talking with people
147+
* Cannot give detailed answer; need to have others make use of it to gather up those experiences
148+
* Gave a talk at Rust Manchester \~2 weeks ago covering similar topics and had people since then running against mutest-rs
149+
* Some initial use in cryptography and some initial use showed useful here
150+
* Really wants to have people to submit feedback, whether public or private
151+
* Jon Gjengset offered up feedback on “build trophy case of issues discovered” to showcase usefulness
152+
* Samuel Wright asks if we have “help wanted“ topics for the SCRC newsletter
153+
* Pete: I’ll make a Zulip topic to gather this up a bit
154+
* Tools-list website page PR [https://github.com/rustfoundation/safety-critical-rust-consortium/pull/578](https://github.com/rustfoundation/safety-critical-rust-consortium/pull/578)
155+
* Let’s all review and leave comments as needed so we can merge at the latest by next meeting in two weeks
156+
* Category discussion for mutest-rs tool: test-runner \=\> testing, or new category?
157+
See: [https://github.com/rustfoundation/safety-critical-rust-consortium/issues/571](https://github.com/rustfoundation/safety-critical-rust-consortium/issues/571)
158+
* For mutest-rs we’ll probably try to revise how we categorize and then if needed to a follow-up PR

0 commit comments

Comments
 (0)