当前位置:无忧公文网 >范文大全 > 征文 > 面向对象的白盒测试技术的研究与分析

面向对象的白盒测试技术的研究与分析

时间:2022-05-06 14:20:10 浏览次数:

摘要:本文讨论了面向对象软件的特点,从软件测试的层次划分出发,以一个自动售货机为例设计了一个软件系统的白盒测试用例,分析了白盒测试在面向对象软件测试中的特点和测试的方法。

关键词:面向对象;白盒测试;用例

1 引言

如何提高软件质量是软件工程致力解决的关键问题之一。软件测试和验证是保证软件正确性和提高软件可靠性的最基本和最重要的手段。自20世纪80年代以来,面向对象方法和技术的研究已遍及计算机软件、硬件和应用各领域,在软件工程领域更是得到了广泛的重视,但研究的重点和成果主要集中于面向对象分析与技术方法学领域(即软件开发的前期),而面向对象软件测试技术的研究还比较薄弱。近年来,国内外对面向对象软件测试进行了大量的研究,但目前该领域还处于百家争鸣的阶段,还未形成一套较为成熟与完善的软件测试理论与方法。本文从软件测试的层次划分出发,对面向对象的测试方法和解决方案做一探讨,并结合具体项目给出了实例设计。

2 面向对象理论

运用面向对象的方法和技术,首先必须明确什么是“面向对象”。曾经有很多年,“面向对象”被认为是使用一系列面向对象程序设计语言(如Ada95,C++,Smalltalk等)的软件开发方法。现在“面向对象”己包含完整的软件工程观点,Peter Coad和Edward Yourdon给出了“面向对象”的如下定义:面向对象(Object-Oriented)=对象(Objects)+分类(Classification)+继承(Inheritance)+通信(Communication)。

面向对象软件的封装性、继承性、多态性和动态绑定等特性提高了软件的可重用性,使软件开发更快、质量更高,而且软件易于维护、易于修改。通过组装可利用子系统而产生更大的系统,然而另一方面,它却给软件测试带来了更多的困难。与之相对应的软件测试技术还相对滞后,如何探索出一套行之有效的方法,尤其是如何采用自动化的方法来测试这些软件,己成为软件测试者们所面临的挑战。

3 白盒测试的传统方法

白盒测试方法主要依据逻辑段盖准则,如语句覆盖和判定覆盖等。这些覆盖准则是白盒测试方法的重要理论基础,能够指导测试人员设计出有效的测试用例。

SQA Team Test是测试Power Builder软件的有用测试工具,它能够与Power Builder对象紧密地结合在一起,根据使用SQA Team Test测试软件的经验和对该软件的理解,认为设计出有效的测试用例仍是使用SQA Team Test测试软件的关健性工作。能否设计出一系列有效的测试用例,将直接影响到软件的测试效果,因为SQA Team Test测试软件的测试思想是回归测试,所以能否发现软件中存在的问题,仍依赖于测试用例的设计。

从前面的分析中可以看出,无论是使用白盒测试方法还是使用SQA Team Test测试软件,设计有效的测试用例是测试工作的重要环节。传统的白盒测试方法是按照软件模块内的逻辑控制结构、运行过程和模块间的组织结构与接口,逐个设计出针对每个模块、每个子系统和系统的测试用例,因此每个模块都会被测试到,或者说能够保证测试的模块被覆盖。因为白盒测试的基础是依据对程序结构的清楚描述,而模块内部的逻辑履盖由逻辑覆盖准则提供保证。但是在事件驱动面向对象的软件中,软件的设计思路和软件的结构与传统的面向过程的软件相比已经发生了相当大的改变,对象和事件概念在软件开发中占有非常重要的地位,而传统的白盒测试方法并不能适应这种变化。

4 面向对象白盒测试框架分析

测试设计是整个测试过程的关键部分,面向对象软件开发中的白盒测试设计优劣更是整个测试工作的成败所在。为此在本文中我们可以具体的实例来设计一个白盒测试的框架和方法。

面向对象的白盒测试通常不能独立地测试一个方法(操作),这个方法相当于传统的测试单元,而是将这个方法作为一个测试类的一部分。

如果一个基类中有一个方法,继承类也继承了这个方法,但是这个方法可能在继承类中被私有数据和方法使用,所以尽管基类中已经测试了这个方法,但是每个继承类也需要考虑对这个方法进行测试。一般从下面两个方面进行考虑。

(1)继承的成员函数是否都不需要测试。一般来说,对父类中已经测试过的成员函数,两种情况需要在子类中重新测试,即继承的成员函数在子类中作了改动,或成员函数调用了改动过的成员函数的部分。

(2)对父类的测试是否能照搬到子类。多态有几种不同的形势,如参数多态,包含多态,过载多态。包含多态和过载多态在面向对象语言中通常体现在子类与父类的继承关系上。对具有包含多态的成员函数测试时,只需要在原有的测试分析的基础上扩大测试用例中输入数据的类型。

从上面的分析可以看出,面向对象的软件的白盒测试主要是针对软件设计中的类和对象来进行测试的。因此链接被测试的软件的类结构,是进行白盒测试的关键。由于封装的原则,在面向对象软件的类一般设计为私有或受保护类型,即类的属性和方法是无法从外部直接访问的,必须通过类中的公有方法来实现。因此设计测试用例时必须要注意对这些公有成员的才做。白盒测试逻辑覆盖的方法主要包括语句覆盖、分支覆盖、条件覆盖、条件组合覆盖等。穷举测试要求对所有可能的输入和状态执行所有的路径,除非对一些小实例,穷举测试是不现实的,通常是通过从所有可能的测试用例中确定最有可能检测出最多错误的子集,进行有限的测试来发现尽可能多的错误。但是为了实现对类中所有方法的有效测试,必须设计足够多的测试用例。

下面我们就以一个自动售货机为例设计一个软件系统的白盒测试用例。一个软件系统是有很多的服务组成的,而每个服务时由很多的用例组成的,下面我们给出自动售货机的用例和服务,如表1所示,描述用例的用例图如图1所示。

对用例的用户描述往往采用系统序列图,它将系统看做一个整体,并从用户的角度描述用例的处理过程,以购买商品用例为例,给出其处理过程序列表如表2所示。

借助购买商品的流程可以对服务进行白盒测试。白盒测试主要进行基本路径测试,我们在这里主要设计语句覆盖测试和分支覆盖测试,来设计面向对象软件的白盒测试的测试用例,测试用例的设计原则是保证在测试中程序的每一个可执行语句至少执行一次,针对购买商品的流程得出的具体路径有两条,路径1:1-2-3-4-5;路径2:1-3a-2-3-5a-4-4a-5。

根据路径生成测试用例:根据判断节点给出的条件,选择适当的数据以保证每一条路径可以被测试到。只要设计出的测试用例能够保证控制流程图中的所有路径都能被执行到,就可以使得程序中的每一个可执行语句至少执行一次,则服务中每个条件的真假两种取值都可以得到测试,从而实现可以检查程序的主要执行路径,又可以覆盖程序的所有分支,而且可以满足语句覆盖的要求。

5 小结

由于面向对象软件自身的特点,使得面向对象的白盒测试有别于传统的白盒测试思想。到目前为止,现有的面向对象软件测试方法还存在许多问题,对面向对象软件的白盒测试技术还有待进一步的深入研究,以便做出对软件测试的理论和实践有指导意义、有影响的成果。

参考文献

[1]LARMAN C.UML和模式应用:面向对象分析与设计导论[M].姚淑珍,李虎,译.北京:机械工业出版社,2001.

[2]JACOBSON I, BOOCH G, RUMBAUGH J.统一软件开发过程[M].周伯生,冯学民,樊东平,译.北京:机械工业出版社,2001.

[3]PRESSMAN R S.软件工程:实践者的研究方法[M].黄柏素,梅宏,译.北京:机械工业出版社,1999.

推荐访问: 面向对象 测试 分析 研究 技术