The first systematic study on the characteristics and causes of bugs in mature, widely-used Java decompilers.
##Introduction
This reposotiry provides the data of paper "Understanding and Finding Java Decompiler Bugs", which consists of four parts:
- the main data is stored in file 333 unique bugs.xlsx of folder issueStudyData, where each sheet is for each project;
- In file 333 unique bugs.xlsx, for each bug, ErrorType represents its error symptom, Provided_Artifacts represents the artifacts provided in its issue, Duration represents the fix duration, Issue represents the detailed issue address, Issue_Commit represents the fixing commits for the bug, Modified_Code represents the lines of code modified in the commits, Involved_Files represents the buggy files, Note uses "n-fix" to note that this row is a multiple fixing commits to the bug above, n-bug to note that this row is a bug that share the same issue with the bug above;
- There are also many interesting informations not mentioned in our paper: Target_Structure represents the code structures the decompilation failure is related to mentioned in the issue; Detailed_Failure_Process represents the detailed sub-stage of this decompilation bug is in, Involved_Methods represents the buggy methods of the buggy files.
- File 3 Project files to decompilation stages mapping contains the mapping between the files of the three projects and the decompilation stages mentioned in our paper, namely Instantiation, Entity, Generation, Optimization, Type Inference, Other, Region Restoration and Sugaring. To obtain the related stages of a bug, you can link the two files 3 Project files to decompilation stages mapping and 333 unique bugs.xlsx with their buggy files.
(2) the results of three decompilers when decompiling the 580*2 tests generated by JD-Tester using JavaFuzzer and Hephaestus:
- the main data is summarized in two folders named as "JavaFuzzer" and "Hephaestus", each of which contains three folders *-detailedExperimentData contain the detailed experiment data of the three projects;
- Inside three folders, an zip file named as "allData.zip" contains all the detailed data;
- Meanwhile, every typical case of each bug can be found in folder errorSamples of *-detailedExperimentData;
- the main data is summarized in the folder bugDetailedData;
- The further analyses of these bugs are given at first, and then the listing of the bugs, where: ID gives a unique ID of the bug that can be mapped with Bug ID of (2), Failure Period represents the failure period of the test, # represents on how many tests the bug occur among the 1160 tests, Description (Error Logs) represents the error log or our description of the failure,, Reported Issue represents the issue where we report the bug to the developers, State represents the state of the issue.
- JD-Tester can be found in the 'Releases';
- JD-Tester is a differential testing framework for Java decompilers. JD-Tester utilizes two effective Java program generators, namely JavaFuzzer(https://github.com/AzulSystems/JavaFuzzer) and Hephaestus(https://github.com/hephaestus-compiler-project/hephaestus) to construct executable Java tests and finds exceptions, syntactic, and semantic inconsistencies (i.e. bugs) between a generated test and its compiled-decompiled version (through compilation and execution); all 37 bugs in (3) are revealed when using JD-Tester;
- Now JD-Tester supports the tests to three famous Java decompilers, they are Jadx (https://github.com/skylot/jadx), CFR (https://github.com/leibnitz27/cfr) and Fernflower (https://github.com/fesh0r/fernflower, an unofficial mirror). Support for more famous Java decompilers is coming soon. In addition, JD-Tester takes advantages of Perses(https://github.com/uw-pluverse/perses) for buggy tests reduction.