一、“人力解放”的神话
谈起自动化测试,总是会有一些你不能忽视的人,要求你通过自动化减少手工重复劳动,节省手工测试工作量,将人力释放出来从事更有价值的工作........等等。这些人包括你的顶头上司,包括开发同事,甚至包括公司老板,没有一个是你可以忽视的。
但是在你投入大量人力物力把自动化测试做起来以后,你发觉测试团队更忙更累了,并没有像“那些人”所说的那样节省手工测试工作量。
你感到困惑了。为什么会这样呢?我什么地方做错了吗?
偏偏他们说的这些连你都觉得“确实如此”,更不会有辩驳的想法。
为什么不换个角度考虑一下,或许不是你做错了,而是一开始就有了错误的预期呢?
我们先看一下,“节省工作量”和“人力释放”的预期,到底从何而来。
关于自动化测试的收益,有一种计算方法一直很流行,也得到不少人的认可,该计算方法粗略归纳为如下公式:
ROI=Sn/Aa=(Am-Aa)/Aa。其中的ROI即投入回报率,
Sn是总收益,Aa是自动化投入成本,而Am则是若以手工执行这些测试用例所需要的成本。
换句话说,该计算方法所计算的自动化测试收益率=(手工测试成本-自动化测试投入成本)/自动化测试投入成本。
此处主要讨论测试执行的自动化,因此“手工测试成本”等于手工测试执行被自动化测试m个用例的工作量,自动化测试投入成本则包括开发、维护自动化测试所投入的工作量。
由于自动化测试不会仅运行一次,因此实际上的收益计算,不仅仅要计算m个自动化用例手工执行一次需要消耗的工作量,而且应计算用例执行n轮需要的工作量。即:
收益率=(n*Am-Aa)/Aa。
这样看来,自动化测试覆盖大量的用例,并且持续多轮运行,就应当能够带来很大的收益率——也就是可以节省大量人力。这跟我们一开始所提到的节省工作量、释放人力的想法一致。
首先我们要明确一点,“节省人力”是指在保证质量不变前提下,可以用自动化运行替代手工执行的工作量。换言之,上文收益率公式中的n应当是指在没有自动化介入的情况下,需要投入到这m个用例上的手工测试轮次。
以笔者所在的一个5人测试团队的经验数据作为参考,我们可以对字哦对自动化测试的收益进行简单的估算。
首先提供计算用到的基础数据(这些数据基本上是该团队经过5-6个Release版本的过程后积累的平均水平,具备一定的参考价值):
(手工测试)平均用例执行效率:100 cases/人月
(手工测试)Release测试执行工作量:60人月
(手工测试)重复用例执行投入:测试执行1/3工作量,即12人月
200自动化测试用例开发、维护成本:8倍手工执行工作量,即16人月
1000自动化测试用例开发、维护成本:5倍手工执行工作量,即50人月
2000自动化测试用例开发、维护成本:3倍手工执行工作量,即60人月
基础数据说明:由于自动化测试用例会反复执行,因此要考量其所节省的手工测试执行工作,也应当针对反复执行同样的测试用例所投入的执行工作量。而在一个常规的Release版本中,投入到反复执行同样用例的工作量在总工作量中应当不超过一定的比例。在我们这个团队中,这个比例被确定为1/3。