system: [SYSTEM]

user: 3. 分析过程 3.1. 数据描述 本文中所用的数据是来自于真实工程中的项目数据，是在软件生产过程中开发人员进行自测试产生的过程数据。变量解释如表1所示，数据格式如表2所示。 Table 1 Symbolic explanatio 变量序号 变量符号 变量所代表的意义 变量类型 1 Stage 测试阶段 数值型 2 Weeks 测试周 数值型 3 Requirement_chg 需求变更量 数值型 4 Loc 代码行数 数值型 5 Complexity 复杂度 数值型 6 Tc_num 测试用例个数 数值型 7 Tc_num_loc 测试资源分配特征之一，测试用例针对软件代码行数的分配 数值型 8 Tc_num_complexity 测试资源分配特征之一，测试用例针对软件圈复杂度的分配 数值型 9 Stmt_cvg 语句覆盖率 数值型 10 Stmt_cvg_tc_num 每个测试用例对语句覆盖的贡献 数值型 11 Branch_cvg_tc_num 每个测试用例对分支覆盖的贡献 数值型 12 Branch_cvg 分支覆盖率 数值型 表1. 符号解释 Table 2 Data shee stage weeks stage_weeks requirement_chg loc complexity tc_num_loc 1 1 1 0 42140 4840 9.49 1 2 2 0 42140 4840 18.98 1 3 3 0 42140 4840 26.1 1 4 4 0 42140 4840 30.85 1 5 5 0 42140 4840 29.9 1 6 6 4 42140 4840 44.14 1 7 7 4 42140 4840 11.39 1 8 8 0 42140 4840 74.51 tc_num_complexity tc_num stmt_cvg branch_cvg stmt_cvg_tc_num branch_cvg_tc_num fail_num 8.26 40 5 5 12.5 12.5 1 16.53 80 8 8 10 10 0 22.73 110 12 11 10.91 10 3 26.86 130 15 15 11.54 11.54 20 26.03 126 18 18 14.29 14.29 19 38.43 186 20 20.5 10.75 11.02 0 9.92 48 20 20.5 41.67 42.71 16 64.88 314 24 25 7.64 7.96 3 表2. 数据简表 对数据进行初步的分析(如图1所示)，经过Kolmogorov-Smirnov检验 [ 8 ] 可知，假设软件失效数为poisson分布，经检验，P值为0.0678，故假设软件失效数(fail_num)是呈poisson分布类型，同理可以假设，这些解释变量为正态分布类型，因此，采用poisson函数作为连接函数，将解释变量通过线性组合的方式来联结服从poisson分布的响应变量。 图1. 变量分布图 多重共线性 [ 9 ] 是指线性回归模型中的解释变量之间存在高度相关关系，它的存在使得模型无法求解。解释变量之间存在的共线性，可利用两个解释变量间的Pearson相关系数来判别两者的相关性程度，如果解释变量间的相关系数较大，则两个解释变量之间通常存在严重的共线性关系。处理变量间共线性的方法有主成份分析法、岭回归法、剔除变量法等。 由表3可知，代码行数、复杂度、语句覆盖率的相关系数均大于0.7，因此，它们之间存在着很强的共线性。又有每个测试用例对语句覆盖的贡献和每个测试用例对分支覆盖的贡献相关性很高为0.998。 Table 3 Pearson coefficien 1 2 3 4 5 6 7 8 9 10 11 12 1 1 0.97 −0.29 0.64 0.76 0.43 0.42 0.45 0.67 0.64 −0.18 −0.19 2 0.97 1 −0.2 0.72 0.82 0.45 0.44 0.47 0.79 0.77 −0.14 −0.16 3 −0.2 −0.2 1 0.03 −0.02 0.04 0.05 0.04 0.17 0.20 0.14 0.14 4 0.64 0.72 0.03 1 0.98 0.25 0.26 0.30 0.77 0.73 −0.04 −0.05 5 0.76 0.82 −0.02 0.98 1 0.31 0.32 0.35 0.80 0.76 −0.07 −0.08 6 0.43 0.45 0.04 0.25 0.31 1 0.99 0.99 0.39 0.40 −0.40 −0.4 7 0.42 0.44 0.05 0.26 0.32 0.99 1 0.99 0.39 0.41 −0.40 −0.4 8 0.45 0.47 0.04 0.30 0.35 0.99 0.99 1 0.42 0.43 −0.40 −0.4 9 0.67 0.79 0.17 0.77 0.80 0.39 0.39 1 0.99 0.06 0.05 10 0.64 0.77 0.20 0.73 0.76 0.41 0.41 0.43 0.99 1 0.07 0.06 11 −0.18 −0.14 0.14 −0.04 −0.07 −0.4 −0.4 −0.4 0.06 0.07 1 0.99 12 −0.19 −0.16 0.14 −0.05 −0.08 −0.4 −0.4 −0.4 0.05 0.06 0.99 1 表3. Pearson系数 3.2. GAM模型的单因素分析 根据变量预分析的结果，将stage (测试阶段)、weeks (测试周)、requirement_chg (需求变更量)、loc (代码行数)、complexity (复杂度)、tc_num_loc (测试资源分配特征)、tc_num (测试用例的个数)、stmt_cvg 语句覆盖率)、branch_cvg (分支覆盖率)、stmt_cvg_tc_num (每个测试用例对语句覆盖的贡献)、branch_cvg_tc_num (每个测试用例对分支覆盖的贡献)等十二个影响因素作为解释变量，每次选择1个影响因素作为解释变量，失效数 (fail_num)作为响应变量，采用样条平滑函数分别构建模型，并分析每个解释变量对响应变量的影响显著性及模型的拟合优度，如表4所示。结果表明：所有的影响因素均在P值 < 0.01水平下对失效数变化有显著影响，表明各影响因素单独作为失效数变化解释变量具有统计学意义；tc_num (测试用例的个数)、branch_cvg_tc_num (每个测试用例对分支覆盖的贡献)、stmt_cvg_tc_num (每个测试用例对语句覆盖的贡献)对失效数变化影响的模型解释率相对较高，调整判定系数较大，表明这三个因素与失效数变化构建模型方程拟合度较优；其他影响因素对失效数变化的解释率较低，调整判定系数也较低，表明他们单独对失效数进行模型拟合时的解释能力较差，虽然部分解释变量对模型的拟合效果较差，但是他们均通过了显著性检验，均具有统计学意义。 当自由度值为1时，函数为线性方程，表明影响因素与响应变量失效数间具有某种线性关系；当自由度大于1时，表示函数是非线性曲线方程，影响因素与失效数之间具有某种非线性关系，且值越大，非线性关系越显著。结果表明：loc (代码行数)、complexity (复杂度)的自由度为1，与失效数变化具有显著的线性关系，branch_cvg (分支覆盖率)自由度为2左右，与失效数变化之间具有一定的非线性关系，而其他变化具有显著的非线性关系。 Table 4 Univariate analysi 平滑效应项 估计自由度 参考自由度 F P-value 方差解释率 调整判定系数：R 2 stage 3.84 4 88.74 <2e−16 5.98 −0.0199 weeks 3.647 4 88.83 <2e−16 6.34 −0.0199 Requriement_chg 6 5 2 0.0106 3.8 0.0271 loc 1 1 67.01 <2e−16 4.88 0.0048 complexity 1 1 54.03 4e−15 4.12 0.0014 Tc_num 8.559 9 284.5 <2e−16 21.4 0.0104 Stmt_cvg 4 3 41.43 4e−9 2.91 −0.021 S_c_tc_num 5 3 210.1 <2e−16 13.2 0.021 Branch_c_t_n 3.879 4 236.8 <2e−16 18.6 0.0611 Branch_cvg 1.98 2 17.98 <2e−16 1.37 −0.021 Tc_num_loc 3.278 4 1.645 0.00029 21.7 0.174 Tc_num_comple 3.219 4 1.525 4.71e−07 20.1 0.161 表4. 单因素分析 3.3. GAM模型的多因素分析 通过pearson相关系数 [ 10 ] 以及单因素影响分析可得到，loc (代码行数)与complexity (复杂度)、tc_num_loc (测试资源分配特征)与tc_num_complexity与tc_num (测试用例的个数)、stmt_cvg (语句覆盖率)与branch_cvg (分支覆盖率)、stmt_cvg_tc_num (每个测试用例对语句覆盖的贡献)与branch_cvg_tc_num (每个测试用例对分支覆盖的贡献)的相关性高达99.9%以上，且两者之间通过单因素分析的结果也高度相似，故判定其为可以互相代替的变量。 将单因素分析与去除共线性之后且经过显著性检验的七个影响变量stage (测试阶段)、weeks (测试周)、requriement_chg (需求变更量)、loc (代码行数)、tc_num (测试用例的个数)、stmt_cvg (语句覆盖率)、branch_cvg(分支覆盖率)作为解释变量，将失效数作为响应变量，进行多影响因素与失效数变化间的GAM模型构建拟合，模型同样采用恒等联系函数作为连接函数，平滑回归项采用样条平滑函数估计，模型拟合结果如表5所示。 Table 5 GAM model hypothesis test results of failure number changes and multiple influencing factor 指标 Stage Week Req_chg loc Tc_num Stmt_cvg Branch_cvg 估计自由度 2.309 1.129 1 1 6.602 3.414 1 参考自由度 2.888 1.222 1 1 7.685 4.204 1 F 4.500 6.932 2.595 0.0172 3.562 1.865 −1.692 P-value 0.0093 0.012 0.0124 0.01640 0.001 0.0117 0.845 表5. 失效数变化与多影响因素的GAM模型假设检验结果 多因素分析表明，branch_cvg (分支覆盖率)的p值>0.05，故不能假设他对失效数有显著影响，loc (代码行数)、stmt_cvg (语句覆盖率)、requriement_chg (需求变更量)在P值<0.05水平下显著影响失效数变化，其余驱动因素在P值<0.01水平下显著影响失效数变化。模型判定系数为0.743，方差解释率为75.5%，表明模型拟合程度较高，通过显著性检验的6个因素对失效数的解释率较高。因此可以确定他们对失效数变化有显著性影响。其中，模型判定系数 [ 11 ] 与方差解释率 [ 12 ] 定义如下： 模型判定系数： R 2 = S S R S S T = 1 − S S E S S R + S S E = 1 − ∑ i ( y i − y ⌢ i ) 2 ∑ i ( y i − y ¯ ) 2 第j个变量的方差解释率： σ i 2 ∑ j σ j 2 3.4. GAM模型的检验 3.4.1. 影响因素对失效数变化作用效应诊断 通过对多影响因素(解释变量)与失效数变化间建立GAM模型，获得解释变量的平滑回归函数，并得到影响因素对失效数影响效应图，如图2所示。图中虚线表示拟合可加函数的逐点标准差，即可信区间的上下限，实线代表失效数的平滑拟合曲线，横坐标表示各解释变量的实测值，纵坐标表示解释变量对失效数的平滑拟合值。纵坐标括号数值代表估计自由度值。结果表明，失效数变化与loc (代码行数)、requriement_chg (需求变更量)间的相关性表现为线性相关，随着loc (代码行数)或requriement_chg (需求变更量)数值递增时，失效数变化也呈现递增趋势，当stage (测试阶段)小于4时，失效数变化呈现单增趋势，其他变量呈现了非线性关系，并且波动较大，例如，对于变量tc_num (测试用例的个数)而言，当超过200后，失效数的变化呈现快速减少的趋势，这是由于当测试用例增加到一定数量以后，软件的可靠性就会随之增加，失效数变化就会随之减少。 图2. 影响因素对失效数变化的影响效应 3.4.2. 模型交叉检验 十折交叉验证 [ 13 ] ，英文名叫做10-fold cross-validation，用来测试算法准确性。是常用的测试方法。将数据集分成十份，轮流将其中9份作为训练数据，1份作为测试数据，进行试验。每次试验都会得出相应的正确率(或差错率)。10次的结果的正确率(或差错率)的平均值作为对算法精度的估计。 在通过模型假设检验及多曲线共线性分析后得到的解释变量与失效数构建的到的GAM模型的拟合优度较好，影响因素对失效数变化的解释率较高。同时，为了避免过拟合现象，采用十折交叉验证 [ 15 ] 对其建立的GAM模型进行验证。在给定GAM建模数据中，拿出9份数据进行建模型，留1份数据用刚建立的模型进行预报误差。十折交叉验证的预测结果如图3所示，验证结果如表6所示，其中利用每份数据集的平方和、方差解释率、以及RMSE [ 14 ] 作为检验标准，可以看到预测值与实际值的差值较小，结果说明，GAM模型的拟合效果较好，准确率较高。其中，RMSE的定义如下： R M S E = ∑ i = 0 n ( y i − y i ^ ) 2 n Table 6 Ten-fold cross-validation of the failure number GAM mode 数据集 1 2 3 4 5 6 7 8 9 10 平方和 0.51 0.41 0.49 0.53 0.48 0.42 0.42 0.47 0.51 0.48 方差解释率 70 64.9 66.6 72 69.6 64 70 69.9 67.8 71.5 RMSE 2.78 4.05 3.67 2.34 3.77 5.2 4.2 3.98 4，8 3.77 表6. 失效数GAM模型的十折交叉验证 图3. 失效数10折交叉验证的预测值 3.5. 带有交互项的GAM模型分析 失效数变化受多个因素的影响，各解释变量之间交互作用对失效数变化也会产生强烈的影响。在第二节中介绍的GAM模型中引入两个因素间的交互作用项，可得带有交互作用项的GAM模型如下 g ( u ) = a + f 1 ( X 1 ) + f 2 ( X 2 ) + ⋯ + f p ( X p ) + f 1 ， 2 ( X 1 ， 2 ) + ⋯ + f p − 1 ， p ( X p − 1 ， p ) 其中，f i ， j (X i ， j )为第i个因素和第j个因素的交互作用项。 把带有交互作用项的GAM模型用于第三节给出的数据，输出结果如表7所示。用于检验交互作用tc_num (测试用例的个数) × loc(代码行数)、tc_num (测试用例的个数) × branch_cvg (分支覆盖率)、tc_num (测试用例的个数) × stmt_cvg (语句覆盖率)的P值均小于0.05，所以可以认为这些交互作用影响是显著的。 从检验结果还可以发现，交互作用项主要发生在tc_num (测试用例的个数)与loc (代码行数)、branch_cvg (分支覆盖率)、stmt_cvg (语句覆盖率)之间，这也与失效数变化主要受测试用例个数与测试的复杂度(包括代码行数、分支覆盖率、语句覆盖率)的交互作用过程影响的特征吻合。 对具有显著性影响且具有统计学意义的交互作用进行可视化绘图，如图4所示。这种图显示了失效数变化在不同自变量维度下的变化特征。在图4中存在统计学意义的为图4(a)、图4(d)和图4(f)，由图4(a)可知，当loc (代码行数)小于48000时，失效数是不受tc_num (测试用例的个数)变化的影响的，当loc(代码行数)大于48000时，失效数才发生了变化，由图四(d)可知，当固定branch_cvg (分支覆盖率)时，随着tc_num (测试用例的个数)的增加，失效数在一定范围内波动变化，但是当tc_num (测试用例的个数)超过1000时，失效数呈现快速减小的趋势。图4(e)呈现的趋势与图4(d)相似。 本研究结果表明，以上提到的三项交互作用项与单因素模型相比较，在方差解释率以及调整方差系数方面都有所提高。且对于branch_cvg(分支覆盖率)在GAM模型中的影响不显著，但是引入tc_num (测试用例的个数) × branch_cvg (分支覆盖率)交互项后，对失效数变化有显著性影响。通过在GAM模型中引入交互作用项的分析，可以有效的定量分析影响失效数变化的重要特征，同时也可以得出失效数变化不但受各个因素的影响，而且受因素间的交互作用的影响。因此，今后还可以考虑三个因素的交互作用。 最后，建立带有交互作用项的GAM模型，模型结果如表8所示。得到模型的方差解释为97.9%，相较于GAM模型的方法解释率，提高了29.7%。判定系数R 2 = 0.989，得到模型效果良好，模型拟合程度较优。 Table 7 GAM model hypothesis test results of interaction factors and failure number 交叉项 Tc_num-loc loc—stmt_cvg Loc—branch_cvg 估计自由度 20.46 2 2 参考自由度 24.26 2 2 F 2.583 1.269 1.299 P-value 0.00225 0.288 0.28 方差解释率 62.3% 3.765 3.84% R 2 0.457 0.00797 0.00885 交叉项 Tc_num—branch_cvg Tc_num—stmt_cvg Stmt_cvg—branch_cvg 估计自由度 14.73 14.44 2 参考自由度 18.59 18.27 2 F 2，3 2.193 0.925 P-value 0.00945 0.0137 0.402 方差解释率 50.1% 48.9% 2.77% R 2 0.361 0.346 −0.00223 表7. 影响因素交互作用与失效数的GAM模型假设检验结果 Table 8 Final GAM model parameter tabl 指标 Tc_num-loc Stage Weeks Stmt_cvg-tc_num Branch-tc_num complexity 估计自由度 22.1 4 4 7，4 7.4 1 参考自由度 23 4 4 9 9 1 F 70 0.407 11.688 30.022 28 1.45 P 6.70e−7 0.040 0.003 5.9e−09 9.41e−07 0.03 表8. 最终GAM模型参数表 图4. 交互作用图 3.6. 机器学习模型与带有交互项的GAM模型的比较 为了比较带有交互项的GAM模型与现有的机器学习模型 [ 15 ] ，如岭回归、lasso回归、ElasticNet回归、支持向量机等的预测效果，对3.1节中的68组样本数据进行随机划分，选取70%样本作为训练集，30%样本作为测试集，对测试集中的样本，使用RMSE (root mean square error)指标： R M S E = ∑ i = 0 n ( y i − y i ^ ) 2 n 来评价模型的预测效果。计算结果如表9所示。 Table 9 Comparison of machine learning methods and GAM models with interactive term 方法 RMSE 相对RMSE 岭回归 12.76 −24.7% Lasso回归 14.38 −33.2% ElasticNet回归 14.58 −34.1% 支持向量机 10.37 −7.4% 带有交互项的GAM模型 9.6 - 表9. 机器学习方法与带有交互项的GAM模型比较表 表9中的第二列表明，带有交互项的GAM模型的RMSE值最低，相比ElasticNet回归RMSE降低了34.1%，相比较好的支持向量机方法仍降低了7.4%。由此可以得到，带有交互项的GAM模型对数据的预测效果要优于其他模型。