【0x01】黑盒测试技术
不需要了解代码的内部结构,只要知道有怎样的输入会有怎样的输出。
比如登录功能,我不知道代码是怎么写的,我只要知道输入正确的用户名密码可以登录系统。这种就是黑盒测试。
黑盒测试主要发现的错误
- 功能不正确或遗漏
- 界面错误 - 排版、文字错误等
- 数据库访问错误 - 数据库连接不上,有的数据查询不出来
- 性能错误 - 打开一个页面需要很久,执行一个功能要很长时间才完成
- 初始化和终止错误
凡是用户觉得不方便的,就马上提出来。我们测试人员是从用户角度出发的。
黑盒测试的测试步骤
跟我们之前说的测试步骤是一样的。
- 测试计划 - 用哪些软件、哪些硬件环境、哪些测试人员、测试范围、测试方法、测试通过标准、对测试进度进行安排 ==>产生测试计划文档
- 测试分析 - 对功能进行分析,构思测试用例如何设计
- 测试设计 - 有输入有预期结果 ===>产生测试用例文档(工作量大,含金量高)
- 测试执行 - 等待开发人员提交测试版本,先进行冒烟,如果冒烟不通过直接打回,冒烟通过则执行测试用例。 ===>产生测试缺陷报告文档
- 测试评估 - 对测试情况进行总结,比如测试了哪些功能,结果怎样,发现了哪些缺陷,对缺陷进行总结,给开发进行合理建议。 ===> 产生测试报告文档
为什么要设计测试用例
- 良好的测试用例可以缩短测试实施的时间 - 测试准备是和开发人员开发软件并行执行的。所以可以缩短时间。
- 确保测试的系统性、全面性 - 对用例考虑比较周全。
- 提高测试的可复用性 - 一个系统要经过n轮测试,之前设计好的测试用例可以直接拿过来用,效率更高。降低了对人员的依赖性(测试设计和测试执行人员可分开,测试执行人员技术含量低,辞职后随便招个人都能做)
黑盒用例设计方法
- 等价类划分法
- 边界值法
- 判定表驱动法
- 因果图法
- 正交法
- 场景法
等价类划分法
把程序的所有可能的输入数据划分为若干子集,每一子集的代表性数据在测试中的作用等价于这一子集的其他值。每一个子集就是一个等价类。
什么意思呢?举个栗子,我们现在要验证A班所有的同学都比B班的任何一个同学的成绩好。怎么比?难道要一个一个循环着比??结果是O(n^2)的,跟个傻B一样。
那怎么比?我们只需要找出来A班最差的同学,和B班最好的同学进行比较即可。
那么这个A班最差的同学和B班最好的同学就是各自的子集的代表性数据。
等价类需要考虑有效等价类和无效等价类。
等价类划分法设计步骤
- 划分等价类
- 设计测试用例
举个栗子:
我们来进行等价类的划分:
其中红色是有效等价类,绿色是无效等价类。
划分好等价类之后我们就可以从等价类中任选其中一个数据设计出我们的测试用例了。
再看一个例子
刚刚的例子比较简单。只有一个条件,就是说输入的值是什么。我们来看有两个条件的例子:
这题有两个条件。 一个是包不包含字符。另外一个是文件名的长度。
所以我们是要嵌套来设计嘛?不是的,那样太麻烦了。而且我们仔细观察后可以发现,对于文件名长度的限制是建立在所有字符都是可用的情况下的,所以我们不用嵌套设计。
同样,我们设计出了这样的等价类,红色为有效等价类,绿色为无效等价类。我们根据等价类设计出测试用例即可。
例子3
首先明确一点,别管等腰的、等边的还是一般的,它总是一个一般的三角形。
我们来看一下这个的等价类怎么划分:
来看一下最终的测试用例:
所以说,我们可以看出来,我们设计的某个测试用例可以涉及到多个等价类。
而且有的时候等价类是需要组合使用的。比如我们在判定是否是等腰或者是否是等边的时候,总要先使测试用例满足它首先是一个一般三角形。
边界值法
通常与等价类划分法配合使用。
长期测试经验表明:大量错误发生在输入或输出范围的边界上,而不是发生在范围内部。因此,对各种边界设计测试用例,能取得良好的效果。
举个栗子:
等价类划分和边界值法配套使用:
判定表法
当一个功能的逻辑条件比较复杂的时候(判定条件很多),我们又想设计出比较完整的测试用例,就要用判定表法。
判定表法是分析和表达较为复杂逻辑条件下软件状态和行为的有效工具。
用它可以设计出完整的测试用例集合,将复杂用例的各种可能情况罗列出,使测试内容变得简单明了而避免遗漏。
判定表的构成如下表所示:
上面是条件项,下面是结果项。
什么意思呢?条件项是条件的各种组合,动作项是条件的各种组合引发执行的代码的动作。我们知道,条件有两种结果,一个是true,一个是false。所以n个条件就会有2^n个条件的组合。
我们把每种组合的条件依次写下它对应的结果,这样就完成了判定表。最后我们可以对它进行一个简化,得到最终的测试用例。我们的每个条件的组合和它对应的结果就是一个规则。
判定表设计步骤
- 确定规则的个数,条件个数为n,规则个数为2^n。
- 列出所有的条件桩和动作桩。
- 填入条件项。
- 填入动作项。
- 简化判定表,合并相似规则。
我们来举个栗子
可以看到这个程序中的条件项还挺多的,适用于判定表法。
其次,我们梳理了一下,发现条件有3个。
所以组合之后我们要设置8条规则。
我们把这8种组合列出来:
好了。现在我们可以进行简化的工作了:
首先我们要明确,在合并时,只能合并动作桩相同的条件。而且动作桩相同的条件里,我们只能合并只有一个条件取值不同的条件。
什么意思呢?看个例子:
这个是我们合并后的取值。-
代表随便取,X、Y都可以,变成用例的时候取X也可以取Y也可以,无所谓的,只要取一个就行。
那么我们这个合并表是怎么来的呢?
我们首先找动作桩相同的,12357是一组,468是一组。
12有一个条件不同,可以合并。57有一个条件不同,可以合并。
48有一个条件不同,可以合并。
所以我们合并之后就成了只有5条的判定表了。