Page 163 - 《软件学报》2025年第10期
P. 163

4560                                                      软件学报  2025  年第  36  卷第  10  期


                 缺陷行进行溯源, 以识别出第         1  次引入这些缺陷行的变更. 这些变更被认为是引入缺陷的变更, 在获得引入缺陷的
                 变更集合后, SZZ   对其进行过滤, 最终得到剩余的变更, 即为引入缺陷的变更.
                    目前, 许多即时软件缺陷预测研究都采用              SZZ  算法来识别引入缺陷的变更          [6,8,9] , 并将其用于数据标注的工
                 作. 然而, 先前的研究发现       SZZ  算法将注释行或空白行的代码更改错误地视为有缺陷的变更, 从而影响了数据
                 的缺陷标注质量      [13−15] . 这些错误标注的变更包括假阳性和假阴性, 假阳性指该变更没有引入任何缺陷, 但错误地
                 被认为引入了缺陷; 而假阴性则相反, 指该变更引入了缺陷, 但错误地被认为没有引入缺陷. 然而, 现有的即时软
                 件缺陷预测研究大都仍采用原始的             SZZ  算法  [6,8,16] , 这可能会导致数据质量下降的问题, 进而影响缺陷预测模型
                 的性能与解释.
                    为了解决原始      SZZ  算法中标注不精确的问题, 研究人员提出一系列的改进算法                   [13−15] , 以提高数据的标注质
                 量. 为了比较不同     SZZ  算法的标注性能, Fan    等人  [5] 面向开源框架应用进行了实证研究并对             B-SZZ、AG-SZZ、
                 MA-SZZ  和  RA-SZZ  进行了比较. 他们发现, B-SZZ、MA-SZZ     算法不太可能导致即时缺陷预测模型的性能显著
                 降低, 而  AG-SZZ  则会导致模型性能显著下降. 然而, (1) 该研究采用           out-of-sample bootstrap  交叉验证算法进行随
                 机数据划分, 其可能会使用当前的变更来预测之前的变更                   (比如用  2023  年的变更预测    2021  年的变更), 这与实际
                 软件开发过程不符. (2) 为解决缺陷数据的类不平衡问题, 该研究使用随机欠采样技术对训练数据进行类重平衡,
                 这可能会导致重要数据信息和关键变更的丢失                [16] . (3) 该研究使用特征重要性算法仅对缺陷预测模型进行了全局
                 解释, 而忽略了对模型进行局部解释. 全局解释侧重于模型对所有代码变更上的决策和预测结果进行解释, 局部解
                 释侧重于对模型在单个变更上的具体预测结果进行解释. 事实上, 特征重要性只能解释软件度量元对模型的整体
                 影响大小, 不能解释是对模型产生正类            (有缺陷) 还是负类     (无缺陷) 影响. 由于全局解释只能解释度量元对模型整
                 体的影响, 不能解释模型在某个变更上的预测结果, 因此无法反映出在单个变更上, 各个度量元对模型的贡献大
                 小. 总的来说, 随机进行数据划分可能导致使用当前的变更来预测之前的变更, 而下采样算法可能会降低预测模型
                 的性能, 同时忽略个体预测结果的局部解释将不能很好地理解模型在单个变更上的决策, 以上这些因素会不利于
                 即时缺陷预测模型在实践中的快速发展与应用.
                    据我们所知, 迄今为止, 还没有一项工作实证研究数据标注算法对移动                      APP  即时缺陷预测模型的性能与解释
                 的影响. 为了弥补这一空白, 并结合现有研究的不足之处, 本文大规模地评估了不同                         SZZ  算法错误标注的变更对
                 移动  APP  即时缺陷预测模型的影响. 具体地, 本文从           GitHub  上选择了  17  个大型移动   APP  项目, 其中  12  个项目
                 参考先前的论文      [17] , 并抽取  Kamei 等人  [9] 提出的  14  个变更度量, 在此基础上使用  4  种  SZZ  算法进行数据标注; 采
                 用时间序列划分方式进行数据划分, 以更加符合实际情况; 在类不平衡处理中, 使用                         SMOTE  采样算法, 以避免重
                 要数据信息与关键变更的丢失; 利用随机森林、朴素贝叶斯和逻辑回归分类器分别构建即时软件缺陷预测模型,
                 以评估各   SZZ  算法的标注质量对预测模型性能与解释的影响, 并使用                 SKESD  和  SHAP  算法对预测结果进行统计
                 显著性检验与可解释性分析. 本文发现, SZZ           错误标注的变更会对移动          APP  即时软件缺陷预测模型的性能与解释
                 产生不同程度的影响.
                    本文的主要贡献可总结如下.
                    (1) 在  17 个项目上大规模实证比较了       B-SZZ、AG-SZZ、MA-SZZ   和  RA-SZZ  算法的数据标注质量对移动       APP
                 即时缺陷预测性能与解释的影响.
                    (2) 采用时间序列交叉验证方法, 更好地捕捉数据中的时序特征, 提高实验结果的真实性, 并且可以避免使用
                 当前的数据预测过去的数据, 以更加符合实际软件开发过程.
                    (3) 使用  SMOTE  采样算法可以有效地重平衡训练数据, 保留了原始数据的特征, 增加了多样性, 有助于模型
                 更好地学习和泛化, 同时避免丢失重要数据信息和关键变更.
                    (4) 采用  SKESD  和  SHAP  算法对结果进行排序比较与解释分析, 发现           SZZ  错误标注的变更会影响移动         APP
                 即时缺陷预测的性能与解释, 特别是一些最为关键的度量元                   (例如  la 和  nuc).
                    (5) 构建了移动    APP  即时缺陷预测数据集, 并公开本文的源程序以及详细的实验结果, 便于其他研究者进行
                 后续研究 (https://github.com/Owner-MR/JIT-DP-for-mobile-APP.git).
   158   159   160   161   162   163   164   165   166   167   168