一种软件错误定位方法及装置与流程

文档序号:15216153发布日期:2018-08-21 16:53阅读:220来源:国知局

本发明属于软件分析与测试技术领域,具体涉及一种软件错误定位方法及装置。



背景技术:

软件已成为现代信息社会的重要组成部分,是保证国家信息安全和软件产业健康发展的重要因素。软件质量的提升可以改善人们的生活和工作,对国民经济和信息产业发展有显著推动作用。随着软件规模和复杂程度的提高,软件错误出现的频率迅速上升,软件错误可能会给人类造成很大损失或灾难。

软件测试是为了显示程序中存在的错误而执行程序的过程,是软件生命周期中的重要环节;软件调试是为了找到错误并修复错误的过程。其中,错误定位旨在自动检测出软件存在的缺陷,是提高软件调试效率最有效的手段之一。

大部分的软件错误定位方法是基于动态测试的,大多利用程序覆盖信息和相应的执行结果,忽略了程序内部的结构信息和代码内在的逻辑关系,这导致错误定位精度不高。也有一些基于动态测试的错误定位方法,该类方法利用统计理论,对定位结果进行了精炼,只在一定程度上提高了错误定位的精度,但是,错误定位效率有待提高。

为了在提高错误定位的精度的同时也保证错误定位的效率,作者为曹鹤玲的博士学位论文《基于数据挖掘的软件错误定位方法研究》公开了一种软件错误定位方法,该方法针对偶然正确性影响软件错误定位效率的问题,提出了一种基于模糊c均值聚类的偶然正确性测试用例的识别方法。但是,该聚类算法的聚类分析能力较弱,并不能够对各种形状的数据处理,这将导致偶然正确性识别方面的效果较差,误报率和漏报率较高,从而使得软件错误定位的正确率较低;而且错误定位的时间较长,错误定位的效率较低。



技术实现要素:

本发明的目的在于提供一种软件错误定位方法及装置,用以解决现有技术中软件错误定位的正确率和效率均较低的问题。

为解决上述技术问题,本发明的技术方案为:

本发明提供了一种软件错误定位方法,包括如下步骤:

以测试用例驱动程序的源代码,获取程序的执行路径信息和对应的执行结果,包括成功执行路径和失败执行路径;采用njw谱聚类算法对程序的执行路径信息进行聚类划分,识别偶然正确性测试用例,并将识别出的偶然正确性测试用例进行去除;计算代码的可疑度,获取可疑度高于第一设定可疑度阈值的高可疑代码;在失败执行路径上挖掘出与所述高可疑代码相关联的关联代码;以挖掘出的关联代码作为代码检查对象,进行软件错误定位;其中,在执行njw谱聚类算法时,将每个执行路径数据点进行jaccard相似度计算,得到样本数据的相似度,由样本数据的相似度得到相似度矩阵,用以进行聚类计算。

本发明还提供了一种软件错误定位装置,包括处理器,所述处理器用于执行指令实现如下方法:

以测试用例驱动程序的源代码,获取程序的执行路径信息和对应的执行结果,包括成功执行路径和失败执行路径;采用njw谱聚类算法对程序的执行路径信息进行聚类划分,识别偶然正确性测试用例,并将识别出的偶然正确性测试用例进行去除;计算代码的可疑度,获取可疑度高于第一设定可疑度阈值的高可疑代码;在失败执行路径上挖掘出与所述高可疑代码相关联的关联代码;以挖掘出的关联代码作为代码检查对象,进行软件错误定位;其中,在执行njw谱聚类算法时,将每个执行路径数据点进行jaccard相似度计算,得到样本数据的相似度,由样本数据的相似度得到相似度矩阵,用以进行聚类计算。

本发明的有益效果:

本发明的软件错误定位方法及装置,针对偶然正确性影响错误定位效率的问题,提出了面向有效错误定位的偶然正确性测试用例识别方法,即采用改进的njw谱聚类算法来对程序的执行路径信息进行聚类划分,以识别得到偶然正确性测试用例。该改进的njw谱聚类算法在计算相似度时不再使用高斯函数,而是将每个执行路径数据点的k邻域对该点进行jaccard相似度计算,将该相似度值作为两点间的相似度,并通过求n个二次规划问题,求得相似度矩阵,以进行聚类计算。该改进降低了算法对参数的敏感度,在偶然正确性测试用例识别方面具有较低的误报率和漏报率,提高了软件错误定位的正确率,进而提高了软件错误定位的效率。本发明能够为开发人员提供高可疑代码的关联代码,有利于开发人员理解错误定位的相关联信息,并提高开发人员的工作效率。

作为方法及装置的进一步改进,采用njw谱聚类算法对测试用例进行聚类划分前,还包括:识别偶然正确性元素;计算偶然正确性元素的可疑度,将可疑度高于第二设定可疑度阈值的偶然正确性元素挑选为偶然正确性特征元素;根据挑选出的偶然正确性特征元素对获得的程序执行路径进行维度约简,采用njw谱聚类算法对约简后的程序执行路径进行聚类划分。

作为方法及装置的进一步改进,所述偶然正确性元素出现在失败测试的概率为1,出现在成功测试的概率为大于0小于1。

作为方法及装置的进一步改进,在失败执行路径上,采用置信度或支持度构建频繁项集,使用成功测试用例和失败测试用例求解频繁项集,以求解出的频繁项集作为与所述高可疑代码相关联的关联代码。

作为方法及装置的进一步改进,所述支持度为语句a出现且同时执行结果为b的概率;所述置信度为语句a出现的事务集d中执行结果b也同时出现的条件概率。

作为方法及装置的进一步改进,还包括将挖掘出的关联代码进行可视化显示的步骤。将关联代码直观的展示给开发人员,而不需要开发人员去理解可疑语句的集合,减少了开发人员的工作量,提高开发人员的工作效率。

附图说明

图1是本发明的软件错误定位方法的流程图;

图2是程序执行路径信息获取的流程图;

图3是偶然正确性测试用例识别的流程图;

图4是频繁项集求解模型构建的流程图;

图5是错误定位模型及可视化调试的流程图。

具体实施方式

为了提高软件错误定位的效率,本发明提供了一种软件错误定位装置,该装置包括处理器,该处理器用于执行指令实现本发明的软件错误定位方法,下面结合附图及实施例,对该方法做详细的说明。

该方法的整体流程图如图1所示。

首先,如图2所示,以测试用例驱动程序的源代码,在ubuntu12.04.2操作系统和gcc-4.6.3编译器下,使用gcc的gcov组件获取程序的执行路径信息,并通过测试语言获取相应的程序执行结果,即得到成功执行路径和失败执行路径。

然后,为了避免偶然正确性对软件错误定位的影响,采用改进的njw谱聚类算法,识别出偶然正确性测试用例。偶然正确性指程序执行了软件中存在的错误但是测试仍然通过的现象,这种现象在软件系统中普遍存在。在将识别出的偶然正确性测试用例后,将其去除,以提高软件错误定位的效率。其具体步骤如图3所示:

1)获取偶然正确性元素。偶然正确性元素要求程序实体e出现在失败测试的概率为1,而出现在成功测试中的概率大于零小于1,故通过该方法来获取偶然正确性元素。

2)应用怀疑度计算公式计算程序元素怀疑度,挑选出高可疑偶然正确性元素作为偶然正确性特征元素;并根据该特征元素对程序执行路径进行维度约简。

3)使用改进的njw算法对程序执行路径信息(这里包括成功执行路径和失败执行路径)进行聚类,该算法最终筛选出适合的特征向量聚类不同的数据点,从而识别出偶然正确性测试用例。

njw算法为多路普聚类算法中的一种,该聚类算法建立在谱图理论基础上,将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,而子图间距离尽量距离较远,以达到聚类的目的。

该算法具有能在任意形状的样本空间上聚类且收敛于全局最优解的优点,其基本思想是利用样本数据的相似度,由相似度得到相似度矩阵,由相似度矩阵得到拉普拉斯矩阵,根据特征分解后得到的特征向量进行聚类。

在构造相似度矩阵时,高斯函数(wij=exp(-||xi-xj||^2/2σ^2))是经典谱聚类算法中计算两点间相似度的常用方法,但尺度参数σ的选取使该函数功能受限。

为避免参数选择的难题,本发明中改进的njw算法中计算相似度不再使用高斯函数,而是将每个执行路径数据点的k近邻对该点进行jaccard相似度计算,将该相似度值作为两点间的相似度,通过求n个二次规划问题,求得相似度矩阵w,以降低该算法对参数的敏感度,提高本发明中软件错误定位的准确率。

在由相似度矩阵得到拉普拉斯矩阵后,接下来要确定所需特征向量的数目,它与最终的聚类数相等。偶然正确性测试用例的识别最终需要将测试用例分为两类:包含偶然正确性测试用例的聚类和不包含偶然正确性测试用例的聚类,故在这里设置所需特征向量的数目为2。

使用该聚类方法,聚类分析能力高效、快速;同时,可以处理各种形状的数据,进而使得本发明的软件错误定位方法的效率较高。

4)将识别出的偶然正确性测试用例进行去除,以应用于软件错误定位。去除的方式有两种:一种是从成功测试用例中移除偶然正确性测试用例,然后将偶然正确性测试用例加入到失败测试用例中;另一种是在成功测试用例中直接移除偶然正确性测试用例。该实施例中采用第一种方式来处理偶然正确性测试用例。

在软件错误定位过程中,通过分析程序执行过程可以发现可疑代码与程序执行失败有着某种关联,找到这种关联可以更有效地定位错误。接着,如图4所示,在偶然正确性去除完毕后,使用基于程序的怀疑度计算方法计算怀疑度,按可疑度大小排序,获取可疑度高于设定的可疑度阈值的代码,即高可疑的代码。在失败执行路径上,使用关联规则算法构建fpgrowth频繁项集,并使用成功测试用例和失败测试用例求解频繁项集,以该fpgrowth频繁项集作为高可疑代码相关联的关联代码。

这里的关联规则,包括支持度或置信度的计算。

支持度(support),规则ab的支持度是指a和b两者在事务集d中同时出现的概率,记为support(ab),它是概率p(a∪b)。在错误定位的上下文中,support(ab)表示某条语句a出现且同时程序执行结果为b的概率,即:

support(ab)=support(a∪b)=p(a∪b)

置信度(confidence),规则ab的置信度表示在出现a的事务集d中b也同时出现的条件概率,即包含a和b的事务数与包含a的事务数的比值。在错误定位的上下文环境中,confidence(ab)表示语句a出现的事务集d中执行结果b也同时出现的条件概率,即:

confidence(ab)=p(b|a)=support(a∪b)/support(a)

在进行fpgrowth繁项集求解时,主要包含fp-tree构建和递归挖掘fp-tree两个步骤。

1)fp-tree构建。fp-tree构建主要对失效执行路径进行两次扫描,将原始数据压缩到一个fp-tree树中。对所有频繁1项集的计数,然后删除支持度低于阈值的项将1项频繁集放入项头表,并按照支持度降序排列利用动态结点插入,支持度值的大小为1/n,其中,n为成功测试用例和失败测试用例总数。支持度小于此值的被删除。通过插入节点形式最终得到fp-tree树。

2)fp-tree树挖掘。得到了fp树、项头表以及节点链表,首先从项头表的底部项依次向上挖掘。对于项头表中对应于fp树的每一项,首先要找到它的条件模式基。条件模式基是指要挖掘的节点作为叶子节点所对应的fp子树。在软件错误定位中,叶子节点选取:只出现在失败测试用例执行路径的节点;出现在失败测试用例和成功测试用例交集的节点,找出叶子节点所对应的fp子树。将子树中每个节点的的计数设置为叶子节点的计数,并删除计数低于支持度(1/n)的节点。从这个条件模式基,可以得到条件fp-tree树,递归的挖掘条件fp-tree得到所有的频繁项集。

最后,如图5所示,以挖掘出的关联代码作为代码检查的对象,通过可视化调试,展示给开发人员,以进行软件错误定位。

在软件错误定位的过程中,以往的方法往往提供一个按顺序的怀疑度检查列表或者可疑语句的集合的方法,并不提供语句间的关联关系,开发人员需要理解这些代码,这边增加了检查的工作量。本发明将高可疑的语句以及相关联的语句可视化显示,辅助对当前语句的检查,大大提高了错误定位的效率。

尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1