|
知识路径: > 测试技术的分类 > 面向对象的软件测试技术 > 面向对象软件的测试策略 >
|
相关知识点:16个
|
|
|
|
因为面向对象软件没有层次的控制结构,传统的自顶向下和自底向上集成策略就没有意义,而且,一次集成一个操作到类中(传统的增量集成方法)经常是不可能的,这是由于“构成类的成分的直接和间接的交互”。
|
|
|
此外,传统的自底向上通过集成完成的功能模块测试,一般可以在部分程序编译完成的情况下进行。而对于面向对象程序,相互调用的功能是散布在程序的不同类中的,类通过消息相互作用申请和提供服务。类的行为与它的状态密切相关,状态不仅仅是体现在类数据成员的值,也许还包括其他类中的状态信息。由此可见,类之间的相互依赖极其紧密,根本无法在编译不完全的程序上对类进行测试。所以,面向对象的集成测试通常需要在整个程序编译完成后进行。此外,面向对象程序具有动态特性,程序的控制流往往无法确定,因此,也只能对整个编译后的程序做基于黑盒子的集成测试。
|
|
|
对OO软件的集成测试有两种不同的策略,第一种称为基于线程的测试(thread based testing),集成对回应系统的一个输入或事件所需的一组类,每个线程被集成并分别测试,应用回归测试以保证没有产生副作用。第二种称为基于使用的测试(use based testing),通过测试那些几乎不使用服务器类的类(称为独立类)而开始构造系统,在独立类测试完成后,下一层中使用独立类的类(称为依赖类)被测试。这个依赖类层次的测试序列一直持续到构造完整个系统。序列和传统集成不同,使用驱动器和桩(stubs)作为替代操作是要尽可能避免的。
|
|
|
面向对象的集成测试,能够检测出相对独立的,单元测试无法检测出的,那些类相互作用时才会产生的错误。基于单元测试对成员函数行为正确性的保证,集成测试只关注于系统的结构和内部的相互作用。面向对象的集成测试可以分成两步进行:先进行静态测试,再进行动态测试。
|
|
|
静态测试主要针对程序的结构进行,检测程序结构是否符合设计要求。现在流行的一些测试软件都能提供一种称为“可逆性工程”的功能,即通过源程序得到类关系图和函数功能调用关系图,例如International Software Automation公司的Panorama-2 for Windows 95、Rational公司的Rose C++Analyzer等,将“可逆性工程”得到的结果与OOD的结果相比较,检测程序结构和实现上是否有缺陷。换句话说,通过这种方法检测OOP是否达到了设计要求。
|
|
|
动态测试设计测试用例时,通常需要上述的功能调用结构图、类关系图或者实体关系图为参考,确定不需要被重复测试的部分,从而优化测试用例,减少测试工作量,使得进行的测试能够达到一定覆盖标准。测试所要达到的覆盖标准可以是:达到类所有的服务要求或服务提供的一定覆盖率;依据类间传递的消息,达到对所有执行线程的一定覆盖率;达到类的所有状态的一定覆盖率等。同时也可以考虑使用现有的一些测试工具来得到程序代码执行的覆盖率。
|
|
|
|
①先选定检测的类,参考OOD分析结果,仔细确定出类的状态和相应的行为,类或成员函数间传递的消息,输入或输出的界定等。
|
|
|
|
|
④根据程序中类的对象构造测试用例,确认使用什么输入激发类的状态,使用类的服务和期望产生什么行为等。
|
|
|
值得注意的是,设计测试用例时,不但要设计确认类功能满足的输入,还应该有意识地设计一些被禁止的例子,确认类是否有不合法的行为产生,如发送与类状态不相适应的消息,要求不相适应的服务等。根据具体情况,动态的集成测试,有时也可以通过系统测试完成。
|
|
|