Apply Mutation Testing
Dextool mutate requires a compile_commands.json
for its analyzer. Such a file
contains how each file that the project consist of is compiled. These flags are
extracted by dextool from compile_commands.json
in order to analyze the
source code for mutants. Some build systems can produce such a json file
natively (cmake) while others can be inspected with
BEAR.
You can follow the instruction below
GoogleTest Example
Google Test project is used as an example.
Obtain the project you want to analyze
git clone https://github.com/google/googletest.git
cd googletest
Generate a JSON compilation database for the project
mkdir build
pushd build
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -Dgtest_build_tests=ON -Dgmock_build_tests=ON ..
make
popd
Create a configuration file
dextool mutate admin --init
The file should be pretty self explaining. Open the config file and change the following fields:
[workarea]
include = ["googlemock/include/*", "googlemock/src/*", "googletest/include/*", "googletest/src/*"]
[compiler]
extra_flags = [ "-D_POSIX_PATH_MAX=1024" ]
[compile_commands]
search_paths = ["./build/compile_commands.json"]
[mutant_test]
test_cmd = "./test.sh"
#test_cmd_dir = ["./build/test"]
build_cmd = "./build.sh"
analyze_using_builtin = ["gtest"]
Generate a database of containing the mutants
dextool mutate analyze
Create a file build.sh
that will build the subject under test when invoked:
#!/bin/bash
set -e
cd build
make -j$(nproc)
Create a file test.sh
that will run the entire test suite when invoked:
#!/bin/bash
set -e
cd build
ctest --output-on-failure
Make the files executable so they can be used by dextool:
chmod 755 build.sh test.sh
Run the mutation testing on the LCR mutants
dextool mutate test