程序测试 - wolai 笔记

1.测试策略

1.1单元测试

单元:封装的类和对象
对程序内部具体单一功能模块测试,如程序用C++实现,主要对类成员函数测试。
传统的测试方法都可使用,等价类划分、边值分析、逻辑覆盖法、基本路径法。

1.2集成测试

在面向对象的软件中不存在层次的控制结构,传统的自顶向下或自底向上的集成策略就没有意义了。
此外,由于构成类的各个成分彼此间存在直接或间接的交互,一次集成一个操作到类中(传统的渐增式集成方法)通常是不现实的。
面向对象软件的集成测试主要有下述两种不同的策略。

(1)基于线程的集成测试

把响应系统的一个输入或一个事件所需类集成起来

(2)基于使用的集成测试

先测独立类,测完后测独立类下一层类(依赖类),到测完。

1.3确认测试

测用户可见动作,可识别系统输出。
根据动态模型和描述系统行为的脚本设计确认测试用例。黑盒法

2.测试用例设计

与传统软件测试(测试用例的设计由软件的输入→处理→输出视图或单个模块的算法细节驱动)不同,面向对象测试关注于设计适当的操作序列以检查类的状态

2.1测试类的方法

测试单个类的方法主要有随机测试、划分测试基于故障的测试3种。

(1)随机测试

在类的多个操作排列中,随机选择
银行应用系统的account(账户)类操作:open(打开)、setup、deposit(存款)、withdraw(取款)、balance(余额)、summarize(清单)、creditLimit(透支限额)和close(关闭)
一个account类实例的最小行为历史包括下列操作open.setup.deposit.withdraw.close这就是对account类的最小测试序列。
在下面的序列中可能发生许多其他行为: open.setup.deposit[deposit|withdraw|balance|summarize|creditLimit]^n.withdraw.close
随机选:
  • open.setup.deposit.deposit.balance.summarize.withdraw.close
  • open.setup.deposit.withdraw.deposit.balance.creditLimit.withdraw.close
执行上述这些及另外一些随机产生的测试用例,可以测试类实例的不同生存历史。

(2)划分测试(类似等价类划分)

1)基于状态的划分

根据改变类状态能力划分:改变类状态;不改变类状态。
account类:
  • deposit、withdraw(改变状态)
  • balance、summarize、creditLimit(非改变状态)
设计测试用例,以分别测试改变状态的操作和不改变状态的操作。
  • open.setup.deposit.withdraw.withdraw.close
  • open.setup.deposit.summarize.creditLimit. Withdraw.close

2)基于属性的划分

根据类操作属性:使用该属性;修改属性;不操作该属性。
例:account类可根据balance属性把操作定义划分三个类别:
  • 使用balance的操作
  • 修改balance的操作
  • 不使用也不修改balance的操
为上述每个类别设计测试序列

3)基于功能的划分

根据类操作完成功能
  • 初始化操作(open、setup);
  • 计算操作(deposit、withdraw);
  • 查询操作(balance、summarize、
  • creditLimit);
  • 终止操作(close)

(3)基于故障的测试

错误推测法,如边界或输入输出为零等。

2.2集成测试方法

(1)多类测试

测类间协作,同样可采用随机测试和划分测试

随机测试

Bank类对ATM类的操作序列:
verifyAcct.verifyPIN.[(verifyPolicy.withdrawReq)|depositReq| acctInfoReq]^n
Bank类的随机测试用例可能是:
测试用例1: verifyAcct.verifyPIN.depositReq
为了考虑测试涉及协作者,考虑与测试用例1每个操作相关联消息:
  • Bank必须和ValidationInfo协作以执行verifyAcctverifyPIN
  • Bank还必须和Account协作以执行deposit
测试这些协作的新的测试用例是:
verifyAcctBankvalidAcctValidationInfoverifyPINBankvalidPINvalidationInfodepositReqdepositaccountverifyAcct_{Bank}·[validAcct_{ValidationInfo}]·verifyPIN_{Bank}·[validPIN_{validationInfo}]·depositReq·[deposit_{account}]

划分测试

根据与特定类的接口划分
bank类的方法分服务于ATM或服务于cashier

(2)从动态模型导出测试用例

测试用例涵盖所有状态。如下图,操作系列使account类实例遍历所有允许的状态转换。
测试用例s1:(最小测试序列)
open·setupAccount·deposit(initial)·withdraw(final)·close
向最小序列中加入附加的测试序列,
测试用例s2:
open.setupAccount.deposit(initial).deposit.balance.credit.withdraw(final).close
测试用例s3:
open.setupAccount.deposit(initial).deposit.withdraw.accntInfo.withdraw(final).close
……
导出更多的测试用例以保证该类的所有行为都被适当地测试
在类的行为导致与一个或多个类协作的情况下,应该使用多个状态图去跟踪系统的行为流。

2.3确认测试方法

和传统确认测试方法一样,OO软件的确认关注用户可见的动作和用户可识别的系统输出。
为辅助确认测试的导出,应充分分析模型中的用例图的场景来提高交互需求中发现错误的可能性。


Comment