后面的文章是讲解等价类划分、边界值分析、因果图、测试大纲、状态图、场景法设计测试用例了,因为这些方法在很多地方有参考资料,我在这里就不用添加了。在实际写测试用例时,要根据被测试软件的具体情况,来综合使用这种这些方法,而很少采用一种方法单独测试用例。设计测试用例是一个烦琐的工作,需要覆盖软件的需求,需要设计很多的测试用例,有些人在问,运行程序就能找出问题了,为什么花费这么多的时间设计测试用例呢?我想关于设计测试用例的好处在也不用多说了。
下面把面向对象的测试放在这里。
4、面向对象的单元测试
4.1面向对象测试的特点
自80年代中后期以来,面向对象软件开发技术发展迅速,获得了越来越广泛的应用,在面向对象的分析、设计技术以及面向对象的程序设计语言方面,均获得了很丰富的研究成果。与之相比,面向对象软件测试技术的研究还相对薄弱。例如,对面向对象的程序测试应当分为多少级尚未达成共识。基于结构的传统集成策略并不完全适于面向对象的程序。这是因为面向对象的程序的执行实际上是执行一个由消息连接起来的方法序列,而这个方法序列往往是由外部事件驱动的。在面向对象语言中,虽然信息隐藏和封装使得类具有较好的独立性,有利于提高软件的易测试性和保证软件的质量,但是,这些机制与继承机制和动态绑定给软件测试带来了新的课题。尤其是面向对象软件中类与类之间的集成测试和类中各个方法之间的集成测试具有特别重要的意义,与传统语言书写的软件相比,集成测试的方法和策略也应该有所不同。
从目前的研究现状来看,研究较多地集中在类和对象状态的测试方面。面向对象程序设计的继承和动态联编所带来的多态性对软件测试的影响,虽然有所论及,但是不仅缺乏针对这一特点的测试方法,而且还有许多问题有待进一步的研究。
软件测试中的另一个重要问题是测试的充分性问题,充分性准则对软件测试的揭错能力具有重要影响。对传统语言的软件测试已经存在多种充分性准则,但对面向对象的软件测试,目前尚无普遍接受的充分性准则。对这些方面的深入研究将会产生真正对软件测试的理论与实践有指导意义、有影响的成果。
对OO软件的类测试相当于传统软件的单元测试。和传统软件的单元测试不同,他往往关注模块的算法细节和模块接口间流动的数据,OO软件的类测试是由封装在类中的操作和类的状态行为所驱动的。因为属性和操作是被封装的,对类之外操作的测试通常是徒劳的。封装使对对象的状态快照难于获得,继承也给测试带来了难度,即使是彻底复用的,对每个新的使用语境也需要重新测试。多重继承更增加了需要测试的语境的数量,使测试进一步复杂化。如果从超类导出的测试用例被用于相同的问题域,有可能对超类导出的测试用例集可以用于子类的测试,然而,如果子类被用于完全不同的语境,则超类的测试用例将没有多大用途,必须设计新的测试用例集。