jCUTE
The Java Concolic Unit Testing Engine (jCUTE) automatically generates unit tests for Java programs. Concolic execution combines randomized concrete execution with symbolic execution and automatic constraint solving. Symbolic execution allows jCUTE to discern inputs that lead down different execution paths; randomized concrete execution helps it overcome limitations of the constraint solver, like the inability to analyze system calls or solve general systems of non-linear integer equations. Through this combination, jCUTE is able to generate test cases that execute many different execution paths in real Java programs.
jCUTE supports multi-threaded programs. It can discover race conditions and deadlocks through systematic schedule exploration.
Publications
- Koushik Sen and Gul Agha. A race-detection and flipping algorithm for automated testing of multi-threaded programs. In Haifa Verification Conference, volume 4383 of Lecture Notes in Computer Science, 166–182. Springer, 2006.
- Koushik Sen and Gul Agha. CUTE and jCUTE: concolic unit testing and explicit path model-checking tools. In CAV, volume 4144 of Lecture Notes in Computer Science, 419–423. Springer, 2006.
- Koushik Sen, Darko Marinov, and Gul Agha. CUTE: a concolic unit testing engine for C. In ESEC/SIGSOFT FSE, 263–272. ACM, 2005.
- Patrice Godefroid, Nils Klarlund, and Koushik Sen. DART: directed automated random testing. In PLDI, 213–223. ACM, 2005.
Downloads
- The latest source code version is available on the jCUTE Github page.
- Version 1.0: Binary distribution :: Sources
Documentation
jCUTE requires an installed and working Java Development Kit (JDK) version 1.4 or later. To run jCUTE on a 32-bit system, download and unzip the binary distribution.
- On Linux, run the
setup
script. Then execute thejcutegui
script. - On Windows, run the
jcutegui.bat
batch file.
Compiling the Constraint Solving Library on Linux
jCUTE uses the lp_solve
linear programming library
for constraint solving. It comes with pre-compiled 32-bit versions of
this C library, which it accesses via the Java Native Interface (JNI).
However, the library and the wrapper were compiled against old
standard libraries (libstdc++5.so
) that are no longer available on
modern Linux systems. A potential solution for this is to install an
old 32-bit Linux image into a virtual machine for running jCUTE in it.
Another solution is to compile the libraries on one's system. The
README
file contains instructions for compiling
lp_solve
and its JNI wrapper.
64-bit Systems
The lp_solve
library compiles and appears to work fine on 64-bit
systems.
License
The jCUTE software is NOT in the public domain. However, it is freely available without fee for education, research, and non-profit purposes as described in the complete jCUTE license. The third-party libraries used by jCUTE are licensed as described in their license files.
History
jCUTE was designed and implemented by Koushik Sen around 2006.