CN105893256B - 基于机器学习算法的软件故障定位方法 - Google Patents

基于机器学习算法的软件故障定位方法 Download PDF

Info

Publication number
CN105893256B
CN105893256B CN201610191313.9A CN201610191313A CN105893256B CN 105893256 B CN105893256 B CN 105893256B CN 201610191313 A CN201610191313 A CN 201610191313A CN 105893256 B CN105893256 B CN 105893256B
Authority
CN
China
Prior art keywords
test
case
failure
sentence
test case
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.)
Expired - Fee Related
Application number
CN201610191313.9A
Other languages
English (en)
Other versions
CN105893256A (zh
Inventor
郑炜
柏晗
刘文兴
王文鹏
谭海斌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jinghang Computing Communication Research Institute
Original Assignee
Northwestern Polytechnical University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Northwestern Polytechnical University filed Critical Northwestern Polytechnical University
Priority to CN201610191313.9A priority Critical patent/CN105893256B/zh
Publication of CN105893256A publication Critical patent/CN105893256A/zh
Application granted granted Critical
Publication of CN105893256B publication Critical patent/CN105893256B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种基于机器学习算法的软件故障定位方法,用于解决现有软件故障定位方法定位效率低的技术问题。技术方案是首先利用高斯混合分布描述现实程序中可能存在的故障分布,使得程序中的故障分布更为明确;再借助基于高斯混合模型的聚类分析方法,对冗余测试样本进行剔除,找到针对特定故障的专用测试集,从而减少了冗余用例对定位精度的不良影响;再修改支持向量机模型来适应不平衡的数据样本,并结合并行调试理论找到用例覆盖信息和执行结果之间的非线性映射关系,使得机器学习算法不会因样本不均而陷于局部最优解问题。最后,设计虚拟测试套件,放到训练好的模型中预测,得出语句可疑度值排名,进行故障定位,提高了软件故障定位效率。

Description

基于机器学习算法的软件故障定位方法
技术领域
本发明涉及一种软件故障定位方法,特别涉及一种基于机器学习算法的软件故障定位方法。
背景技术
软件测试在软件开发过程中占据了大量的人力物力,而故障定位又是测试中付出代价最高的行为之一。因此,人们提出自动化故障定位技术来分析程序源代码和测试过程中的程序行为及结果,从而定位出软件的故障。目前,国内外专家已经在自动故障定位领域里提出了多种理论和方法,并取得了一定的成绩。
Wong等人在文献“BP Neural Network-based Effective FaultLocalization.International Journal of Software Engineering and KnowledgeEngineering,2009,19(4):573-597”中提出了一种基于反向传播(BP)神经网络的故障定位技术。他们用语句的覆盖信息和测试用例的执行结果来训练BP神经网络模型,并且设计一个虚拟测试集作为训练好的神经网络模型的输入,由于这个虚拟测试集的每一个测试用例只覆盖一条语句,所以可以认为输出不仅是测试用例成功或失败的可能性,也是覆盖的语句含有故障的可疑度值。
之后,他们针对BP神经网络的局部最优解问题,又在文献“Using an RBF NeuralNetwork to Locate Program Bugs.Proc.of the 19th IEEE International Symposiumon Software Reliability Engineering.Seattle,Washington,USA,2008:27-38”中提出了一种基于径向基函数(RBF)神经网络模型的故障定位技术,来降低局部最优解的影响。然而无论是基于反向传播神经网络的故障定位,还是基于径向基函数神经网络模型的故障定位,都存在着各自的局限性和不足。尤其是在面对诸如故障分布不明、测试用例冗余、测试样本倾斜等问题时,这些故障定位技术的有效性都大为降低。
发明内容
为了克服现有软件故障定位方法定位效率低的不足,本发明提供一种基于机器学习算法的软件故障定位方法。该方法首先利用高斯混合分布描述现实程序中可能存在的故障分布,使得程序中的故障分布更为明确;再借助基于高斯混合模型的聚类分析方法,对冗余测试样本进行剔除,找到针对特定故障的专用测试集,从而减少了冗余用例对定位精度的不良影响;然后,修改支持向量机模型来适应不平衡的数据样本,并结合并行调试理论来找到用例覆盖信息和执行结果之间的非线性映射关系,使得机器学习算法不会因样本不均而陷于局部最优解问题。最后,设计虚拟测试套件,放到训练好的模型中预测,得出语句可疑度值排名,进行故障定位,提高了软件故障定位效率。
本发明解决其技术问题所采用的技术方案:一种基于机器学习算法的软件故障定位方法,其特点是包括以下步骤:
步骤一、获取程序的执行信息。采用GNU标准编译器GCC和Gcov工具对待测文件进行编译,编译命令为:
gcc-O2test.c-I.-fprofile-arcs-ftest-coverage-o test.exe
所述命令在编译的同时生成gcov所需的test.gcno文件。然后运行可执行文件test.exe,生成test.gcda文件,用以记录插桩信息。最后,用gcov test.c命令得到test.c.gcov文件。其中在每行代码的开头,-表示此行代码不是可执行语句,数字表示此行代码在运行过程中被执行的次数,#####表示此行代码虽为可执行语句,但在本次执行中并没有被覆盖到。
借助Gcov工具,编写C语言代码,在每执行一次测试用例之后,都对生成的gcov文件进行分析,得到错误版本程序的语句被测试用例覆盖的信息。收集测试用例的执行结果的步骤如下:
a)编译原版本程序代码,执行测试用例,将输出结果放到测试套件的outputs文件夹中;
b)运行错误版本程序程序,将输出结果放到newoutputs文件夹下;
c)将newoutputs文件夹中的测试输出同outputs文件夹中的输出相比较,如果输出结果一致,说明测试用例执行成功,如果输出结果不一致,说明测试用例执行失败。
步骤二、通过对故障版本的测试用例覆盖信息和执行结果的采集,生成用以进行故障定位的实验样本。构建高斯混合模型来无限逼近故障分布,使测试集分成属于各自分布的用例聚类。高斯混合模型本质上是单一高斯分布的概率密度函数的加权求和,且各项的计算结果即为样本属于各类的概率大小,即:
其中,wk是第k个分布N(xik)的权重,λ为模型参数,为样本xi属于k的概率。假设程序代码P中含有m条语句,其中mf条语句含有故障,mp条语句正确,且满足则针对P的一个测试集T含有t个测试用例,其中包含tf个失败用例以及tp个成功用例,且满足由于错误的测试用例覆盖了故障语句,正确执行的测试用例可能覆盖也可能没有覆盖故障语句。因此,程序故障在代码中的分布会直接导致测试用例的覆盖信息也服从该分布。假设测试集T的第i个测试用例为ti,程序P的第j条语句为sj,令Ci,j=1表示ti执行时覆盖了语句sj,Ci,j值为0时表示未覆盖。那么,测试用例ti对程序P的覆盖信息表示为Ci=(Ci,1,Ci,2,...,Ci,m)。用这一向量表示测试用例的特征信息,则对于测试集T来说,其中的每一个测试用例都是多维特征空间中的一个点。由于故障语句大多被失败用例覆盖,则这tf个数据点在特征空间中将聚在一起,因而服从某种单一分布。并且,在这tf个数据点的附近,还会聚集一些覆盖了故障语句的成功用例,和一些未覆盖该故障语句但是执行信息与这tf个点很相似的成功用例,因此这些用例也将服从这tf个点的分布。
步骤三、对冗余的测试用例进行剔除。将步骤二获得的测试集T作为输入,剔除其中的失败用例,将剩下的正确用例放到高斯混合模型中训练。用EM算法求解模型参数之后,将属于同一分布的测试用例聚成一类。然后,在这几类中,按照类平均距离法则,寻找到离剔除出去的失败用例集最近的那一类,将这两类合并,组成最终用来做故障定位的专用测试集。
测试用例聚类划分和冗余剔除这两步都运行于Windows环境下,采用Matlab数学分析软件中的Voicebox工具箱。Voicebox收纳了包括GMM在内的多种概率密度函数。采用Voicebox工具箱中的gaussmix和gaussmixp函数来进行模型训练和预测。其中,gaussmix函数的使用方法如下:
function[m,v,w,g,f,pp,gg]=gaussmix(x,c,l,m0,v0,w0)
gaussmixp函数的使用方法如下:
function[lp,rp,kh,kp]=gaussmixp(y,m,v,w)
gaussmix和gaussmixp函数能帮助解决用例划分和冗余剔除的问题,从而找到最针对特定故障的测试套件子集。
步骤四、利用基于支持向量机模型的监督学习算法进行故障定位。由于向量Ci=(Ci,1,Ci,2,...,Ci,m)作为测试用例覆盖信息的同时,还能够表示为特征空间中的一个数据点。而测试用例的输出ri即表示为每个样本点所属的类别。因此,把测试用例的覆盖信息Ci当做支持向量机的训练输入,把测试用例的执行结果ri当做训练输出,以此来训练支持向量机。训练好的模型反映了测试用例的覆盖信息与执行结果之间的非线性映射关系,利用这种关系,间接通过如下的虚拟测试集来找到故障语句。
所述虚拟测试集共有m条测试用例,对应m条程序语句。其中,第i条测试用例只覆盖第i条程序语句,使得整个覆盖信息表是一个对角矩阵,对角线的值为1,其他为0。将虚拟测试集放在训练好的支持向量机模型中,预测哪些用例会被分为失败的一类。
考虑到惩罚因子的作用是允许支持向量机错分某些离群点的程度,因此,修改分类超平面的优化目标函数,使之成为:
这里,i=1,...,p是分类为执行成功的样本,i=p+1,...,n是分类为执行失败样本,εi为松弛变量,n为样本总数。C+与C_的取值选择根据这两类样本数量的反比来确定。采用LibSVM工具箱,使用用于训练支持向量机模型的svm-train.exe程序以及用于预测的svm-predict.exe程序。其中训练方法如下:
svm-train[options]training_set_file[model_file]
之后,构建虚拟矩阵来测试该模型:
svm-predict[options]test_file model_file output_file
这里取三个输出:[predicted_label,accuracy,decision_values],分别表示的预测结果标签、预测准确度和决策值。由这三个值得到一条语句含有故障的可疑度值,并按大小关系排列成表。
步骤五、根据可疑度值列表,从上往下依次检测语句,直到故障被定位。
本发明的有益效果是:该方法首先利用高斯混合分布描述现实程序中可能存在的故障分布,使得程序中的故障分布更为明确;再借助基于高斯混合模型的聚类分析方法,对冗余测试样本进行剔除,找到针对特定故障的专用测试集,从而减少了冗余用例对定位精度的不良影响;然后,修改支持向量机模型来适应不平衡的数据样本,并结合并行调试理论来找到用例覆盖信息和执行结果之间的非线性映射关系,使得机器学习算法不会因样本不均而陷于局部最优解问题。最后,设计虚拟测试套件,放到训练好的模型中预测,得出语句可疑度值排名,进行故障定位,提高了软件故障定位效率。
为了验证本发明方法的效果,采用SIR中最为经典的Siemens测试套件和Space测试套件,来对本发明方法的有效性进行评估。Siemens测试套件包含有7组测试程序,自2003年被应用到NNQ技术的有效性评估上之后,该测试套件已成为故障定位领域内使用最多的测试数据集。Space是由欧洲航天局开发的一款解释器程序。作为一个大型测试集,它包含有38个错误版本,9126行代码,3657条可执行语句以及13585条测试用例。在这两个标准测试套件之上,应用Wong等人提出的EXAM得分体系,来测试本发明的实际定位效果。实验结果表明,由于采用了基于高斯混合模型的无监督学习算法,以及基于支持向量机的监督学习算法,故障定位技术所面临的故障分布不明、测试样本冗余和样本分布不均的问题,得到了有效的解决。从图2~8中可以看出,本发明(图中GVM曲线)比背景技术方法能更块地完成故障定位工作。并且,在0%到10%的分值区间内,故障定位的效率提升了20%以上,这验证了本发明方法的确能够有效地提高软件故障定位效率,降低定位所需的工作量。
下面结合附图和具体实施方式对本发明作详细说明。
附图说明
图1是本发明基于机器学习算法的软件故障定位方法的流程图。
图2是本发明基于机器学习算法的软件故障定位方法在print_tokens套件上的实际测试结果。
图3是本发明基于机器学习算法的软件故障定位方法在replace套件上的实际测试结果。
图4是本发明基于机器学习算法的软件故障定位方法在schedule套件上的实际测试结果。
图5是本发明基于机器学习算法的软件故障定位方法在tcas套件上的实际测试结果。
图6是本发明基于机器学习算法的软件故障定位方法在tot_info套件上的实际测试结果。
图7是本发明基于机器学习算法的软件故障定位方法在整个Siemens套件上的实际测试结果。
图8是本发明基于机器学习算法的软件故障定位方法在Space套件上的实际测试结果。
具体实施方式
参照图1-8。本发明基于机器学习算法的软件故障定位方法具体步骤如下:
(1)首先,获取程序的执行信息。由于本发明中程序执行信息的采集均运行于GNU/Linux环境下,且测试套件均使用标准C语言编写,因此在本发明的研究工作中,所有程序均采用GNU标准编译器GCC(GNU Compiler Collection)进行编译。在测试样本采集这一步里,主要用到的是Gcov工具。Gcov是一种命令行形式的控制台程序。它和GCC相配合,能对C/C++文件进行程序插桩和覆盖分析。首先对待测文件进行编译,编译命令为:
gcc-O2test.c-I.-fprofile-arcs-ftest-coverage-o test.exe
该命令在编译的同时生成gcov所需的test.gcno文件。然后运行可执行文件test.exe,生成test.gcda文件,用以记录插桩信息。最后,用gcov test.c命令就可以得到test.c.gcov文件。其中在每行代码的开头,“-”表示此行代码不是可执行语句,数字表示此行代码在运行过程中被执行的次数,“#####”表示此行代码虽为可执行语句,但在本次执行中并没有被覆盖到。
借助Gcov工具,手工编写C语言代码,在每执行一次测试用例之后,都对生成的gcov文件进行分析,从而得到错误版本程序的语句被测试用例覆盖的信息。此外,本发明还需要收集测试用例的执行结果。主要步骤如下:
d)编译原版本程序代码,执行测试用例,将输出结果放到测试套件的outputs文件夹中;
e)运行错误版本程序程序,将输出结果放到newoutputs文件夹下;
f)将newoutputs文件夹中的测试输出同outputs文件夹中的输出相比较,如果输出结果一致,就说明测试用例执行成功,否则执行失败。
这些步骤的自动化过程同样也是本发明手工编写的C语言代码来实现的。
(2)通过对故障版本的测试用例覆盖信息和执行结果的采集,生成了用以进行故障定位的实验样本。接下来,构建高斯混合模型来无限逼近故障分布,使测试集分成属于各自分布的用例聚类。高斯混合模型本质上是单一高斯分布的概率密度函数的加权求和,且各项的计算结果即为样本属于各类的概率大小,即:
其中,第k个分布N(xik)的权重为wk,λ为模型参数,为样本xi属于k的概率。在这一原理的帮助下,可以近似地模拟软件故障的分布。假设程序代码P中含有m条语句,其中mf条语句含有故障,mp条语句正确,且满足则针对P的一个测试集T含有t个测试用例,其中包含tf个失败用例以及tp个成功用例,且满足由于错误的测试用例大多覆盖了故障语句,正确执行的测试用例可能覆盖也可能没有覆盖故障语句。因此,程序故障在代码中的分布会直接导致测试用例的覆盖信息也服从该分布。假设测试集T的第i个测试用例为ti,程序P的第j条语句为sj,令Ci,j=1表示ti执行时覆盖了语句sj,Ci,j值为0时表示未覆盖。那么,测试用例ti对程序P的覆盖信息可以表示为Ci=(Ci,1,Ci,2,...,Ci,m)。用这一向量表示测试用例的特征信息,则对于测试集T来说,其中的每一个测试用例都是多维特征空间中的一个点。由于故障语句大多被失败用例覆盖,则这tf个数据点在特征空间中将聚在一起,因而服从某种单一分布。并且,在这tf个数据点的附近,还会聚集一些覆盖了故障语句的成功用例,和一些未覆盖该故障语句但是执行信息与这tf个点很相似的成功用例,因此这些用例也将服从这tf个点的分布。传统的软件故障定位技术把整个程序故障及其测试集看作符合某种单一分布,这种方式使得程序故障并不能够很好地被暴露出来,这是因为故障会随着程序依赖关系被传递到其他语句中去。而本发明提出基于高斯混合模型的测试用例聚类划分的方法,能从测试集中寻找最能直观展现故障存在位置的子测试集,并以此作为故障定位技术的输入数据。
然后,对冗余的测试用例进行剔除。在用高斯混合模型模拟现实中软件故障分布的同时,还需要用这种无监督学习算法来消除冗余测试用例对故障定位精度的不良影响。首先将上一步中获得的子测试集作为输入,剔除其中的失败用例,将剩下的正确用例放到高斯混合模型中训练。用EM算法求解模型参数之后,将属于同一分布的测试用例聚成一类。然后,在这几类中,按照类平均距离法则,寻找到离刚才剔除出去的失败用例集最近的那一类,将这两类合并,组成最终用来做故障定位的专用测试集。
测试用例聚类划分和冗余剔除这两步都运行于Windows环境下,采用了Matlab数学分析软件中的Voicebox工具箱。Voicebox收纳了包括GMM在内的多种概率密度函数。本发明主要采用该工具箱中的gaussmix和gaussmixp函数来进行模型训练和预测。其中,gaussmix函数的使用方法如下:
function[m,v,w,g,f,pp,gg]=gaussmix(x,c,l,m0,v0,w0)
gaussmixp函数的使用方法如下:
function[lp,rp,kh,kp]=gaussmixp(y,m,v,w)
gaussmix和gaussmixp函数能帮助解决用例划分和冗余剔除的问题,从而找到最针对特定故障的测试套件子集。
(3)然后,利用基于支持向量机模型的监督学习算法来进行故障定位。由于向量Ci=(Ci,1,Ci,2,...,Ci,m)作为测试用例覆盖信息的同时,也能表示为特征空间中的一个数据点。而测试用例的输出ri即表示为每个样本点所属的类别。因此,把测试用例的覆盖信息Ci当做支持向量机的训练输入,把测试用例的执行结果ri当做训练输出,以此来训练支持向量机。训练好的模型反映了测试用例的覆盖信息与执行结果之间的非线性映射关系,利用这种关系,间接通过如下的虚拟测试集来找到故障语句。
可以看出,该测试集共有m条测试用例,恰好对应了m条程序语句。其中,第i条测试用例只覆盖第i条程序语句,使得整个覆盖信息表是一个对角矩阵,对角线的值为1,其他为0。将其放在训练好的支持向量机模型中,以此来预测哪些用例会被分为失败的一类。Vapnik在SVM里提出了最优超平面、软间隔和内积核函数的思想。他实现了让两类样本点,都能够尽量正确地被一个高维超平面分开。且样本点离分类超平面越远,其分为某一类的置信度也就越高。因此,将这些用例在多维空间中距离分类超平面的远近,描述为该语句含有故障的可疑度值,即分类为失败的用例,离分类超平面越远,它覆盖的语句越可能含有故障;分类为成功的用例,离分类超平面越远,它覆盖的语句越不可能含有故障。
由于在实际的测试集中,成功用例的数量往往远大于失败用例,因此数据倾斜问题一直困扰着故障定位技术的有效性。考虑到惩罚因子的作用是允许支持向量机错分某些离群点的程度,因此,修改分类超平面的优化目标函数,使之成为:
这里,i=1,...,p都是分类为执行成功的样本,i=p+1,...,n都是分类为执行失败样本,εi为松弛变量,n为样本总数。C+与C-的取值选择,就可以根据这两类样本数量的反比来确定,也就是说,失败类样本受重视的程度决定于两类间样本数量的差异。改善后的支持向量机模型能有效进行故障定位工作。这里,采用由台湾大学林智仁博士开发的LibSVM工具箱,主要使用的是用于训练支持向量机模型的svm-train.exe程序以及用于预测的svm-predict.exe程序。其中训练方法如下:
svm-train[options]training_set_file[model_file]
之后,构建虚拟矩阵来测试该模型:
svm-predict[options]test_file model_file output_file
这里主要取3个输出:[predicted_label,accuracy,decision_values],分别表示的预测结果标签、预测准确度和决策值。由这三个值,能够得到一条语句含有故障的可疑度值,并按大小关系排列成表。
(4)最后,根据可疑度值列表,从上往下依次检测语句,直到故障被定位出来。至此,完成了基于机器学习算法的故障定位方法的全部步骤。
为了验证算法的效果,本发明采用了SIR中最为经典的Siemens测试套件和Space测试套件,来对本算法的有效性进行评估。Siemens测试套件包含有7组测试程序,自2003年被应用到NNQ技术的有效性评估上之后,该测试套件已成为故障定位领域内使用最多的测试数据集。Space是由欧洲航天局开发的一款解释器程序。作为一个大型测试集,它包含有38个错误版本,9126行代码,3657条可执行语句以及13585条测试用例。在这两个标准测试套件之上,应用Wong等人提出的EXAM得分体系,来测试本发明的实际定位效果。实验结果表明,由于采用了基于高斯混合模型的无监督学习算法,以及基于支持向量机的监督学习算法,故障定位技术所面临的故障分布不明、测试样本冗余和样本分布不均的问题,得到了有效的解决。从附图2至附图8中可以看出,本发明(图中GVM曲线)比其他方法能更早地完成故障定位工作。并且,在0%到10%的分值区间内,故障定位的效率提升了20%以上,这验证了本发明的确能够有效地提高软件故障定位的精度,降低定位所需的工作量。

Claims (1)

1.一种基于机器学习算法的软件故障定位方法,其特征在于包括以下步骤:
步骤一、获取程序的执行信息;采用GNU标准编译器GCC和Gcov工具对待测文件进行编译,编译命令为:
gcc-O2test.c-I.-fprofile-arcs-ftest-coverage-o test.exe
所述命令在编译的同时生成gcov所需的test.gcno文件;然后运行可执行文件test.exe,生成test.gcda文件,用以记录插桩信息;最后,用gcov test.c命令得到test.c.gcov文件;其中在每行代码的开头,-表示此行代码不是可执行语句,数字表示此行代码在运行过程中被执行的次数,#####表示此行代码虽为可执行语句,但在本次执行中并没有被覆盖到;
借助Gcov工具,编写C语言代码,在每执行一次测试用例之后,都对生成的gcov文件进行分析,得到错误版本程序的语句被测试用例覆盖的信息;收集测试用例的执行结果的步骤如下:
a)编译原版本程序代码,执行测试用例,将输出结果放到测试套件的outputs文件夹中;
b)运行错误版本程序,将输出结果放到newoutputs文件夹下;
c)将newoutputs文件夹中的测试输出同outputs文件夹中的输出相比较,如果输出结果一致,说明测试用例执行成功,如果输出结果不一致,说明测试用例执行失败;
步骤二、通过对故障版本的测试用例覆盖信息和执行结果的采集,生成用以进行故障定位的实验样本;构建高斯混合模型来无限逼近故障分布,使测试集分成属于各自分布的用例聚类;高斯混合模型本质上是单一高斯分布的概率密度函数的加权求和,且各项的计算结果即为样本属于各类的概率大小,即:
其中,wk是第k个分布N(xik)的权重,λ为模型参数,为样本xi属于k的概率;假设程序代码P中含有m条语句,其中mf条语句含有故障,mp条语句正确,且满足则针对P的一个测试集T含有t个测试用例,其中包含tf个失败用例以及tp个成功用例,且满足由于错误的测试用例覆盖了故障语句,正确执行的测试用例可能覆盖也可能没有覆盖故障语句;因此,程序故障在代码中的分布会直接导致测试用例的覆盖信息也服从该分布;假设测试集T的第i个测试用例为ti,程序P的第j条语句为sj,令Ci,j=1表示ti执行时覆盖了语句sj,Ci,j值为0时表示未覆盖;那么,测试用例ti对程序P的覆盖信息表示为Ci=(Ci,1,Ci,2,...,Ci,m);用这一向量表示测试用例的特征信息,则对于测试集T来说,其中的每一个测试用例都是多维特征空间中的一个点;由于故障语句大多被失败用例覆盖,则这tf个数据点在特征空间中将聚在一起,因而服从某种单一分布;并且,在这tf个数据点的附近,还会聚集一些覆盖了故障语句的成功用例,和一些未覆盖该故障语句但是执行信息与这tf个点很相似的成功用例,因此这些用例也将服从这tf个点的分布;
步骤三、对冗余的测试用例进行剔除;将步骤二获得的测试集T作为输入,剔除其中的失败用例,将剩下的正确用例放到高斯混合模型中训练;用EM算法求解模型参数之后,将属于同一分布的测试用例聚成一类;然后,在这几类中,按照类平均距离法则,寻找到离剔除出去的失败用例集最近的那一类,将这两类合并,组成最终用来做故障定位的专用测试集;
测试用例聚类划分和冗余剔除这两步都运行于Windows环境下,采用Matlab数学分析软件中的Voicebox工具箱;Voicebox收纳了包括GMM在内的多种概率密度函数;采用Voicebox工具箱中的gaussmix和gaussmixp函数来进行模型训练和预测;其中,gaussmix函数的使用方法如下:
function[m,v,w,g,f,pp,gg]=gaussmix(x,c,l,m0,v0,w0)
gaussmixp函数的使用方法如下:
function[lp,rp,kh,kp]=gaussmixp(y,m,v,w)
gaussmix和gaussmixp函数能帮助解决用例划分和冗余剔除的问题,从而找到最针对特定故障的测试套件子集;
步骤四、利用基于支持向量机模型的监督学习算法进行故障定位;由于向量Ci=(Ci,1,Ci,2,...,Ci,m)作为测试用例覆盖信息的同时,还能够表示为特征空间中的一个数据点;而测试用例的输出ri即表示为每个样本点所属的类别;因此,把测试用例的覆盖信息Ci当做支持向量机的训练输入,把测试用例的执行结果ri当做训练输出,以此来训练支持向量机;训练好的模型反映了测试用例的覆盖信息与执行结果之间的非线性映射关系,利用这种关系,间接通过如下的虚拟测试集来找到故障语句;
所述虚拟测试集共有m条测试用例,对应m条程序语句;其中,第i条测试用例只覆盖第i条程序语句,使得整个覆盖信息表是一个对角矩阵,对角线的值为1,其他为0;将虚拟测试集放在训练好的支持向量机模型中,预测哪些用例会被分为失败的一类;
考虑到惩罚因子的作用是允许支持向量机错分某些离群点的程度,因此,修改分类超平面的优化目标函数,使之成为:
这里,i=1,...,p是分类为执行成功的样本,i=p+1,...,n是分类为执行失败样本,εi为松弛变量,n为样本总数;C+与C-的取值选择根据这两类样本数量的反比来确定;采用LibSVM工具箱,使用用于训练支持向量机模型的svm-train.exe程序以及用于预测的svm-predict.exe程序;其中训练方法如下:
svm-train[options]training_set_file[model_file]
之后,构建虚拟矩阵来测试该模型:
svm-predict[options]test_file model_file output_file
这里取三个输出:[predicted_label,accuracy,decision_values],分别表示的预测结果标签、预测准确度和决策值;由这三个值得到一条语句含有故障的可疑度值,并按大小关系排列成表;
步骤五、根据可疑度值列表,从上往下依次检测语句,直到故障被定位。
CN201610191313.9A 2016-03-30 2016-03-30 基于机器学习算法的软件故障定位方法 Expired - Fee Related CN105893256B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610191313.9A CN105893256B (zh) 2016-03-30 2016-03-30 基于机器学习算法的软件故障定位方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610191313.9A CN105893256B (zh) 2016-03-30 2016-03-30 基于机器学习算法的软件故障定位方法

Publications (2)

Publication Number Publication Date
CN105893256A CN105893256A (zh) 2016-08-24
CN105893256B true CN105893256B (zh) 2018-06-08

Family

ID=57014640

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610191313.9A Expired - Fee Related CN105893256B (zh) 2016-03-30 2016-03-30 基于机器学习算法的软件故障定位方法

Country Status (1)

Country Link
CN (1) CN105893256B (zh)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107025547B (zh) * 2016-09-19 2020-10-16 创新先进技术有限公司 支付通道检测方法、装置及终端
CN106483942B (zh) * 2016-09-20 2019-06-04 孙敬玺 一种半导体制造设备和工艺的智能控制系统及方法
CN108345979B (zh) * 2017-01-23 2021-07-09 阿里巴巴集团控股有限公司 一种业务测试方法及装置
CN107066365B (zh) * 2017-02-20 2021-01-01 创新先进技术有限公司 一种系统异常的监测方法及装置
CN107330519A (zh) * 2017-06-26 2017-11-07 西北工业大学 基于深度神经网络的故障定位方法
CN108304174A (zh) * 2017-08-22 2018-07-20 北京智行鸿远汽车有限公司 一种基于numpy的高精度C语言算法验证方法
CN107657274A (zh) * 2017-09-20 2018-02-02 浙江大学 一种基于k‑means的二叉SVM‑tree不平衡数据工业故障分类方法
CN108563555B (zh) * 2018-01-10 2020-03-31 江苏工程职业技术学院 基于四目标优化的故障更改代码预测方法
CN108509973B (zh) * 2018-01-19 2022-04-05 南京航空航天大学 基于Cholesky分解的最小二乘支持向量机学习算法及其应用
CN108563945B (zh) * 2018-03-26 2020-07-07 烽火通信科技股份有限公司 一种异构冗余实现方法及实现系统
CN109062782B (zh) * 2018-06-27 2022-05-31 创新先进技术有限公司 一种回归测试用例的选择方法、装置及设备
CN109375116B (zh) * 2018-08-09 2021-12-14 上海国际汽车城(集团)有限公司 一种基于自编码器的电池系统异常电池识别方法
CN109669866B (zh) * 2018-12-10 2021-04-30 北京航空航天大学 一种软件运行时故障传播路径的获取方法
CN111444076B (zh) * 2018-12-29 2024-04-05 三六零科技集团有限公司 基于机器学习模型的测试用例步骤的推荐方法和装置
CN109783496B (zh) * 2019-01-14 2023-04-18 东北大学 基于Excel&VBA的数据收集和处理自动化工具及使用方法
CN109977191B (zh) * 2019-04-01 2021-04-30 国家基础地理信息中心 问题地图检测方法、装置、电子设备和介质
CN110232023B (zh) * 2019-05-22 2021-07-06 中国科学院长春光学精密机械与物理研究所 一种基于卷积神经网络的软件缺陷定位方法、装置和介质
CN110347583A (zh) * 2019-05-23 2019-10-18 平安科技(深圳)有限公司 一种数据分析系统会诊方法及相关装置
CN110362484B (zh) * 2019-07-03 2022-03-01 北京航空航天大学 软件多故障的定位方法、装置、电子设备以及存储介质
CN112804709B (zh) * 2019-11-13 2022-10-14 中国移动通信集团重庆有限公司 服务小区之间的重叠覆盖状况确定方法及装置
CN111382078B (zh) * 2020-03-13 2023-04-28 龙婷 故障诊断模拟方法、装置、电子设备及存储介质
US11556815B1 (en) 2020-03-19 2023-01-17 Wells Fargo Bank, N.A. Systems and methods for using machine learning for managing application incidents
CN111614508B (zh) * 2020-04-01 2022-05-13 武汉迈威通信股份有限公司 一种基于人工智能的交换机测试结果分析方法及系统
CN111348034B (zh) * 2020-04-03 2021-08-24 南栖仙策(南京)科技有限公司 基于生成对抗模仿学习的自动泊车方法及系统
CN111563044B (zh) * 2020-05-11 2022-10-25 西安邮电大学 一种基于程序变异的程序谱错误定位方法
CN112328475B (zh) * 2020-10-28 2021-11-30 南京航空航天大学 一种面向多可疑代码文件的缺陷定位方法
CN112527631A (zh) * 2020-11-18 2021-03-19 武汉迈威通信股份有限公司 bug定位方法、系统、电子设备及存储介质
CN112416806B (zh) * 2020-12-09 2022-03-01 西北大学 一种基于标准文档分析的js引擎模糊测试方法
CN114046968A (zh) * 2021-10-04 2022-02-15 北京化工大学 一种基于声学信号的过程装备两步故障定位方法
CN115510782B (zh) * 2022-08-31 2024-04-26 芯华章科技股份有限公司 定位验证错误的方法、电子设备和存储介质
CN116955210B (zh) * 2023-09-19 2024-01-19 北京普太科技有限公司 一种测试用例的生成方法、装置、电子设备及存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN201501230U (zh) * 2009-09-27 2010-06-09 吴卓进 便携式卷笔刀

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Multiple-Bug Oriented Fault Localization: A Parameter-Based Combination Approach;Zheng wei;《 Software Security and Reliability-Companion》;20131031;125-130 *
Using an RBF Neural Network to Locate Program Bugs;W. Eric Wong etc.;《19th International Symposium on Software Reliability Engineering》;20081208;27-36 *
基于半监督学习方法的软件故障定位研究;郑炜;《西北工业大学学报》;20150430;第33卷(第2期);332-336 *

Also Published As

Publication number Publication date
CN105893256A (zh) 2016-08-24

Similar Documents

Publication Publication Date Title
CN105893256B (zh) 基于机器学习算法的软件故障定位方法
Nushi et al. Towards accountable ai: Hybrid human-machine analyses for characterizing system failure
Wang et al. Software defect prediction based on gated hierarchical LSTMs
Brun et al. Finding latent code errors via machine learning over program executions
CN101231614B (zh) 一种基于执行轨迹块相似度的软件缺陷定位方法
CN110362484A (zh) 软件多故障的定位方法、装置、电子设备以及存储介质
Soe et al. Software defect prediction using random forest algorithm
CN111581086B (zh) 一种基于RankNet的混合软件错误定位方法及系统
CN109783349A (zh) 一种基于动态反馈权重的测试用例优先级排序方法及系统
CN107066389A (zh) 基于集成学习的软件缺陷重新打开的预测方法
Zakari et al. A community-based fault isolation approach for effective simultaneous localization of faults
Parry et al. Evaluating features for machine learning detection of order-and non-order-dependent flaky tests
Sangroya et al. Guided-LIME: Structured Sampling based Hybrid Approach towards Explaining Blackbox Machine Learning Models.
Kapila et al. Analysis of CK metrics to predict software fault-proneness using bayesian inference
CN105868115A (zh) 软件密集型系统软件测试模型的构建方法和系统
CN114003509A (zh) 基于流形正则化宽度学习的软件缺陷定位方法及处理装置
US7272583B2 (en) Using supervised classifiers with unsupervised data
Dutta et al. Effective fault localization using an ensemble classifier
Al-Fraihat et al. Hyperparameter Optimization for Software Bug Prediction Using Ensemble Learning
Gu et al. Hierarchical attention network for interpretable and fine-grained vulnerability detection
CN110097184A (zh) 信息处理方法以及信息处理系统
Mulla et al. Role of Machine Learning & Artificial Intelligence Techniques in Software Testing
Yang et al. DLAP: A Deep Learning Augmented Large Language Model Prompting Framework for Software Vulnerability Detection
CN103593285B (zh) 一种基于判定识别的图像类软件单元测试方法
Nitin et al. Analyzing ensemble methods for software fault prediction

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20200709

Address after: No.1 courtyard, Xili, Yungang North District, Fengtai District, Beijing 100071

Patentee after: BEIJING JINGHANG COMPUTING COMMUNICATION Research Institute

Address before: 710072 Xi'an friendship West Road, Shaanxi, No. 127

Patentee before: Northwestern Polytechnical University

CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20180608

Termination date: 20210330