Closed weaversa closed 2 years ago
Folks I'd like to introduce this technology to (Rust developers / evaluators, who I also image is your target user-base) don't have a background in automated reasoning and will likely be turned off by the massive amount of cruft one has to sift through to find out whether or not their code has an issue.
Understood and we're in complete agreement.
There is some amount of difficulty here: one problem we have to cope with (somehow) is that unwinding can sometimes fail to terminate. We actually made a significant improvement here recently in that this output gets written out as it comes, and not all buffered up until the "end." (which may never come!)
So there's a balance that needs striking where we DO need to provide some kind of output from cbmc "live" so that this failure mode can be spotted. But obviously it needs to be better.
What's more, a lot of this output from CBMC is just strings, so we'll probably have to bite the bullet and parse things here...
Thanks @tedinski!
Since there are plans for other backends, rather than parsing CBMC output have you considered a backend management layer that would, by default, elide all output from the backend and respond generically, for example:
Working on proving 'assert(x == y)` in `myfile.rs` line 12 using backend `CBMC`.
Starting symbolic execution.
Unwinding loops in function 'f'.
Symbolic execution complete in 28.125s.
Discharging 47 safety proofs.
Safety proofs discharged in 3.401s.
Discharging main assertion `assert(x == y)`.
Assertion discharged in 2.401s.
Proved 'assert(x == y)` in `myfile.rs` line 12 in 34.9.27s
And, if there are any errors along the way then Kani could report them generically, such as "Symbolic execution failed, rerun with --verbose_sym = 1
to see more information about the failure."
Totally agree! We appreciate the feedback. We've been putting some effort into simplifying the output, but there's still a lot to be done. One related issue is https://github.com/model-checking/kani/issues/1194, which we should perhaps turn into an RFC and gather user feedback on what they would like to see (and not see!).
Totally agree! We appreciate the feedback. We've been putting some effort into simplifying the output, but there's still a lot to be done. One related issue is #1194, which we should perhaps turn into an RFC and gather user feedback on what they would like to see (and not see!).
Thanks for the pointer to #1194. I'll close this issue in favor of that and a potential RFC.
Requested feature: Improvements to the user (layperson) experience when running
cargo kani
.Use case: Folks I'd like to introduce this technology to (Rust developers / evaluators, who I also image is your target user-base) don't have a background in automated reasoning and will likely be turned off by the massive amount of cruft one has to sift through to find out whether or not their code has an issue. Eliding non-relevant information (non-relevant from a user perspective) is also pertinent to CI integration -- "why did this CI run fail?" -- also CI log sizes are typically limited.
Here's an example run on a pretty simple program --
Information such as
_RNvXs9_NtNtCs4bv2lBw1mAj_4core4iter5rangeINtNtNtB9_3ops5range14RangeInclusivejENtB5_26RangeInclusiveIteratorImpl9spec_nextCs8cGVXT8IZMx_8aes_rust.0 iteration 1 file
is better guarded by your verbose/debug output flags. As well,top
sayscbmc
has been running for 20 minutes, and I have no idea what's it's trying to solve.Some suggestions would be to have
cargo kani
(the default way to run the tool) output only information relevant to a layperson and ensure that operations that may take time are prefixed w/ some indication of that.