生活在信息时代,软件是链接物理世界和数字世界的“桥梁”。而软件测试在软件的生命周期中占有重要地位,它能发现程序中的错误、降低代码出错风险、保证代码质量;它是软件工程化的重要环节。让我们一起走进软件测试课堂,探索软件测试的奥秘,发现测试之美。
1 面向对象测试的概述
面向对象软件测试的目标与传统测试一样:用尽可能低的测试成本和尽可能少的测试用例,发现尽可能多的软件缺陷。
面向对象的测试策略也遵循从“小型测试”到“大型测试”,即从单元测试到最终的功能性测试和系统性测试。
变化
面向对象 = 对象 + 类 + 继承 + 通信
新特点:封装、继承、多态
这些变化带来了产生新错误的可能,带来了测试的变化:
(1)基本功能模块
系统的基本构造单元不再是传统的功能模块,而是类和对象。
在测试过程中,不能仅检查输入数据产生的输出结果是否与预期结果相吻合,还要考虑对象的状态变化、方法间的相互影响等。
(2)系统的功能实现
系统的功能体现在对象间的协作上,而不再是简单的过程调用。
(3)封装对测试的影响
封装使对象的内部状态隐蔽,如果类中未提供足够的存取函数来表明对象的实现方式和内部状态,则类的信息隐蔽机制将给测试带来困难。
(4)继承对测试的影响
继承削弱了封装性,产生了类似于非面向对象语言中全局数据的错误风险。
若一个类得到了充分的测试,当其被子类继承后,继承的方法在子类的环境中的行为特征需要重新测试。
(5)多态对测试的影响
多态依赖于不规则的类层次的动态绑定,可能产生非预期的结果。
面向对象的开发模型突破了传统的瀑布模型,将开发分为:
面向对象分析(OOA)
面向对象设计(OOD)
面向对象编程(OOP)
三个阶段。
面向对象分析的测试(OOA Test)
面向对象设计的测试(OOD Test)
面向对象编程的测试(OOP Test)
面向对象单元测试(OO Unit Test)
面向对象集成测试(OO Integrate Test)
面向对象系统测试(OO System Test)
(1)OOA Test 和 OOD Test
是对分析结果和设计结果的测试。
主要是对分析设计产生的文本进行测试,是软件开发前期的关键性测试。
(2)OOP Test
主要针对编程风格和代码实现进行测试。
其主要的测试内容在面向对象单元测试和面向对象集成测试中体现。
(3)面向对象单元测试
是对程序内部具体单一的功能模块的测试。
主要就是对类和类成员函数的测试。
(4)面向对象集成测试
主要对系统内部的相互服务进行测试,如成员函数间的相互作用、类间的信息传递等。
面向对象集成测试不但要基于面向对象单元测试,更要参见OOD或OOD Test结果。
(5)面向对象系统测试
主要以用户需求为测试标注,也要借鉴OOA或OOA Test结果。
2 开发前期的面向对象测试
在这个时器的测试工作主要是静态测试。
通过各种评审和质量分析活动,完成必须的测试工作,及时检测和克服各种缺陷。
2.1 面向对象分析的测试(OOA Test)
面向过程分析 VS 面向对象分析(OOA)
传统的面向过程分析是一个功能分解的过程,是把一个系统看成可以分解的功能的集合。
面向对象分析是把E-R图和语义网络模型与面向对象程序设计语言中的重要概念结合在一起而形成的分析方法,最后得到问题领域的可视的形式描述。
OOA直接映射问题空间,全面的将问题空间中实现功能的现实抽象化,将问题空间中的实例抽象为对象,用对象的结构反映问题空间的复杂实例和复杂关系,用属性和操作表示实例的特性和行为。
OOA测试的重点在其完整性和冗余性
OOA对问题领域分析抽象的不完整,最终会影响软件的功能实现,导致软件开发后期大量可避免的修补工作;
而一些冗余的对象或结构会影响类的选定、程序的整体结构或增加程序员不必要的工作量。
OOA阶段的测试可分为五个方面:
(1)对认定的类的测试
(2)对认定的结构的测试
(3)对认定的主题的测试
(4)对定义的属性和实例关联的测试
(5)对定义的服务和消息关联的测试
2.2 面向对象设计的测试(OOD Test)
对OOD的测试,应从如下三个方面考虑:
(1)对认定的类的测试
(2)对构造的类层次结构的测试
(3)对类库的支持的测试(复用性测试)
2.3 面向对象编程的测试(OOP Test)
面向对象程序的特点
典型的面向对象程序具有继承、封装和多态的新特性,这使得传统的测试策略必须有所改变:
(1)封装是对数据的隐藏,外界只能通过被提供的操作来访问或修改数据,这样降低了数据被任意修改和读写的可能性,降低了传统程序中对数据非法操作的测试。
(2)继承使得代码的重用率提高,同时也使错误传播的概率提高
(3)多态使得程序内统一函数的行为复杂化,测试时必须考虑不同类型具体执行的代码和产生的行为。
面向对象程序时把功能的实现分布在类中
与某些设计功能相关的一组对象,通过对象提供的服务和对象之间的消息传递,共同协作来实现这个功能。
这种面向对象程序风格,可将出现的错误精确定位在某一个具体的对象。
在面向对象编程阶段,忽略类功能实现的细则,将测试的目光集中在类功能的实现和相应的面向对象程序风格,主要体现为以下两个方面:
(1)数据成员是否满足数据封装的要求
(2)类是否实现了要求的功能
3 开发后期的面向对象测试
编程完成后,需要经历若干个阶段的测试:单元测试、集成测试、验收测试、系统测试
3.1 面向对象的单元测试
传统的单元测试对象
模块。多采用白盒测试
面向对象测试
最小的可测试单位可能是封装的类或对象,类包含一组不同的操作。
单元测试可能是测试封装操作的类,也可能是测试类中的单个操作。
传统的单元测试主要关注模块的算法;面向对象软件的类测试主要是测试封装在类中的操作以及类的状态行为,需要分两步:
(1)测试与对象相关联的单个操作
它们是一些函数或程序,传统的白盒测试和黑盒测试方法都可以使用。
(2)测试单个对象类
黑盒测试的原理不变,但等价划分的概念要扩展以适合操作序列的情况。
如果觉得《软件测试的过程?面向对象测试-类?》对你有帮助,请点赞、收藏,并留下你的观点哦!