软件测试存在什么问题
封装:在面向对象中,封装包含两方面的含义:一是指信息隐蔽,二是指一组相关的变量和方法被封装在同一个类中。测试时需要考虑:1、信息隐蔽对测试知行的影响。2、实例状态与类的测试序列。继承:是对面向对象中的一个重要机制,它允许子类直接获得父类的属...
封装:在面向对象中,封装包含两方面的含义:一是指信息隐蔽,二是指一组相关的变量和方法被封装在同一个类中。测试时需要考虑:1、信息隐蔽对测试知行的影响。2、实例状态与类的测试序列。
继承:是对面向对象中的一个重要机制,它允许子类直接获得父类的属性和方法,从而实现对父类的复用。测试时需要考虑:1、继承对测试充分性的影响。2、误用对测试的影响。
多态:在面向对象软件技术中,多态性是指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。也就是说,在类等级的不同层次中可以共享(公用)一个行为(方法)的名字,然而不同层次中的每个类确各自按自己的需求来实现这个行为。当对象接收到发送给它的消息时,根据该对象所属于的类动态选用在该类中定义的实现算法。指对一个类的引用可以与多个类的实现绑定,绑定分为静态绑定和动态绑定。静态绑定是指在编译时刻就完成的绑定,而动态绑定是指在运行时刻完成的绑定。动态绑定对测试的影响首先体现在测试的充分性上。
继承和多态复合:在面向对象中,继承和多态复合在一起可以产生多种变化。测试时需要考虑:1、抽象类对测试执行的影响。2、误用对测试的影响。
面向对象程序的测试组织问题
通过执行程序代码完成的测试通常包括单元测试、集成测试和系统测试。
单元测试的基本要求是被测单元能够被独立地测试。在测试面向对象程序时,由于一个类的各个成员方法通常是相互依赖的,因此很难对一个类中的单个成员方法进行充分的单元测试。面向对象的一个类甚至都不能作为可以被独立测试的单元,主要原因是:1、由于继承的存在,一个类通常依赖于其父类和其他祖先类。2、面向对象程序中经常出现多个类相互依赖,从而导致每个类难以被独立地测试。
集成测试一般是针对程序的集成结构进行的。在面向对象的程序中,许多集成机制在传统结构化程序中很少见,对于这些机制的测试难以直接应用到传统结构化程序的集成测试中。类似的,对于由多个类组成的继承树的测试,传统的集成测试技术也难以适用。
面向对象软件测试的模型及策略
面向对象软件的测试模型
面向对象软件的测试活动分为:面向对象分析的测试(OOA)、面向对象设计的测试(OOD Test)、面向对象编程的测试(OOP Test)和面向对象软件(OOS Test)的系统测试,而面向对象编程的测试(OOP)又可分为单元测试和集成测试。
面向对象分析的测试
检查分析结果是否符合相应的面向对象分析方法的要求。
检查分析结果是否可以满足软件需求。
面向对象设计的测试
对设计结果本身的审查。
设计结果与分析结果一致性的审查。
设计结果对编程的支持。
OOD与OOA的主要区别是:在OOD中要考虑与实现相关的内容,而在OOA中不需要考虑与实现相关的内容。
面向对象编程的测试
对执行代码进行测试。
检查代码风格。
对于有一定规模的程序而言,把整个程序放在一起进行测试非常困难,一般的方法是把程序的各个组成部分分别进行测试。有时候需要把几个类放在一起进行测试,这时候应当重点测试个各类之间的交互。当检查代码风格的时候,首先需要检查代码的风格是否符合要求,其次需要检查代码中是否存在不好的控制结构,不好的控制结构通常是隐患,可能会影响以后的开发和维护。
面向对象程序的单元测试
由于面向对象的程序中可独立被测试的单元通常是一个类族或最小是一个独立的类,面向对象的单元测试可以分为几个层次:
方法层次的测试
对于一个方法,可以将其看作关于输入参数和所在类的成员变量的一个独立函数,如果该函数的内聚性很高,功能也比较复杂,可以对其单独进行测试。一般只有少数方法需要进行单独测试,因为有很多方法与成员变量具有很强的关联性。对单个成员方法的测试类似于传统软件测试中对单个函数的测试,很多测试技术都可以应用到这里来。
常用的测试技术:
等价类划分测试:根据输入参数把取值域分成若干个等价类。
组合功能测试:针对那些依据输入参数和成员变量的不同取值组合而选择不同动作的方法。
递归函数测试。
多态消息测试。
类层次的测试
很多成员方法会通过成员变量产生相互依赖的关系,这将导致很难对单个成员方法进行充分的测试。合理的测试是将相互依赖的成员方法放在一起进行测试,这就是所谓的类层次测试。