Takuan is a framework for analyzing and root causing OD tests using dynamic invariants generated by Daikon. Given an OD test, Takuan finds differences in the invariants collected from passing and failing runs, outputting “problem invariants”. Takuan then searches for methods that influence the problem invariants.
You'll need to install this fork of Daikon before running Takuan.
After doing so, run the following command:
./scripts/compile-takuan.sh
jq is needed as a dependency (https://jqlang.github.io/jq/manual/).
./takuan.sh <gitURL> <sha> <victim> <polluter> (<module>)
You can copy and paste a row directly from the Google Sheet, as the arguments are in the correct order.
To get the .inv
files, go to any Java 8 Maven project and run:
./daikon-gen-victim-polluter.sh <com.example.Test.victimMethod> <com.example.Test.polluterMethod>
Then analyze the generated logs with:
mvn exec:java -Dexec.args="daikon-pv.inv daikon-victim.inv daikon-polluter.inv"
Or:
mvn package
java -cp target/classes:daikon-5.8.16.jar in.natelev.daikondiffvictimpolluter.DaikonDiffVictimPolluter daikon-pv.inv daikon-victim.inv daikon-polluter.inv
Or, go to the folder where you ran daikon-gen-victim-polluter.sh
and run:
/path/to/daikon-diff-victim-polluter.sh
Provide a -o output.dinv
argument to write the results to a file.
To just run the test with the polluter (no logs will be generated):
./daikon-victim-polluter.sh test <com.example.VictimTest> <com.example.PolluterTest>
If the Java process runs out of memory during processing, you should try again with -XX:MaxRAMPercentage=50.0
or a higher number.