软件测试:自动化与人工测试的权衡及实践
在软件测试领域,自动化测试常常被视为如同自动化制造一般,让计算机像人类思考者一样执行精确的任务。然而,实际情况并非如此简单。
自动化测试的局限性
我们以一个简单的应用程序测试脚本为例:
1. 在第一个框中输入 4。
2. 在第二个框中输入 4。
3. 从操作下拉菜单中选择“乘法”选项。
4. 点击“提交”。
5. 期望答案框中显示“16”。
当我们让计算机执行这些步骤时,就称之为自动化测试。但问题在于,每个以这种方式记录的测试用例末尾都隐藏着第二个期望:“并且没有其他异常发生”。
处理“没有其他异常”的最简单方法是捕获整个屏幕并比较运行结果,但只要开发者移动一个按钮,或者更改屏幕分辨率、配色方案等,软件就会抛出错误。如今,更常见的做法是只检查精确的断言,这就会导致错过一些问题,例如:
- 图标背景颜色不透明。
- 提交后,操作下拉菜单变回默认的“加法”,显示为“4 + 4 = 16”。
- 输入第二个值后,取消按钮变为禁用状态。
- 答案框本应禁用(变灰)却可编辑。
- 操作耗时八秒才完成。
- 生成的新页面答案正确,但输入的第一个值被清零,显示为“0 + 4 = 8”。
一个有思考能力的人类测试人员能立刻注意到这些问题,而计算机却做不到。此外,如果需求允许结果在十秒内返回,人类可以注意到简单乘法运算刚好在容差范围内,并可能尝试使用大数或复杂运算来发现其他错误,计算机却无法做到这一点。
不同类型的缺陷及解决策略
在实际的软件项目中,存在着各种各样的缺