Skip to content
Go to file

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


# Proteja - Test Suite Management Tool
# Original Author: Erik Ostrofsky
# Current Maintainer: Jonathan Miller Kauffman (


Proteja is intended to be a comprehensive test suite management tool.
It allows you to collect coverage information at the line, method, and
class levels of granularity for Java programs.  Proteja also allows
you to control the granularity of coverage reporting (e.g., per-test
case vs. entire test suite).  The format of these coverage reports is
a binary matrix that can be used as input to test suite reduction and
prioritization techniques.  Proteja will accept a file describing the
modifications to the test suite in order to run a reduced or
prioritized test suite.  More details about configuring and using
Proteja can be found in the following sections.


The Proteja system can be downloaded from

Of course, if you are reading this README file, then you have most
likely already downloaded this tool.


Next, change into the directory where you downloaded Proteja.  You
should see a build.xml file as well as some additional files and
directories.  In order to build the system, first type

ant init

in order to create the "build" directory that will store the bytecode
for this system.  Then type

ant build

in order to compile all of the source code.  If for some reason you
wish to perform a clean build of Proteja, run

ant clean

in order to delete the build directory and its contents.


Proteja uses two configuration files: build.xml and protejaConfig.xml.
Information about how to modify these files is discussed next.

1) protejaConfig.xml

This is an XML file that represents an object of the Java class called
Settings.  Each field in this object represents an input parameter to
Proteja.  Each parameter will be discussed separately.

a) testClasses - This is a list of the JUnit classes used to test your
                 program.  Each test class should be preceded by
                 <java-class> and followed by </java-class>.  Be sure
                 to include the project name; for example, if your
                 test class is "ExampleTest" and the project name is
                 "fake.test", you should type

                 within the testClasses tag.

b) batchFactor - This parameter controls how often coverage
                 information should be stored.  For example, if the
                 batch factor is set to 1, then coverage information
                 will be collected for each individual test case.
                 The batch factor can be set to any integer in the
                 range [1,n], where n is the total number of test
                 cases in your test suite.

c) resetJVMOnBatch - This parameter must be set to "true" in order for
                     the batch factor to be meaningful.  If it is set
                     to "false", then Proteja will collect coverage
                     information for the entire test suite, even if
                     batchFactor is set to something less than n.

d) coverageType - This controls the granularity of the coverage
                  information collected.  The three options are
                  "line", "method", and "class".  If coverageType is
                  set to "line", then Proteja will collect coverage
                  information for each statement in the program.  If
                  "method" is used, then Proteja will collect coverage
                  information for each method.  Finally, when
                  coverageType is set to "class", Proteja will collect
                  coverage information for each Java class.

d) listType - This controls which test cases in the test suite are
              executed.  The three options are "include", "exclude",
              and "ignore".  If it is set to "include", then only the
              test cases in methodList are run in the order in which
              they are listed. When listType is set to "exclude", all
              test cases are run except for those listed in
              methodList.  When listType is set to "ignore", the list
              is ignored and Proteja runs all test cases.

e) methodList - This is a list of test cases in your test suite.  How
                this list is treated depends on the value of listType.
                Each method is formatted like


                where the project is "fake.test", the test class is
                "ExampleTest", and the test case is "testFake".

The protejaConfig.xml file is essential for running Proteja.  Use great
care when you are making changes to this file.  If you corrupt or
delete protejaConfig.xml, then you can create a new file by typing

ant createSettings

while in the main directory of Proteja.  Since this task is configured
to create a protejaConfig.xml file that does not run any test suite, you
will need to modify the new file to work with your application.

2) build.xml

This file contains seven properties of interest, located near the top
of the file.  Please note that for the first three properties, the
pathname must be relative to the base directory of Proteja.  For
example, if you installed Proteja in the "/tools/proteja/" directory
and the application that you wish to test is located in the
"/apps/foo/" directory, each of the first three properties must begin
with "../../apps/foo/".

a) programSource - This is the location of the source code of the program
                   being tested.  Cobertura uses this information when
                   generating coverage reports in order to map line
                   numbers to actual lines in the program.

b) programBytecode - The location of the bytecode for the program being
                     tested.  Cobertura instruments these classes in
                     order to determine which parts of the program are
                     executed by a test case.

c) testSuiteBytecode - The locations of the bytecode for your test suite.
                       Proteja runs the test suite and uses Cobertura in order
                       to determine which parts of the program the test suite

d) cobertura - If set to "true", Proteja will run Cobertura and
               collect coverage information while running the test

e) testTimer - If set to "true", a test case timings file will be
               generated.  This file contains the time for each test
               case to execute, whether that test passed or failed,
               and information about how Proteja was configured when
               that test case was run.

f) applicationName - This is the name of the application being run in
                     Proteja.  By default, the application name is set
                     to "default".  The name of the application is
                     used in the filenames of the coverage report and
                     the timings file.

g) modificationFile - The name of the file that contains a list of
                      test cases.  This list is used by the
                      modifyTestSuite task in order to create a
                      reduced or prioritized test suite.  By default
                      this property is set to "data.dat".

The build.xml file also contains several ant tasks that are not
discussed in this tutorial.  Please note that you should not actually
run these tasks directly, as they are used by Proteja for collecting
coverage information and generating reports, and will likely yield
confusing results when used out of context.

All of the properties in build.xml can be set via the command line.
For example, in order to set programSource through the command line, type

ant proteja -DprogramSource=desiredPath

where "desiredPath" is the desired setting of this property.  If you
will be executing the test suite frequently, then it is probably best
to make a copy of this file, as well as the protejaConfig.xml file, that
contains the settings for that particular application.

Once the build.xml and protejaConfig.xml files are properly configured, you
are ready to use Proteja.


Before running a test suite in Proteja, all of your test classes must
contain standard JUnit annotations (@Before, @After, and @Test).  If
your classes are missing these annotations, then they can be
automatically added to the bytecode of your test classes using the

ant addAnnotations

Now you are ready to run Proteja.  In order to run a test suite
without collecting coverage information, type

ant proteja

while in the main directory of Proteja.  In order to set the name of
the application, include the argument


where "appName" is the application name.  If you want to produce a
per-test case timings file, then include the argument


This will produce a file called


in the main directory of Proteja.  Each row of this file contains the
following information:

1) test case name
2) execution time in nanoseconds
3) batchFactor
4) coverageType
5) resetJVMOnBatch
6) applicationName
7) pass/fail information (false if passed, true if failed)

In order to collect coverage information and produce a coverage
report, include the argument


A coverage report will be saved in the "coverageReports" directory.
The name will be in the format


The contents of this file is a binary coverage matrix.  Rows represent
requirements (lines, methods, or classes) and columns represent test
cases (individual test cases or batches of test cases).  A 1 in column
i row j means that test case i covers requirement j.  A 0 means that
test case i does not cover requirement j.  There is also a summary row
and a summary column that contains the total number of 1's in each row
and column, respectively.


Once you have a timings file and a coverage report, you are ready to
perform test suite reduction and prioritization.  Proteja does not
give you the ability to perform these tasks; however, the Modificare
framework does.  See

for information on how to download and use this tool.


In order to run a reduced or prioritized test suite in Proteja, you
must first create a file that contains the full name of each test case
to be run on a separate line. Then, in order to perform the reduction
or prioritization, type

ant modifyTestSuite -DmodificationFile=fileName

This will modify the methodList in the protejaConfig.xml file to contain
the test cases in "fileName" in the order in which they are listed.
You can then run the test suite by typing

ant proteja [options]


Several applications are included with the Proteja download.  They are
located in the "apps" directory.  This section walks you through the
use of one of these applications, Sudoku.

First, you need to compile the Sudoku project.  Change into the Sudoku
project directory which, relative to the base directory of Proteja, is
"apps/SK".  In order to build the project, first type

ant init

which creates the "bin" directory that will hold this project's
bytecodes.  Then type

ant compile

in order to compile all of the source code into bytecode.  For Sudoku
and all of the other applications, a listing of the commands needed to
compile the source code is provided in a README file.

Second, you need to modify the build.xml and protejaConfig.xml files.
These files have already been pre-configured for all of the
applications provided with Proteja.  They are located in the
"data/settingsFiles" directory, with a subdirectory for each
application.  Copy these files into the base directory of Proteja.

You are now ready to run Proteja.  Before doing so, you need to add
JUnit annotations to the test classes by running

ant addAnnotations

while in the base directory of Proteja.  Then, in order to produce a
test case timings file and a coverage matrix for the Sudoku project,

ant proteja -DtestTimer=true -Dcobertura=true -DapplicationName=Sudoku

Please be patient, as this is a time-consuming process.  After this
task is completed, you can view the "Sudoku_Timing.dat" and
"coverageReports/Sudoku_1_line_true_Coverage.dat" files in order to
learn more about the relationship between the Sudoku application and
its test suite.


If you have questions or comments about Proteja, including bug
reports, please contact Jonathan Miller Kauffman (
If you are submitting a bug report, please be sure to include enough
information to reproduce the problem.


Automatically exported from



No releases published


No packages published
You can’t perform that action at this time.