很多领导将自动化测试视为银弹。他们认为自动化测试能解决诸如测试规划、测试成本、缺陷报告等很多问题。自动化测试在很多方面会带来积极的效果,并且已经有很多成功的案例能使人们认为自动化测试能节省成本和解决一些测试方面的问题。但是,同样存在很多恐怖的故事,失望大于期望、过程的痛苦,甚至出现在某些获得了收益的案例里。我就曾经遇到过很多自动化测试项目最终不幸失败的案例。这些项目进行了巨大的投入,最终都舍弃了花费数年的时间开发出来的自动化测试成果。
本文的目的就是基于有实际意义的指导,使人们能够理解和计算进行自动化测试工作所需的投入和可能获得的回报。它描述了在建设自动化测试的过程中将会遇到的诸如商务、组织和管理、以及测试工作方面的影响。
在规划自动化测试的时候,要从多方面来考虑。例如,自动化测试将会改变测试的复杂性,也将会改变从测试设计到测试运行的测试组织和管理方法。它通常在组织管理方面带来广泛的影响,诸如任务执行、测试方法、甚至在产品的特性上。
在考虑自动化测试的收益和能力上,我们可以将影响因素分为有形的和无形的两类。
在自动化测试的前后可以用现有的测量技术(例如代码覆盖分析)来评估和计算测试的效果。自动化测试可以达到非常有效的程度,可以增加代码覆盖的程度,可以提供一个新的角度来观察被测软件。同时,自动化测试为我们提供了一种手工测试无法实现某些特定测试的解决途径。自动化测试可以产生无数的指令和组合方式,仅仅受限于电脑的能力和可用来运行测试的时间而已。这些测试可以在覆盖了100%的代码基础上去发现缺陷。自动化的探针程序可以看到程序的内部,诸如中间处理的结果、内存中的数据、内部程序的状态,从而能判断被测软件是否能完成期望的功能。
2. 管理的观点
我们需要在多个方面设置管理上的期望值:无形成本和收益、不切实际的收益期望、手工测试和自动化测试的共同因素、组织的影响。我们也要注意测量和计算的方法。
无形成本是非常难于合理的计算的。在可衡量它们的点上,当我们确定它们的财务上的价值时会存在很大的变数。在衡量自动化测试能带来多大的改变时也很难计算实际的数值。通常情况下,有的无形成本是绝对的,有时是相对的,但是绝大部分是无法区分的,这要取决于一个人的观点和处理的方式。基于这个理解,建议在大多数的案例中,尽量将这些无形成本从投入回报比的计算中省去。
一些无形成本的例子:
1) 无用户干预的测试。尽管人的成本很容易计算,但是附加的计算机控制行为的成本是很难量化的。
2) 测试机构的经过改良的方法。这一点通常能提高生产力,但随之而来的是自动化测试所需的新规则和新任务。
3) 测试机构的可观察到的骤然生产力的降低。这个观察一般基于测试工作启动后人员开始逐渐增加时出现了停滞的现象,安装测试工具和创建自动化测试脚本的延迟。
4) 并非所有测试组里的人都期望改变。自动化测试会迫使个人习惯产生很大的改变,甚至某些测试人员在仍需继续执行手工测试时,还得进行自动化测试。
5) 发布前软件产品测试循环的次数。自动化测试能对产品的构建(Build)进行快速确认,并能鼓舞人们多次使用。但是往复循环虽然能提高生产力和提高质量,也可能导致人员的懒散、关注力逐渐降低、和质量逐渐降低的情况。
6) 测试覆盖率。既能增加测试覆盖率,也可能反之,主要取决于手工测试的效率,自动化的测试工具,和自动化的测试。
a) 某些测试只能用自动化测试来实现
b) 测试覆盖率改变的数值难于测量
c) 好的探索性的测试或许比一般的自动化测试更能发现一些不同寻常的情况
d) 手工测试可能使得某些情况或者环境难于进行自动化