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

软件测试方法课程笔记(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
  2. 非C1 = ! E1


    Alt text
  3. 或 C1C2C3 = E1
    Alt text

    4.与 C1 and C2 = E1
    Alt text

给出一些约束:

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


    Alt text
  2. 或约束 (C1, C2, C3至少有一个)


    Alt text
  3. 唯一约束(必选其一)


    Alt text
  4. 要求约束(C1要求C2)


    Alt text
  5. 强制约束(E1把E2覆盖了)


    Alt text

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

2.6 正交矩阵法

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

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

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

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

正交矩阵(正交表)是该方法的核心, 定义为:
L_{Runs}(Levels^{Factors})
其中Runs是矩阵的行数, Factors是矩阵的列数(因子的数目), Levels是因子的最大取值

关于试验次数给出计算的方法:
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)

X是一个有限的输入集合
Y是一个有限的输出集合
Q是一个有限的状态集合
q_0\in Q是一个初始状态
\delta: Q \times X \rightarrow Q是状态转移函数
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|
  2. 关于描述集合W的构建

我们令M=(X,Y,Q,q_1,\delta,O)是一个最小的并且完整的FSM
描述集合W是一个输入序列的有限的集合, 这些输入序列能够区分M的任意状态对的行为, 每一个W中的输入序列都是有限长度, 给定状态q_iq_j, W包含一个字符串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, 是n个有限集合\sum_{k1}, \sum_{k2}, ...,\sum_{kn}的集合, 使得\bigcup_{i=1}^{n}\sum_{ki}=Q
状态如果属于\sum_{ki}就称为k等价
如果u属于\sum_{ki}, 同时v属于\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
这就是最小的可区分序列了, 我们可以遍历所有状态对, 最后生成W集合

  1. 具体分两个步骤的细节:

    1. 对M构建测试树
      一个FSM的测试树, 以初始化状态为根节点, 它包含从根节点至少一条路径到当前FSM的所有状态, 下面给出具体的测试树的构造方法.
      状态q_0, 初始化的状态, 是测试树的根, 假设测试树已经被构造到水平k, 第k+1的水平将会被构建
      在水平k选择一个节点n,
      如果从1到k水平中出现出现过, 那么n就是叶子节点并且不能被继续展开,
      如果n不是叶子节点, 那么我们将其扩展, 增加节点n的一个分支通向一个新的节点m, 如果\delta(n,x)=m, 这个分支将会被标记为x, 这个步骤对k水平的所有节点做一遍
      Alt text
    2. 利用测试树生成转变覆盖集合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
    对于m=n, 易得Z=X^0.W=W
    特别地

    Alt text

  3. 测试集合 = P.Z

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

  1. 找到对应T的每个元素的回应
  2. 生成测试用例, 注意到虽然应用是根据M来建模的, 仍然可能在T的元素被运用之前有一些元素被设置
  3. 执行应用并且检查是否和回应对应, 测试后重置应用的状态为初始状态
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,185评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,652评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,524评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,339评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,387评论 6 391
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,287评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,130评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,985评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,420评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,617评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,779评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,477评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,088评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,716评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,857评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,876评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,700评论 2 354

推荐阅读更多精彩内容