APP下载

嵌入式软件测试用例自动生成方法

2021-11-28赵昶宇

科技与创新 2021年6期
关键词:嵌入式软件测试用例软件测试

赵昶宇

嵌入式软件测试用例自动生成方法

赵昶宇

(天津津航计算技术研究所,天津 300308)

为了减少软件测试人员的工作量,降低软件测试成本,提高软件测试的质量和效率,提出了一种软件测试用例自动生成方法。该方法首先提取出被测软件系统中的各个接口参数,然后利用等价划分或者边界取值方法确定出每个接口参数的取值集合,最后将被测试软件中任意两个接口参数采用两两组合的方式进行测试率的覆盖。上述方法以最少的测试用例实现了对各个接口参数的各种组合最大限度的覆盖,不仅提高了设计和生成测试用例的效率,而且有效提升软件的测试效率,节省了软件测试成本并保证了软件测试的质量。

嵌入式软件;黑盒测试;测试成本;等价划分

嵌入式软件的测试中有一个重要的环节就是设计软件测试用例,这是一项非常耗费时间和精力的工作。如果能够实现软件测试用例的自动生成,将极大地提高测试效率,节省测试时间和成本,并提高软件测试的覆盖率。关于测试用例的自动生成,最关键的是尽可能用最少的测试用例发现更多的软件错误和缺陷。目前,还有不少嵌入式软件仍然依靠手工编写测试用例来进行软件测试,这种方式对软件测试人员提出了很高的经验和技术要求,大多数情况下会产生较高的测试成本和较长的测试时间,整体测试效率较低,测试后的软件覆盖率和质量很难得到保证。尽管有些软件测试工具能够实现测试用例的自动生成,但是更多时候还是主要依靠人工去分析每个软件模块的分支和路径,导致软件测试的工作量和难度居高不下,甚至出现测试用例不够完整、测试覆盖率低等现象。

1 国内外现状和发展趋势

测试用例的自动生成属于软件测试自动化的范畴,仍旧是当下软件测试领域的热点话题,国内外的很多学者对此都有较深的研究。BOGDAN将探测性搜索与模式性搜索方法相结合,同时基于动态的数据流分析技术用于确定影响分支谓词的相关变量,很好地降低了搜索的盲目性;NEELAM等基于线性化的谓词函数提出了一种迭代松弛方法,即面向目标的链方法,并将该方法应用于测试数据和回归测试数据的自动生成上;OFFUTT、JIN等人通过改进动态域约简(DDR)方法,相继提出了基于前向分析的动态程序的切片方法和二分搜索方法,用于测试用例的动态生成。

长期以来,国内的很多高校和研究机构都在致力研究软件测试的自动化,比如北京大学、北京航空航天大学以及中国科学院等院校和机构。它们提出了很多解决软件测试自动化的方法,包括基于UML模型实现测试用例的自动生成技术,基于遗传算法自动生成软件结构测试数据,基于对象模型的C++静态分析器方面的研究,以及利用神经网络、规划求解等人工智能技术自动生成软件测试用例等,都已经取得了不少应用成果。

针对不同的嵌入式系统和嵌入式软件的不同特点,市面上出现了不少专业的自动化软件测试工具。这其中包括Telelogic公司研发的Logiscope测试软件,主要用于软件静态测试;Mercury Interactive公司开发的WinRunner和QTP功能测试软件工具;Rational公司推出的Purify系列软件工具;还有LoadRunner、WebStress等软件工具,专门用于软件的性能测试;Rational Test Manager、Compuware TrackRecord等软件工具,专门用于软件测试管理。虽然当前的自动化测试工具已具有十分强大的测试功能,大多数测试工具还是无法完美解决测试用例自动生成和全面覆盖这一难题。还有很多软件自动测试工具的测试效率较低,生成的测试用例的质量不高,同时,测试用例的完备性还需进一步提高。因此,要想彻底解决测试用例的自动执行问题,真正实现测试过程的自动化,还有很长的路要走。

2 自动生成测试用例方法

为了提高软件测试的质量,降低软件测试成本和测试人员的工作量,提高软件测试效率,因此,本文提出了一种软件测试用例自动生成方法。该方法首先提取出被测软件系统中的各个接口参数,然后利用等价划分或者边界取值方法确定出每个接口参数的取值集合,最后将被测试软件中任意两个接口参数采用两两组合的方式进行测试率的覆盖。这种方法以最少的测试用例实现了对各个接口参数的各种组合最大限度的覆盖。

假设某嵌入式软件接口参数的个数为,每个参数i的取值个数为i,=1,2,…,,且1≥2≥…≥n(为正整数),即接口参数的取值个数按照从多到少的顺序排列。基于接口参数个数和接口参数取值个数构造一个树型结构,树的根节点表示自动生成算法的入口,树的层数为接口参数的个数。树的第一层叶节点为接口参数取值个数最多的参数,将该参数的每个取值按照从小到大进行编号,编完号后按照从左到右的次序连接在根节点下;树的第二层叶节点为接口参数取值个数第二多的参数,首先将该参数的每个取值按照从小到大进行编号,编完号后按照从左到右的次序连接在第一层叶节点的第一个参数取值下面,然后将该参数的每个取值按照编号顺序从左到右依次连接在第一层叶节点的第二个参数取值下面,以此类推,直到将该参数的每个取值按照编号顺序从左到右依次连接在第一层叶节点的最后一个参数取值下面,即完成了第二层树节点的建立。以此类推,往下每一层接口参数的每个取值按照编号顺序从左到右依次连接在上一层叶节点的每一个参数取值下面,这样就完成了树型结构的建立。

基于上述树型结构,自动生成嵌入式软件测试用例,将按照如下步骤进行:①测试用例生成时按照树型结构层次从上到下,每个树型叶节点从左到右的次序进行遍历,从而形成一条测试路径。②在第一层中找到参数取值编号最小的节点,将该节点编号发送给下一层叶节点中参数取值编号最小的节点,形成一个节点路径序列。③从第二层开始,每个节点按照一定的方法进行节点路径的传递工作——在每一层中找到参数取值编号最小的节点,将该节点编号以及与上一层节点形成的节点路径序列一起发送给下一层叶节点中参数取值编号最小的节点;这样遍历完层节点后形成了一个完整的节点路径序列,即生成了一个完整的测试用例。④按照步骤③的算法,继续生成新的测试用例。首先保留步骤③的完整的节点路径序列,将该路径序列中第一个编号值替换为第一层中当前的参数节点中参数取值编号为次小的编号值,继续按照步骤③的算法遍历完整个树型结构,生成一个新的测试用例;按照这种方法继续遍历整个树型结构,直到遍历完第一层中参数取值编号最大的节点,保存生成的每个测试用例。⑤保留步骤④中的每个完整的节点路径序列,不改变该每一个路径序列中第一个编号值,将每一个路径序列中第二个编号值替换为第一层中当前参数的叶节点中参数取值编号为次小的编号值,该路径序列中其余编号值不变;按照上述方法,完成了对步骤④中每一个节点路径序列中第二个编号值从小到大的依次替换和遍历。⑥保留步骤⑤中的每个完整的节点路径序列,不改变该每一个路径序列中第一个编号值和第二个编号值,将每一个路径序列中第三个编号值替换为第二层中当前参数的叶节点中参数取值编号为次小的编号值,该路径序列中其余编号值不变;按照上述方法,完成了对步骤⑤中每一个节点路径序列中第三个编号值从小到大的依次替换和遍历;以此类推,自动生成了基于个接口参数的测试用例集合。

嵌入式软件测试的最终目的是为了尽可能多、尽可能快地发现嵌入式软件中存在的缺陷。本文提出的测试用例自动生成算法,在自动生成每一个测试用例的同时,将该测试用例作为输入去执行软件系统测试。如果发现软件缺陷,则停止生成软件测试用例。也就是说,按照上述步骤和顺序执行每个软件测试用例时,一旦发现某个测试用例的执行结果与预期值不符时,表明该测试用例执行失败,则立即停止自动生成测试用例。在对嵌入式代码进行修改后,重新运行上述算法进行测试。这样做的好处是,一方面节省了软件测试时间,提高了软件测试效率,降低了软件测试的成本;另一方面,缩短了生成算法的搜索时间和减少了计算量,避免生成冗余测试用例。

3 结束语

本文提出了一种软件测试用例自动生成方法,该方法通过对软件接口参数进行组合覆盖测试,用最少的测试用例满足软件测试覆盖性,提高设计和生成测试用例的效率,从而有效提升软件的测试效率和保证软件测试质量。

[1]杨劲涛,荷清.黑盒测试用例集的研究[J].计算机工程与科学,2006,28(5):130-131.

[2]周奇.白盒测试中指定路径测试用例的自动生成[J].舰船电子工程,2005,25(3):67-70.

[3]史亮,聂长海,徐宝文.基于解空间树的组合测试数据生成[J].计算机学报,2006,29(6):849-857.

2095-6835(2021)06-0163-02

TP311.52

A

10.15913/j.cnki.kjycx.2021.06.067

赵昶宇(1982—),男,陕西汉中人,工学硕士,高级工程师,主要从事嵌入式系统软件测试方面的研究。

〔编辑:张思楠〕

猜你喜欢

嵌入式软件测试用例软件测试
软件测试方向人才培养“1+X”融合研究
大数据背景下软件测试技术的发展
基于LDA模型的测试用例复用方法*
基于路径关键状态变量的测试用例约简
嵌入式软件测试数据传输稳定性检测方式分析
浅析嵌入式软件技术的现状与发展动向
关于 Web 应用系统的软件测试的研究
嵌入式软件在计算机软件开发过程中的运用
软件测试发展现状及前景的探讨
测试用例集的优化技术分析与改进