|
知识路径: > 测试技术的分类 > 面向对象的软件测试技术 > 面向对象软件的测试策略 >
|
相关知识点:14个
|
|
|
|
面向对象程序所具有的继承、封装和多态的新特性,使得传统的测试策略不再完全适用。封装是对数据的隐藏,外界只能通过被提供的操作来访问或修改数据,这样降低了数据被任意修改和读写的可能性,降低了传统程序中对数据非法操作的测试。继承是面向对象程序的重要特点,继承使得代码的重用率提高,同时也使错误传播的概率提高。继承使得传统测试遇到了这样一个难题:对继承的代码究竟应该怎样测试?(参见面向对象单元测试)。多态使得面向对象程序对外呈现出强大的处理能力,但同时却使得程序内“同一”函数的行为复杂化,测试时不得不考虑不同类型具体执行的代码和产生的行为。
|
|
|
面向对象程序是把功能的实现分布在类中。能正确实现功能的类,通过消息传递来协同实现设计要求的功能。正是这种面向对象程序风格,将出现的错误能精确地确定在某一具体的类。因此,在面向对象编程(OOP)阶段,忽略类功能实现的细则,将测试的目光集中在类功能的实现和相应的面向对象程序风格上,主要体现为以下两个方面(假设编程使用C++语言)。
|
|
|
|
|
|
数据封装是数据和数据有关的操作的集合。检查数据成员是否满足数据封装的要求,基本原则是数据成员是否被外界(数据成员所属的类或子类以外的调用)直接调用。更直观地说,当改变数据成员的结构时,是否影响了类的对外接口,是否会导致相应的外界必须改动。值得注意的是,有时强制的类型转换会破坏数据的封装特性。例如:
|
|
|
|
在上面的程序段中,xx的私有数据成员a和b可以通过yy被随意访问。
|
|
|
|
类所实现的功能都是通过类的成员函数执行的。在测试类的功能实现时,应该首先保证类成员函数的正确性。单独地看待类的成员函数,与面向过程程序中的函数或过程没有本质的区别,几乎所有传统的单元测试中所使用的方法,都可在面向对象的单元测试中使用。具体的测试方法在面向对象的单元测试中介绍。类函数成员的正确行为只是类能够实现要求的功能的基础,类成员函数间的作用和类之间的服务调用是单元测试无法确定的。因此,需要进行面向对象的集成测试。具体的测试方法将在面向对象的集成测试中介绍。需要着重声明的是,测试类的功能,不能仅满足于代码能无错地运行或被测试类所提供的功能无错,应该以所做的OOD结果为依据,检测类提供的功能是否满足设计的要求,是否有缺陷。必要时还应该参照OOA的结果,以之为最终标准。
|
|
|