首页> 中国专利> 一种基于静态分析的软件故障预测技术的构建方法

一种基于静态分析的软件故障预测技术的构建方法

摘要

本发明提供一种基于静态分析的软件故障预测技术的构建方法,步骤如下:1、搜集被诊断软件的有效故障;2、统计有效故障次数;3、使用静态分析工具输出软件的复杂度度量值;4、计算故障次数与各个度量值的相关性;5、选出与故障次数具有显著相关性的度量值;6、将显著相关度量值的相关系数归一化,作为权重;7、计算新、旧版本软件度量值的变化率;8、计算故障次数对应于各度量值的变化率;9、计算故障次数的综合变化率;10、预测新版本的故障次数;通过上述步骤,可以完成对基于静态分析的软件故障预测技术的构建。本发明可以帮助开发者在软件发布前预测未来可能发生的故障数量,做出应对,减小损失,具有实际应用价值。

著录项

  • 公开/公告号CN107423219A

    专利类型发明专利

  • 公开/公告日2017-12-01

    原文格式PDF

  • 申请/专利权人 北京航空航天大学;

    申请/专利号CN201710600857.0

  • 申请日2017-07-21

  • 分类号G06F11/36(20060101);

  • 代理机构11232 北京慧泉知识产权代理有限公司;

  • 代理人王顺荣;唐爱华

  • 地址 100191 北京市海淀区学院路37号

  • 入库时间 2023-06-19 03:56:57

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-05-18

    授权

    授权

  • 2017-12-26

    实质审查的生效 IPC(主分类):G06F11/36 申请日:20170721

    实质审查的生效

  • 2017-12-01

    公开

    公开

说明书

技术领域

本发明提供一种基于静态分析的软件故障预测技术的构建方法,它涉及一种基于静态分析的软件故障预测技术的实现,属于软件可信性、软件故障预测领域。

背景技术

相伴于计算机技术的突飞猛进,软件测试逐渐为人所重视,在软件正式发布之前进行软件测试,以确保软件的。基于进行测试时被测试的程序的状态,可以将测试分为静态测试与动态测试。动态测试指的是实际运行程序,设计测试用例并执行,以检查程序中存在的缺陷的过程。而静态测试则是不实际运行被测软件,而只是静态地检查程序代码及其配套文档中可能存在的错误的过程。静态测试可以大致分为文档审查,静态分析以及代码审查。

静态分析(Static Analysis)是指在不运行代码的方式下,通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描,度量程序复杂度,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。对于程序复杂度的度量有许多的度量值,比如检测文件数、代码总行数、文件中的语句数、带注释行所占百分比、分支语句所占百分比、函数个数、最大复杂度、平均复杂度、模块最大深度及模块深度等。由于软件规模的日益庞大,纯人力的静态分析已经变得越来越不可取,因而目前的静态分析其实就是指使用自动化静态分析辅助工具软件对程序源代码进行检查,以分析程序行为,输出程序的复杂度度量值。当前已有许多的静态分析辅助工具可供使用,比如Meta-Compilation,HP Fortify,Cobot以及SourceMonitor。

由于软件规模的日益庞大,功能变得愈加强大与完善的同时,软件发生故障的次数也变得越来越难以预测。但是软件的开发方在发布新软件或者软件新版本前,总是希望能预知其大概的可靠性水平,即可能的故障次数,以便做出准确的决策,因而对软件故障次数的预测是十分有必要的。现有的软件故障次数预测多是基于机器学习,比如神经网络,又或者是采用对历史故障数据进行时间序列建模的方法进行故障次数的预测。这些方法有着各自的优点,但缺点也同时存在,比如机器学习上手难度较高等。同时,静态分析可以得到软件的复杂度度量,能在程序开方人员编程时提供帮助,但这些度量值数据并没有得到进一步的利用。针对这一状况,我们将提出一种基于静态分析的软件故障预测技术的构建方法,在这项技术中,收集已有的软件历史版本的各版本的源代码以及各版本的故障数据,然后使用静态分析工具,对软件各历史版本和新版本的源代码进行扫描,得到各版本的软件复杂度度量值,然后使用统计工具计算历史版本的故障次数和各度量值的相关性,选出其中具有明显相关性的度量值。对于选出来的强相关性度量值,由于其相关性系数并不相同,即和故障次数的相关程度不一致,因此对相关性系数使用归一化的方式对各度量值赋予不同的权重,而后计算新版本软件和上一版本软件的静态分析度量值的变化率,各静态分析度量值变化率乘以各自的权重,即为故障次数相对于各度量值的变化率。再将其相加,即为故障次数的综合变化率,结合上一版本的故障次数以及综合变化率即可得出新版本软件的故障次数的预测值。使用这一技术可以利用在静态分析中未被进一步使用的静态分析度量值,即软件复杂度的度量值,以一种容易被理解的方法得出较为准确的预测值。

该故障预测技术结合静态分析和相关性分析进行构建,形成较为准确的基于静态分析的软件故障预测技术,在提高软件故障次数预测精度的同时,达到提高软件可信性、安全性、可用性的目的。

发明内容

(一)本发明目的:现有的软件故障预测技术多是基于机器学习,比如神经网络,或是模型拟合预测,比如时间序列ARIMA模型等。这些预测技术在某些情况下有着良好的预测效果,但是它们也有着各自的缺点,比如机器学习并不容易上手,学习参数的优化也是一件很麻烦的事情。与此同时,静态分析技术已经逐渐推广,但通过静态分析得出的软件复杂度度量值只是给程序开发人员提供编程的参考,并没有得到进一步的使用。因此本发明将克服现有技术的不足,提供一种基于静态分析的软件故障预测技术的构建方法对上述问题进行解决。本发明的核心思想是认为软件各版本源代码的静态分析的复杂度度量值和故障次数具有相关性,静态分析度量值的变化情况能反应故障次数的变化,即故障次数会随着复杂度度量值的变化而变化。在这项技术中,首先收集已有的软件历史版本的各版本的源代码以及各版本的故障数据,然后使用静态分析工具,对软件各历史版本和新版本的源代码进行扫描,得到其软件复杂度度量值,然后使用统计工具计算历史版本的故障次数和各静态分析度量值的相关性,选出其中具有明显相关性的度量值。将具有明显相关性的度量值的相关性系数归一化,以此对各度量值赋予不同的权重,而后计算新版本软件和上一版本软件的静态分析度量值的变化率,各静态分析度量值变化率乘以各自的权重,即为故障次数相对于各度量值的变化率。再将其相加,即为故障次数的综合变化率,结合上一版本的故障次数以及综合变化率即可得出新版本软件的故障次数的预测值。该技术可以为将要发布新版本程序的开发方提供服务,用以预测新版本软件的故障数量。可以看出该技术的构建对现有的静态分析技术和相关性分析方法进行了整合与创新,形成了基于静态分析的软件故障预测技术。

(二)技术方案

本发明技术方案:一种基于静态分析的软件故障预测技术的构建方法过程如下:

本发明所述方法中,引用SACA来表述基于静态分析(即“Static Analysis”)与相关性分析(即“Correlation Analysis”)相结合的技术。

本发明一种基于静态分析的软件故障预测技术的构建方法,其步骤如下:

步骤1、搜集被诊断软件的各历史版本的故障案例,依据故障信息相关、完整、非重复、非人为错误操作四原则,筛选有效故障案例,加入到创建的故障案例库;

步骤2、统计软件各历史版本的有效故障的次数;

步骤3、使用静态分析工具扫描软件的各历史版本和将要发布的新版本的源代码,输出程序的复杂度度量值;

步骤4、使用统计工具进行相关性分析,计算各历史版本的软件故障次数与各个度量值的相关性;

步骤5、依据统计规则选出与软件故障次数具有显著相关性的静态分析的度量值;

步骤6、将与故障次数具有显著相关性的静态分析的度量值的相关系数进行归一化,作为各个度量值的权重;

步骤7、计算新版本软件的静态分析的复杂度度量值与上一版本软件的复杂度度量值的变化率;

步骤8、将各个静态分析的度量值的变化率乘以权重,得到软件故障次数对应于每一个度量值的变化率;

步骤9、将软件故障次数相对于各度量值的变化率相加得到一个综合的变化率,即为软件故障次数的变化率;

步骤10、使用上一版本的软件故障次数及计算出的故障次数的变化率,得到新版本的故障次数的预测值。

其中,在步骤1中所述的“筛选有效故障案例”的做法,主要包含以下四个步骤:

(1)判断故障报告信息是否相关;

(2)判断故障报告信息是否完整;

(3)判断故障报告是否重复;

(4)判断故障是否是由使用者的错误操作造成。

其中故障报告信息相关表示故障报告不是因为需求新的功能而提出,也不是为了寻求帮助而提出,而是因为软件本身的缺陷引发故障而提出。故障报告信息完整是指在报告信息相关的提前下,报告的内容完整,可以提供足够的信息让开发者确定是否是有效故障。故障报告重复则是指新报告的故障早已经有其他使用者提出了,只有不重复的故障报告才有意义。使用者的错误操作也会造成软件发生故障的假象,因而需要判断是否是由使用者的错误操作造成了软件的故障。

若故障信息相关、完整、不重复、不是人员的错误操作造成,那么可以认为故障是由软件代码本身固有的缺陷被触发而导致的故障,即有效故障。按照这一原则收集被测软件各历史版本的有效故障,加入故障案例库。

其中,在步骤2中所述的“统计软件各历史版本的有效故障的次数”的做法如下:在创建故障案例库后,统计案例库中各版本的有效故障的次数;假定被测软件共有k个历史版本,有效故障用F表示,则可将每个版本的有效故障的次数记为Fi(i=1,2,…k)。

其中,在步骤3中所述的“静态分析工具”是指现有的静态分析软件,比如Meta-Compilation,HP Fortify,Cobot以及SourceMonitor;本发明中使用免费软件度量工具SourceMonitor,说明静态分析工具的用法及输出结果。

其中,在步骤3中所述的“使用静态分析工具扫描软件的各历史版本和将要发布的新版本的源代码,输出程序的复杂度度量值”,其做法如下:使用免费软件度量工具SourceMonitor进行静态分析时,将程序文件直接导入软件,即可输出检测文件数、代码总行数、文件中的语句数、带注释行所占百分比、分支语句所占百分比、函数个数、最大复杂度、平均复杂度、模块最大深度及模块深度等度量值;假定所使用的静态分析工具给出了m个度量值,记这m个度量值分别为Q1,Q2,…,Qi,…,Qm,对应于k个历史版本和一个新版本,每个度量值都有k+1个具体的数字度量值信息;

若将新版本的故障次数的预测值记为Fk+1,则可将k+1个版本的有效故障和静态分析度量值表示为:

其中,前k行是各历史版本的程序的故障次数以及m个度量值的度量值信息,Fk+1是我们期望得到的新版本的故障次数预测值,Q1k+1,Q2k+1,...,Qmk+1为新版本的静态分析度量值信息。

其中,在步骤4中所述的“计算各历史版本的软件故障次数与各个度量值的相关性”的做法如下:使用统计分析软件工具,如SPSS和Minitab等,对步骤3中的k个历史版本的故障次数和m个静态分析度量值依次做相关性分析,输出故障次数和每一个静态分析度量值的相关系数和显著性水平(即P值)。

其中,在步骤5中所述的“依据统计规则选出与软件故障次数具有显著相关性的静态分析的度量值”的做法如下:在计算出故障次数和每一个静态分析度量值的相关系数和显著性水平(即P值)后,依据具体的需求给定一个置信水平α,当故障次数和某个静态分析度量值的显著性p<α时,即可认为该度量值与故障次数有显著的相关性,也就是说该度量值的变化可以一定程度上反应故障次数的变化;

假定按照这一规则得出m个静态分析度量值中与故障次数具有显著的相关性的度量值有n个,记为Q1,Q2,…,Qn;第k个历史版本的n个相关静态分析度量值信息为Q1k,Q2k,...,Qnk,第k+1个版本为新版本,其相关的静态分析度量值为Q1k+1,Q2k+1,...,Qnk+1,则可将这k+1个版本的故障次数和与其显著相关的静态分析度量值信息记为:

其中,Fk+1是我们期望得到的新版本的故障次数预测值。

其中,在步骤6中所述的“将与故障次数具有显著相关性的静态分析的度量值的相关性系数进行归一化,作为各个度量值的权重”,其做法如下:假定通过步骤5选出了m个静态分析度量值中与故障次数具有显著的相关性的n个度量值,它们与故障次数的相关系数分别为C1,C2,…,Cn;相关系数可能为正,也可能为负,为便于计算权重,对所有的相关系数C1,C2,…,Cn取绝对值,记为C1',C2',…,Cn',即Ci'=|Ci|,(i=1,2,…,n);记第i个度量值的权重为ωi,然后按照公式如下公式进行归一化计算权重:

如此,可得n个度量值的权重ω12,…,ωn

其中,在步骤7中所述的“计算新版本软件的静态分析的复杂度度量值与上一版本软件的复杂度度量值的变化率”,其做法如下:使用由步骤5得到的第k个历史版本的与故障次数显著相关的n个度量值信息Q1k,Q2k,...,Qnk,以及第k+1个版本的相关静态分析度量值为Q1k+1,Q2k+1,...,Qnk+1,记第i个静态分析度量值的变化率为则有公式:

如此,可计算出n个变化率

其中,在步骤8中所述的“将各个静态分析的度量值的变化率乘以权重,得到软件故障次数对应于每一个度量值的变化率”,其做法如下:使用通过步骤6及步骤7计算得到的第i个静态分析度量值的权重ωi和变化率记软件故障次数对应于第i个度量值的变化幅度为则有:

如此,可计算出n个变化率该变化率考虑了每个静态分析度量值与故障次数的相关性(权重),反应的是若程序新版本的第i个静态分析度量值相比于上一版本变化了那么新版本的故障次数的变化幅度为

同时,度量值和故障次数的相关系数有正有负,在计算权重的时候均取了绝对值;但是负的相关系数代表着故障次数的变化趋势与静态分析度量值的变化趋势相反,因此,在计算出后,应对其进行调整;具体做法是查看与对应的第i个静态分析度量值与故障次数的相关系数Ci,若Ci<0,则令若Ci>0,则令此时的既反应了故障次数相对于静态分析度量值的变化幅度,也反映了变化的方向,即为软件故障次数对应于每一个度量值的变化率。

其中,在步骤9中所述的“将软件故障次数相对于各度量值的变化率相加得到一个综合的变化率,即为软件故障次数的变化率”,其作法如下:记故障次数的综合变化率为VF,使用步骤8得到的软件故障次数对应于每一个度量值的变化率则有:

该变化率VF反映了新版本程序的故障次数相比于上一版本的故障次数的变化趋势及变化幅度,通过该综合变化率即可进行下一步的预测。

其中,在步骤10中所述的“使用上一版本的软件故障次数及计算出的故障次数的变化率,得到新版本的故障次数的预测值”,其做法如下:记新版本的故障次数的预测值为Fk+1,使用已知的上一版本的故障次数Fk,以及通过步骤9计算得到的新版本程序的故障次数相比于上一版本的故障次数的综合变化率VF,则有:

Fk+1=Fk×(1+VF)

通过上述步骤,可以完成对基于静态分析的软件故障预测技术的构建,使用静态分析软件扫描历史版本和新版本的软件代码得到软件的复杂度度量值,结合历史版本的故障数据,即可进行软件故障数量的预测。本发明适用于解决实际问题中的软件故障数量预测问题,可以帮助软件开发者利用已知的软件故障数量信息和软件源代码,而不需要其他数据,即可预知未来可能发生的故障数量,以便在新的软件发布前做出应对,减小损失,具有较高的实际应用价值。

(三)优点

本发明与现有技术相比的优点在于:现有的软件故障预测技术多是基于机器学习,比如神经网络,或是模型拟合预测,比如时间序列ARIMA模型等。这些预测技术在某些情况下有着良好的预测效果,但是它们也有着各自的缺点,比如机器学习并不容易上手,学习参数的优化是一件耗时耗力的事情,时间序列建模则对非线性无能为力。与此同时,静态分析技术已经广泛应用,但通过静态分析得出的软件复杂度度量数据只是给程序开发人员提供编程的参考,并没有得到进一步的利用。因此本发明将克服现有技术的不足,结合静态分析和相关性分析提供一种简单易上手的软件故障数量的预测方法。

附图说明

图1为本发明所述方法的总体步骤流程图。

图2为本发明的有效故障判断流程图。

图3为本发明的相关性分析选择显著相关度量值流程图。

图4为本发明的度量值权重计算流程图。

图5为本发明的故障次数综合变化率计算流程图。

图6为本发明的新版本故障次数预测流程图。

图中序号、符号、代号说明如下:

图1中的“步骤1~10”即技术方案中对应的步骤;

图3中的Qi即通过静态分析工具扫描得到的静态分析度量值;

图3中的p即故障次数和静态分析度量值相关性分析中的显著性水平;

图3中的α即给定的置信水平;

图3,4,5中的Ci即故障次数和静态分析度量值之间的相关系数;

图4中的Ci'即相关系数的绝对值;

图4,5中的ωi即静态分析度量值的权重;

图5中的Qik+1,Qik即新版本和上一个旧版本的静态分析度量值;

图5中的即新版本和上一个旧版本的静态分析度量值的变化率;

图5中的即故障次数相对于第i个静态分析度量值的变化幅度;

图5中的即故障次数相对于第i个静态分析度量值的变化率;

图5,6中的VF即故障次数的综合变化率;

图6中的Fk即上一个旧版本的故障次数;

图6中的Fk+1即新旧版本的故障次数预测值;

具体实施方式

为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图进行详细描述。

本发明提供了一种基于静态分析的软件故障预测技术的构建方法。利用该方法构建的技术可以对即将发布的新版本软件的故障次数进行较为准确的预测。在这项技术中,首先收集已有的软件历史版本的各版本的源代码以及各版本的故障数据,然后使用静态分析工具,对软件各历史版本和新版本的源代码进行扫描,得到其软件复杂度度量值,然后使用统计工具计算历史版本的故障次数和各静态分析度量值的相关性,选出其中具有明显相关性的度量值。将具有明显相关性的度量值的相关性系数归一化,以此对各度量值赋予不同的权重,而后计算新版本软件和上一版本软件的静态分析度量值的变化率,各静态分析度量值变化率乘以各自的权重,即为故障次数相对于各度量值的变化率。再将其相加,即为故障次数的综合变化率,结合上一版本的故障次数以及综合变化率即可得出新版本软件的故障次数的预测值。

本发明一种基于静态分析的软件故障预测技术的构建方法,如图1所示,其具体构建步骤如下:

步骤一:构建软件故障案例库。其构建方法是:

有效软件故障案例的筛选。搜集大量被诊断软件的历史故障案例,针对被诊断软件系统的特点,依据故障信息相关、完整、非重复、非人为错误操作四原则,筛选出有效的案例集。筛选有效故障案例的做法,主要包括判断故障报告信息是否相关;判断故障报告信息是否完整;判断故障报告是否重复;判断故障是否是由人员的错误操作造成,有效故障判断准则如图2所示。其中故障报告信息相关表示故障报告不是因为需求新的功能而提出,也不是为了寻求帮助而提出,而是因为软件本身的缺陷引发故障而提出。故障报告信息完整是指在报告信息相关的提前下,报告的内容完整,可以提供足够的信息让开发者确定是否是有效故障。故障报告非重复则是指故障报告在相关、完整的前提下,没有其他使用者在以前提出,即不与以前的有效故障报告重复。使用者的错误操作也会造成软件发生故障的假象,因而在故障报告相关、完整、非重复的前提下,需要判断是否是由使用者的错误操作造成了软件的故障。若故障信息相关、完整、不重复、不是人员的错误操作造成,那么可以认为故障是由软件代码本身固有的缺陷被触发而导致的故障,即有效故障。按照这一原则收集被测软件各历史版本的有效故障,加入故障案例库。

步骤二:统计被测软件各个版本的有效故障次数。其构建方法是:

在创建故障案例库后,统计案例库中各版本的有效故障的次数。假定被测软件共有k个历史版本,有效故障用F表示,则可将每个版本的有效故障的次数记为Fi(i=1,2,…k)。F1为最早版本软件的有效故障次数,Fk则为新版本软件的上一版本的故障次数。本发明中的“故障次数”均指的有效故障。

步骤三:使用静态分析工具获取程序的复杂度度量值。其构建方法是:

使用静态分析工具扫描软件的各历史版本和将要发布的新版本的源代码,即可输出程序的复杂度度量值。比如使用免费软件度量工具SourceMonitor进行静态分析时,将程序文件直接导入软件,即可输出检测文件数、代码总行数、文件中的语句数、带注释行所占百分比、分支语句所占百分比、函数个数、最大复杂度、平均复杂度、模块最大深度及模块深度等度量值。不同的静态分析工具输出的复杂度度量值可能略有不同,但是大部分的度量值是共有的。

假定所使用的静态分析工具给出了m个度量值,将这m个度量值分别表示为Q1,Q2,…,Qi,…,Qm。同时,对应于被测软件的k个历史版本和一个新版本,每个度量值都有k+1个具体的数字度量值信息,表示不同版本软件的复杂度。

将新版本的故障次数的预测值记为Fk+1,则可将被测软件的k+1个版本的故障次数和静态分析度量值表示为:

其中,前k行是k个历史版本的软件的故障次数及其m个度量值的度量值信息,Fk+1是我们期望得到的新版本的故障次数预测值,Q1k+1,Q2k+1,...,Qmk+1为新版本的静态分析度量值信息。

步骤四:计算故障次数和静态分析度量值的相关性。其构建方法是:

使用统计分析软件工具,如SPSS、Minitab和Excel等,将步骤3中的k个历史版本的故障次数和m个静态分析度量值输入到统计工具中,选择相关性分析,输出故障次数和每一个静态分析度量值之间的相关系数和显著性水平(即P值)。

步骤五:选择与故障次数显著相关的静态分析度量值。其构建方法是:

在使用统计工具计算出故障次数和每一个静态分析度量值的相关系数和显著性水平(即P值)后,依据具体的需求给定一个置信水平α,当故障次数和某个静态分析度量值的显著性水平p<α时,即可认为该度量值与故障次数有显著的相关性,也就是说该度量值的变化可以一定程度上反应故障次数的变化。所有的显著相关度量值将用来预测新版本软件的故障次数,而不显著相关的度量值则舍弃不用。进行相关性分析选择显著相关度量值的过程如图3所示。

假定按照这一规则得出m个静态分析度量值中与故障次数具有显著的相关性的度量值有n个,记为Q1,Q2,…,Qn。第k个历史版本的n个相关静态分析度量值信息为Q1k,Q2k,...,Qnk,第k+1个版本为新版本,其相关的静态分析度量值为Q1k+1,Q2k+1,...,Qnk+1,则可将这k+1个版本的故障次数和与其显著相关的静态分析度量值信息记为:

其中,Fk+1是我们期望得到的新版本的故障次数预测值。

步骤六:将相关性系数进行归一化计算权重,其构建方法是:

假定通过步骤5选出了m个静态分析度量值中与故障次数具有显著的相关性的n个度量值,它们与故障次数的相关系数分别为C1,C2,…,Cn。我们认为与故障次数显著相关的度量值的变化可以一定程度上反应故障次数的变化,而这个“一定程度”则可以通过权重来体现。相关系数是用以反映变量之间相关关系密切程度的统计指标,其大小、正负反映了两个变量之间的相关程度及方向。因而可以使用相关系数归一化的方式来对每个静态分析度量值赋予不同的权重来体现其不同的相对重要程度。

相关系数可能为正,也可能为负,为正时代表两个相关变量的变化方向一致,为负时则代表变化方向相反。为便于计算权重,对所有的相关系数C1,C2,…,Cn取绝对值,记为C1',C2',…,Cn',即Ci'=|Ci|,(i=1,2,…,n)。记第i个度量值的权重为ωi,然后按照公式如下公式进行归一化计算权重:

如此,可得n个与故障次数显著相关的度量值的权重ω12,…,ωn,权重计算流程如图4所示。不同的权重代表着度量值变化时故障次数的不同相对变化幅度。

步骤七:计算新版本与上一版本软件的度量值的变化率。其构建方法如下:

使用由步骤5得到的被测软件第k个历史版本的与故障次数显著相关的n个度量值信息Q1k,Q2k,...,Qnk,以及第k+1个版本的显著相关静态分析度量值为Q1k+1,Q2k+1,...,Qnk+1,记第i个静态分析度量值的变化率为则有公式:

如此,可计算出被测软件的新版本和上一个历史版本的n个显著相关静态分析度量值的变化率本发明的核心思想就是静态分析度量值的变化可以在一定程度上反应软件故障次数的变化,计算出的n个度量值的变化率结合其权重即可进行软件新版本的故障次数的预测。

步骤八:计算故障次数对应于各度量值的变化率。其构建方法如下:

使用通过步骤6及步骤7计算得到的第i个静态分析度量值的权重ωi及其变化率记软件故障次数对应于第i个度量值的变化幅度为则有:

如此,可计算出n个变化率该变化率考虑了每个静态分析度量值与故障次数的相关性(权重),反应的是若程序新版本的第i个静态分析度量值相比于上一版本变化了那么新版本的故障次数的变化幅度为

同时,由于在计算权重的时候对相关系数均取了绝对值,正相关系数意味着故障次数与所有的静态分析度量值之间的变化都是同向的,因而代表的是同向的情况下的变化率,可以理解为变化的幅度。但是负的相关系数代表着故障次数的变化趋势与静态分析度量值的变化趋势相反,这时,无法代表这种反向的变化。因此,在计算出后,应对其进行调整。具体做法是查看与对应的第i个静态分析度量值与故障次数的相关系数Ci,若Ci<0,则令若Ci>0,则令此时的既反应了故障次数相对于静态分析度量值的变化幅度,也反映了变化的方向,即为软件故障次数对应于每一个度量值的变化率。

步骤九:计算故障次数的综合变化率。其构建方法如下:

记故障次数的综合变化率为VF,使用步骤8得到的软件故障次数对应于每一个度量值的变化率则有:

VF即为故障次数的综合变化率,它反映了新版本程序的故障次数相比于上一版本的故障次数的变化趋势及变化幅度,VF的求解过程如图5所示。VF为正意味着新版本的故障次数有增加的趋势,为负则意味着故障次数有减小的趋势,通过该故障即可进行下一步的预测。

步骤十:预测新版本软件的故障次数。其构建方法如下:

记新版本的故障次数的预测值为Fk+1,使用已知的上一版本的故障次数Fk,以及通过步骤9计算得到的新版本程序的故障次数相比于上一版本的故障次数的综合变化率VF,则有:

Fk+1=Fk×(1+VF)

如此即可得到新版本软件的故障次数的预测值,其流程如图6所示。

通过上述步骤,可以完成对基于静态分析的软件故障预测技术的构建。在这项技术中,首先收集已有的软件历史版本的各版本的源代码以及各版本的故障数据,然后使用静态分析工具,对源代码进行扫描,得到其软件复杂度度量值,然后使用统计工具计算历史版本的故障次数和各静态分析度量值的相关性,选出其中具有明显相关性的度量值。将具有明显相关性的度量值的相关性系数归一化,以此对各度量值赋予不同的权重,而后计算新版本软件和上一版本软件的静态分析度量值的变化率,各静态分析度量值变化率乘以各自的权重,即为故障次数相对于各度量值的变化率。再将其相加,即为故障次数的综合变化率,结合上一版本的故障次数以及综合变化率即可得出新版本软件的故障次数的预测值。使用这一技术可以克服机器学习上手难度大,而时间序列建模则又无法处理非线性的问题,可以得出较为准确的故障次数的预测值。

该故障预测技术结合静态分析和相关性分析进行构建,形成较为准确的基于静态分析的软件故障预测技术。

本发明未详细阐述部分属于本领域公知技术。

以上所述,仅为本发明部分具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本领域的人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号