BOT-its Algorithms

In this section we describe all the variants of the Build One Test - Iterative Test Suite (BOT-its) greedy MCAC algorithm. For a more formal description of these algorithms see [AnsoteguiOT21].

In a more recent work (still under review), we extend and improve these algorithms and provide the parallel Parallel PRBOT-its algorithm.

We will show several simple execution examples for these algorithms. You can check the CLI Reference for a complete description of all the available parameters.


BOT-its greedily builds an MCAC one test at a time, trying to maximize the number of covered tuples at each test. It is based on the work in [YBA+16].

You can execute BOT-its with strength 2 for a given instance in ACTS format as shown:

ctlog PRBOT-its sut.acts -t 2


RBOT-its is an extension of BOT-its where we apply MaxSAT refinement techniques to try to improve the final MCAC size.

To activate RBOT-its instead of BOT-its you must set a value for the --maxsat-timeout or --intermediate-maxsat-timeout parameters, as we show below:

ctlog PRBOT-its sut.acts -t 2 --maxsat-timeout 30

In this case we are activating RBOT-its by setting a limit of 30s for each MaxSAT call.


PBOT-its is another extension of BOT-its where we limit the number of simultaneous tuples that are kept in memory. This algorithm allows building MCAC for higher strengths.

To activate PBOT-its you must set a limit for the pool, which can be set through the --max-pool-size in terms of number of tuples or through --max-mem-GB in terms of maximum pool size in GB. Only one of these parameters can be set at once. For example, this command would limit the maximum number of tuples in the pool to 10:

ctlog PRBOT-its sut.acts -t 2 --max-pool-size 10


PRBOT-its is the combination of RBOT-its and PBOT-its. It tries to obtain smaller MCACs by applying the MaxSAT refinement techniques of RBOT-its while keeping a limit on the memory consumption as in PBOT-its.

We must activate one of the parameters of RBOT-its and PRBOT-its to execute this algorithm (see RBOT-its and PBOT-its):

ctlog PRBOT-its sut.acts -t 2 --maxsat-timeout 30 --max-pool-size 10

Parallel PRBOT-its

The Parallel PRBOT-its splits all the tuples to be covered into different chunks and submits jobs that build test suites for their assigned chunk of tuples in parallel.

To activate the parallel version of PRBOT-its we must first activate PBOT-its as shown in the PBOT-its section. Then, we must specify the number of pools that will be assigned to each job by setting the --parallel-num-pools parameter. Additionally, we can set the maximum number of parallel jobs by setting the --max-parallel-jobs parameter.

To submit jobs Parallel PRBOT-its needs a submitter script that must be specified through the --submitter-script parameter. This script receives the job name and logs directory as first and second parameters and the rest of the command to be executed. The script must submit the command in some sort of job queue system.

The Task Spooler (tsp) is a Unix batch system that can be used to enqueue jobs into a local system. An example submitter script for tsp is shown below:


shift 2


EXECUTING_COMMAND="source /path/to/venv/bin/activate && $@ > ${output} 2> ${err}"
tsp -L $job_name -n -N 1 bash -c "$EXECUTING_COMMAND"

Notice that we must activate the virtual envronment where CTLog is installed (in case we installed CTLog in a virtual environment). Let this script be, an example execution command for Parallel PRBOT-its is shown below:

ctlog PRBOT-its sut.acts -t 2 --max-pool-size 10 --parallel-num-pools 5 --max-parallel-jobs 10 --submitter-script