This is the documentation page for the replication package of the ICSE 2024 paper "PPT4J: Patch Presence Test for Java Binaries".
Note: For more details on the paper, please refer to https://dl.acm.org/doi/abs/10.1145/3597503.3639231.
Note: This website is produced using AI-generated code comments and docstrings.
framework
folder contains the code of PPT4Jmisc
folder contains an example of using PPT4Jmisc/src/main/java/ppt4j/Demo.java
for detailed usage.scripts
folder contains utility scripts, written in Pythonlib
folder contains necessary jarsNote: We provide Docker images for replication. If you use Docker, you can just jump to the section "Using docker".
export JAVA_HOME=...
command to make sure that maven uses the expected version of JDK.ppt4j.database.root
field in framework/src/main/resources/ppt4j.properties
to that location. Or you can just extract to your home directory to make the property file unaltered.Linux, x86_64(amd64)
.minimal
(~250M download size, ~500M final usage) and complete
(~13G download size, ~22G final usage).complete
one provides an out-of-the-box experience (with dataset). Commands described in the next section can be executed without any further configuration.minimal
one provides a minimal running environment that satisfies software requirements (without dataset). To test the dataset in minimal
containers, please first run bash download.sh
in the home directory, and the script will start the downloading process.docker run
command.For detailed script/executable usage, please refer to the documentation below.
For a quick start, you can run python replicate_rq1.py
to get the results of RQ1 in the paper.
You can also use the Python scripts inside the scripts
folder for: project building and testing.
README.md
and all.iml
are located), run python -m scripts.<name> <args>
.<name>
: build, test
scripts.build
: wrapper of maven commands; no arg; build the Java
projectsscripts.test
: perform tests on the dataset. Please leave <args>
empty for detailed usage of this subcommand.framework/target/classes
. Packing them into a jar and use the jar will lead to unexpected behaviours, due to our implementation and the classpath mechanism in newer Java versions.