最近在看《软件测试的艺术》,算是对测试有了一点入门。
借着看书,一边整理一下自己的思路,也有助于未来可能面试测试类的职位时能清晰地说出对测试的理解。
书中强调的一个核心观点是:测试的目的不在于验证程序的正确性,而在于尽可能的找出程序的缺陷。对“测试成功”的定义也与我们通常理解的“成功”不同,甚至有些违背我们的心理观念。书中将软件测试同医生给病人看病做了较为恰当的类比,如果一个感到身体不适的人去找医生,如果医生没有找到任何病因,那么医生是不够称职的;同样的,面对一个规模较大的程序,它必然含有bug(这种论断想必没人会怀疑),那么测试人员的任务就是找到这些bug。
那么如何找到这些bug呢?那么首先得对程序的bug进行明确的定义和划分,才能有的放矢地针对不同类型的bug去运用不同的测试方法。暂时不从系统的层面去谈测试(涉及到软件工程方面的各个环节,属于高层次的测试分析),而是从一个程序片段或者程序本身的功能实现上去寻找测试的方法。
测试的主要方法有两种:白盒测试和黑盒测试。白盒测试是以逻辑为驱动的测试;而黑盒测试是以数据为驱动的测试。有必要针对这两种测试进行简要说明:
白盒测试不太关注程序的接口,而关心程序在各种逻辑判断(if的“是否判断”,switch的各种case等)下(通过挑选各种测试用例),输出的结果和预期的差异。针对白盒测试有几种解读:
1、语句覆盖 : 覆盖所有的语句(太难实现)
2、判定覆盖 : 所有的判定被覆盖
3、条件覆盖 : 所有条件语句被覆盖
4、判定/条件覆盖 : 所有判定和条件均覆盖
5、多重条件覆盖 : 各种条件之间的组合被覆盖
6、路径覆盖 : 各个路径被覆盖(不同于语句覆盖)
白盒测试只能检测代码是否实现了逻辑(这种逻辑可以通过流程图体现),但是并没有检验逻辑本身是否体现了程序应该实现的功能。而黑盒测试,则是把程序当作一个黑盒子去看待,带入测试用例,运行程序,看程序的输出是否和接口描述一致。
用于黑盒测试的测试用例可以选取一般功能测试以及边界条件。(书中提及的因果图没细看)
模块测试(单元测试)是针对一个模块而言的,通常采用先白盒测试再辅以黑盒测试。
(暂时先记这一些,到时候再补充)