第二章
- 穷尽所有可能的输入和输出才是完美的测试,但是无法实现
- 变量独立用等价类划分;不独立用决策表
等价类划分
- 划分原则:
- 互不相交
- 无冗余
- 结合后较完备
- 常见划分方法:
划分方法 | 有效区间 | 无效区间 |
---|---|---|
按数值区间 | 1 | 2 |
布尔(合法性)必须满足 ...条件 | 1 | 1 |
集合(可以无限) | 1 | 1 |
枚举(有限) | 1 | 1 |
- 等价类测试
- weak(弱):只考虑单缺陷
- strong(强):考虑单缺陷与多缺陷并发
- traditional(一般):只考虑有效值
- robust(健壮):考虑有效和无效值
尽量考虑强健壮性测试
强健壮:0-所有个属性的错误
弱健壮:只考虑0-1个
- 设计测试用例:
- 找到所有等价类:输入条件、输出域
- 建立表格,填入等价类
- 唯一编号等价类
- 生成测试用例:一条测试用例尽量多覆盖有效等价类,只覆盖一个无效类
- 边界值分析:控制单一等价类变化,取值范围为(
m
i
n
+
min^+
min+,
m
i
n
−
min^-
min−,
m
a
x
+
max^+
max+,
m
a
x
−
max^-
max−,),其他都去正常值(
n
o
r
m
norm
norm)
只适用于独立的有界的物理量变量之中
- 等价类测试的弱形式不如强形式测试全面。
- 无效值会引起运行错误的时候(实现语言是强类型),则没有必要做健壮形式的测试。
- 错误条件很重要的时候,健壮测试很重要。
- 边界值测试是等价类测试的一种补充,两者结合可以加强测试效果。
- 决策表技术可以解决变量之间依赖的问题。
- 要进行多次尝试,确认最合适的等价类划分。
决策表
桩 Stub | 条目 Rule |
---|---|
条件桩 Condition (输入) | |
C1 | 条件条目1 |
C2 | 条件条目2 |
行动桩 Action (输出) | |
A1 | 行动条目1 |
A2 | 行动条目2 |
- 建立决策表
- 找到所有的条件桩和行动桩
- 列表
- 填入条目:条件和行动
- 简化(条件相似,行动相同)
因果图
- 等价 Implication:if
C
1
=
1
C_1=1
C1=1 then
E
1
=
1
E_1 =1
E1=1,else
E
1
=
0
E_1 =0
E1=0
- 非 Not: if
C
1
=
1
C_1=1
C1=1 then
E
1
=
0
E_1 =0
E1=0,else
E
1
=
1
E_1 =1
E1=1
- 或 Or: if
C
1
o
r
C
2
o
r
C
3
=
1
C_1orC_2orC_3=1
C1orC2orC3=1 then
E
1
=
1
E_1 =1
E1=1,else
E
1
=
0
E_1 =0
E1=0
- 与 And: if C 1 a n d C 2 = 1 C_1andC_2=1 C1andC2=1 then E 1 = 1 E_1 =1 E1=1,else E 1 = 0 E_1 =0 E1=0
约束
- 异 Exclusive: either
C
1
o
r
C
2
=
1
C_1orC_2=1
C1orC2=1 不同时为1
- 或 Inclusive: at least C 1 o r C 2 o r C 3 = 1 C_1orC_2orC_3=1 C1orC2orC3=1 不同时为0,至少有一个为1
- 唯一 One and only one: one and only one of
C
1
o
r
C
2
o
r
C
3
=
1
C_1orC_2orC_3=1
C1orC2orC3=1只能有一个为1
- 要求 Require:
C
1
r
e
q
u
i
r
e
s
C
2
C_1requiresC_2
C1requiresC2
我强,你也得强
C1 | C2 |
---|---|
1 | 1 |
0 | 1 |
0 | 0 |
- 强制 Masking:
E
1
m
a
s
k
s
E
2
E_1masksE_2
E1masksE2
我强,你不能强
E1 E2 0 0 0 1 1 0
- 生成因果图步骤:
- 了解需求,给每个因果编号,联系因与果或果与果
- 用因果图表达出因与果的逻辑关系
- 建立决策表
- 测试用例
- 一个果结点只能接收一个逻辑关系,不能同时接受两个及以上逻辑关系
如图即为错误画法,正确画法可以在上中间加入中间状态结点 - 当一个因与另两个因的结果共同有结果时一定需要一个中间状态。
正交测试
控制变量,找出最优组合
- 因子 Factor:变量数
- 水平 Level: 一个变量可以取到的值的个数
- 轮数 Runs:需要进行测试的次数
- 综合检测 Comprehensive test:每一个组合都要测试一遍,需要进行 F a c t o r L e v e l Factor^{Level} FactorLevel次,耗费时间。
- 单变量测试多次 Single factor test for many times:在相同的情况下固定其他变量,单一变量发生变化,达到参数的最优水平。多次变换变量最后得到最优的参数组合,即最接近实际情况的结果。
- 单变量测试次数: t i m e s = l e v e l + ( f a c t o r s − 1 ) × ( l e v e l s − 1 ) times=level+(factors-1)×(levels-1) times=level+(factors−1)×(levels−1)
- 正交表格
L
R
u
n
s
(
L
e
v
e
l
s
F
a
c
t
o
r
s
)
L_{Runs}(Levels^{Factors})
LRuns(LevelsFactors)
- Runs: 数组行数
- Factors: 数组列数
- Levels: 单个因子可接受的值的最大数目
- Experiment times=∑(每个Factor的Level数量-1)+1
- 正交测试步骤
- 因子水平表
- 因子取值范围
- 边界值确定
- 实验次数
- 找到合适的表
- 填表
情景测试
- 基于一个假设的故事,帮助人思考复杂的测试环境或系统
- 五个特性:
- 有情景
- 激发性
- 可信
- 复杂
- 已被评估
- 事件流
- 基本流事件:应该包含执行用例时“通常”发生的情况。
- 替代流事件:包含了一个可选的或特殊的角色相对于正常行为的行为,以及正常行为的变化。
Scenario for the use case
– Scenario 1: Basic flow
– Scenario 2: Basic flow ->Alternate flow 1
– Scenario 3: Basic flow ->Alternate flow 1 ->Alternate flow 2
– Scenario 4: Basic flow ->Alternate flow 3
– Scenario 5: Basic flow ->Alternate flow 3 ->Alternate flow 1
– Scenario 6: Basic flow ->Alternate flow 3 ->Alternate flow 1 ->Alternate flow 2
– Scenario 7: Basic flow ->Alternate flow 4
– Scenario 8: Basic flow ->Alternate flow 3 ->Alternate flow 4
- 情景测试步骤
- 阅读用例文本描述,并识别基本流和替代流的每个组合——情景
- 识别测试用例并创建一个场景矩阵
- 每个场景应该至少有一个测试用例,但可能会有更多。
- 场景矩阵的通用格式,其中各行代表各个测试用例,各列代表测试用例的信息。
- V (valid): 表示有效的条件,可执行基本流。
- I (invalid): 表示在这种条件下将激活备选流。
- N/A: 表示不适用于测试用例
- 确定要进行测试的数据值
有一个处理单价为5角钱的饮料的自动售货机软件测试用例的设计。其规格说明如下:
(1)若投入5角钱或1元钱的硬币,押下〖橙汁〗或〖啤酒〗的按钮,则相应的饮料就送出来。
(2) 若售货机没有零钱找,则一个显示〖零钱找完〗的红灯亮,这时在投入1元硬币并押下按钮后,饮料不送出来而且1元硬币也退出来。
(3)若有零钱找,则显示〖零钱找完〗的红灯灭,在送出饮料的同时退还5角硬币。
答案:
– 基本流:投入5角硬币,押下〖橙汁〗或〖啤酒〗的按钮,则相应的饮料就送出来。
– 备选流:
1、〖零钱找完〗的红灯没亮,这时在投入1元硬币并押下按钮后,在送出饮料的同时退还5角硬币。
2、〖零钱找完〗的红灯亮,这时在投入1元硬币并押下按钮后,饮料不送出来而且1元硬币也退出来
场景:
– 场景1:基本流
– 场景2:备选流1
– 场景3:备选流2
黑盒测试
- 道 :不关注细节、规约、早期开展
- 法 :等价类划分、边界值分析;决策表、因果图;正交测试
- 术 :。。↖ 独立变量↗。。。。。↖不独立↗。。↑更少、代表性
- 器 :项目管理,各个阶段