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  算法标注出尽可能多的缺陷. 另
   182   183   184   185   186   187   188   189   190   191   192