1. 介绍
很多领导将自动化测试视为银弹。他们认为自动化测试能解决诸如测试规划、测试成本、缺陷报告等很多问题。自动化测试在很多方面会带来积极的效果,并且已经有很多成功的案例能使人们认为自动化测试能节省成本和解决一些测试方面的问题。但是,同样存在很多恐怖的故事,失望大于期望、过程的痛苦,甚至出现在某些获得了收益的案例里。我就曾经遇到过很多自动化测试项目最终不幸失败的案例。这些项目进行了巨大的投入,最终都舍弃了花费数年的时间开发出来的自动化测试成果。
本文的目的就是基于有实际意义的指导,使人们能够理解和计算进行自动化测试工作所需的投入和可能获得的回报。它描述了在建设自动化测试的过程中将会遇到的诸如商务、组织和管理、以及测试工作方面的影响。
在规划自动化测试的时候,要从多方面来考虑。例如,自动化测试将会改变测试的复杂性,也将会改变从测试设计到测试运行的测试组织和管理方法。它通常在组织管理方面带来广泛的影响,诸如任务执行、测试方法、甚至在产品的特性上。
在考虑自动化测试的收益和能力上,我们可以将影响因素分为有形的和无形的两类。
在自动化测试的前后可以用现有的测量技术(例如代码覆盖分析)来评估和计算测试的效果。自动化测试可以达到非常有效的程度,可以增加代码覆盖的程度,可以提供一个新的角度来观察被测软件。同时,自动化测试为我们提供了一种手工测试无法实现某些特定测试的解决途径。自动化测试可以产生无数的指令和组合方式,仅仅受限于电脑的能力和可用来运行测试的时间而已。这些测试可以在覆盖了100%的代码基础上去发现缺陷。自动化的探针程序可以看到程序的内部,诸如中间处理的结果、内存中的数据、内部程序的状态,从而能判断被测软件是否能完成期望的功能。
2. 管理的观点
我们需要在多个方面设置管理上的期望值:无形成本和收益、不切实际的收益期望、手工测试和自动化测试的共同因素、组织的影响。我们也要注意测量和计算的方法。
无形成本是非常难于合理的计算的。在可衡量它们的点上,当我们确定它们的财务上的价值时会存在很大的变数。在衡量自动化测试能带来多大的改变时也很难计算实际的数值。通常情况下,有的无形成本是绝对的,有时是相对的,但是绝大部分是无法区分的,这要取决于一个人的观点和处理的方式。基于这个理解,建议在大多数的案例中,尽量将这些无形成本从投入回报比的计算中省去。
一些无形成本的例子:
1) 无用户干预的测试。尽管人的成本很容易计算,但是附加的计算机控制行为的成本是很难量化的。
2) 测试机构的经过改良的方法。这一点通常能提高生产力,但随之而来的是自动化测试所需的新规则和新任务。
3) 测试机构的可观察到的骤然生产力的降低。这个观察一般基于测试工作启动后人员开始逐渐增加时出现了停滞的现象,安装测试工具和创建自动化测试脚本的延迟。
4) 并非所有测试组里的人都期望改变。自动化测试会迫使个人习惯产生很大的改变,甚至某些测试人员在仍需继续执行手工测试时,还得进行自动化测试。
5) 发布前软件产品测试循环的次数。自动化测试能对产品的构建(Build)进行快速确认,并能鼓舞人们多次使用。但是往复循环虽然能提高生产力和提高质量,也可能导致人员的懒散、关注力逐渐降低、和质量逐渐降低的情况。
6) 测试覆盖率。既能增加测试覆盖率,也可能反之,主要取决于手工测试的效率,自动化的测试工具,和自动化的测试。
a) 某些测试只能用自动化测试来实现
b) 测试覆盖率改变的数值难于测量
c) 好的探索性的测试或许比一般的自动化测试更能发现一些不同寻常的情况
d) 手工测试可能使得某些情况或者环境难于进行自动化
自动化测试管理的期望值往往在设定上受到媒体、会议、厂商的大肆宣传、相关书籍上对自动化优点的宣扬。部分信息是准确的和可适用的,但是大部分信息是出现在某些特定的环境下,适用于某些特定的项目,并且被过分的强调了成功这个字眼。自动化测试不是一个银弹。它不能解决所有的测试方面的问题,需要进行小心细致的规划。不正确的期望会最终导致一个获得了收益的自动化测试变成了失败的案例。
例如:
1)所有的测试都要自动化。这是不切实际和可望不可即的。
2)从自动化测试获得立即的回报。某些自动化测试可能能看到立即的效果,例如Build测试,但通常情况下,回报总是在投入一段时期后才能看到。需要花费很多的时间和努力来创建大多数的自动化测试内容,而收效总是在一遍又一遍的测试运行之后才能获得。
3)零启动时间。将测试自动化是要花费时间的。要选择测试工具、搭建、安装,而规划和实现自动化测试则要花费数倍于手工测试的功夫。
4)自动化所有测试规划的内容。自动化测试工具无法做所有的事情。
5)使用录制/回放进行回归测试。这种情况仅适用于被测软件非常稳定,即将来只有极少的测试案例会发生改变。这种情况非常少。
6)自动缺陷报告(无需用户干预)。这通常会给测试的组织或开发带来很大的问题。包括判断是否与已有缺陷重复,错误的失效原因探测,一个错误引起多个测试的失效,无法重现的错误等等。
组织管理方面的影响包括设计自动化测试和执行自动化测试所需的技能、自动化测试工具、自动化测试环境。开发和维护自动化测试与手工测试之间是有很大的区别的。在建设自动化测试时,工作技能变了、测试方法变了,甚至测试本身也发生了变化。自动化测试还会对被测的产品、开发过程和发布过程产生潜在的影响。我们不得不仔细考虑和分析这些影响中的积极和消极的因素。
自动化测试若想成功,要从管理上设置合理的期望值,要正确地认识到将要从自动化测试中获得哪些益处。关键是要牢记自动化测试的目标是要在某些方面将测试做的更好。自动化测试仅仅是一个手段,借助这个手段来完成我们的任务—测试一个软件产品。在管理测试工作和向测试工作进行投入方面,成本/收益的分析向我们提供了非常有用的信息。
我们也要看到,不同的自动化测试实施行为将会带来好处,也会带来问题。例如,自动化测试将会减少测试所需的人力资源,从而节省运行测试过程中的人力耗费。但是,自动化测试也可能会产生各种各样的结果,需要耗费更多的人力进行分析,从而产生比手工测试更多的人力成本耗费。通常情况下,获得自动化测试的结果后,需要更长的时间去分析和隔离所发现的缺陷。
3. 投入回报比的影响要素
投入回报比(ROI)通常用获得的收益除以投入成本来计算。如果我们开始一个新的项目,我们就用测试的价值除以测试的成本来计算测试的投入回报比。有时,自动化测试的引入发生在手工测试已经完成的一段时间之后。
自动化测试的经济成本通常可以描述为固定成本或者可变成本。固定成本包括设备、工具、培训等。固定成本不受自动化测试的成果数量和运行次数的影响。而可变成本随着所开发出来的自动化测试的成果数量以及自动化测试的运行次数而增加或者减少。
自动化测试固定成本的例子:
1)硬件
2)应用软件的许可证
3)应用软件的技术支持
4)自动化测试环境的设计和搭建
5)自动化测试环境的维护
6)脚本开发工具软件
7)脚本开发工具的许可证
8)测试工具的培训
9)测试工具的引入和启动
自动化测试可变成本的例子:
1)自动化测试用例的设计
2)自动化测试用力的实现
3)自动化测试的维护
4)自动化测试用例的执行
5)自动化测试结果的分析
6)缺陷的报告
7)测试结果的报告
8)测试执行数据的保存
9)自动执行的测试
手工和自动化测试具备一些共同的要素。
共同要素的例子:
1)被测软件的分析
2)测试的规划
3)基础测试的设计
4)缺陷的报告
5)测试结果的报告的管理
我们在计算自动化测试的经济要素时,可以将它与两个事物进行比较:手工测试或不进行测试(接受未知的风险而不进行测试)。
在计算回报时,我们需要选定计算的时间周期(t)。通常情况下,可以根据一个项目的里程碑来确定计算的时间周期。而且,自动化测试的回报是发生在新版本发布之后的,也可以基于版本的发布来确定计算周期,同时要与下一个版本发布、下下一个发布保持一致。以这两种计算周期来计算自动化测试的回报,可有助于我们非常清楚的了解长期和短期的自动化测试收益。
自动化测试的固定成本不是绝对值。这些成本需要在他们的有用生命周期内进行阶段性的分配,并且用时间周期(t)来调整。t的值要基于管理因素进行选择,例如产品发布之间的时间间隔、ROI的计算、对工具使用寿命的期望、对测试的寿命的期望等等,以达到使t值被计算时的合理性、有用性和简易性。这些成本的分配是以成本乘以t