type
status
date
slug
summary
tags
category
icon
password
面向对象软件的特征
封装
封装只有在类的内聚高,且耦合松时才能发挥作用。
封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
继承
继承是面向对象的基本特征之一,继承机制允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
多态
多态同一个行为具有多个不同表现形式或形态的能力。是指一个类实例(对象)的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。
多态性的本质是同样的方法应用于不同的对象。把类看作单元,意味着多态性的所有问题都要被类/单元测试覆盖。
需要在测试多态性操作带来的冗余性与测试经济性之间做出权衡。
面向对象软件测试层次

单元测试
- 以方法为单元:方法几乎等价于过程,因此以方法为单元的单元测试与传统的单元测试可以应用同样的方法。
- 以类为单元:除了测试每个方法/操作外,主要测试类内集成的问题。
集成测试
- 如果单元测试以方法/操作为单元,则集成测试需要进行两级:类内集成和类间集成。
- 如果单元测试以类为单元,则集成测试就是类间集成。
面向对象软件的集成测试的方法:
- 成对集成和相邻集成,他们集成的基础是协同图;
- 面向对象软件的MM-路径,他的执行类似于序列图。
- 面向对象数据流集成测试;
系统测试
与传统的系统测试一致。
GUI测试
- 所有图形用户界面(GUI)应用程序的主要特征就是事件驱动。
- GUI应用程序基本不需要集成测试,单元测试一般在“按钮”级上进行,系统测试就是表现出应用程序的事件驱动的性质。
- GUI应用程序的系统测试可以通过状态图和有限状态机来寻找测试线索或者生成测试用例。
类测试
以方法为单位
- 类似于传统的单元测试。
- 方法一般很简单,圈复杂度低,但接口复杂度高。
面向对象的集成测试
协作图非常类似在“集成测试”中曾经使用过的单元调用图
o-oCalendar程序的协作图(下图18-1)

协作图既支持成对集成测试,也支持相邻集成测试
对于成对集成,通过向被集成的类发送消息或接收消息的独立“相邻”类进行单元(类)测试
就类向其他类发送/接收消息而言,其他类必须表示为桩。所有这类额外工作使成对的类集成难以接受,这与过程单元的成对集成一样。
使用图18-1中的(无向)图,Date的邻居是整个框图,而testIt的邻居只Date。
类的相邻集成肯定会降低插桩工作量,但是要付出降低诊断精度的代价
如果测试用例失败,则必须在更多的类中寻找缺陷。
在传统软件的MM-路径中,用“消息”表示个体单元(模块)之间的调用,采用模块执行路径取代完整的模块。
这里我们使用同样的缩写表示由消息分开的各种方法执行序列,即方法/消息路径。
与传统软件一样,方法也可能有多条内部执行路径。
MM-路径从某个方法开始,当到达某个自己不发送任何消息的方法时结束,这就是消息静止点。
- 顺序图是面向对象集成测试很好的基础
- 顺序图几乎等价于MM路径。

- 面向对象软件中的MM-路径是由消息连接起来的方法执行序列。
- 原子系统功能(ASF)是一种MM-路径,从输入端口事件开始,到输出端口事件结束。描述了软件的事件驱动性质。
o-oCalendar的伪代码





o-oCalendar中的消息

两者的差别是,前者显示了每个方法的源和目的地方法,而不只是类。
用2002年1月15日实例化Date的部分MM-路径


用2002年4月30日实例化Date的部分MM-路径



请写出次日问题中输入是“2010-12-31”的MM路径


面向对象的系统测试
货币转换程序
货币转换程序是事件驱动的程序。
程序将美元转换为四种货币中的任何一种:巴西瑞尔、加拿大元、欧共体欧元和日元。货币选择由按钮控制,这些按钮相互排斥。当选择了一个国家时,系统会使标签句子变得完整。例如,如果点击了“加拿大”按钮,则标签“等……”会变成“等于加拿大元”。此外,程序会在等量货币金额的输出位置旁边显示加拿大国旗。
货币转换器界面

货币转换程序的输入和输出事件

端口输入输出

货币转换程序高层状态机

货币转换程序选择国家状态机

货币转换程序状态图

在货币转换程序中线索<s1,s7>、<s2,s6,s8>代表什么意思,对它们的测试是否有意义,为什么?
货币转换程序状态事件表


货币转换程序的单元测试
- 可以对功能按钮做单元测试。
- 如果用VB等构件方式实现界面,基本不用对文本框做单元测试。
- 如果需要输入美元金额再选择按钮,则类似于系统测试。
货币转换程序的集成测试
- 集成测试的策略取决于怎样实现。
- 计算按钮有三种主要实现方法。
(1)第一种实现
将按钮状态作为If的条件
在对按钮的单元测试中都会测试到,几乎不用集成测试。

(2)第二种实现
面向对象的实现,将方法放到选项按钮中。
单元测试的内容很少,主要内容在集成测试中。

(3)第三种实现:VB风格的实现


货币转换程序的系统测试
较小的应用程序,测试重点在系统测试。
可以用事件驱动的Petri网描述要测试的线索。

在货币转换程序中线索<s1,s7>,<s2,s6,s8>代表什么意思,对他们的测试是否有意义?

- Author:Koreyoshi
- URL:https://Koreyoshi1216.com/article/1aac7b13-c6a7-805e-89bc-d862494280e7
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!