本发明属于软件测试技术领域,具体涉及一种提高软件测试覆盖率的方法和系统。
背景技术:
从事软件项目管理及测试管理时,我们会发现软件质量反复、bug收敛度不如预期等问题,往往是项目结项面临的最大问题。针对这种问题通常采取的做法是bug分类追踪问责或者加班赶工,而bug分类追踪问责:将本次bug分类,新发现、修改导致、未修改等,以追究测试人员及开发人员的责任,期待开发人员修改bug质量及测试人员测试全面性的提高;为了减少新发现bug的数量,往往采用固定模块测试人员的做法。
不可否认,这些做法会取得一定的效果。但是bug分类的统计过程,缺乏科学的、系统的标准,这往往造成开发与测试互相推诿的现象。
总结这些矛盾的根本在于测试覆盖率的问题,如何保证在测试初期就进行全面的覆盖?作为管理人员如何在测试之后统计本次测试对于程序测试的全面性?为此,本发明提出一种计算和提高软件测试覆盖率的方法。
技术实现要素:
针对软件测试过程中bug分类的统计过程,缺乏科学的、系统的标准,这往往造成开发与测试互相推诿的现象,这种现象的根本是测试覆盖率的问题,本发明提供一种提高软件测试覆盖率的方法和系统。
本发明的技术方案是:
第一方面,本发明提供一种提高软件测试覆盖率的方法,包括如下步骤:
对测试程序源代码进行扫描识别出故障输入位置;
根据扫描出的故障输入位置注入故障并输出变异后的被测软件;
对变异后的被测软件进行测试,
计算测试覆盖率,若测试覆盖率达到设定的目标覆盖率测试结束。
通过程序扫描模块获得可以插入故障的被测软件位置序列,通过故障注入模块对被测软件的相应位置进行故障注入,并生成变异后的被测软件,从而获得测试覆盖率,依此反推完善测试用例,来提高软件测试覆盖率。
优选地,对测试程序源代码进行扫描识别出故障输入位置,之前包括:
创建扫描规则,其中,所述的扫描规则定义了对源代码进行扫描时要识别的语法结构,所述的语法结构包括函数的定义语句、赋值语句、控制分支和循环语句。
优选地,对测试程序源代码进行扫描识别出故障输入位置,包括:
根据扫描规则对程序源代码进行扫描,识别出所有的故障输入位置;
输出故障输入位置列表。
优选地,根据扫描出的故障输入位置注入故障并输出变异后的被测软件,包括:
根据扫描出来的故障输入位置列表注入故障,并记录注入故障会引发的bug数m,输出变异后的被测软件。
优选地,计算测试覆盖率,包括:
测试输出变异后的被测软件,统计与注入故障相关的bug数n;
结合注入故障会引发的bug数m和统计的与注入故障相关的bug数n,计算覆盖率。
优选地,该方法还包括:
若测试覆盖率没有达到设定的目标覆盖率,完善测试用例对变异后的软件进行测试。测试覆盖率没有达到设定的目标覆盖率督促软件测试人员完善测试用例,再次执行测试,以此,提高软件测试覆盖率。
优选地,该方法还包括:输出故障输入位置列表留存在变异库中。
采用程序变异的方法对被测软件进行故障注入,监督软件测试过程,从而提高软件的测试覆盖率。
另一方面,本发明还提供一种提高软件测试覆盖率的系统,包括程序扫描模块、故障注入模块、测试模块和计算判断模块;
程序扫描模块,用于对测试程序源代码进行扫描识别出故障输入位置;
故障注入模块,用于根据扫描出的故障输入位置注入故障并输出变异后的被测软件;
测试模块,用于对变异后的被测软件进行测试,
计算判断模块,用于计算测试覆盖率,若测试覆盖率达到设定的目标覆盖率测试结束。
优选地,该系统还包括扫描规则创建模块,所述的扫描规则创建模块,用于创建扫描规则,其中,所述的扫描规则定义了对源代码进行扫描时要识别的语法结构,所述的语法结构包括函数的定义语句、赋值语句、控制分支和循环语句。
优选地,该系统还包括变异库,程序扫描模块包括程序扫描单元和位置列表输出单元;
程序扫描单元,用于根据扫描规则对程序源代码进行扫描,识别出所有的故障输入位置;
位置列表输出单元,用于输出故障输入位置列表;
变异库,用于留存输出故障输入位置列表;
故障注入模块,用于根据扫描出来的故障输入位置列表注入故障,并记录注入故障会引发的bug数m,输出变异后的被测软件。
故障注入模块,还用于统计与注入故障相关的bug数n;
测试模块测试输出变异后的被测软件;
计算判断模块,结合注入故障会引发的bug数m和统计的与注入故障相关的bug数n,计算覆盖率。
扫描规则定义了程序扫描模块对源代码进行扫描时需要识别的语法结构,这些结构包括但不限于函数的定义语句、赋值语句、控制分支和循环语句。根据扫描规则对程序源代码进行扫描,识别出所有可选的故障输入位置,并输出位置列表故障注入模块,根据扫描出来的位置列表注入故障根据测试出的bug数与注入故障引发的bug数进行比较,获得本次测试的覆盖率科学的监督测试过程,提高测试覆盖率。
本发明的有益效果在于,采用程序变异的方法对被测软件进行故障注入,用强制的方法执行被测分支,从而提高软件的测试覆盖率。通过程序扫描模块获得可以插入故障的被测软件位置序列,通过故障注入模块对被测软件的相应位置进行故障注入,并生成变异后的被测软件,并记录故障注入引发的bug数。当软件测试人员测试结束后,统计与注入故障相关的bug数,从而获得测试覆盖率,依此反推完善测试用例,来提高软件测试覆盖率。
此外,本发明设计原理可靠,结构简单,具有非常广泛的应用前景。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一个实施例的方法的示意性流程图。
具体实施方式
为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
下面对本发明中出现的关键术语进行解释。
实施例一
如图1所示,本发明实施例提供一种提高软件测试覆盖率的方法,包括如下步骤:
s1:创建扫描规则,其中,所述的扫描规则定义了对源代码进行扫描时要识别的语法结构,所述的语法结构包括函数的定义语句、赋值语句、控制分支和循环语句。本步骤中提到的扫描规则可以由经验丰富的开发人员及测试人员共同商定;
s2:对测试程序源代码进行扫描识别出故障输入位置;
本步骤中,根据扫描规则对程序源代码进行扫描,识别出所有可选的故障输入位置;
输出故障输入位置列表;本步骤中输出的故障输入位置列表在变异库中留存。
本领域技术人员知道,故障注入的不同种类也是留存在变异库中。
在这个过程中,变异库通过测试过程的bug进行逐步的完善增强故障注入的种类,进一步的提高测试覆盖率。
s3:根据扫描出的故障输入位置注入故障并输出变异后的被测软件;
本步骤中,需要说明的是,故障注入技术包括中间层注入技术和空间注入技术,中间层注入方式是向指定的位置注入确定性的故障,空间注入技术主要是对内存空间或各寄存器进行注入;空间注入技术就是向进程地址空间中的节段有针对性或随机的注入,本发明采用空间注入技术,根据扫描出来的故障输入位置列表注入故障,并记录注入故障会引发的bug数m,输出变异后的被测软件。
s4:对变异后的被测软件进行测试,
需要说明的是,测试输出变异后的被测软件,统计与注入故障相关的bug数n;在这个过程中是对测试规程进行监督的过程,采用程序变异的方法对被测软件进行故障注入,监督软件测试过程,从而提高软件的测试覆盖率;
s5:计算测试覆盖率;结合注入故障会引发的bug数m和统计的与注入故障相关的bug数n,计算覆盖率,计算覆盖率p=n/m;
若测试覆盖率达到设定的目标覆盖率测试结束;
若测试覆盖率没有达到设定的目标覆盖率,完善测试用例对变异后的软件进行测试。测试覆盖率没有达到设定的目标覆盖率督促软件测试人员完善测试用例,再次执行步骤s4进行软件测试,以此,提高软件测试覆盖率。
通过程序扫描模块获得可以插入故障的被测软件位置序列,通过故障注入模块对被测软件的相应位置进行故障注入,并生成变异后的被测软件,从而获得测试覆盖率,依此反推完善测试用例,来提高软件测试覆盖率。
采用程序变异的方法对被测软件进行故障注入,监督软件测试过程,从而提高软件的测试覆盖率。
实施例二
本发明还提供一种提高软件测试覆盖率的系统,包括程序扫描模块、故障注入模块、测试模块和计算判断模块;
程序扫描模块,用于对测试程序源代码进行扫描识别出故障输入位置;
故障注入模块,用于根据扫描出的故障输入位置注入故障并输出变异后的被测软件;
测试模块,用于对变异后的被测软件进行测试,
计算判断模块,用于计算测试覆盖率,若测试覆盖率达到设定的目标覆盖率测试结束。
该系统还包括扫描规则创建模块,所述的扫描规则创建模块,用于创建扫描规则,其中,所述的扫描规则定义了对源代码进行扫描时要识别的语法结构,所述的语法结构包括函数的定义语句、赋值语句、控制分支和循环语句。
该系统还包括变异库,程序扫描模块包括程序扫描单元和位置列表输出单元;
程序扫描单元,用于根据扫描规则对程序源代码进行扫描,识别出所有的故障输入位置;
位置列表输出单元,用于输出故障输入位置列表;
变异库,用于留存输出故障输入位置列表;
故障注入模块,用于根据扫描出来的故障输入位置列表注入故障,并记录注入故障会引发的bug数m,输出变异后的被测软件。
本实施例中,需要进一步说明的是故障注入模块包括主控单元也就是主控程序主要用于负责协调系统运行;故障注入单元,用于将故障注入目标系统中;脚本解析单元,用于分析故障注入脚本并构成故障注入模型对象链;监视单元,用于跟踪目标系统的运行也就是对被测软件进行测试过程进行监控并在需要的时候对数据收集进行必要的初始化工作;数据收集单元,用于在线收集数据;数据分析单元,用于将数据收集单元收集的数据进行处理和分析状态数据进而记录注入故障会引发的bug数m;还根据数据状态统计与注入故障相关的bug数n并测试模块测试输出变异后的被测软件;
计算判断模块,结合注入故障会引发的bug数m和统计的与注入故障相关的bug数n,计算覆盖率。
扫描规则定义了程序扫描模块对源代码进行扫描时需要识别的语法结构,这些结构包括但不限于函数的定义语句、赋值语句、控制分支和循环语句。根据扫描规则对程序源代码进行扫描,识别出所有可选的故障输入位置,并输出位置列表故障注入模块,根据扫描出来的位置列表注入故障根据测试出的bug数与注入故障引发的bug数进行比较,获得本次测试的覆盖率科学的监督测试过程,提高测试覆盖率。
尽管通过参考附图并结合优选实施例的方式对本发明进行了详细描述,但本发明并不限于此。在不脱离本发明的精神和实质的前提下,本领域普通技术人员可以对本发明的实施例进行各种等效的修改或替换,而这些修改或替换都应在本发明的涵盖范围内/任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。