黑盒测试
软件黑盒测试就是测试者把软件程序想象为一个没打开的黑盒子。测试者不必了解程序的内部情况,不考虑程序内部逻辑结构,只根据程序的输入、输出和系统的功能而进行的测试。
软件黑盒测试法注重于测试软件的功能需求,主要试图发现下列几类错误:
1. 功能不正确或遗漏;
2. 界面错误;
3. 数据库访问错误;
4. 性能错误;
5. 初始化和终止错误等。
黑盒测试的意义在于:
1. 对产品进行总体功能验证;
2. 发现不完备、不一致的需求;
3. 检查隐患的需求;
4. 反映最终用户的视角;
5. 验证无效输入。
一般黑盒测试用例数密度要大于每一千行代码 30 个测试用例,最终 Bug 密度应该小于每一千行代码 2.5 个测试用例。(等价类划分法、边界值分析法、错误推测法、判定表法、因果图法、Pair-wise 法、正交试验设计法等)
等价类划分
等价类划分法是程序的输入域划分成若干部分(子集),然后从每个部分中选取少数代表性数据作为测试用例。每一类的代表性数据在测试中的作用等价于这一类中的其他值。
等价类包括有效等价类和无效等价类。
有效等价类: 指对于程序规格说明来说合理的、有意义的输入数据构成的集合。
无效等价类: 与有效等价类相反,是指对于软件规格说明而言,没有意义的、不合理的输入数据集合。
六条确定等价类的原则:
- 在输入条件规定了取值范围或值得个数的情况下,可以确定一个有效等价类和两个无效等价类,如下图。
- 在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可确立一个有效等价类和一个无效等价类,如下图所示。
- 在输入条件是一个布尔量的情况下,可确立一个有效等价类和一个无效等价类,如下图。
- 在规定了输入数据的一组值(假定 n 个),并且程序要对每一个输入值分别处理的情况下,如下表所示,可确定 n 个有效等价类和一个无效等价类。
- 在规定了输入数据必须遵守的规则的情况下,可确定一个有效等价类(符合规则)和若干无效等价类(从不同角度违反规则)。
- 在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,应再将该等价类进一步的划分为更小的等价类。
三个原则设计测试用例:
- 为每一个测试用例规定一个唯一的编号;
- 设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止。
- 设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。
例题
移民评估程序
有一个简单的移民评估程序,利用该评估程序,专业的移民顾问可以快速简便地计算出移民申请人的评估分数,评估分数高的申请人办理移民的成功几率要高一些。
该评估程序是这样计算申请人的评估分数的:首先考虑申请人的年龄,年龄越大分数越低,规定年龄在 18 ~ 39 岁的申请人得 30 分,年龄在 40 ~ 59 岁的申请人得 20 分,年龄 60 岁以上的申请人得 10 分。除了申请人的年龄之外还要考虑申请人的职业技能水平,职业技能水平高的申请人可以得到50分,职业技能水平低的申请人可以得到 30 分。然后是申请人的英语能力,雅思考试听、说、读、写各个部分的成绩每项不少于 6 分即为英语能力高,可以得到 30 分;否则即为英语能力低,可以得到 20 分。除此之外,还要评估申请人的投资额,规定投资额每增加 10 万人民币可以加 10 分,最多加 60 分,投资额也可以为 0,最多 99 万。
根据以上规则,该评估程序可以判定移民申请人的各项评估分数,并计算出移民评估总分数。移民评估分数计算方法总结如下表所示。
等价类划分法
边界值分析法
长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。
基于边界值分析法选择测试用例的原则:
- 如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试数据。
- 如果输入条件规定了值得个数,则用最大个数、最小个数、比最小个数少一、比最大个数多一得数作为测试数据。
- 根据规格说明得每个输出条件,应用前面的原则1。
- 根据规格说明得每个输出条件,应用前面的原则2。
- 如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。
- 如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。
- 分析规格说明,找出其他可能的边界条件。
注意: 边界值的概念是广义的,不仅仅局限于数值这一种形式上。(选择框:选择 / 不选择)
项 | 范围或值 |
---|---|
位(bit) | 0 或 1 |
字节(byte) | 0 ~ 255 |
字(word) | 0 ~ 65535(单字)或0 ~ 4294967295(双字) |
千(K) | 1024 |
兆(M) | 1048576 |
吉(G) | 1073741824 |
字符 | ASCII码值 | 字符 | ASCII码值 |
---|---|---|---|
空(null) | 0 | A | 65 |
空格(space) | 32 | a | 97 |
斜杠(/) | 47 | Z | 90 |
0 | 48 | z | 122 |
冒号(:) | 58 | 单引号(‘) | 96 |
@ | 64 |
例题
该程序接受 3 个整数a,b和c作为输人,用作三角形的边。程序的输出是由这三条边确定的三角形类型,它们是等边三角形、等腰三角形、不等边三角形。整数a,b,c必须满足以下条件:
- 1≤a≤200。
- 1≤b≤200。
- 1≤c≤200。
- a<b+c。
- b<a+c。
- c<a+b。
(2)划分出三角形问题程序的等价类。
(3)分析被测程序的边界值。
(4)根据划分好的等价类和边界值准备测试用例,撰写测试用例设计表
(5)按照测试用例设计表对程序进行测试,并记录实验结果,找出程序的 Bug。
注意: 需要考虑三条边所输入数值的各种排列组合情况,分别固定a、b、c中两条为100,另一条边分别为1、2、100、199、200再去掉重复的。
判定表法
针对不同逻辑条件的组合值,分别执行不同的操作。(判定表适用这类问题)
判定表由四部分组成:
(1)条件桩:列出了问题的所有条件。通常认为列出的条件的次序无关紧要。
(2)动作桩:列出了问题规定可能采取的操作。这些操作的排列顺序没有约束。
(3)条件项:列出针对它左列条件的取值。在所有可能情况下的真假值。
(4)动作项:列出在条件项的各种取值情况下应该采取的动作。
例题
(1)积分兑换问题。
有一个网站的积分兑换系统,只有金牌会员才能参与积分兑换,登录后可在该网站的积分商城兑奖。具体规则是:若积分5000及以上,则可以兑换1台iPhone7手机,兑换一次奖品积分减少3000分,可多次兑换;若奖品已经被其他会员兑换完了就不能再兑换了,只能保留积分。登录和会员权限都不满足的情况下优先显示“没有登录”信息。在积分不够和奖品兑完同时发生时,优先显示“积分不够”信息。
(2)请利用判定表法的原理,设计判定表。
(3)根据判定表,准备测试用例,撰写测试用例设计表。
判定表条件桩:
- 已登录;
- 金牌会员;
- 积分≥5000;
- 奖品数量足够。
判定表动作桩:
- 弹出提示信息,显示”没有登录不能参与本次活动“;
- 弹出提示信息,显示”不是金牌会员不能参与本次活动“;
- 兑换大奖,减去 3000 积分;
- 弹出提示信息,显示”奖品数量不够“;
- 弹出提示信息,显示”积分不够兑换奖品“。
合并:4、11 登录:1;权限:1;积分≥5000:0;奖品数量:-
3、8、10、15登录:1;权限:0;积分≥5000:-;奖品数量:-
2、6、7、9、12、13、14、16登录:0;权限:-;积分≥5000:-;奖品数量:-
Pair-wise方法
Pair-wise方法也称为“成对组合测试”或“两两组合测试”。就是将众多因素的值两两组合起来而大大地减少测试用例而不损失模块覆盖率和判断覆盖率。
Pair-wise算法的核心理念,就是一组中 2 个元素组合起来,如果都在其他组合中出现过,则这一组可以删除,不必测试。
- 维度 1:Windows 和 Linux;
- 维度 2:IE、Firefox 和 360 浏览器;
- 维度 3:中文环境、英文环境、法语环境。
Windows、IE、中文环境 => (Windows,IE)、(Windows,中文环境)、(IE、中文环境) 重复出现这三组的内容删除。
黑盒测试的优缺点
优点
- 对于较大的代码单元,黑盒测试的效率更高。
- 测试人员不需要了解程序的细节。
- 测试人员和编码人员相对独立。
- 从用户的视角进行测试,很容易被理解和接受。
- 有助于暴露任何规格不一致或有歧义的问题。
- 测试用例的设计可以不必等到编码完成,可以在规格完成之后马上进行。
缺点
- 只有一小部分可能的输入被测试到,要测试每个可能的输入几乎是不可能的。
- 没有清晰、简明的规格,测试用例很难设计。