黑盒测试用例设计之等价类划分、边界值分析、因果图、判定表、错误推断

测试策略

一组合理的策略如下:

  1. 如果规格说明包含输入条件组合的情况,应首先使用因果图分析法。
  2. 任何情况下都应使用边界值分析法。边界值分析法可以产生一系列补充的测试条件,多数甚至全部条件可以被整合到因果图分析中。
  3. 为输入和输出确定有效和无效等价类,在必要情况下对上面确认的测试用例进行补充。
  4. 使用错误猜测增加更多的测试用例。
  5. 针对上述测试用例,检查程序的逻辑结构。如果覆盖准则未能被前四个步骤中确定的测试用例所满足,并且满足准则也并非不可能,那么增加足够数量的测试用例,以使覆盖准则得到满足。
    再一次声明,使用上述策略并不能保证可以发现所有的错误。但实践证明这是一个合理折中的方案。同时,它也代表了客观的艰巨工作量,虽然没人说软件测试是一件容易的事。

一、等价类划分

确定等价类

有效等价类代表对程序的有效输入;无效等价类代表的是其他不正确的任何输入。如果需要,我们还可以将一个等价类划分为更小的一些等价类。

书籍数量

规格说明规定了“请输入书籍的数量(1~99)”

书籍类型

规格说明规定了“书籍类型(硬皮、软皮或活页)”

生成测试用例

  1. 为每个等价类设置编号。
输入条件 有效等价类 无效等价类
书籍数量 ①1≤X≤99 ②X<1③X>99
书籍类型 ④硬皮⑤软皮⑥活页 ⑦其他
  1. 编写测试用例,尽可能多的覆盖尚未被覆盖的有效等价类。直到所有的有效等价类都被测试用例覆盖。
编号 用例 覆盖等价类
1 50,硬皮 覆盖①④
2 50,软皮 覆盖①⑤
3 50,活页 覆盖①⑥
  1. 编写测试用例,覆盖一个且仅一个尚未被覆盖的无效等价类。直到所有的无效等价类都被测试用例所覆盖。
编号 用例 覆盖无效等价类
4 -50,硬皮 覆盖②
5 199,软皮 覆盖③
6 50,线装 覆盖⑦

用单个的测试用例覆盖无效等价类,是因为有些输入的错误检查可能会屏蔽或取代其他输入的错误检查。比如②⑦,也许程序提示“非法的书籍数量”后,就不会执行对书籍类型的检查了。

二、边界值分析

所谓边界条件,是指输入和输出等价类中恰好处在边界、或超过边界、或在边界以下的状态。考虑了边界条件的测试用例具有更高的测试回报率。

上例中的书籍数量范围是1~99,所以针对0,1和99,100的情况分别设计测试用例。


书籍数量的边界值分析

从定义可以看出,等价划分只关注输入空间(输入等价类)的不同,边界值分析还需要从输出空间(输出等价类)设计测试用例。

例,某个程序按月计算个人所得税的速算扣除数,且最小金额是0,最大金额是13,505。使用边界值分析法,应该设计测试用例测试速算扣除数结果为0和13505的情况。此外,还应观察是否可能设计出导致速算扣除数为负数,或者超过13505的测试用例。

输出结果的边界值分析

边界值分析法和等价划分重要的区别是,等价划分是从等价类中挑选任意一个元素作为测试数据;边界值分析法考察正处于等价划分边界或在边界附近的状态。

三、因果图

边界值分析和等价划分的缺点是,未对输入条件的组合情况、输入条件之间的相互制约关系进行分析。

因果图的基本关系

  • 恒等(Identify):若a为1,则b为1;否则b为0。
  • (NOT):若a为1,则b为0;否则b为1。
  • (OR):若a或b或c为1,则d为1;否则d为0。
  • (AND):若a和b和c都为1,则d为1;否则d为0。
因果图基本关系

因果图的约束条件

1、对于输入条件的约束有E、I、O、R四种:

  • (E):E必须总为真,而a、b最多只有一个为1。
  • (I):I为真时,a、b和c中至少有一个必须为1。
  • 唯一(O):a、b中,有且仅有一个必须为1。
  • 要求(R):如果a为1,b也必须为1。
输入约束条件

2、对于输出结果的约束只有M一种:
屏蔽(M):如果结果a为0,则b强制为0。

输出约束条件

一、假设有一规格说明:“第一列中的字符必须是‘A’或‘B’,第二列中的字符必须是一个数字。在这种情况下,对文件进行更新。如果第一个字符不正确,产生提示信息X12。如果第二个字符不是数字,产生提示信息X13。”

(1)将规格说明分解为可执行的片段,确定“因”和“果”,为每个“因”和“果”都赋予唯一的编号。“因”是条件,是指一个明确的输入条件等价类。“果”是动作,是指一个输出或系统转换(输入对程序或系统状态的延续影响)。

“因” “果”
1 —— 第一列的字符是“A” 70 —— 对文件做了更新
2 —— 第一列的字符是“B” 71 —— 产生提示信息X12
3 —— 第二列的字符是一个数字 72 —— 产生提示信息X13

(2)分析规格说明的语义,转换为因果图。原因①和原因②不可能同时成立,为因果图添加对应的约束条件,得到右图。

因果图和添加了约束条件后的因果图

(3)将因果图转换为判定表,每一列代表一个测试用例。

判定表

(4)将判定表中的列转换为测试用例。

编号 用例 输出 编号 用例 输出
1 A,1 对文件做了更新 4 1,A 产生提示信息X12,X13
2 B,1 对文件做了更新 5 A,A 产生提示信息X13
3 1,1 产生提示信息X12 6 B,B 产生提示信息X13

二、将因果图转换为判定表的思路(以上述的例子来说明)

  1. 选择一个“果”作为当前状态。例:71。
  2. 对因果图回溯,找出导致该“果”为1的所有因的组合(需要考虑到约束条件)。例:001,000。
  3. 在判定表中为每个“因”的组合生成一列。例:(列3)和(列4)。
  4. 对于每种“因”的组合,判断所有其他“果”的状态,并放置在对应的每一列中。例:已得在001,000两种组合下结点71的结果为1。判断在“因”为001的组合下,得到70和72的结果为0。判断在“因”为000的组合下,得到70的结果为0,72的结果为1。将“果”的状态填入其对应的列。

对因果图进行回溯时,需要做到以下考虑:

a) 当回溯经过一个结果为1的OR结点时,不要将OR结点的1个以上的输入同时设为1。
b) 当回溯经过一个结果为0的AND结点时,应列举出导致该结果为0的所有输入情况的组合。然而,当该AND结点的一个输入条件为0时,其他输入有一个或更多的1,则不必考虑其他输入为1的所有情况。
c) 当回溯经过一个结果为0的AND结点时,所有输入皆为0的这一种情况应当列举出来。

找出因果图中,所有导致输出状态为0的输入条件

(1) 根据上述第c)条思路,我们只需列出使得结点⑤和结点⑥皆为0的情况。结点①②③④的取值状态为:

0,0,0,0 (5=0,6=0)

(2) 根据第b)条思路,对于结点⑤为1而结点⑥为0的情况,应该列出导致⑥为0的所有输入情况组合。同时,只需列出一种使得⑤为1的情况即可,不需要列出⑤为1时的所有输入情况组合。又根据第a)条思路,当结点⑤为1时,我们不应将结点①和②同时设为1。于是,得到结点①②③④的取值状态:

1,0,0,0 (5=1,6=0)
1,0,0,1 (5=1,6=0)
1,0,1,0 (5=1,6=0)

同样的,对于⑤为0而⑥为1的情况,也只需要列出⑥为1的一种情况即可(尽管在本例中也只有这一种)。

0,0,1,1 (5=0,6=1)

因果图有助于用一个系统的方法选择出高效的测试用例集。它还有一个额外的好处,就是可以指出规格说明的不完整性二义性。但通常它不能生成全部应该被确定的有效测试用例

注意:因果图方法没有充分考虑边界条件。建议,最好是单独考虑边界值分析。这不意味着我们要为此增加相应多的测试用例,而是在由因果图生成测试用例时,可以将边界条件分析一并考虑进去。最好的结果是既满足了两方面的目标,又不需要增加新的测试用例。

四、错误推测

错误猜测是一项依赖于直觉的非正规的过程,其基本思想是人们利用直觉和经验猜测可能犯得错误或错误易发情况的清单,然后编写测试用例来暴露这些错误。

例如,程序输入中出现0这个值,就是一种错误易发情况。因此可以编写测试用例检查特定的输入值中有0,或特定的输出值被强制为0的情况。
同样,在出现输入或输出数目不定的地方,如,对某个列表进行搜索,结果为“空列表”或“只包含一个”条目的列表,也是错误容易发生的情况。

另一个思想是,在阅读规格说明时,联系程序员可能做的假设来确定测试用例。如规格说明中被忽略的一些内容,要么是由于偶然因素,要么是程序员认为其显而易见。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341