We recommend using a conda environment.
Run conda install -c conda-forge r-base r-eva
to installed the required R packages
Use Python (3.6-3.8) version due to issues in astunparse library
To install the requirements, do pip install -r requirements.txt
.
To install the custom mutmut
library go to tool/src/mutmut
and run python setup.py install
To set up experiment project: repo_name
use scripts/[repo_name]_setup.sh
script. See next section in more detail
To set up individual projects in general use the scripts/general_setup.sh
script. See FLEX project for more detail
Step 1: Create projects
directory in root.
Step 2: Go to tool/scripts
and run bash [repo_name]_setup.sh ../../projects
to set up the project.
[Optional] Step 2.1: Remove any random seed setting by running python remove_seed.py no_random ../projects/[repo_name]
Step 3: Run python boundschecker.py -r [repo_name] -conda [conda env name]
in the tool/
directory to run all tests for that experiment project in testspecs.py
.
E.g., for Cleverhans
:
python boundschecker.py -r cleverhans -conda cleverhans
Run python boundschecker.py -r [repo_name] -test [test_name] -cl [class_name] -file [filename] -line [line number] -conda [conda env name]
in the tool/
directory to run a single test.
E.g., for one test in Cleverhans
python boundschecker.py -r cleverhans -test test_adv_example_success_rate_linf -cl TestSPSA -file cleverhans/torch/tests/test_attacks.py -line 75 -conda cleverhans
Go into the processing
folder and use the compute_bound.py
script with the directory of the collected data for and test and the chosen alpha value
e.g., python compute_bound.py --data_folder data/cleverhans_TestSPSA_test_adv_example_success_rate_linf_1637802988/ --alpha 0.9
>>>>> Beginning process Class: TestSPSA Test: test_adv_example_success_rate_linf
Found csv entry with bound: 0.5, lessthan: True, all_close: False, pass_equal: False
Num of crashed mutants: 29 same mutants: 20 diff mutants: 13
Begin Optimization...
Using x0: 0.24, alpha: 0.9, min x: 0.19
fun: -0.9783814527855432
lowest_optimization_result: fun: -0.9783814527855432
maxcv: 0.0
message: 'Optimization terminated successfully.'
nfev: 20
status: 1
success: True
x: array(0.2898199)
message: ['requested number of basinhopping iterations completed successfully']
minimization_failures: 0
nfev: 2044
nit: 100
x: array(0.2898199)
Finished Optimization
>>> previous bound: 0.5 mutation score: 0.7623076923076924 <<<
>>> new bound: 0.2898199008350133 | pass rate: 0.99 | mutation score: 0.88 | PP ms increase: +0.12<<<
here the new bound suggested by faser is 0.29 and the increased mutation score with respect to the old developer bound is 12 PP
- Repo Name: -r
- Test Name: -test
- File name: -file
- Class name: -cl
- Line number of assertion: -line
- Conda env name: -conda
- Run without mutants: --no_mutants
- Resume old run: --resume (useful when there are large amounts of mutants or tests within a project)
The source code for the project is mainly contained in the tool/
directory. The tool/
directory is further split into sub-directories like src
which contains implementation files, folders with setup scripts (scripts
), logs folders and other implementation files. The root directory further contains some top level files like requirements.txt
.
The processing code can be found under the processing/
directory
The file src/Config.py
contains all the configurations for the tool
- DEFAULT_ITERATIONS: Number of samples to collect in first round
- SUBSEQUENT_ITERATIONS: Number of samples to collect in subsequent rounds
- MAX_ITERATIONS: Max samples
- THREAD_COUNT: Number of threads
In total we have opened 19 Pull Requests with 14 Accepted.
See pr_tracker.csv
for more detail.