基于面向对象的软件测试技术分析
【摘要】本文通过分析面向对象软件测试的技术特点,针对几种常用的测试方法进行探讨,并以某网上购物系统为例对软件测试方法的实现进行分析,以期通过本文的阐述有效提升程序员的软件测试技能,促进软件测试技术发展。
【关键词】面向对象;软件测试;编码;程序
1.面向对象软件测试的技术特点
从程序的组织结构方面来讲,传统测试技术不完全适用于面向对象软件的测试。
传统程序的测试过程是选定一组数据,交给待测程序处理,通过比较实际执行结果和预期执行结果,判断程序是否含有错误。
因此,传统软件测试技术与过程式程序中数据和操作分离的特点相适应。
而面向对象软件不是把程序看成是工作在数据上的一系列过程或函数的集合,而是把程序看作是相互协作而又彼此独立的对象的集合,在面向对象程序中,对象是一组属性以及这组属性上的专用操作的封装体,每个对象就像一个传统意义上的小程序,有自己的数据、操作、功能和目的。
而在面向对象的系统中,系统的功能体现在对象间的协作上,相同的功能可能驻留在不同的对象中,操作序列是由对象问的消息传递决定的。
不同对象有自己的不同状态,而且同一对象在不同的状态下对消息的响应可能完全不同。
为实现某一特定的功能,有可能要激活调用属于不同对象类的多个方法(c++中的成员函数),形成方法的启用链。
显然,基于功能
分解的自顶向下或自底向上的集成测试策略并不适用于以面向对象方法构造的软件。
面向对象软件语言特有的一些概念和机制,如数据抽象、继承、多态、动态绑定和消息传递都对测试有着深刻的影响。
其中有的因素使测试复杂化,导致测试工作量加大,有的因素有助于测试过程中重用已有的测试资源,从而有利于减少测试的工作量,有的因素两方面兼而有之。
但总的来讲,在这些因素的共同作用下,测试面向对象比测试传统软件更加困难。
2.面向对象软件测试的常用方法
2.1基于类流图的测试
类流图是一种用来表示类的行为特性,且在结构上与传统控制流图相似的有向图。
假设对于一个给定的类c,o代表它的方法集,那么它的类流图g中的结点分别表示o中的每一个方法,有向边
(o1,o2)表示方法o2可在方法o1之后被调用,事实上也就是方法o1的后置条件满足方法o2的前置条件。
有了类流图,类的方法序列就可以很方便地由对图的遍历得到,其覆盖准则也包括点覆盖、边覆盖、路径覆盖等。
某些有向边旁标有判断条件,类似于流程图中的逻辑条件,可以用来确定变量的取值。
以上两种方法都可以推广到类簇测试中。
通过方法序列规范或类流图,可以很方便地为被测类生成消息序列,但它们的缺陷均在于没有考虑被测类的状态,鉴于状态检查在类测试中的重要地位,它们通常不被看作主流的测试方法。
2.2基于状态的测试
基于状态的测试是以状态机模型或某些模型化规约为基础的测试。
测试时按照一定的覆盖准则对状态转换图进行遍历,以产生消息序列,并依据状态图检查每一消息序列是否使被测象达到了规定的状态。
基于状态的测试充分考虑了对象的消息序列和状态,且按照一定的覆盖标准产生测试用例,是一种较为有效的面向对象的类级和簇级测试方法,也是目前研究和使用得较多的。
不过状态机是一种较为复杂的动态模型,比较难于生成。
2.3基于uml的测试
uml(unified modeling language)是一种图形化建模语言,它为面向对象软件提供了一整套强大的建模工具,同时也可以作为测试的依据。
下面介绍几种已被应用于面向对象软件测试的uml模型:(1)类图:类图描述了组成面向对象程序的各个类之间的关系,包括联系、聚集、重数、子类型和递归包含等。
采用类图可以检查类之间的这些关系是否得到了正确的实现。
例如对于重数关系的检验,通过为具有重数关系的两个类分别创建一定数目的实例对象来检验关系实现的正确性;再如,对两个具有“拥有”关系的类,可通过检察其中一个类是否对另一个类的对象被更新或删除作出
正确的反应来判断其关系实现的正确性。
(2)顺序图:顺序图用来描述对象之间动态的交互关系,着重体现对象间消息传递的时间顺序,因此它可以作为类簇测试的依
据。
顺序图可以转换为流程图,这种流程图表示了对象间消息传递的顺序,与程序流程图在形式上极为类似,也包括了顺序、分支和循环等,是一种高度的可测试模型。
其测试方法与程序控制流图的测试方法类似。
(3)状态图:状态图描述了一个对象在其生命周期中所有可能的状态,以及由于事件的发生而引起的状态间的转移。
状态图可作为前面提到的基于状态测试的依据。
(4)用例图:用例模型描述的是外部执行者所理解的系统功能,它可以为整个的软件系统建模,因此用例模型的图形化表示该用例图可被用在系统测试中。
用例图中的每一个用例都可以转换为一个状态转换图,然后参照状态测试的方法进行测试。
3.基于uml测试的网上购物系统测试实例
3.1编码前工作
按照uml测试技术,对网上购物系统分析,建立起用例图,对分析结果、设计结果进行测试,再进入编码,完成后可进行如下测试。
3.2编码后工作
(1)进行类或对象测试。
首先对注册模块进行测试,根据时序关系,普通购物用户在使用本系统的购物功能前,必须先注册账号;其次对维护个人信息测试,进入系统后,用户也可选择维护自己的信息,比如修改账号名,密码,联系地址等;再对浏览商品信息、维护购物车测试,如果直接进行购物,系统可让用户首先浏览商品信息,查看其详细信息,使之对商品的数量、种类有。
个大概的了
解:对生成订单进行测试,当购物结束时,系统可以生成一份订购商品的订单(包括所有商品的名字,单价,小计,总价),自动将用户信息、信用卡信息和购物总价发送到银联系统,由银联系统验证信用卡信息并执行扣款,并将银联系统操作成功与否的信息返回到系统。
管理员进入系统时,首先要输入口令,如果检查通过,就可以对系统中的信息进行维护和管理,包括如下测试:①管理用户信息。
当有些用户有不正常操作时,如填写订单时使用不存在的信用卡号,可以将此用户账号冻结,也可以启用用户账号。
但管理员无权修改客户信息;②管理系统中的商品信息,例如有新的商品时,管理员可向系统中添加此商品。
当商品的价格或规格发生浮动时,管理员也可以对它们作修改,使用户及时了解商品的最新情况。
若某件商品没有存货或不再出售时,管理员可删除系统中的此项商品记录。
③管理客户定单。
及时获得客户的资料(资料中有电子邮件地址),以便与客户联系。
(2)进行顾客、管理员、银联和物流系统测试,功能测试,直至系统测试。
根据对测试结果分析的评判准则,对以上测试用例设计过程进行分析,可知这种测试是一种完全意义上的测试。
测试用例的生成可静态生成,也可根据以上模型,生成最优随机数集。
4.结束语
面对面向对象技术开发出来的程序具有更好的结构更规范的编程风格,极大地优化了数据使用的安全性,提高了代码的重用率。
同时,也影响了软件测试的方法和内容,增加了传统软件设计技术所不存在的错误,增加了软件测试的难度。
面向对象测试技术能解决传统测试方法的不足,同时,更高效、快速、全面的测试技术以及自动化测试是面向对象测试技术所需解决的,以适应要求更高、功能更强大的软件系统。
【参考文献】
[1]柳纯录.软件评测师教程[m].北京:清华大学出版社,2005.
[2]武剑洁,陈传波,肖来元.软件测试技术基础[m].武汉:华中科技大学出版社,2008.。