一种程序不可达路径的自动检测方法技术

技术编号:13082549 阅读:46 留言:0更新日期:2016-03-30 14:43
本发明专利技术公开了一种程序不可达路径的自动检测方法,通过将待检测的计算机程序转化为控制流图;将控制流图转化为程序模型,进行可达性分析得到不可达状态,通过自动检测不可达状态得到不可达状态的集合,然后根据不可达状态的集合得到不可达路径集合。本发明专利技术以理论上较为简单的状态搜索技术为基础,相比已有技术通常基于较复杂的数学理论,有效降低了技术运用与推广的难度;提供了完整的、具有较高自动化程度的程序不可达路径检测方法;解决了控制流图的可达性检测问题;解决了静态分析技术在处理较复杂程序时所存在的困难与低效问题;解决了静态分析技术在处理多分支程序的过程中,难以表达复合型数据的问题。

【技术实现步骤摘要】

本专利技术属于软件测试领域,具体地,本专利技术涉及一种程序不可达路径的自动检测方法
技术介绍
术语解释:控制流图:控制流图(ControlFlowGraph)是程序语句逻辑执行顺序的图形化表达方式,简称为CFG。CFG包括节点和有向边两类元素:节点表示程序中的语句,并且有唯一的入口节点与出口节点;边表示节点之间的顺序关系。程序路径:是指由CFG中的节点构成的一个序列,若该序列的首节点为入口节点,末节点为出口节点,则该路径称为完整路径。不可达路径:是指在任何情况下都不会出现的程序路径。软件测试是软件质量保障的重要手段,需要耗费大量的人力与物力。统计数据表明,软件测试的开销占到了软件开发总成本的60%以上。软件测试的自动化是提高软件测试质量、降低成本、提高效率的一个重要途径,因此被学术界与工业界广泛地关注与研究。大体上,软件测试可以分为功能测试与结构测试,后者是指对程序的内部逻辑结构进行测试,以判定程序的各条路径是否能够满足需求。然而充分覆盖程序的测试是难以达成的,因为即使是并不复杂的程序段,也会由于分支、循环结构的存在,导致产生规模巨大的路径空间。因此,结构测试的一个重要研究领域,就是解决面向程序路径的测试数据生成问题。而不可达路径的检测,则是其中的一个重要研究热点。所谓的程序不可达路径,是指在任何输入下,都不会被执行的程序路径。程序不可达路径的存在,会导致在生成测试数据时,产生大量的无效测试数据,从而在测试执行时浪费大量的人力与物力,从而大大影响到测试的效率。因此,不可达路径的检测不仅能够降低测试成本,还能够有效提高测试效率,一直以来都是软件测试领域的一个研究热点。程序中所存在的不可达路径是代码冗余的一种表现形式,Liverpool大学的Yates与Malevris两位学者,通过实验证明了在大型软件系统中通常都会包含有10-25%的冗余代码。不可达路径的检测问题已经被证明是一个不可判定问题,因此所有的检测方法都是非完备的,即不存在能够检测出所有不可达路径的算法。目前,检测程序不可达路径的方法,可以分为静态检测与动态检测两类。1.静态检测技术静态检测技术可依据原理,分为两类:●基于路径条件可满足性的方法:是指针对所有的程序路径,通过对满足路径条件的谓词组合进行求解,依据解的存在性来判定路径的可达性。这类方法具有较高的复杂度。●基于分支相关性的方法:是指通过对分支语句进行相关性分析的手段,来检测不可达路径。在第一类技术中,典型的方法,是抽取程序的每条路径的分支谓词,并规约为一个方程组,通过求解方程组是否有解来判定路径是否可达。然而这类方法具有较高的复杂性,并且缺乏表达数组、结构体等复合数据类型的能力。此外,还有一些类似的方法:使用区间算术规约程序路径,但这类方法在处理条件谓词中的非线性表达式时,效率较为低下;使用代码模式检测程序分支,并通过符号执行技术进行路径的可达性检测,但这类方法的通用性受到代码模式的约束;使用变量的抽象取值范围规约程序的状态条件,通过判断路径的变量取值范围来判定路径是否可达,但这类方法不能很好地处理复合的分支条件。程序分支之间的相关性是产生不可达路径的主要原因,在具有一定复杂度的程序中,9-40%的分支语句会存在相关系。但基于相关性分析的检测方法由于无法分析结构复杂的分支条件,因此难以获得令人满意的节点覆盖率。该类方法的代表性工作包括:在传统的数据流分析中加入了分支相关性分析,从而提高传统数据流分析的精度;通过判断赋值语句、分支语句之间的冲突性来识别不可达路径,然而该方法却缺乏处理循环结构的能力;通过对控制流与数据流的静态分析,来确定相关性语句,并进而判定不可达路径,其特点是能够处理函数调用关系。2.动态检测技术动态检测技术是指在进行路径测试的过程中,依据测试用例生成的复杂度来判定待测试的路径是否可达。然而动态检测技术的检查代价通常较大,并且无法保证检测结果的绝对准确,具有较强的不确定性。常见的方法包括:使用基于启发式策略的方法检测不可达路径,其依据是可达路径的部分属相同这一原理,从而通过检测试数据的生成轨迹来实现路径可达性的检测;使用语义更新技术,从程序语义上来排除程序中的不可达路径;利用遗传算法来检测不可达路径,为了更好地引导搜索,该类方法会通过融合控制流图的信息,进行适应度函数的设计。现有的技术方案,存在以下的问题:(1)复杂度较高,检测效率较低。(2)难以处理复合的数据类型。(3)理论、方法及过程较为复杂,不利于推广与应用。(4)检测结果具有不确定性。(5)自动化程度较低。(6)在处理复杂的程序分支以及分支条件时,效果不佳。为了弥补上述缺点,本专利技术提出了一种程序不可达路径检测方法,是基于模型检测技术,通过将程序控制流图转化为自动机模型,使用状态空间搜索的方法来判定自动机状态的可达性,并依据状态的可达性来生产不可达路径。在已知的方法中,还没有发现与本专利技术相类似的实现方案。
技术实现思路
为解决上述问题,本专利技术提供了一种程序不可达路径的自动检测方法。本专利技术以理论上较为简单的状态搜索技术为基础,相比已有技术通常基于较复杂的数学理论,有效降低了技术运用与推广的难度;提供了完整的、具有较高自动化程度的程序不可达路径检测方法;解决了控制流图的可达性检测问题;解决了静态分析技术在处理较复杂程序时所存在的困难与低效问题;解决了静态分析技术在处理多分支程序的过程中,难以表达复合型数据的问题。为达到上述技术效果,本专利技术的技术方案是:一种程序不可达路径的自动检测方法,包括如下步骤:步骤1)将待检测的计算机程序转化为控制流图;步骤2)通过改进的广度优先搜索策略将控制流图转化为程序模型;步骤3)分析每个状态是否可达,寻找程序中的不可达路径,方法为:验证程序模型中的每个状态s是否存在一条包含s的状态序列;若对于某个状态s,不存在包含s的状态序列,则此状态为不可达状态;步骤4)采用模型检测技术自动检测步骤2)中的程序模型,得到不可达状态的集合;步骤5)根据不可达状态的集合,搜索程序路径是否包含不可达状态,得到不可达路径集合。进一步的改进,所述步骤2)中,程序模型为包含状态、迁移和迁移标号三大要素的形式化模型,且不包含状态、迁移和标号三大要素以外的性质要素。进一步的改进,所述改进的广度优先搜索策略具体为:3.1)遍历控制流图中的每个节点,若该节点是一个赋值语句,则创建一个新的状态,并以该本文档来自技高网
...

【技术保护点】
一种程序不可达路径的自动检测方法,其特征在于,包括如下步骤:步骤1)将待检测的计算机程序转化为控制流图;步骤2)通过改进的广度优先搜索策略将控制流图转化为程序模型;步骤3)分析每个状态是否可达,寻找程序中的不可达路径,方法为:验证程序模型中的每个状态s是否存在一条包含s的状态序列;若对于某个状态s,不存在包含s的状态序列,则此状态为不可达状态;步骤4)采用模型检测技术自动检测步骤2)中的程序模型,得到不可达状态的集合;步骤5)根据不可达状态的集合,搜索程序路径是否包含不可达状态,得到不可达路径集合。

【技术特征摘要】
1.一种程序不可达路径的自动检测方法,其特征在于,包括如下步骤:
步骤1)将待检测的计算机程序转化为控制流图;
步骤2)通过改进的广度优先搜索策略将控制流图转化为程序模型;
步骤3)分析每个状态是否可达,寻找程序中的不可达路径,方法为:验证程序模型中的
每个状态s是否存在一条包含s的状态序列;若对于某个状态s,不存在包含s的状态序列,则
此状态为不可达状态;
步骤4)采用模型检测技术自动检测步骤2)中的程序模型,得到不可达状态的集合;
步骤5)根据不可达状态的集合,搜索程序路径是否包含不可达状态,得到不可达路径
集合。
2.如权利要求1所述的程序不可达路径的自动检测方法,其特征在于,所述步骤2)中,
程序模型为包含状态、迁移和迁移标号三大要素的形式化模型,且不包含状态、迁移和标号
三大要素以外的性质要素。
3.如权利要求1所述的程序不可达路径的自动检测方法,其特征在于,所述改进的广度
优先搜索策略具体为:
3.1)遍历控制流图中的每个节点,若该节点是一个赋值语句,则...

【专利技术属性】
技术研发人员:唐郑熠王金水薛醒思洪茂雄胡文瑜刘建华
申请(专利权)人:福建工程学院
类型:发明
国别省市:福建;35

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1