本文针对软件生产进程中测试的过程数据,利用带有交互作用的GAM,对测试过程中的失效变化数据进行分析,研究影响因素以及因素间的交互作用。本文首先对失效变化数据,比较了GAM和带有交互作用的GAM的拟合效果;其次,比较了带有交互作用的GAM与现有的机器学习模型的预测结果。结果表明,带有交互作用的GAM相较于GAM所得的结果更加丰富,且优于已有的机器学习方法,因此这样的探讨分析是有意义的,并对软件开发以及采取测试决策有一定的实际指导意义。
对于安全关键软件而言,在整个软件生产的生命周期中会有大量的数据被记录下来,称之为过程数据[1]。不仅包括诸如软件代码行数、软件复杂度、软件版本、需求设计等软件开发过程数据,还有很重要的测试过程数据,比如测试用例的个数,发现失效的个数、测试覆盖情况。对于过程数据的分析有利于开发人员改变测试决策,进而提高软件可靠性。对于这部分数据的处理,现阶段有机器学习、深度学习的方法来进行失效数预测。
另外,基于软件可靠性模型的传统可靠性分析方法使用失效数据进行建模,这种可靠性分析方法忽略了软件本身的结构以及测试过程的特征造成对抽样观察到的失效数据的影响,没有充分利用安全关键软件开发过程以及自测试过程的特征数据。为了改进这种现象,提出了机器学习的方法对软件测试过程中的数据进行回归,比如:决策树、随即森林、岭回归等方法但是这种数据的数量是较少的,机器学习方法的拟合会出现偏差。并且利用机器学习方法的输入并没有考虑到影响因子之间的交互作用,为了考虑影响因子之间的交互作用,故本文提出了广义可加模型[2],简称GAM,对多元数据进行拟合。
GAM 是由数据驱动而非统计分布模型驱动的非参数回归模型, 可对部分解释变量进行线性拟合, 对其他因子进行光滑函数拟合。模型不需要预先设定参数模型,模型通过解释变量的平滑函数建立,能够自动选择合适的多项式。
GAM 属于非参数回归模型中的一种, 非参数回归不需要模型满足线性的假设前提,可以灵活的探测数据间的复杂关系,但是当模型中的自变量数目较多的时候,模型的估计方差会加大,另外,基于核与光滑样条估计[3]的非参数回归中自变量与因变量间关系的解释也有难度,1985 年Stone [4] [5]提出加性模型,模型中每一个加性项使用单个光滑函数来估计,在每一加性项中可以解释因变量如何随自变量变化而变化, 很好的解决了上述问题。
1990 年Hastie 和Tibshirani [4] [5]扩展了加性模型的应用范围,提出了广义加性模型。
本文针对软件生产与自测试过程中产生的过程数据,利用GAM 分析影响因素与其的交互作用,进一步拟合软件的失效数,并对实际工程提出有效可行的建议。其中,文章的结构如下: 第一部分是对问题背景的介绍。
第二部分是对问题进行详细叙述与模型的详细介绍。
第三部分是运用模型对数据进行分析的结果。
第四部分是对数据分析结果的总结与实际指导意义。
2. 模型介绍 软件开发过程中的测试数据分析对调整测试策略和可靠性分析具有重要的意义。
对于较小的数据量, 机器学习模型并没有很好的预测效果,并且无法给出因素之间的交互作用,而在软件的实际研发中因素之间的交互作用往往是存在的,例如,代码行数和测试用例个数之间的交互作用。本文尝试用GAM 来