基于测试驱动开发和状态图的测试用例生成研究

时间:2022-09-09 06:06:50

基于测试驱动开发和状态图的测试用例生成研究

摘 要

介绍测试驱动开发(TDD)并结合状态图进行测试路径生成,在避免了测试路径过多的情况下保证了测试路径的覆盖率。

【关键词】TDD 状态图 路径覆盖策略

近年来,随着敏捷开发/Scrum等软件开发过程的兴起,测试驱动开发(TDD),成为了Scrum和持续集成中必不可少的环节。但是基于TDD软件开发并不能从根本上保证测试用例的完全覆盖,现在随着软件的规模越来越大,软件的设计与开发变得越来越复杂,如何高效的生成测试用例,避免测试状态组合空间爆炸,显得尤为重要。而基于状态图的测试结合TDD应用,可以较好的解决这些问题。

1 测试驱动开发

测试驱动开发的理念强调把测试作为开发过程的一个重要部分,在软件开发的每一个阶段,都有一部分的设计和代码是专门给测试使用的。甚至在代码开始编写之前,测试用例就已经设计好了。将测试方案作为编码的准绳,从测试的角度验证设计,推导设计,指导编码。实时验证系统的准确性。下面具体结合状态图,介绍一个企业通信系统的测试驱动开发过程。

2 状态图模型和状态图中的变迁约束规则

2.1 状态图定义

状态图形式化地表示为一个五元组 K〈S,∑,T,S0,F〉,其具体含义可参见文献[3]。

2.2 基于前后事件约束规则CSPE:

基于前后事件约束规则:CSPE约束(Constrains on Succeeding and Preceding Events),用于限制在某一事件后发生其它事件的可能性,它规定了前后事件之间的依赖关系,但是忽略了程序运行时的具体状态。它的定义与规则参见文献。

2.3 基于状态图的前后事件约束规则S-CSPE:

基于状态图的前后事件约束规则S-CSPE(statechart-CSPE),是对CSPE的一种有效的扩展,它将事件约束限制在状态的控制之下,并且引入了超态的概念。使得对前后事件约束的依赖关系描述的更加准确,并且增加了测试用例的可执行性。

t1∈T(S1),t2∈T(S2),其中α、β、γ为任一变迁序列,β、γ满足:如果t’∈ β、γ,则t’/∈T(S1)∪T(S2)。

规则定义D(C):n’[t1;t2]C(C≠FALSE)该规则含义:如果α. t1是有效前缀序列,则必存在使C为真的β,使得α. t1.β. t2为有效前缀序列;且对于任意t(t∈T(S2)),任一使C为真的γ都使得α. t1. γ. t为无效前缀序列。

规则定义E(C):a’[t1;t2]C(C≠FALSE)该规则含义:如果α. t1是有效前缀序列,则必存在使C为真的β,使得α. t1.β. t2为有效前缀序列;且对于某一t(t∈T(S2)),必存在使C为真的γ,使得α. t1. γ. t为有效前缀序列。

规则定义F(C):_’[t1;t2]C(C≠FALSE)该规则含义:如果α. t1是有效前缀序列,则对任一在使C为真的β都使得α. t1.β. t2为无效前缀序列。

3 关于测试路径覆盖标准的定义

3.1 测试路径的定义

D(t):变量V的集合,V出现在变迁t的赋值语句的左侧或者输入语句部分。

C_USE(t):变量V的集合,V出现在变迁t的赋值语句的右侧或者输出语句部分。

P_USE(t):变量V的集合,V出现在变迁t的谓语表达式中。

清晰定义路径(D_Clear PATH):路径(ti,t1,…,tm,tj)(m≥0),如果V/∈D(nl)(l=1,…,m),那么满足该条件的路径为的清晰定义路径(从ti到tj)。

完全路径(COMPLETEPATH):一条满足约束集R的路径,其初始节点是组合初态,终节点是可接受组合终态。

3.2 基于状态图的前后事件约束规则(S-CSPE)的路径覆盖标准:

P是状态图S的完全路径集合,R是S 的基于状态图的前后事件约束集:

all-D_CLEAR PATHs标准:对每一个变迁t的每一个V,V∈D(t),P包含每一条关于V的D_CLEAR PATH。

4 测试用例实际生成研究

4.1 实例:企业通信软件中一组通信模块的状态图(图1)表述

4.2 关于D_CLEAR PATH(清晰定义路径)的生成

t11到t12的部分D_CLEAR PATH,表1。

4.3 关于Complete Path(完全路径)的生成

覆盖D_CLEAR PATH: t11 t3 t4 t12的部分完全路径集,表2。

5 使用S-CSPE约束的优势

基于状态图的前后事件约束规则S-CSPE约束的D-use路径覆盖策略要求完全路径集必须覆盖所有的D_CLEAR PATH,这保证了该D_CLEAR PATH将覆盖所有变迁,这比基于前后事件约束规则CSPE有更强的路径覆盖能力,而且该覆盖标准更方便实现TDD,使测试用例自动生成。

6 结论

本文讨论的基于TDD结合状态图的测试方法兼顾了测试路径的覆盖力和测试用例爆炸的问题,在保证一定覆盖能力的情况下,避免了过多无效测试用例的产生,从而提高了测试用例生成的效率。在公司一个Scrum小组实践应用,产品周期缩短了10%,而且客户bug反馈降低了50%。

参考文献

[1]测试驱动开发(美) Kent Beck著[M].北京:中国电力出版社,2003.

[2]Robert V.Binder.面向对象系统的测试[M].北京:电子工业出版社,2001.

[3]乔木,曾一,林宏.状态图的并发状态约束及测试用例生成研究[J].计算机工程与应用,2004.

[4]Carver.R.H.,Tai,Kou-Chung.Use of sequencing constraints for specification-based testing of concurrent programs.IEEE transactions on Software Engineering,1998.

作者简介

乔木(1977-),男,硕士学位,现为上海贝尔企业通信有限公司软件经理,工程师。

王术(1978-),女,硕士学位,现为泰克科技(中国)有限公司工程师。

作者单位

1.上海贝尔企业通信有限公司 上海市 201206

2.泰克科技(中国)有限公司 上海市 201206

上一篇:通信电子线路PSpice仿真的研究及其实现 下一篇:支持分层业务过程演化的制造企业信息管理系统