Page 217 - 《软件学报》2020年第9期
P. 217
2838 Journal of Software 软件学报 Vol.31, No.9, September 2020
Fig.8 Scenario of query reformulation
图 8 查询重构的应用场景
需要重构的对象是用来构建查询语句的缺陷报告,因此,对缺陷报告的组成部分及特征有全面的理解十分
重要.在实际使用过程中,开发者也是需要根据初始查询的反馈结果来决定是否需要使用查询重构策略.因此,
对缺陷报告的分析是进行查询重构的前序工作.根据研究的前后承接关系,我们将这部分相关内容分为缺陷报
告分析和查询重构策略两个部分来介绍.
3.3.1 缺陷报告分析
2008 年,Bettenburg 等人 [70,114] 对现实项目中(例如 Apache)的开发者和用户进行一项调研.他们发现,用户提
交的报告内容与开发者希望收到的信息之间不匹配.开发者想要得到的信息是复现步骤、错误堆栈和测试用例
等,然而用户很难提供这些信息.为了解决这个问题,他们提出一个原型工具 CUEZILLA 来测量缺陷报告的质
量,并且能够向用户推荐填写缺陷的信息来提升报告质量.
2014 年,Kochhar 等人 [48] 总结了会影响缺陷定位有效性的潜在偏好:
1) 被错误分类的缺陷报告.被标记为缺陷的问题报告并非总是由缺陷引起,也包含了文档更新、代码重
构等;
2) 已经可定位的缺陷报告.缺陷报告中可能已经指出了有缺陷的程序文件,没有必要对这些报告使用缺
陷定位工具;
3) 不正确的真实值.在修复缺陷的更新提交中被修改的文件中,可能并非所有文件都与这个缺陷有关.
他们的实验结果表明,偏好(2)对 IRBL 有效性有显著影响,因此应当在后续研究中被纠正.
2018 年,Mills 等人 [53] 对缺陷报告进行调研,他们发现,缺陷报告中的大多数词汇的确可以用来构建有效查
询语句,从而使得在没有辅助查询扩展的情况下,可以成功进行缺陷定位.在此基础上,他们设计了一种遗传算
法(GA)来分析带有和不带有定位提示(localization hint,例如方法名)的缺陷报告文本,以获得一个接近最优的查
询,该查询提高了缺陷报告在 IRBL 应用中的潜力.然而在同年,Lawrie 等人 [52] 研究了缺陷报告在 IRBL 中的价
值.他们指出:GA 算法存在作弊(cheats)问题,因为 GA 算法根据查询的性能评估值来产生优质的查询.然而在现
实场景中,一个查询的性能评估值是未知的,因此不具备实用性.
2019 年,Rath 等人 [84] 着重分析了缺陷报告中结构化信息对 IRBL 方法的影响.他们发现,缺陷报告中的堆栈
踪迹信息更倾向于对缺陷定位结果产生负面影响,因此对包含这类信息的报告需要特别处理.与此同时,相比于
只包含自然语言的缺陷报告,那些包含源代码信息的缺陷报告不仅可以提升 BL 算法的性能,而且有助于开发
人员更快找到缺陷位置.
3.3.2 查询重构策略
2013 年,Sisman [61] 首先将查询重构策略应用到缺陷定位领域中.在不需要用户提供额外的输入信息的情况
下,他们的 QR 框架的工作原理是先进行一次初始查询得到相关的软件制品(artifact,例如文件)排名列表,然后从