Drizzle
joakim-brannstrom
released this
13 May 18:38
·
833 commits
to master
since this release
New features for dextool mutate
- Check that all files to mutate are writable.
- Check periodically that the test suite, without any mutants, execute OK. If
not, rollback the last tested mutants. - Save what test_cmd killed a mutant. This is only activated if test case
analyzers are used. - Prioritize testing of unknown mutants.
- Check overload/halt conditions when running a schema for each mutant that is
tested. Previously it was only done when selecting a new schema. - Construct larger mutant scheman. Previously they where at most one
translation unit. Now they can span multiple translation units (e.g. *.cpp).
This mean that each schema contain more mutants thus the overall mutation
testing time is reduced. - Continuously save the result (every 20minute) the tested mutants of a
schema. This should reduce the overall memory usage and means that if the
schema is interrupted only the result from the last 20 minutes (at the most)
are lost. - Modernize the html layout theme.
- Prioritize mutants to test based on how much they affect the source code in
order to quicker give actionable feedback to the user. Based on the
assumption that a large mutant that survive is important to kill. - Change high interest mutants to reporting those that affect the most src
code and has survive. Previously it was those that had survived the most
test suite executions but this was never used by the users. The hope is that
those that are reported as high interest are actually useful, interesting
to look at and kill.
Also allows the number of high interest mutants that are shown to be
changed. - Automatically force a re-analyze of all files when a new version of the tool
is installed anddextool mutate analyze
is executed. - Automatically save the mutation score after each test run when all mutants
are tested. This is then used to plot a trend. - The HTML report and console print a SyncStatus. It shows how "in sync" the
tested mutants are with the code changes and test suite changes.
The further apart they are the less "trustworthy" is the report. Because
lets say the test suite is changed to now kill a mutant that is marked as
alive.
Fixes for dextool mutate
- Fix bugs in schema code generation such that more scheman compile.
- Fix bug where the dependency tracking via included headers used the wrong
path for headers included from the current directory (#include "foo.hpp"
). - Fix bug where a mutant that span multiple lines in the html report is shown
on one line. It makes it hard to read. - Removed delete of case branches in switch statements. The language C/C++ and
the Clang AST make it hard to generate correct mutants and schematan. The
effort needed to make it work in all cases is still great. It is further a
bit unnecessary because SDL will delete individual statements in the
branches thus well. It doesnt't really give that much to be able to delete
whole branches. - Not all mutant schematan for binary operators where generated which meant
that speedup opportunities where lost. With this fix all binary operators
should have a schema generated for them which speeds up dcr, ror, aor mutant
operators. - Fix the size of the database when schematas are saved by compressing them on
the fly. Reduced the size up to 90% of a database. - Add support for C++17 structural binding in schematas.
- Enable scheman which mutate const variables in C/C++.
- Fix mutation of C++ lamba expressions.
- Fix libclang bindings. The enum CXCursorKind is not backward or forward
compatible. Because of this dextool now have a binding for each version it
supports. What happend where that the analyzed AST could, if the wrong
binding is used, contain seemingly random nodes which mean that the
mutations where waaaay off. - Fix schematas inside return-statements and when a condition contain pointers.
- Measuring the runtime of the test suite is now done multithreaded. It is too
slow and pessimistic to do single threaded. It was previously changed to
single threaded because the load of the host computer could vary and lead to
falsely classify mutants as timeout. But with the feature--load-behavior slowdown
this is no longer a problem. Thus changing back to multithreaded
to speedup both the start and overall mutation testing. - Remove returnFalse/returnTrue mutants because they are redundant, overlap
with normal true/false. - Stop generating the equivalent mutant sdl when it deletes empty scopes.