面向对象技术所独有的多态、继承、封装等新特点,使OO程序设计比传统语言程序设计产生错误的可能性增大,使得传统软件测试中的重点不再显得那么突出,也使原来测试经验和实践证明的次要方面成为了主要问题。
用户使用低质量的软件,在运行过程中会产生各种各样的问题,可能带来不同程度的严重后果,轻者影响系统的正常工作,重者造成事故和财产损失。软件测试是保证软件质量的最重要的手段,它使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求,弄清预期结果与实际结果之间的差别。
面向对象技术是一种全新的软件开发技术,正逐渐代替被广泛使用的面向过程的开发方法,被看成是解决软件危机的新兴技术。尽管面向对象技术的基本思想保证了软件应该有更高的质量,但实际情况却并非如此,因为无论采用什么样的编程技术,编程人员的错误都是不可避免的,而且由于面向对象技术开发的软件代码重用率高,更需要严格测试,以避免错误的繁衍。
一、评审
因为OOA、OOD阶段所建立的OOA和OOD模型不能执行,所以在每次迭代之后,一定要进行评审。
1.正确性
OO开发模式为演化(重复迭代)性质,即系统的初期为非形式化表示,以后发展为类的细节模型、类的连接和关联,系统设计和配置,以及对类的设计(通过消息组成对象连接模型)。每一阶段都要进行评审。
正确性主要在分析和设计模型表示所使用的符号语法是否正确,语义是否正确(即模型与真实世界领域是否一致),以及类的关联(实例间的联系)是否正确地反映了真实世界对象间的关联。
2.一致性
由于演化性质,OOA和OOD模型(包括分析、设计和编码层次,即类、属性、操作、消息)不仅要正确,而且要一致。一致性可以用模型内各实体间的关联性来判断。
二、测试
1.单元测试
OOP完成以后,就可以进行单元测试了。与传统的单元(模块)不同,OO中的单元是类。每个类都封装了属性(数据)和管理这些数据的操作(也被称做方法或服务)。一个类可以包含许多不同的操作,一个特殊的操作可以出现在许多不同的类中。
传统的单元测试只能测试一个操作(功能)。而在OO单元测试中,一个操作功能只能作为一个类的一部分,类中有多个操作(功能),就要进行多个操作的测试。
另外,父类中定义的某个操作被许多子类继承。但在实际应用中,不同子类中某个操作在使用时又有细微的不同,所以还必须对每个子类中某个操作进行测试。
类的测试可以使用多种方法,如基于故障的测试、随机测试和分割测试等。每一种方法都要检查封装在类中的操作,即设计的测试序列(用例),要保证相关的操作被检查。因为类的属性值表示类的状态,由此来确定被检查的错误是否存在。