前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >软件测试方法课程笔记(2)

软件测试方法课程笔记(2)

作者头像
Mezereon
发布2018-10-09 14:18:22
7000
发布2018-10-09 14:18:22
举报
文章被收录于专栏:MyBlogMyBlog

软件测试方法课程笔记(2)

2. 黑盒测试

2.1 介绍

优点:

  1. 没有任何的偏向
  2. 无需开发知识
  3. 只考虑用户的看法
  4. 需求确定就可以测试
2.2 等价类划分

为了产生少量的测试用例, 并且可以测试大部分的情况, 我们可以使用等价类划分的方法 比如对于输入值是范围值, 我们可以使用等价类划分成范围内的和不是范围内的两种等价类

等价类有一种评判标准, 分为强, 弱, 又分为一般和健壮 弱:只单缺陷假设 强:多缺陷假设 一般:考虑有效值 健壮:考虑无效值

2.3 边界值分析

也就是对于范围的值, 我们需要取min, min+, normal, max-, max五个值 如果带有鲁棒性的话, 可以增加min-, max+来进行验证

Summary

  • 等价类测试的弱形式不如强形式测试全面。
  • 无效值会引起运行错误的时候(实现语言是强类型),则没有必要做健壮形式的测试。
  • 错误条件很重要的时候,健壮测试很重要。
  • 边界值测试是等价类测试的一种补充,两者结合可以加强测试效果。
  • 决策表技术可以解决变量之间依赖的问题。
  • 要进行多次尝试,确认最合适的等价类划分。
2.4 决策表方法

如下图所示

Alt text

左侧是桩部分,右侧是条目部分,上面是条件部分,下面是行动部分 因此,可以引用条件桩,行动桩,条件条目和行动条目. 条目部分的一列是一条规则。规则指示在规则的条件部分中指示的条件环境下要采取什么行动.

我们列出决策表之后, 还可以对无关项进行合并, 比如 (Y, Y, N)的结果是和(Y, Y, Y)是一样的, 那么我们可以将其合并为(Y, Y, -)

2.5 因果图分析方法

等价分类法和边界值分析法的缺点是没有检查各种输入条件的组合. 要检查输入条件的组合并非易事,因为即使可以将输入条件分成等价类,但它们的组合情况可能很多,如果没有一个系统的方法是难以设计测试用例的. 借助因果图列出输入数据的各种组合与程序对应动作效果之间的阶段联系,构造判定表,由此设计测试用例是生成测试用例的有效办法.

这里我们首先给出因果图的几种类型:

  1. 等价, 如果C1 = 1, 那么E1 = 1, 反之亦然

Alt text

  1. 非C1 = ! E1

Alt text

  1. 或 C1C2C3 = E1

Alt text 4.与 C1 and C2 = E1

Alt text

给出一些约束:

  1. 异约束(C1,C2必选其一, 或者都不选)

Alt text

  1. 或约束 (C1, C2, C3至少有一个)

Alt text

  1. 唯一约束(必选其一)

Alt text

  1. 要求约束(C1要求C2)

Alt text

  1. 强制约束(E1把E2覆盖了)

Alt text

因果图的画的时候要注意使用中间节点来使得整个图易于表达

2.6 正交矩阵法

正交矩阵是一种用于测试的系统化的统计方法

给出几种测试实验的类型:

  1. 全面测试
  2. 单因子测试
  3. 正交测试
    1. OTDM(Orthogonal Test Design Method)
    2. 利用伽罗瓦理论进行测试

首先引入因子的概念, 因子也就是影响的因素, 拥有自己的定义域, 范围等 然后是水平的概念, 水平是给定相应因子的值的集合的数目

正交矩阵(正交表)是该方法的核心, 定义为:

L_{Runs}(Levels^{Factors})
L_{Runs}(Levels^{Factors})

其中Runs是矩阵的行数, Factors是矩阵的列数(因子的数目), Levels是因子的最大取值

关于试验次数给出计算的方法:

Experiment Times=\sum(level\ amout\ of\ every\ factor - 1)+1
Experiment Times=\sum(level\ amout\ of\ every\ factor - 1)+1
2.7 场景测试

场景测试是基于用例来进行分析的

现在的软件都是由事件的触发来控制流程, 事件触发的情景便形成了场景 同一个事件不同的触发顺序和处理结果形成了事件流 将该思想引入软件测试之中, 生动描绘出事件触发时候的情景, 有利于测试

关于事件流:

  1. 事件的基础流: 覆盖自然发生的事
  2. 事件的可选流

三步法生成测试用例:

  1. 对于每一个用例, 生成用例场景的full set
  2. 对于每一个场景, 确定至少一个测试用例, 以及可以执行的条件
  3. 对于每一个测试用例, 确定测试的值
2.8 有限状态机

提供了对应用基于状态的简单建模方法, 一般以六元组的形式表示

M=(X,Y,Q,q_0,\delta,O)
M=(X,Y,Q,q_0,\delta,O)
X
X

是一个有限的输入集合

Y
Y

是一个有限的输出集合

Q
Q

是一个有限的状态集合

q_0\in Q
q_0\in Q

是一个初始状态

\delta: Q \times X \rightarrow Q
\delta: Q \times X \rightarrow Q

是状态转移函数

O: Q \times X \rightarrow Y
O: Q \times X \rightarrow Y

是输出函数

给出正常的FSM

Alt text

四种错误类型:

  1. 操作错误

Alt text 2.转变错误

Alt text 3.额外状态错误

Alt text 4.丢失状态错误

Alt text

首先给出假设:

  1. M是特定的, 最小的, 连接的和确定性的
  2. M从一个确定的初始状态开始
  3. M是精确重置到初始状态
  4. M和IUT有相同的输出集

关于Chow的W方法, 有以下步骤:

  1. 给定有限状态机, 估计出最大的状态数目m
  2. 构造M的描述集合W
  3. 分为两个部分:
    1. 构造M的测试树
    2. 生成测试数的转变覆盖集合P
  4. 利用m和W构造集合Z
  5. P.Z就是所求的测试集合

下面对于每一个步骤给出具体的方案:

  1. 最大的状态数目我们只需要令
m=|Q|
m=|Q|
  1. 关于描述集合W的构建

我们令

M=(X,Y,Q,q_1,\delta,O)
M=(X,Y,Q,q_1,\delta,O)

是一个最小的并且完整的FSM 描述集合W是一个输入序列的有限的集合, 这些输入序列能够区分M的任意状态对的行为, 每一个W中的输入序列都是有限长度, 给定状态

q_i
q_i

q_j
q_j

, W包含一个字符串s, 使得

O(q_i, s)\neq O(q_j,s)
O(q_i, s)\neq O(q_j,s)

Alt text

如图所示, 我们可以用W中的字符串(输入序列)baaa来将M中的q1和q2区分开来 那么, 接下来我们给出W的具体构造方法

  1. 构造一个集合Q的k等价划分的序列, 记作P1, P2, ... ,Pm, m>0
  2. 逆序遍历k等价划分来获得每个状态对的区分序列

关于Q的k等价划分, 我们记作

P_k
P_k

, 是n个有限集合

\sum_{k1}, \sum_{k2}, ...,\sum_{kn}
\sum_{k1}, \sum_{k2}, ...,\sum_{kn}

的集合, 使得

\bigcup_{i=1}^{n}\sum_{ki}=Q
\bigcup_{i=1}^{n}\sum_{ki}=Q

状态如果属于

\sum_{ki}
\sum_{ki}

就称为k等价的 如果u属于

\sum_{ki}
\sum_{ki}

, 同时v属于

\sum_{kj}
\sum_{kj}

, i ≠ j, 那么u和k就称为k可区分的 我们以构建1-等价划分为例, 首先给出FSM

Alt text

首先我们对输入输出进行简单的划分, 得到

Alt text

我们可以继续构建2-等价划分, 我们对P1表进行重写, 得

Alt text

状态下标后面多了一个划分组的索引, 进而的得到P2表

Alt text

重复该过程, 我们最终可以得到

Alt text

那么如何利用一堆表来找到区分状态的序列呢? 举个例子, 我们如果想找到q2和q3的区分序列, 就需要找到在Pi中q2和q3同一个划分, 但是p(i+1)就不同了, 找到这样的i值 很容易得到P1和P2, P1中的不同输入也就是区分序列了, 但是P1中对于所有输入都可以区分, 我们选择z = a 进一步我们需要q1和q5的的区分序列, P1中我们继续选择a, 更新z = z.a = aa, 由于该转变无法继续区分序列了, 到这里会结束 我们可以计算一下输出

O(q_2, "aa") = 00 \\ O(q_3, "aa") = 01
O(q_2, "aa") = 00 \\ O(q_3, "aa") = 01

这就是最小的可区分序列了, 我们可以遍历所有状态对, 最后生成W集合

  1. 具体分两个步骤的细节:
    1. 对M构建测试树 一个FSM的测试树, 以初始化状态为根节点, 它包含从根节点至少一条路径到当前FSM的所有状态, 下面给出具体的测试树的构造方法. 状态
    q_0
    q_0

    , 初始化的状态, 是测试树的根, 假设测试树已经被构造到水平k, 第k+1的水平将会被构建 在水平k选择一个节点n, 如果从1到k水平中出现出现过, 那么n就是叶子节点并且不能被继续展开, 如果n不是叶子节点, 那么我们将其扩展, 增加节点n的一个分支通向一个新的节点m, 如果

    \delta(n,x)=m
    \delta(n,x)=m

    , 这个分支将会被标记为x, 这个步骤对k水平的所有节点做一遍

    Alt text

    1. 利用测试树生成转变覆盖集合P 转变覆盖集合P的生成方法很简单, 就是将从测试树的根节点出发, 所有可能的输出构成一个集合, 给出我们这个测试树的P集合

    Alt text

  2. 接下来我们来构造Z集合 给出Z集合的计算方法:
Z=X^0.W\cup X^1.W\cup ... \cup X^{m-1-n}.W\cup X^{m-n}.W
Z=X^0.W\cup X^1.W\cup ... \cup X^{m-1-n}.W\cup X^{m-n}.W

对于m=n, 易得

Z=X^0.W=W
Z=X^0.W=W

特别地

Alt text

  1. 测试集合 = P.Z

我们按如下步骤对实现进行测试:

  1. 找到对应T的每个元素的回应
  2. 生成测试用例, 注意到虽然应用是根据M来建模的, 仍然可能在T的元素被运用之前有一些元素被设置
  3. 执行应用并且检查是否和回应对应, 测试后重置应用的状态为初始状态
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.09.13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 软件测试方法课程笔记(2)
    • 2. 黑盒测试
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档