CN107832219B - 基于静态分析和神经网络的软件故障预测技术的构建方法 - Google Patents
基于静态分析和神经网络的软件故障预测技术的构建方法 Download PDFInfo
- Publication number
- CN107832219B CN107832219B CN201711113909.8A CN201711113909A CN107832219B CN 107832219 B CN107832219 B CN 107832219B CN 201711113909 A CN201711113909 A CN 201711113909A CN 107832219 B CN107832219 B CN 107832219B
- Authority
- CN
- China
- Prior art keywords
- software
- static analysis
- fault
- failures
- neural network
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Prevention of errors by analysis, debugging or testing of software
- G06F11/3604—Analysis of software for verifying properties of programs
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Artificial Intelligence (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Mathematical Physics (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Computing Systems (AREA)
- Molecular Biology (AREA)
- Quality & Reliability (AREA)
- Computer Hardware Design (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种基于静态分析和神经网络的软件故障预测技术的构建方法,步骤如下:1、搜集被诊断软件的有效故障,加入到创建的故障案例库;2、统计软件各历史版本的有效故障的次数;3、使用静态分析工具扫描软件源代码,输出复杂度度量值;4、进行相关性分析,计算故障次数与度量值的显著性水平;5、选出与故障次数具有显著相关性的复杂度度量值;6、构建网络训练输入输出矩阵和预测输入矩阵;7、构建BP神经网络;8、完成网络训练,构建故障预测系统;9、神经网络预测,预测新版本的故障数量。通过上述步骤,可以完成对基于静态分析和BP神经网络的软件故障预测技术的构建。本发明能帮助开发者预测可能发生的软件故障,具有实用价值。
Description
技术领域
本发明提供一种基于静态分析和神经网络的软件故障预测技术的构建方法,它涉及一种基于静态分析和BP神经网络的软件故障预测技术的实现,属于软件可信性、软件故障预测领域。
背景技术
随着计算机技术的飞速发展,软件的功能越来越强大,软件的复杂度和规模也急剧增大,因软件造成的损失的比例也越来越大。据国外的有关统计,1955年软件占系统总成本仅为20%,到1985年软件占系统总成本已超过80%。为减小软件故障造成的损失,在软件正式发布之前进行软件测试,以确保软件的可用性和可靠性变得异常重要,软件测试可分为静态测试与动态测试。
静态分析(Static Analysis)是指在不运行代码的方式下,通过语法分析、控制流、数据流分析等技术对程序代码进行扫描,度量程序复杂度,验证代码是否满足规范性、可靠性、可维护性等指标的一种代码分析技术。对于程序复杂度的度量有许多的度量值,比如代码总行数、分支语句所占百分比、函数个数、最大复杂度、平均复杂度、模块最大深度及模块深度等。目前静态分析一般使用自动化静态分析辅助工具软件对程序源代码进行检查,以分析程序行为,输出程序的复杂度度量值。
神经网络是由具有适应性的神经元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。它具有大规模并行处理和分布式存储各类图像信息的功能,有很强的容错性、联想和记忆能力,因而被广泛地应用于故障诊断、故障预测、模式识别及图像处理等领域。BP神经网络是当前使用最多也最成功的一种多层前馈神经网络,其主要特点是信号前向传递,误差反向传递。在前向传递中,输入信号从输入层经隐含层逐层处理,直至输出层,每一层的神经元状态只影响下一层神经元状态。如果输出层得不到期望输出,则转入反向传播,根据预测误差调整网络权值和阈值,从而使网络的预测输出不断逼近期望输出。
由于软件规模的日益庞大,软件发生故障的次数也变得越来越难以预测。但是软件的开发方在发布新软件或者软件新版本前,总是希望能预知其可能的故障次数,以便做出准确的决策,因而对软件故障次数的预测是十分有必要的。现有的软件故障次数预测多是基于机器学习和时间序列分析,使用历史故障数据进行故障次数的预测。同时,静态分析可以得到软件的复杂度度量,能在程序开方人员编程时提供帮助,但这些度量值数据并没有得到进一步的利用。针对这一状况,我们将提出一种基于静态分析和神经网络的软件故障预测技术的构建方法,在这项技术中,收集已有的软件各历史版本的源代码及其对应的故障数据,然后使用静态分析工具,对软件各历史版本和新版本的源代码进行扫描,得到各版本的软件复杂度度量值,然后使用统计工具计算历史版本的故障次数和各度量值的相关性,选出和故障次数具有明显相关性的度量值。将选出来的各历史版本的强相关性度量值作为BP神经网络的输入,对应的故障次数作为神经网络的输出,以此训练网络,再使用训练好的网络来预测新版本软件的故障次数。使用这一技术可以结合静态分析得到的复杂度度量值和BP神经网络的强大非线性处理能力,得出较为准确的预测值。
该故障预测技术结合静态分析和BP神经网络进行构建,形成较为准确的基于静态分析和神经网络的软件故障预测技术,在提高软件故障次数预测精度的同时,达到提高软件可信性、安全性、可用性的目的。
发明内容
(一)本发明目的:现有的软件故障预测技术多是基于神经网络和时间序列分析,使用历史故障数据进行网络的训练和预测,这些预测技术在某些情况下有着良好的预测效果。与此同时,静态分析技术已经逐渐推广,但通过静态分析得出的软件复杂度度量值并没有得到进一步的使用。因此本发明将结合静态分析和人工神经网络的优点,提供一种基于静态分析和神经网络的软件故障预测技术的构建方法。本发明的核心思想是认为软件静态分析的复杂度度量值决定了软件的故障次数,即软件的复杂度度量值和故障次数有着某种程度上的对应关系。在这项技术中,首先收集已有的软件历史版本的各版本的源代码以及各版本的故障数据,然后使用静态分析工具,对软件各历史版本和新版本的源代码进行扫描,得到其软件复杂度度量值,然后计算历史版本的故障次数和各静态分析度量值的相关性,选出其中具有明显相关性的度量值。将选出来的各历史版本的强相关性度量值作为BP神经网络的输入,对应的故障次数作为神经网络的输出,以此训练网络,再以新版本软件的复杂度度量值作为输入,使用训练好的网络来预测新版本软件的故障次数。该技术可以为将要发布新版本软件的开发方提供服务,用以预测新版本软件的故障数量。可以看出该技术的构建对现有的静态分析技术和神经网络方法进行了整合与创新,形成了基于静态分析和神经网络的软件故障预测技术。
(二)技术方案
本发明技术方案:基于静态分析和神经网络的软件故障预测技术的构建方法过程如下:
本发明所述方法中,引用SABP来表述基于静态分析(即“Static Analysis”)与BP神经网络(即“Back Propagation Neural Network”)相结合的技术。
本发明提供一种基于静态分析和神经网络的软件故障预测技术的构建方法,其步骤如下:
步骤1、搜集被测软件的各历史版本的故障案例,依据故障信息相关、完整、非重复、非人为错误操作四原则,筛选有效故障案例,加入到创建的故障案例库;
步骤2、统计软件各历史版本的有效故障的次数;
步骤3、使用静态分析工具扫描软件的各历史版本和新版本的源代码,输出程序的复杂度度量值;
步骤4、使用统计工具进行相关性分析,计算各历史版本的软件故障次数与各个度量值的相关性;
步骤5、依据统计规则选出与软件故障次数具有显著相关性的静态分析的度量值;
步骤6、使用各历史版本的显著相关复杂度度量值和软件故障数量,构建BP神经网络的训练输入输出矩阵,使用新版本软件的强相关性复杂度度量值构建预测输入矩阵;
步骤7、构建基于BP神经网络的故障预测算法;主要是确定神经网络的结构和网络参数的配置;
步骤8、结合构建好的网络训练输入输出矩阵,完成BP神经网络的训练过程,构建基于静态分析和BP神经网络的软件故障预测系统;
步骤9、在软件故障预测系统中输入预测输入矩阵,预测软件新版本的故障数量;
其中,在步骤1中所述的“筛选有效故障案例”的做法,主要包含以下四个步骤:
(1)判断故障报告信息是否相关;
(2)判断故障报告信息是否完整;
(3)判断故障报告是否重复;
(4)判断故障是否是由使用者的错误操作造成。
其中故障报告信息相关表示故障报告不是因为新的功能需求而提出,也不是为了寻求帮助而提出,而是因为软件固有的缺陷引发软件故障而提出;故障报告信息完整是指在报告信息相关的提前下,报告的内容完整,可以提供足够的信息让开发者确定是否是有效故障;故障报告重复则是指用户新报告的软件故障早已经有其他使用者提出了,只有不重复的故障报告才有意义;使用者的错误操作也会造成软件发生故障的假象,因而需要判断是否是由使用者的错误操作造成了软件的故障;
总而言之,若软件使用者报告的故障信息相关、完整、不重复、不是使用者的错误操作造成,即可认为故障是由软件代码本身固有的缺陷被触发而导致的软件故障,即有效故障;按照这一原则收集由软件使用者报告的被测软件各历史版本的有效故障,加入故障案例库。
其中,在步骤2中所述的“统计软件各历史版本的有效故障的次数”的做法如下:在创建故障案例库后,统计案例库中各版本的有效故障的次数;假定被测软件共有k个历史版本,有效故障用F表示,则可将每个版本的有效故障数量记为Fi(i=1,2,k);
其中,在步骤3中所述的“使用静态分析工具扫描软件的各历史版本和将要发布的新版本的源代码,输出程序的复杂度度量值”,其做法如下:静态分析工具是指现有的静态分析软件,比如美国的免费软件度量工具SourceMonitor,本发明中使用SourceMonitor说明静态分析工具的用法及输出结果。使用SourceMonitor进行静态分析时,将程序文件直接导入软件,即可输出检测文件数、代码总行数、文件中的语句数、带注释行所占百分比、分支语句所占百分比、函数个数、最大复杂度、平均复杂度、模块最大深度及模块深度等度量值;假定所使用的静态分析工具给出了m个度量值,记这m个度量值分别为Q1,Q2,…,Qi,…,Qm。对应于软件的k个历史版本和一个新版本,每个度量值都有k+1个具体的数字度量值信息;
若将新版本的故障次数的预测值记为Fk+1,则可将k+1个版本的有效故障和静态分析度量值表示为:
其中,前k行是各历史版本的m个度量值的度量值信息和故障次数,Q1 k+1,Q2 k+1,...,Qm k+1为新版本的静态分析度量值信息,Fk+1是我们期望得到的新版本的故障次数预测值。
其中,在步骤4中所述的“计算各历史版本的软件故障次数与各个度量值的相关性”的做法如下:使用统计分析软件工具,如美国的SPSS和Minitab等软件,对步骤3中的软件k个历史版本的故障次数和m个静态分析度量值依次做相关性分析,输出故障次数Fi(i=1,2,k)和每一个静态分析度量值Qi的显著性水平(即P值)。
其中,在步骤5中所述的“依据统计规则选出与软件故障次数具有显著相关性的静态分析的度量值”的做法如下:在计算出故障次数和每一个静态分析度量值的显著性水平(即P值)后,依据具体的需求给定一个置信水平α,当故障次数和某个静态分析度量值的显著性p<α时,即可认为该度量值与故障次数有显著的相关性,即该度量值和故障次数存在某种意义上的对应关系;选出显著相关的静态分析复杂度度量值的意义在于减小后续神经网络的输入的复杂性,加快网络学习速度;
假定按照这一规则得出m个静态分析度量值中与故障次数具有显著的相关性的度量值有n个,记为Q1,Q2,…,Qn;第k个历史版本的n个相关静态分析度量值信息为Q1 k,Q2 k,...,Qn k,第k+1个版本为新版本,其相关的静态分析度量值为Q1 k+1,Q2 k+1,...,Qn k+1,则可将这k+1个版本的故障次数和与其显著相关的静态分析度量值信息记为:
其中,Fk+1是我们期望得到的新版本的故障次数预测值。
其中,在步骤6中所述的“使用各历史版本的显著相关复杂度度量值和软件故障数量,构建BP神经网络的训练输入输出矩阵,使用新版本软件的强相关性复杂度度量值构建预测输入矩阵”,其做法如下:通过前述步骤已经得到k+1个版本软件的n个与故障数量显著相关的复杂度度量值,以及软件k个历史版本的故障数量数据;本发明的核心思想是软件的复杂度度量值决定了软件的故障数量,即第i个版本软件的n个复杂度度量值{Q1 i,Q2 i,...,Qn i}必然对应着该版本的故障数量Fi;因此,使用第i个版本软件的复杂度度量值{Q1 i,Q2 i,...,Qn i}去预测该版本的故障数量Fi(i=1,2,,k),同理使用{Q1 i+1,Q2 i+1,...,Qn i+1}去预测Fi+1,直到预测到最后一个历史版本的故障数量Fk为止;如此即可形成网络训练的输入矩阵input和预期输出矩阵output,可表示为:
第k+1个版本为软件的新版本,通过静态分析得到的和故障数量显著相关的复杂度度量值为Q1 k+1,Q2 k+1,...,Qn k+1,其故障数量的预测值表示为Fk+1。在网络训练好后,即可使用复杂度度量值去预测其故障数量,预测输入矩阵可表示为:
input_prediction=(Q1 k+1Q2 k+1...Qn k+1)
其中,在步骤7中所述的“构建基于BP神经网络的故障预测算法”,其做法如下:
1)网络初始化;根据输入输出矩阵确定网络输入层节点数n、隐含层节点数l和输出层节点数m,初始化输入层、隐含层和输出层神经元之间的连接权值ωij和ωjk,初始化隐含层阈值a,输出层阈值b,给定学习速率和神经元激励函数;
2)隐含层输出计算;根据输入矩阵、输入层和隐含层连接权值ωij以及隐含层阈值a,计算隐含层输出;
3)输出层输出计算;根据隐含层输出、隐含层和输出层连接权值ωjk以及输出层阈值b,计算BP神经网络的预测输出;
4)误差计算;根据预测输出和预期输出矩阵计算网络预测误差;
5)权值更新;根据网络预测误差更新网络连接权值ωij和ωjk;
6)阈值更新;根据网络预测误差更新网络节点阈值a和b;
7)判断是否结束,若没有结束返回步骤2;
8)结束后,使用训练好的网络进行预测。
其中,在步骤8中所述的“结合构建好的网络训练输入输出矩阵,完成BP神经网络的训练过程,构建基于静态分析和BP神经网络的软件故障预测系统”,其做法如下:将已经构建好的的训练输入矩阵input和预期输出矩阵output导入BP神经网络,根据预测误差自动调整网络权值ωij、ωjk以及阈值a、b,直至预测误差或者训练次数满足要求,使得故障预测系统具有良好的预测精度。
其中,在步骤9中所述的“在软件故障预测系统中输入预测输入矩阵,预测软件新版本的故障数量”,其作法如下:将已经构建好的预测输入矩阵input_prediction=(Q1 k+ 1Q2 k+1...Qn k+1)输入故障预测系统,系统会输出新版本软件的故障数量预测值Fk+1。
通过上述步骤,可以完成对基于静态分析和神经网络的软件故障预测技术的构建,使用静态分析软件扫描历史版本和新版本的软件代码得到软件的复杂度度量值,结合历史版本的故障数据,即可通过BP神经网络进行软件故障数量的预测;本发明适用于解决实际问题中的软件故障数量预测问题,可以帮助软件开发者利用已知的软件故障数量信息和软件源代码,而不需要其他数据,即可预知未来可能发生的故障数量,以便在新的软件发布前做出应对,减小损失,具有较高的实际应用价值。
(三)优点
本发明与现有技术相比的优点在于:现有的软件故障预测技术多是基于神经网络和时间序列分析,使用历史故障数据进行故障预测,这些预测技术在某些情况下有着良好的预测效果。与此同时,静态分析技术已经逐渐推广,但通过静态分析得出的软件复杂度度量值并没有得到进一步的使用。因此本发明将结合静态分析和人工神经网络的优点,对现有的静态分析技术和BP神经网络方法进行了整合与创新,提供一种基于静态分析和神经网络的软件故障预测方法。
附图说明
图1为本发明所述方法的总体步骤流程图。
图2为本发明的有效故障判断流程图。
图3为本发明的相关性分析选择显著相关度量值流程图。
图4为本发明的BP神经网络拓扑结构图。
图5为本发明的BP神经网络流程图。
图中序号、符号、代号说明如下:
图1中的“步骤1~9”即技术方案中对应的步骤;
图1中的input、output和input_prediction即训练输入矩阵、训练预期输出矩阵和预测输入矩阵;
图3中的Qi即通过静态分析工具扫描得到的静态分析度量值;
图3中的p即故障次数和静态分析度量值在相关性分析中的显著性水平;
图3中的α即给定的置信水平;
图4中的X1,X2,…,Xn和Y1,Y2,…,Ym即神经网络的输入值和预测值;
图4中的ωij即神经网络输入层和隐含层的连接权值;
图4中的ωjk即神经网络隐含层和输出层的连接权值;
具体实施方式
为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图进行详细描述。
本发明提供了一种基于静态分析和神经网络的软件故障预测技术的构建方法。利用该方法构建的技术可以对即将发布的新版本软件的故障次数进行较为准确的预测。在这项技术中,首先收集已有的软件历史版本的各版本的源代码以及各版本的故障数据,然后使用静态分析工具,对软件各历史版本和新版本的源代码进行扫描,得到其软件复杂度度量值,然后计算历史版本的故障次数和各静态分析度量值的相关性,选出其中具有明显相关性的度量值。将选出来的各历史版本的强相关性度量值作为BP神经网络的输入,对应的故障次数作为神经网络的输出,以此训练网络,再以新版本软件的复杂度度量值作为输入,使用训练好的网络来预测新版本软件的故障次数。
本发明一种基于静态分析和神经网络的软件故障预测技术的构建方法,如图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行是各历史版本的m个度量值的度量值信息和故障次数,Q1 k+1,Q2 k+1,...,Qm k+1为新版本的静态分析度量值信息,Fk+1是我们期望得到的新版本的故障次数预测值。
步骤四:计算故障次数和静态分析度量值的相关性。其构建方法是:
使用统计分析软件工具,如SPSS和Minitab等,对步骤3中的软件k个历史版本的故障次数和m个静态分析度量值依次做相关性分析,输出故障次数Fi(i=1,2,…k)和每一个静态分析度量值Qi的显著性水平(即P值)。
步骤五:选择与故障次数显著相关的静态分析度量值。其构建方法是:
在计算出故障次数和每一个静态分析度量值的显著性水平(即P值)后,依据具体的需求给定一个置信水平α,当故障次数和某个静态分析度量值的显著性p<α时,即可认为该度量值与故障次数有显著的相关性,即该度量值和故障次数存在某种意义上的对应关系,如图3所示。BP神经网络的学习收敛过程较慢,当网络训练数据集较大时会显著降低网络的学习速度。而静态分析得到的复杂度度量值往往较多,一方面较多的度量值输入会减慢学习速度,另一方面,不是所有的复杂度度量值都对网络故障次数有贡献。因而需对数据进行压缩,通过相关性分析,选出和软件故障次数显著相关的静态分析复杂度度量值,即可减小后续神经网络的输入的复杂性,加快网络学习速度。
假定按照这一规则得出m个静态分析度量值中与故障次数具有显著的相关性的度量值有n个,记为Q1,Q2,…,Qn。第k个历史版本的n个相关静态分析度量值信息为Q1 k,Q2 k,...,Qn k,第k+1个版本为新版本,其相关的静态分析度量值为Q1 k+1,Q2 k+1,...,Qn k+1,则可将这k+1个版本的故障次数和与其显著相关的静态分析度量值信息记为:
其中,Fk+1是我们期望得到的新版本的故障次数预测值。
步骤六:构建网络训练输入输出矩阵和预测输入矩阵,其构建方法是:
通过前述步骤已经得到k+1个版本软件的n个与故障数量显著相关的复杂度度量值,以及软件k个历史版本的故障数量数据。本发明的核心思想是软件的复杂度度量值决定了软件的故障数量,即第i个版本软件的n个复杂度度量值{Q1 i,Q2 i,...,Qn i}必然对应着该版本的故障数量Fi。因此,可以使用第i个版本软件的复杂度度量值{Q1 i,Q2 i,...,Qn i}去预测该版本的故障数量Fi(i=1,2,…,k),同理使用{Q1 i+1,Q2 i+1,...,Qn i+1}去预测Fi+1,直到预测到最后一个历史版本的故障数量Fk为止。如此即可形成BP神经网络训练的输入矩阵input和预期输出矩阵output,可表示为:
第k+1个版本为软件的新版本,通过静态分析得到的新版本软件和故障数量显著相关的复杂度度量值为Q1 k+1,Q2 k+1,...,Qn k+1,其故障数量的预测值表示为Fk+1。在网络训练好后,即可使用复杂度度量值去预测其故障数量,预测输入矩阵可表示为:
input_prediction=(Q1 k+1 Q2 k+1 ... Qn k+1)
步骤七:构建基于BP神经网络的故障预测方法。其构建方法如下:
首先是网络的初始化,根据输入输出矩阵确定网络输入层节点数n、隐含层节点数l和输出层节点数m,初始化输入层、隐含层和输出层神经元之间的连接权值ωij和ωjk,初始化隐含层阈值a,输出层阈值b,给定学习速率η和神经元激励函数,BP神经网络的拓扑结构如图4所示。完成了网络函数初始化的工作,接下来使用训练样本进行网络训练,计算网络预测输出并计算网络输出和期望输出的误差ε。接下来进行权值阈值修正,根据误差修正网络权值和阈值,使网络预测值逼近期望值,实现神经网络的自动学习。最后的工作就是根据输出的误差ε和给定的训练次数判断训练是否结束,若未结束,即返回网络训练,使用新的权值和阈值计算网络输出,并结合预期输出值计算输出误差ε;若训练结束,即意味着网络训练结束,就可以使用训练好的网络进行新版本软件故障数量的预测。具体实现如下所示:
本算法流程图如图5所示。
步骤八:构建基于静态分析和BP神经网络的软件故障预测系统。其构建方法如下:
将已经构建好的的训练输入矩阵input和预期输出矩阵output导入BP神经网络,根据预测误差自动调整网络权值ωij、ωjk以及阈值a、b,直至预测误差或者训练次数满足要求,使得故障预测系统具有良好的预测精度。
步骤九:使用软件故障预测系统预测新版本的故障数量。其构建方法如下:
将已经构建好的预测输入矩阵input_prediction=(Q1 k+1 Q2 k+1 ... Qn k+1)输入故障预测系统,系统会输出新版本软件的故障数量预测值Fk+1。
通过上述步骤,可以完成对基于静态分析和神经网络的软件故障预测技术的构建。在这项技术中,首先收集已有的软件历史版本的各版本的源代码以及各版本的故障数据,然后使用静态分析工具,对软件各历史版本和新版本的源代码进行扫描,得到其软件复杂度度量值,然后计算历史版本的故障次数和各静态分析度量值的相关性,选出其中具有明显相关性的度量值。将选出来的各历史版本的强相关性度量值作为BP神经网络的输入,对应的故障次数作为神经网络的输出,以此训练网络,再以新版本软件的复杂度度量值作为输入,使用训练好的网络来预测新版本软件的故障次数。使用这一技术可以综合静态分析和BP神经网络的优点,对其进行整合与创新,得出准确的故障次数的预测值。
该故障预测技术结合静态分析和BP神经网络进行构建,形成较为准确的基于静态分析和神经网络的软件故障预测技术。
本发明未详细阐述部分属于本领域公知技术。
以上所述,仅为本发明部分具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本领域的人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。
Claims (9)
1.基于静态分析和神经网络的软件故障预测技术的构建方法,其特征在于:其步骤如下:
步骤1、搜集被测软件的各历史版本的故障案例,依据故障信息相关、完整、非重复、非人为错误操作四原则,筛选有效故障案例,加入到创建的故障案例库;
步骤2、统计软件各历史版本的有效故障的次数;
步骤3、使用静态分析工具扫描软件的各历史版本和新版本的源代码,输出程序的静态分析复杂度度量值;
步骤4、使用统计工具进行相关性分析,计算各历史版本的软件故障次数与各个复杂度度量值的相关性;
步骤5、依据统计规则选出与软件故障次数具有显著相关性的静态分析复杂度度量值;
步骤6、使用各历史版本的显著相关复杂度度量值和软件故障数量,构建BP神经网络的训练输入输出矩阵,使用新版本软件的强相关性复杂度度量值构建预测输入矩阵;
步骤7、构建基于BP神经网络的故障预测算法;确定神经网络的结构和网络参数的配置;
步骤8、结合构建好的网络训练输入输出矩阵,完成BP神经网络的训练过程,构建基于静态分析和BP神经网络的软件故障预测系统;
步骤9、在软件故障预测系统中输入预测输入矩阵,预测软件新版本的故障数量;
其中,在步骤5中所述的依据统计规则选出与软件故障次数具有显著相关性的静态分析复杂度度量值的做法如下:在计算出故障次数和每一个静态分析复杂度度量值的显著性水平即P值后,依据具体的需求给定一个置信水平α,当故障次数和静态分析复杂度度量值的显著性p<α时,即能认为该静态分析复杂度度量值与故障次数有显著的相关性,即该静态分析复杂度度量值和故障次数存在一意义上的对应关系;选出显著相关的静态分析复杂度度量值的意义在于减小后续神经网络的输入的复杂性,加快网络学习速度;
假定按照这一规则得出m个静态分析复杂度度量值中与故障次数具有显著的相关性的静态分析复杂度度量值有n个,记为Q1,Q2,…,Qn;第k个历史版本的n个相关静态分析复杂度度量值信息为Q1 k,Q2 k,...,Qn k,第k+1个版本为新版本,其相关的静态分析复杂度度量值为Q1 k+1,Q2 k+1,...,Qn k+1,则能将这k+1个版本的故障次数和与其显著相关的静态分析复杂度度量值信息记为:
其中,Fk+1是期望得到的新版本的故障次数预测值;
通过上述步骤,能完成对基于静态分析和BP神经网络的软件故障预测技术的构建,使用静态分析软件扫描历史版本和新版本的软件代码得到软件的复杂度度量值,结合历史版本的故障数据,即能通过BP神经网络进行软件故障数量的预测。
2.根据权利要求1所述的一种基于静态分析和神经网络的软件故障预测技术的构建方法,其特征在于:
在步骤1中所述的筛选有效故障案例的做法,包含以下四个步骤:
(1)判断故障报告信息是否相关;
(2)判断故障报告信息是否完整;
(3)判断故障报告是否重复;
(4)判断故障是否是由使用者的错误操作造成;
其中故障报告信息相关表示故障报告不是因为新的功能需求而提出,也不是为了寻求帮助而提出,而是因为软件固有的缺陷引发软件故障而提出;故障报告信息完整是指在报告信息相关的提前下,报告的内容完整,能提供足够的信息让开发者确定是否是有效故障;故障报告重复则是指用户新报告的软件故障早已经有其他使用者提出了,只有不重复的故障报告才有意义;使用者的错误操作也会造成软件发生故障的假象,因而需要判断是否是由使用者的错误操作造成了软件的故障;
总而言之,若软件使用者报告的故障信息相关、完整、不重复、不是使用者的错误操作造成,即能认为故障是由软件代码本身固有的缺陷被触发而导致的软件故障,即有效故障;按照这一原则收集由软件使用者报告的被测软件各历史版本的有效故障,加入故障案例库。
3.根据权利要求1所述的基于静态分析和神经网络的软件故障预测技术的构建方法,其特征在于:在步骤2中所述的统计软件各历史版本的有效故障的次数的做法如下:在创建故障案例库后,统计案例库中各版本的有效故障的次数;假定被测软件共有k个历史版本,有效故障用F表示,则能将每个版本的有效故障数量记为Fi,其中i=1,2,…k。
4.根据权利要求3所述的基于静态分析和神经网络的软件故障预测技术的构建方法,其特征在于:在步骤3中所述的使用静态分析工具扫描软件的各历史版本和将要发布的新版本的源代码,输出程序的静态分析复杂度度量值,其做法如下:静态分析工具是指现有的静态分析软件,选用美国的免费软件度量工具SourceMonitor;使用SourceMonitor说明静态分析工具的用法及输出结果;使用SourceMonitor进行静态分析时,将程序文件直接导入软件,即能输出检测文件数、代码总行数、文件中的语句数、带注释行所占百分比、分支语句所占百分比、函数个数、最大复杂度、平均复杂度、模块最大深度及模块深度的静态分析度量值;假定所使用的静态分析工具给出了m个静态分析复杂度度量值,记这m个静态分析复杂度度量值分别为Q1,Q2,…,Qi,…,Qm;对应于软件的k个历史版本和一个新版本,每个静态分析复杂度度量值都有k+1个具体的数字静态分析复杂度度量值信息;
若将新版本的故障次数的预测值记为Fk+1,则能将k+1个版本的有效故障和静态分析复杂度度量值表示为:
其中,前k行是各历史版本的m个静态分析复杂度度量值的信息和故障次数,Q1 k+1,Q2 k+1,...,Qm k+1为新版本的静态分析复杂度度量值信息,Fk+1是期望得到的新版本的故障次数预测值。
5.根据权利要求1所述的基于静态分析和神经网络的软件故障预测技术的构建方法,其特征在于:在步骤4中所述的计算各历史版本的软件故障次数与各个复杂度度量值的相关性的做法如下:使用统计分析软件工具,选用美国的SPSS和Minitab软件,对步骤3中的软件k个历史版本的故障次数和m个静态分析复杂度度量值依次做相关性分析,输出故障次数Fi和每一个静态分析复杂度度量值Qi的显著性水平,即P值,其中i=1,2,…k。
6.根据权利要求1所述的基于静态分析和神经网络的软件故障预测技术的构建方法,其特征在于:在步骤6中所述的使用各历史版本的显著相关复杂度度量值和软件故障数量,构建BP神经网络的训练输入输出矩阵,使用新版本软件的强相关性复杂度度量值构建预测输入矩阵,其做法如下:通过前述步骤已经得到k+1个版本软件的n个与故障数量显著相关的复杂度度量值,以及软件k个历史版本的故障数量数据;核心思想是软件的复杂度度量值决定了软件的故障数量,即第i个版本软件的n个复杂度度量值{Q1 i,Q2 i,...,Qn i}必然对应着该版本的故障数量Fi,其中i=1,2,…k;因此,使用第i个版本软件的复杂度度量值{Q1 i,Q2 i,...,Qn i}去预测该版本的故障数量Fi,同理使用{Q1 i+1,Q2 i+1,...,Qn i+1}去预测Fi+1,直到预测到最后一个历史版本的故障数量Fk为止;如此即能形成网络训练的输入矩阵input和预期输出矩阵output,能表示为:
第k+1个版本为软件的新版本,通过静态分析得到的和故障数量显著相关的复杂度度量值为Q1 k+1,Q2 k+1,...,Qn k+1,其故障数量的预测值表示为Fk+1;在网络训练好后,即能使用复杂度度量值去预测其故障数量,预测输入矩阵能表示为:
input_prediction=(Q1 k+1Q2 k+1...Qn k+1)。
7.根据权利要求1所述的基于静态分析和神经网络的软件故障预测技术的构建方法,其特征在于:
在步骤7中所述的构建基于BP神经网络的故障预测算法,其做法如下:
1)网络初始化;根据输入输出矩阵确定网络输入层节点数n、隐含层节点数l和输出层节点数m,初始化输入层、隐含层和输出层神经元之间的连接权值ωij和ωjk,初始化隐含层阈值a,输出层阈值b,给定学习速率和神经元激励函数;
2)隐含层输出计算;根据输入矩阵、输入层和隐含层连接权值ωij以及隐含层阈值a,计算隐含层输出;
3)输出层输出计算;根据隐含层输出、隐含层和输出层连接权值ωjk以及输出层阈值b,计算BP神经网络的预测输出;
4)误差计算;根据预测输出和预期输出矩阵计算网络预测误差;
5)权值更新;根据网络预测误差更新网络连接权值ωij和ωjk;
6)阈值更新;根据网络预测误差更新网络节点阈值a和b;
7)判断是否结束,若没有结束返回步骤2;
8)结束后,使用训练好的网络进行预测。
8.根据权利要求1所述的基于静态分析和神经网络的软件故障预测技术的构建方法,其特征在于:在步骤8中所述的结合构建好的网络训练输入输出矩阵,完成BP神经网络的训练过程,构建基于静态分析和BP神经网络的软件故障预测系统,其做法如下:将已经构建好的的训练输入矩阵input和预期输出矩阵output导入BP神经网络,根据预测误差自动调整网络权值ωij、ωjk以及阈值a、b,直至预测误差或者训练次数满足要求,使得故障预测系统具有良好的预测精度。
9.根据权利要求6所述的基于静态分析和神经网络的软件故障预测技术的构建方法,其特征在于:在步骤9中所述的在软件故障预测系统中输入预测输入矩阵,预测软件新版本的故障数量,其作法如下:将已经构建好的预测输入矩阵input_prediction=(Q1 k+1 Q2 k+1... Qn k+1)输入故障预测系统,系统会输出新版本软件的故障数量预测值Fk+1。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201711113909.8A CN107832219B (zh) | 2017-11-13 | 2017-11-13 | 基于静态分析和神经网络的软件故障预测技术的构建方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201711113909.8A CN107832219B (zh) | 2017-11-13 | 2017-11-13 | 基于静态分析和神经网络的软件故障预测技术的构建方法 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN107832219A CN107832219A (zh) | 2018-03-23 |
| CN107832219B true CN107832219B (zh) | 2020-08-25 |
Family
ID=61654280
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN201711113909.8A Active CN107832219B (zh) | 2017-11-13 | 2017-11-13 | 基于静态分析和神经网络的软件故障预测技术的构建方法 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN107832219B (zh) |
Families Citing this family (15)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN108710568A (zh) * | 2018-05-05 | 2018-10-26 | 中科软评科技(北京)有限公司 | 静态代码缺陷的检测方法、计算机设备及存储介质 |
| CN109190757B (zh) * | 2018-08-07 | 2021-05-04 | 百度在线网络技术(北京)有限公司 | 任务处理方法、装置、设备及计算机可读存储介质 |
| CN109271319B (zh) * | 2018-09-18 | 2022-03-15 | 北京航空航天大学 | 一种基于面板数据分析的软件故障的预测方法 |
| CN109508475A (zh) * | 2018-10-17 | 2019-03-22 | 北京航空航天大学 | 一种基于多维卡尔曼滤波修正的故障主动预测方法 |
| CN110347579B (zh) * | 2019-04-01 | 2022-03-04 | 南京邮电大学 | 基于神经元输出行为模式的深度学习测试用例的选择方法 |
| CN110232020A (zh) * | 2019-05-20 | 2019-09-13 | 平安普惠企业管理有限公司 | 基于智能决策的测试结果分析方法及相关装置 |
| US11592828B2 (en) | 2020-01-16 | 2023-02-28 | Nvidia Corporation | Using neural networks to perform fault detection in autonomous driving applications |
| CN111966578A (zh) * | 2020-07-12 | 2020-11-20 | 复旦大学 | 一种安卓兼容性缺陷修复效果的自动化评估方法 |
| CN112115045B (zh) * | 2020-08-19 | 2022-03-18 | 北京航空航天大学 | 一种复杂软件系统失效预测方法 |
| CN112711530B (zh) * | 2020-12-28 | 2024-07-02 | 航天信息股份有限公司 | 一种基于机器学习的代码风险预测方法及系统 |
| CN113033078B (zh) * | 2021-03-05 | 2022-06-03 | 国网安徽省电力有限公司 | 继电保护设备故障预警模型的构建方法、系统及预警方法 |
| CN113079043B (zh) * | 2021-03-25 | 2021-12-10 | 浙江大学 | 一种基于码本的网络故障诊断方法 |
| CN114968809A (zh) * | 2022-06-17 | 2022-08-30 | 扬州航盛科技有限公司 | 一种软件质量预测持续集成方法 |
| CN115103127B (zh) * | 2022-08-22 | 2022-11-08 | 环球数科集团有限公司 | 一种嵌入式智能摄像机设计方法与系统 |
| CN115659826A (zh) * | 2022-11-04 | 2023-01-31 | 平安银行股份有限公司 | 一种服务器故障率检测方法、装置、电子设备及存储介质 |
Citations (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN106201871A (zh) * | 2016-06-30 | 2016-12-07 | 重庆大学 | 基于代价敏感半监督的软件缺陷预测方法 |
| CN107133181A (zh) * | 2017-06-13 | 2017-09-05 | 北京航空航天大学 | 一种差分小波神经网络软件故障预测技术的构建方法 |
| CN107247666A (zh) * | 2017-05-24 | 2017-10-13 | 武汉大学 | 一种基于特征选择和集成学习的软件缺陷个数预测方法 |
Family Cites Families (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| TWI415011B (zh) * | 2009-12-17 | 2013-11-11 | Ind Tech Res Inst | 人臉辨識方法及應用此方法之系統 |
-
2017
- 2017-11-13 CN CN201711113909.8A patent/CN107832219B/zh active Active
Patent Citations (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN106201871A (zh) * | 2016-06-30 | 2016-12-07 | 重庆大学 | 基于代价敏感半监督的软件缺陷预测方法 |
| CN107247666A (zh) * | 2017-05-24 | 2017-10-13 | 武汉大学 | 一种基于特征选择和集成学习的软件缺陷个数预测方法 |
| CN107133181A (zh) * | 2017-06-13 | 2017-09-05 | 北京航空航天大学 | 一种差分小波神经网络软件故障预测技术的构建方法 |
Non-Patent Citations (1)
| Title |
|---|
| 静态软件缺陷预测方法研究;陈翔等;《软件学报》;20151104;第27卷(第1期);全文 * |
Also Published As
| Publication number | Publication date |
|---|---|
| CN107832219A (zh) | 2018-03-23 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN107832219B (zh) | 基于静态分析和神经网络的软件故障预测技术的构建方法 | |
| CN111124840B (zh) | 业务运维中告警的预测方法、装置与电子设备 | |
| CN117743909B (zh) | 一种基于人工智能的供热系统故障分析方法及装置 | |
| CN117034143A (zh) | 一种基于机器学习的分布式系统故障诊断方法及装置 | |
| US20220300820A1 (en) | Ann-based program testing method, testing system and application | |
| CN115640159A (zh) | 一种微服务故障诊断方法及系统 | |
| CN114978968B (zh) | 微服务的异常检测方法、装置、计算机设备和存储介质 | |
| CN116909788A (zh) | 一种任务导向和视角不变的多模态故障诊断方法及系统 | |
| CN108415810B (zh) | 一种硬盘状态监控方法和装置 | |
| CN120179435A (zh) | 一种基于故障模拟的集群可靠性测试方法及系统 | |
| CN115827353A (zh) | 故障诊断方法及装置 | |
| CN118566699A (zh) | 基于图卷积神经网络的组合逻辑多故障诊断方法及系统 | |
| CN118199030B (zh) | 基于深度强化学习的新能源电站发电量预测方法及系统 | |
| CN119690512A (zh) | 一种基于大模型的代码缺陷检测方法及系统 | |
| CN115165332B (zh) | 一种装备机内测试与综合测试一体化设计方法及系统 | |
| CN107423219B (zh) | 一种基于静态分析的软件故障预测技术的构建方法 | |
| CN120087769B (zh) | 一种用于软件项目管理的风险分析方法及系统 | |
| CN116980279B (zh) | 一种可编程网元设备的故障诊断系统及故障诊断方法 | |
| CN120162710A (zh) | 一种结合图神经网络的水务管网故障检测方法及系统 | |
| CN119052109A (zh) | 网络质差分析方法及装置、存储介质及电子设备 | |
| CN115184055A (zh) | 一种分级测试性优化的测试集确定方法及系统 | |
| CN120373222B (zh) | 一种芯片验证覆盖率提升方法 | |
| CN114510431B (zh) | 一种工作量感知智能合约缺陷预测方法、系统及设备 | |
| CN120045399B (zh) | 基于强化学习的高速接口容错测试流程自适应生成方法 | |
| Chen et al. | A Root Cause Localization Method Based on Event Call Chains for Microservices |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| PB01 | Publication | ||
| PB01 | Publication | ||
| SE01 | Entry into force of request for substantive examination | ||
| SE01 | Entry into force of request for substantive examination | ||
| GR01 | Patent grant | ||
| GR01 | Patent grant |