软件测试的艺术_读书笔记(一)

软件测试的艺术是测试人员必看书,两年前看这本书给我很多理论和指导,现在重新看,按照个人的理解,整理一些学习笔记。

第一章 软件测试的心理学和经济学

最重要的一句话 : 测试人员的态度比实际测试过程本身更重要

1.1 测试的心理学

测试的误解

  1. 软件测试是证明软件不存在错误
  2. 软件测试是在于证明软件能够正确完成其预定的功能
  3. 软件测试建立了软件‘做了其应该做的’ 信心的过程

上面观点是对测试的误解,做测试不是为了验证软件没有问题,而是通过测试验证软件有问题,修改原来程序的错误,通过测试提升了软件价值,提高了程序的可靠性,稳定性,这才是测试人员的价值所在。

不要为了只是证明程序能够正确运行而去测试程序,相反应该一开始假设程序都是有BUG,测试就是尽可能多的发现BUG。

测试的定义 :测试是为了发现错误而执行程序的过程

心理分析  

如果测试心理开始认为程序不存在错误,潜意识中就会倾向于实现这个目标,可能选择较少导致程序失效的测试数据,容易漏测;另一方面,如果开始认为程序存在错误,心理上就会趋向于找到程序的错误,证明自己的判断,设计测试数据时有可能选择多种数据和方式,有可能更多的发现问题。

成功的测试用例 : 能够诱发程序发生错误,可以再某个方向上促进软件质量的改进

总结 : 没有不存在BUG的程序,只有未发现的BUG 

1.2 测试的经济学

 软件测试不可能发现所有的错误,因为不可能穷举所有有可能输入,软件测试不能完全测试.

1.2.1 黑盒测试

黑盒测试

      数据驱动测试, 输入/输出驱动测试, 测试目标与程序内部机制和结构完全无关, 重点判断程序是否按照规范输出;

测试判定标准

        穷举输入测试, 判断所有输出结果 。实际上,穷举所有输入是不可能的, 考虑到经济学,只能是选择部分有代表的输入数据,来判定结果;所以测试投入的目标在于通过有限的测试用例,最大限度的发现更多问题,以取得最好的测试效果。

常用方法  : 等价类,边界值,场景分析,因果图, 判定表,错误推断,正交实验设计,功能图

缺点  :对程序内部一无所知,只能发现80%的问题,20%的隐藏问题需要看运气。

1.2.2 白盒测试

白盒测试

      逻辑驱动测试, 允许检查程序内部结构,内部逻辑,测试需求是否满足设计。

测试判定标准:穷举路径测试 , 测试用例覆盖率程序中的每一条执行路径和控制流程,实际上,程序内部多处if判断,就会产生非常多的可能执行逻辑,所以不可能完全测试,只能选部分已知流程的路径,执行测试过程

白盒测试方法的要求 :

  1. 语句覆盖 : 程序中每条语句至少被执行一次
  2. 分支覆盖或判断覆盖 : 程序中的内一个分支至少走查一次,即每一条分支语句的真值判断执行一次,假值判断也执行一次
  3. 条件覆盖:当判定式中含有多个条件时,要求每一个条件的取值均得到验证
  4. 路径覆盖: 使程序沿所有可能的路径执行

所以白盒测试也不能达到完全测试,只能是通过有限的执行路径和条件判断,尽可能多的发现问题;

最终结论 :白盒测试和黑盒测试结合起来是一种最优的测试策略。

1.3 软件测试的原则

原则1:  测试用例中一个必需部分是对预期输出或结果的定义

预期结果没有提前定义,会有“所见即所想”,潜意识会希望看到正确的结果,预先定义可以克服这种心理倾向。测试用例必须包含的两个部分:

  1. 数据数据的描述
  2. 上述输入数据下正确输出结果的精确描述

        什么是问题 ? :认为某件事有问题,一定是关于某件事已经有了特定的认识,现在情况是不符合我的认知,这种认知差异或是认知失调就是问题

        如果对程序输出没有期望,就不会有所谓的意外,就不会有问题存在

原则2:程序员应当避免测试自己编写的程序

         1. 心理因素,下意识不想找出错误,认为自己的写的程序没有问题

         2. 无法改变思维方式来暴露自己程序中的错误

         3. 程序员有可能对需求理解错误,导致程序中存在错误

原则3:编写软件的组织不应当测试自己编写的软件

          原因同原则2

原则4:应当彻底检查每个测试的执行结果

          执行的结果有检查的不彻底,有可能错误本身就一直存在,但是被忽略了

原则5:测试用例的编写不仅应当考虑有效和预期的输入情况,而且也应当考虑无效输入和未预料到的输入情况

         软件暴露出来的许多问题是程序以新的或者未预料到的方式运行时发现的,所以未预料到的和无效的输入更能发现问题

原则6:检查程序是否“未做应该做的”仅测试了一般,测试的另一半是检查程序是否“做了不应该做的”

原则7:应避免测试用例用后即弃,除非测试软件本身是一个一次性软件

原则8:计划测试工作时不应默许假定不会发现错误

          测试不是证明软件正确运行的过程,而是为了发现错误而执行程序的过程,如果没有发现错误,只能说软件在目前认知范围内没有错误,未知认知范围内也有可能存在错误;

原则9:程序某部分存在更多错误的可能性,与该部分发现错误的数量成正比

         程序中80%的错误是20%的代码引起的

原则10:软件测试是一项极富创造性、极具智力挑战性的工作

         软件测试就是设计出合理的测试集,发现更多错误,需要创造性思维;

猜你喜欢

转载自blog.csdn.net/LoveG_G/article/details/112209998