Multiple Error Analysis (MEA) is a component for semi-automatic filtering of violation witnesses (error traces) to reduce manual effort during software verification result analysis.
MEA helps identify and remove duplicate error traces that correspond to the same bug, reducing redundant manual examination. It combines automatic filtering with optional manual adjustments.
-
Error Trace (Violation Witness) A sequence of operations from an entry point to the property violation.
-
MEA Concept MEA uses a combination of functions to determine equality of error traces:
- Conversion:
conversion(t)removes non-essential elements from a trace. - Comparison:
comparison(t1, t2)defines how two converted traces are compared. - Manual Adjustment:
manual(t)allows a user to edit a trace (remove or add elements).
- Conversion:
Two traces t1 and t2 are considered equal if:
comparison(manual(conversion(t1)), conversion(t2)) ≡ true
Correct function specification ensures accurate equality detection.
Automatic filtering processes a set of violation witnesses and returns only unique traces.
- Model Functions Call Tree (
model functions) (default) Uses model function markers or error descriptions from the verifier. - Call Tree (
call tree) Keeps only function calls and returns (stricter than model functions). - Conditions (
conditions) Retains only conditions in the trace. - Error Descriptions (
error descriptions) Keeps only verifier error descriptions. - Full Trace (
full) No conversion; keeps the complete trace.
- Full Equality (
equal) (default) All elements must match exactly. - Inclusion (
include) One trace must be a subsequence of another. - No Filtering (
skip) Considers all traces different.
For multi-threaded traces, MEA calculates the Jaccard index for thread similarity. Equality requires meeting the ** similarity threshold** (default: 100%).
Install MEA into the deployment directory:
make install-mea DEPLOY_DIR=<deployment_directory>Run the filtering script:
<deployment_directory>/cv/mea.py -d <directory_with_violation_witnesses>The script outputs only unique violation witnesses.
For advanced analysis, use the CVV web interface:
- Users can manually edit traces (e.g., remove irrelevant calls).
- Assign a mark (conversion, comparison, similarity) to indicate trace equivalence.
- All related traces are then marked as duplicates and skipped in later reviews.
- Incorrect marks can be modified later.
This process reduces redundant bug reporting by grouping equivalent traces.