测试的基本概念和5要素
软件bug的主要原因:
是因为开发人员没有理解、预见或测试所有可以运行的软件环境。本章主要讨论程序猿引入的bug和运行环境导致的bug
测试人员需要保持的基本态度:
*“如何才能攻破这个功能”
*“是研发人员的合作伙伴”
*“是项目的首席风险官”
开发人员常有的态度:
*“如何才能实现这个功能”
*“我很辛苦的实现了我的功能,它是我的孩子,我已经花了很多心思”
自动化测试的问题:
1、代码运行的环境是一个测试环境,而不是一个真实的用户环境。
2、通常是根据已经发生过的bug来设计,很难提前预言
测试应关注:
*从测试策略的角度来说,需要明确测什么(方向和战略)和怎么测试(战术)
**单个单独的测试用例应该覆盖软件的哪些功能?哪些软件的功能必须放在一起测?应该先测哪个功能?如何决定哪个功能先测,哪个功能后测?如果一个项目中有多个测试人员,应该使用什么样的测试策略,以确保每个测试人员的工作相辅相成,而不是相互重叠?
*速度、规律、可重现
*测试要求精确,精确性主要是针对测试结果和对被测系统的熟悉
*但也可以允许一定的模糊和笼统,为了方便探索
*测试需要学会善用工具
决策分为5个部分:输入(input)、状态(state)、代码路径(code path)、用户数据(user data)和执行环境(execution environment)
输入:输入中使用选中的子集,通过推理认定是否这些输入已经足够了
*需要确定有哪些输入
*需要确定哪些输入值和其他输入有关联,确定如何覆盖
*输入这些值的先后顺序是否会导致问题
*特别注意测试错误处理代码,很多开发没有出错处理或者出错处理草草了事
*特别注意开发人员对输入的合法性检查,以及是否有途径可以绕过合法性检查
*注意出错时,显示的错误信息
*注意修改输入数据,导致函数的异常出错,来看出错处理是否出了问题
*找出相关的特殊字符,然后使用它们做测试输入值
*找出设计中所有的输入相关的假定,注意观察程序设计中假定的默认值不一样的数据或类似的数据
*注意输出,注意初始状态对输出的影响,注意是否需要重复运行几遍?
*注意根据属性和输出结果选择输入
状态:单个输入、一些输出或是全部输入都会被软件“记住”
*了解哪些数据被存储(如果可以深入代码层,可以考虑状态数据如何输出或保存可以更好的验证)
*持续不断的运行软件,中止运行,再运行软件
*了解哪些状态是临时的(比如程序终止时,该状态会被忘却);哪些状态是长期保存的,存储在哪?状态的生命周期有多长?
*了解哪些状态是会累加,考虑是否会发生溢出
*整理输入和状态之间的关系
*如果多个输入某种程度上相关联,那么它们可以考虑放在一起测试
代码路径:
*尽可能的提高代码路径的覆盖率(白盒测试和code review有绝对优势)
用户数据:
*和软件真实用户使用的数据尽量相似
*大数据量的情况和数据类型的分类
运行环境:
*使用的操作系统和当前配置
*包括运行在同一系统上会和被测软件进行交互的其他一些应用程序
*软件当前的网络情况、网络的可用带宽、性能等
*和被测程序共享一些模块的其他程序
以谦卑的心感受,以感恩的心生活