Page 187 - 《软件学报》2025年第10期
P. 187
4584 软件学报 2025 年第 36 卷第 10 期
未来的即时缺陷预测研究具有一定的指导意义.
在数据预处理方面: 根据 RQ5 的实验结果, SMOTE 数据采样算法在 5 个评价指标上总体性能优于 RUS、
ROS 及 ROSE 采样算法. 因此本文建议未来的移动 APP 即时缺陷预测研究可使用 SMOTE 采样算法对缺陷数据
进行重平衡.
在模型构建方面: 根据 RQ1 与 RQ2 的实验结果, 相比朴素贝叶斯与逻辑回归分类器, 随机森林分类器能够获
得较优的 AUC、MCC、G-mean、F-measure@20% 和 IFA 性能. 因此, 未来的移动 APP 即时缺陷预测研究可使用
随机森林分类器构建模型.
在模型性能方面: 根据 RQ1 与 RQ2 的实验结果, 相比 RA-SZZ 算法, B-SZZ 算法在大部分指标上的得分显著
下降, 而 AG-SZZ 和 MA-SZZ 算法仅会造成少数指标得分下降, 大多数情况下与 RA-SZZ 算法的性能基本一致或
差距较小. 总的来说, RA-SZZ 算法具有较好的数据标注质量.
在模型解释方面: 根据 RQ3 与 RQ4 的实验结果, 不同 SZZ 算法对预测结果的解释会一定程度的影响. 特别是
当预测结果为有缺陷时, 度量元 nuc 和 la 与结果高度相关. 因此, 当开发人员提交的变更中涉及历史修改次数较
多的文件或新增了大量代码行时, 有必要重点审查该变更是否引入了缺陷.
此外, 类是否平衡对模型的性能有影响, 但对模型的解释性影响较小, 因为分类模型的性能往往依赖于数据的
分布和数量, 而模型的解释通常关注不同度量元的依赖关系, 解释性方法如 SHAP、LIME 等通常关注单个样本或
特定预测的解释, 而不是整体的类别不平衡问题. 度量元 nuc、la 和 sexp 往往伴随多个模块的修改, 从而影响模块
之间的耦合程度和依赖性, 涉及的模块越多则越可能出现缺陷. 因此无论是类平衡与否, 这些度量元均表现出了较
高的排名.
在 SZZ 算法方面: 在今后构建移动 APP 即时缺陷预测模型时, 应避免使用 B-SZZ 算法进行数据标注. 由于
RA-SZZ 算法所标注的数据具有较低的噪音水平, 又可获得较好的预测性能与解释, 因此本文推荐使用 RA-SZZ
算法进行数据标注, 特别是在计算资源充足的情况下.
5.3 有效性威胁
构建有效性: 在软件度量元的提取阶段, 本文使用开源工具 PyDriller [71] 来提取 Git 仓库中的代码变更数据,
PyDriller 已被广泛应用于软件缺陷预测方面的研究, 可靠性较强. 在数据标注阶段, 本文使用 Rosa 等人 [84] 提供的
4 种 SZZ 实现算法进行数据标注. 在类平衡场景下, 本文对比了随机欠采样、随机过采样、ROSE 和 SMOTE 这
4 种采样算法的性能差异, 发现 SMOTE 在总体上具有最优的性能. 最后采用 AUC、MCC、G-mean 以及工作量感
知指标 F-measure@20%、IFA 来评价模型, 这些指标被广泛应用于已有的研究中 [37,41,85,86] . 此外, 本文应用了 SKESD
统计测试方法来保证实验结果的可靠性. 由于 SZZ 算法依赖于修复缺陷的变更, 对于修复缺陷或关联 issue 的变
更 (例如#123-bug fix for android 12), 如果开发人员对修复变更的描述不正确, 那么可能会带来噪音. 其次, 如果提
交信息中不包含缺陷关键字, 仅包含 issue ID (例如 #123 xxx), 则需要进一步判断该 issue 是否属于缺陷类型. 本文
对所有缺陷类型的 issue 进行了人工筛查, 发现这些 issue 对本文数据标注的影响可以忽略不计. 然而, 在未来的数
据挖掘阶段的实验中, 应当考虑到这些 issue. 最后, 本文使用 RA-SZZ 作为基准算法, 但该算法仍然可能存在错误
标记的变更. 为了尽量减少 RA-SZZ 算法对本实验的影响, 本文将开发过程较为规范的大型 APP 项目作为实验对
象, 以降低开发人员提交的不规范的缺陷修复变更对 SZZ 标注算法的影响.
内部有效性: 首先, 为验证本文所使用的 4 种 SZZ 算法所标记的数据是否准确, 本文将 B-SZZ 所标注的数据
集与 Commit guru [87] 所生成的数据集进行了对比, 发现数据基本一致. 其次, 对于每一个项目, 确保了各对比模型
使用相同的数据进行 SKESD 统计测试. 此外, 本文使用 Python 库中的 SHAP 算法包进行模型解释, 并且在局部解
释方面, 确保了类不平衡与类重平衡情况下对相同的变更进行解释.
外部有效性: 本文使用的 17 个移动 APP 项目均来源于 GitHub 社区, 其中 12 个项目在先前的研究 [44] 已被使
用过, 其余 5 个项目来自 GitHub 社区中开发者较多, 项目较为完善, 且发布于应用市场的大型移动项目, 一方面,
这些项目的开发流程较为规范, 不仅保证了数据集的可靠性, 而且能够保证 SZZ 算法标注出尽可能多的缺陷. 另

