Page 172 - 《软件学报》2025年第10期
P. 172
李志强 等: SZZ 误标变更对移动 APP 即时缺陷预测性能和解释的影响 4569
(3) 将所有变更按照提交时间排序, 划分训练集和测试集.
(4) 根据 4 种 SZZ 算法标注的训练集, 使用随机森林、朴素贝叶斯与逻辑回归分类器分别构建即时缺陷预测
模型.
(5) 对测试集中每个变更 (即实例) 预测其是否引入了新的缺陷.
(6) 如本文第 2.4 节所述, 将 RA-SZZ 标注的数据集作为真实数据集.
(7) 对即时缺陷预测模型进行性能评估, 并计算评价指标.
(8) 最后使用 SKESD 和 SHAP 算法分别对预测结果进行排序与解释.
3.1 数据预处理
Tantithamthavorn 等人 [72] 发现相关性较强的度量元会影响即时缺陷预测模型的性能与解释. 因此, 直接使用
这 14 个度量元可能会影响模型的性能表现或引起错误的模型解释. 基于先前的研究 [9] , 在构建即时缺陷预测模型
前需要对数据集进行预处理, 预处理工作分为两步.
数据偏斜: 由于数据集中大部分度量值存在偏斜且较为分散, 因此需要对数据进行归一化处理. 为保持数据间
的相对关系, 使得数据的分布更加均匀, 与先前研究一样 [5] , 本文采用 ln(x+1) 对数变换. 因为 Fix 是一个二进制度
量元, 因此不对其进行处理.
度量元相关性: 先前的研究表明相关度量元会对缺陷预测模型产生影响 [72] . 此外, 度量元的相关程度在不同
项目上可能具有差异性. 因此, 本文对每个数据集的所有度量元进行相关性处理. 具体地, 采用 R 语言提供的
AutoSpearman 算法包 [73] 分别对每个项目进行 Spearman 相关性分析和方差分析, 以选取度量元.
3.2 数据集划分
对于即时缺陷预测中数据集的划分, 已有的研究表明 [65,74] , 代码变更遵循时间顺序, 而使用交叉验证随机划分
数据集的方式并不符合实际情况. 例如, 用 2023 年提交的变更来预测 2021 年的变更是否引入了缺陷, 这并不符合
常理. 此外, 还会导致模型准确度虚高. 为此, Yang 等人 [34] 提出了一种基于时间感知的数据集划分方法.
根据 Yang 等人 [34] 的时间序列划分方法, 对于每个项目, 本文将所有变更根据提交日期进行排序, 并将同一个
月中的所有变更分为一组. 假设一个项目的所有变更被分为 n 组, 则训练集为第 i 和第 i+1 组, 测试集为第 i+4 和
第 i+5 组 (1 ⩽ i ⩽ n−5), 从而保证每个训练集和测试集包含两个月的变更数据. 这样划分的理由如下: (1) 大多数项
目的开发周期为 2 个月. (2) 每个训练集和测试集具有两个月的间隔, 确保开发人员有足够多的时间修复更多缺
陷. (3) 确保训练集和测试集有足够的实例. (4) 使用与预测变更日期相近的变更数据确保实验的有效性.
3.3 模型构建
参考 Fan 等人 [5] 的研究工作, 本文使用随机森林、朴素贝叶斯和逻辑回归 3 种分类器进行模型构建, 在传统
分类和工作量感知排序两种情况下分别构建即时缺陷预测模型. 特别地, 本文采用基于 CBS+ [37] 的工作量感知即
时缺陷预测技术, 该模型目前被证明具有较优的性能. 在本文实验中, 随机森林、朴素贝叶斯和逻辑回归的实现使
用 R 语言中的 randomForest 包 [75] , naivebayes 包 [76] 以及 glm 函数.
3.4 性能评价指标
为评估缺陷预测模型的性能, 本文使用 AUC、MCC 和 G-mean 这 3 个非工作量感知的评估指标, 其已被证明
在类不平衡场景下能够保持稳定 [77] . 此外, 使用 F-measure@20% 和 IFA 两个工作量感知的评估指标 [37] .
AUC (area under curve), 即曲线下的面积, 其指受试者工作曲线 (receiver operating characteristic, ROC), ROC 曲
线绘制了在所有阈值下真阳性率 (true positive rate, TPR) 关于假阳性率 (false positive rate, FPR) 的函数曲线. AUC
的取值范围为 [0, 1], 若 AUC 得分越高, 则该模型表现越好, 若 AUC 得分小于或等于 0.5, 则说明该模型的预测没
有优于随机预测. 目前, AUC 已广泛应用于缺陷预测研究 [6,9,78] . 由于缺陷数据普遍具有类不平衡的特点, 而 AUC
不受类别分布以及数据的类不平衡影响, 因此其常作为类不平衡场景下的评价指标.
[4]
在二分类场景中, MCC (Matthews correlation coefficient) 用于计算预测值和真实值之间的关系, 其取值范围

