Phase-1 (Due: Oct. 25th)
Use ASM byte-code manipulation framework  to build an automated coverage collection tool that can capture the statement coverage for the program under test. Then, apply your tool to 10 real-world Java projects (>1000 lines of code) with JUnit tests (>50 tests) from GitHub  to collect the statement coverage for its JUnit tests. Note that your tool should (1) use Java Agent  to perform on-the-fly code instrumentation, (2) be able to store the coverage for each test method in the file system, and (3) be integrated with the Maven build system  so that your tool can be triggered by simply typing “mvn test” after changing the pom.xml file of the project under test. More implementation details are shown in the appendix.
Phase-2 (Due: Dec. 8th)
Choose any ONE from the following two automated test generation projects. Note that your score will be graded based on your own implementation of the existing techniques. You are also highly encouraged to come up with your own refinements and optimizations to earn extra credits!
• Automated test generation tool for Java library code, such as commons-utils and jodatime.
Automated test generation tool for detecting bugs in popular JVM implementations. The
Oracle HotSpot JVM  is recommended for evaluation
The code instrumentation way that we learnt in the class has to modify the bytecode file on the
file system. There are several limitations for that. First, the time can be wasted when reading and
writing back the bytecode files from/to file systems. Second, the bytecode file on the file systems
may be changed into a mess. Therefore, Java Agent  was proposed to change the bytecode file
only in the memory during the JVM load time. Whenever, a Java bytecode file is loaded into
JVM (for execution), Java Agent will transform that file and add instrumentations in the
memory, leaving the actual bytecode file on file systems unchanged. There is a much cleaner and
faster way to do code instrumentation. Java Agent can be directly combined with ASM to do
bytecode instrumentation on-the-fly .