工具介绍&入门
BugLocator(12年的) 下载地址、参考文献、 站内导读
Zhou J, Zhang H, Lo D. Where should the bugs be fixed? more accurate information retrieval-based bug localization based on bug reports[C]//2012 34th International Conference on Software Engineering (ICSE). IEEE, 2012: 14-24.
要求JDK 1.6.7+,使用方法及示例:
java -jar BugLocator.jar [-options]
-b indicates the bug information file,the bug information file must be .xml file in the data folder.
-s indicates the source code directory.
-a indicates the alpha factor for combining vsmScore and simiScore
-o indicates the result file,the format of result file is "bug id, relevant source code file,rank(start with 0),score".
java -jar BugLocator.jar -b E:\Data&Tool\data\SWTBugRepository.xml -s E:\Data&Tool\swt-3.1\src -a 0.2 -o E:\Data&Tool\output.txt
XML格式:
<bugrepository name="Name">
<bug id="1" opendate="" fixdate="">
<buginformation>
<summary>Summary</summary>
<description>Description</description>
</buginformation>
<fixedFiles>
<file>Xxxx.Xxxx.Xxxx.java</file>
</fixedFiles>
</bug>
...
</bugrepository>
使用 Defects4J 的 Csv 项目测试,配置好环境后,输入:
defects4j query -p Csv -q "report.id,report.url,classes.modified" >> 保存的文件
1,CSV-75,https://issues.apache.org/jira/browse/CSV-75,"org.apache.commons.csv.ExtendedBufferedReader"
2,CSV-96,https://issues.apache.org/jira/browse/CSV-96,"org.apache.commons.csv.CSVRecord"
3,CSV-58,https://issues.apache.org/jira/browse/CSV-58,"org.apache.commons.csv.Lexer"
...
13,CSV-168,https://issues.apache.org/jira/browse/CSV-168,"org.apache.commons.csv.CSVFormat;org.apache.commons.csv.CSVPrinter"
14,CSV-171,https://issues.apache.org/jira/browse/CSV-171,"org.apache.commons.csv.CSVFormat"
15,CSV-219,https://issues.apache.org/jira/browse/CSV-219,"org.apache.commons.csv.CSVFormat"
16,CSV-224,https://issues.apache.org/jira/browse/CSV-224,"org.apache.commons.csv.CSVParser"
修复的文件 fixedFiles 找到了,进入对应网址找 Summary 和 Description,apache 的这个跟踪系统很方便:
按照 XML 格式整理好数据,同时将 Csv 项目 checkout 出来( 这里偷懒checkout的是最新一个错误版本Csv-16b,最好要 “版本” 与 “数据” 对应 )。然后执行 jar 包,生成:
1,org.apache.commons.csv.ExtendedBufferedReader.java,0,0.8 # 这个文件排第一,相似度0.8,优先检查
2,org.apache.commons.csv.CSVRecord.java,0,0.8
3,org.apache.commons.csv.Lexer.java,0,0.8
4,org.apache.commons.csv.CSVParser.java,0,0.8
5,org.apache.commons.csv.CSVPrinter.java,1,0.37643373
6,org.apache.commons.csv.CSVRecord.java,0,1.0
7,org.apache.commons.csv.CSVParser.java,2,0.61523604
8,org.apache.commons.csv.CSVFormat.java,2,0.6730713
9,org.apache.commons.csv.CSVRecord.java,0,1.0
10,org.apache.commons.csv.CSVPrinter.java,1,0.5764337
11,org.apache.commons.csv.CSVParser.java,2,0.5837127
12,org.apache.commons.csv.CSVFormat.java,2,0.5244822
13,org.apache.commons.csv.CSVFormat.java,0,0.8178425
13,org.apache.commons.csv.CSVPrinter.java,2,0.3912273 # 这个文件排第三,相似度只有0.39
14,org.apache.commons.csv.CSVFormat.java,0,0.85304934
15,org.apache.commons.csv.CSVFormat.java,0,0.98891234
16,org.apache.commons.csv.CSVParser.java,0,0.84326035
# Top-1为10
如果想针对一个查询生成所有的文件排名,就要将 src 中所有的 .java 文件放到 fixedFiles 里面。
Defects4J 项目
通过上节的命令可以获取项目错误报告地址(D4J中四种形式,个人认为错误报告不应当包含 patch,在收集过程中删除。对于回帖式的问题跟踪系统也只将提问者第一段作为错误报告):
- https://issues.apache.org/jira/browse/<项目-编号>【apache】
- https://sourceforge.net/p/<项目>/bugs/<编号>【sourceforge】
- https://storage.googleapis.com/google-code-archive/v2/code.google.com/<项目>/issues/issue-<编号>.json【google】
- https://github.com/<作者>/<项目>/issues/<编号>【github】
github
sourceforge
google
一些可能用到的:
- 并行快速操作:放入Word,Ctrl+H 将 ^p 替换为空
- Json 可以在这里直观解析 https://www.json.cn/
具体项目
流程:写个 Python 生成 XML 文件,然后写个 Shell 生成最终结果。