基于GAM模型对失效数变化的分析

您所在的位置:网站首页 r语言gam模型检验 基于GAM模型对失效数变化的分析

基于GAM模型对失效数变化的分析

2023-11-14 08:32| 来源: 网络整理| 查看: 265

基于GAM模型对失效数变化的分析Analysis of Failure Number Change Based on GAM Model DOI: 10.12677/CSA.2019.97141, PDF , HTML, XML,  被引量 下载: 719  浏览: 1,340  作者: 杨玉鑫*:北京航空航天大学,北京 关键词: 失效数;GAM模型;交互作用;Failure Number; GAM Model; Interaction 摘要: 本文针对软件生产进程中测试的过程数据,利用带有交互作用的GAM,对测试过程中的失效变化数据进行分析,研究影响因素以及因素间的交互作用。本文首先对失效变化数据,比较了GAM和带有交互作用的GAM的拟合效果;其次,比较了带有交互作用的GAM与现有的机器学习模型的预测结果。结果表明,带有交互作用的GAM相较于GAM所得的结果更加丰富,且优于已有的机器学习方法,因此这样的探讨分析是有意义的,并对软件开发以及采取测试决策有一定的实际指导意义。 Abstract: In this paper, the process data in the process of software production is used to analyze the failure change data in the test process by using GAM with interaction, and to study the influencing factors and the interaction between the factors. In this paper, the fitting effects of GAM and GAM with interaction are compared firstly with the failure change data. Secondly, the prediction results of GAM with interaction and existing machine learning model are compared. The results show that the GAM with interaction is more abundant than that obtained by GAM, and it is better than the existing machine learning method. Therefore, such analysis and analysis is meaningful. 文章引用:杨玉鑫. 基于GAM模型对失效数变化的分析[J]. 计算机科学与应用, 2019, 9(7): 1255-1265. https://doi.org/10.12677/CSA.2019.97141

1. 引言

对于安全关键软件而言,在整个软件生产的生命周期中会有大量的数据被记录下来,称之为过程数据 [1] 。不仅包括诸如软件代码行数、软件复杂度、软件版本、需求设计等软件开发过程数据,还有很重要的测试过程数据,比如测试用例的个数,发现失效的个数、测试覆盖情况。对于过程数据的分析有利于开发人员改变测试决策,进而提高软件可靠性。对于这部分数据的处理,现阶段有机器学习、深度学习的方法来进行失效数预测。

另外,基于软件可靠性模型的传统可靠性分析方法使用失效数据进行建模,这种可靠性分析方法忽略了软件本身的结构以及测试过程的特征造成对抽样观察到的失效数据的影响,没有充分利用安全关键软件开发过程以及自测试过程的特征数据。为了改进这种现象,提出了机器学习的方法对软件测试过程中的数据进行回归,比如:决策树、随即森林、岭回归等方法但是这种数据的数量是较少的,机器学习方法的拟合会出现偏差。并且利用机器学习方法的输入并没有考虑到影响因子之间的交互作用,为了考虑影响因子之间的交互作用,故本文提出了广义可加模型 [2] ,简称GAM,对多元数据进行拟合。

GAM是由数据驱动而非统计分布模型驱动的非参数回归模型,可对部分解释变量进行线性拟合,对其他因子进行光滑函数拟合。模型不需要预先设定参数模型,模型通过解释变量的平滑函数建立,能够自动选择合适的多项式。GAM属于非参数回归模型中的一种,非参数回归不需要模型满足线性的假设前提,可以灵活的探测数据间的复杂关系,但是当模型中的自变量数目较多的时候,模型的估计方差会加大,另外,基于核与光滑样条估计 [3] 的非参数回归中自变量与因变量间关系的解释也有难度,1985年Stone [4] [5] 提出加性模型,模型中每一个加性项使用单个光滑函数来估计,在每一加性项中可以解释因变量如何随自变量变化而变化,很好的解决了上述问题。1990年Hastie和Tibshirani [4] [5] 扩展了加性模型的应用范围,提出了广义加性模型。

本文针对软件生产与自测试过程中产生的过程数据,利用GAM分析影响因素与其的交互作用,进一步拟合软件的失效数,并对实际工程提出有效可行的建议。其中,文章的结构如下:

第一部分是对问题背景的介绍。

第二部分是对问题进行详细叙述与模型的详细介绍。

第三部分是运用模型对数据进行分析的结果。

第四部分是对数据分析结果的总结与实际指导意义。

2. 模型介绍

软件开发过程中的测试数据分析对调整测试策略和可靠性分析具有重要的意义。对于较小的数据量,机器学习模型并没有很好的预测效果,并且无法给出因素之间的交互作用,而在软件的实际研发中因素之间的交互作用往往是存在的,例如,代码行数和测试用例个数之间的交互作用。本文尝试用GAM来分析各个因素的影响以及因素之间的交互作用,以提高数据分析的效果。

GAM,属于半参模型 [6] 中的一种,其表示形式如下所示:

g ( u ) = a + f 1 ( X 1 ) + f 2 ( X 2 ) + ⋯ + f p (Xp)

其中, u = E ( Y / X 1 , X 2 , X 3 , ⋯ , X p ) , g ( u ) 是连接函数, f 1 , f 2 , ⋯ , f p 是连接解释变量的平滑函数,Xi为解释变量,fi(Xi)是关于Xi的非指定类别的非参数函数。

在该模型中,响应变量的分布可以是正态分布,二项分布、poisson分布等。对fi(Xi)的估计方法有平滑样条法,局部加权回归散点平滑法、薄板平滑样条法,平滑参数的选择有交叉验证法、广义交叉验证法等。在GAM模型具体分析过程中,采用Rx64.3.5.0版R软件及mgcv、DAAG等软件包,来进行实验仿真。

像线性回归一样,可以通过增加形式为Xi × Xj的交互项,使得GAM能够体现交互效应的作用。另外,可以增加形式为fu(Xi, Xj)的低维交互项,这样的交互项可以应用一些二维光滑方法,如局部回归或者二维样条来拟合。

GAM应用的潜在假设为函数是可加的,允许每个协变量作为一个不加限制的平滑函数,而不是仅仅作为一种呆板的参数函数被拟合,对部分或全部的解释变量采用平滑函数的方法建立模型。GAM与GLM [7] 共同的特点是用连接函数来估计响应变量和各解释变量间的关系。与GLM不同的是GAM中的各函数可以是非参数的形式,因而使得其应用范围更为广泛,GAM是GLM的一种推广。因此GAM适用于多种分布类型,多种复杂非线性关系的分析。

3. 分析过程

3.1. 数据描述

本文中所用的数据是来自于真实工程中的项目数据,是在软件生产过程中开发人员进行自测试产生的过程数据。变量解释如表1所示,数据格式如表2所示。

Table 1. Symbolic explanation

表1. 符号解释

Table 2. Data sheet

表2. 数据简表

对数据进行初步的分析(如图1所示),经过Kolmogorov-Smirnov检验 [8] 可知,假设软件失效数为poisson分布,经检验,P值为0.0678,故假设软件失效数(fail_num)是呈poisson分布类型,同理可以假设,这些解释变量为正态分布类型,因此,采用poisson函数作为连接函数,将解释变量通过线性组合的方式来联结服从poisson分布的响应变量。

Figure 1. Variable distribution map

图1. 变量分布图

多重共线性 [9] 是指线性回归模型中的解释变量之间存在高度相关关系,它的存在使得模型无法求解。解释变量之间存在的共线性,可利用两个解释变量间的Pearson相关系数来判别两者的相关性程度,如果解释变量间的相关系数较大,则两个解释变量之间通常存在严重的共线性关系。处理变量间共线性的方法有主成份分析法、岭回归法、剔除变量法等。

由表3可知,代码行数、复杂度、语句覆盖率的相关系数均大于0.7,因此,它们之间存在着很强的共线性。又有每个测试用例对语句覆盖的贡献和每个测试用例对分支覆盖的贡献相关性很高为0.998。

Table 3. Pearson coefficient

表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 analysis

表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 factors

表5. 失效数变化与多影响因素的GAM模型假设检验结果

多因素分析表明,branch_cvg (分支覆盖率)的p值>0.05,故不能假设他对失效数有显著影响,loc (代码行数)、stmt_cvg (语句覆盖率)、requriement_chg (需求变更量)在P值



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3