SCMLife.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2929|回复: 0

[推荐] 自动化测试收益评估实践

[复制链接]
发表于 2012-6-18 17:14:04 | 显示全部楼层 |阅读模式
本帖最后由 iamtester 于 2012-6-18 17:15 编辑 7 y% u# |9 L. t- W
7 k! l9 u$ f! B) [+ v+ m/ s
 自动化测试是一项“一旦开始,就需要持续投入”的工作,所以它一直是测试领域的一块鸡肋。不做吧,好像手工测试重复得让人有些厌倦,而且手工测试时间也缩短不了。做吧,害怕投入的比回报要多。
* w& @- d* ?  l) v( h0 ?/ C
# r4 C% V: A/ F+ G, ^. m- _& m  没实施自动化的团队有各种各样的困扰。有的说:“项目有太多的老代码需要补充自动化测试脚本,补不起!”有的说:“项目开发太紧张,如果同时还要自动化,等不起!”还有的说:“自动化测试工具太贵了!买不起!”确实,各种各样的“伤不起”使得大量的组织在“要不要自动化”这个问题上总在了解和观望,踌躇不前。* N# {6 }1 u1 `5 r
3 }; {% @$ e2 d1 C, j' x% o
  我们阅读了一些关于自动化测试ROI的文章,发现大多都是介绍各种不同的计算方法,但来自实际的数据分享比较少。所以,2011年当我们组织想推行自动化测试的时候,为了打消大家(尤其是管理层)对于自动化测试的投入和产出方面的疑虑,计算我们自己的自动化测试投资回报率ROI(Return on Investment)成了我们启动时就考虑的问题。本文将分为四部分介绍我们的实践方法和结果。
" M2 v3 C* w& I$ @, A/ {5 w; B4 V4 K4 M1 Z, j
  第一部分:业界计算自动化测试ROI的方法
, P# ^5 S; T  Y" B2 }# ~7 v: [  @. b+ I, q
  简言之,ROI = 收益/投入。但收益如何计算,投入包括哪些,众说纷纭,并没有一个定论。
+ r: i5 R1 x) T: a& ]8 `; k3 Q0 C7 r4 T
  在Dion Johnson的“test automation ROI”中给出了三种计算自动化测试ROI的方法。第一种方法“简单ROI”着重从“钱”的方面去看。它考虑了工具、培训、机器等各种费用,并把测试时间的投入通过单位时间的工资转化成为钱。第二种方法“效率ROI”与第一种方法不同的是从测试效率的角度,只考虑了时间投入所产生的收益,而没有考虑其它如购买工具方面的投入。这个方法比较适合测试人员计算收益。第三种方法“降低风险ROI”着重计算自动化测试与手工测试相比在降低风险方面的收益。它会假设不做某种自动化测试,相关的风险一旦成为事实所带来的损失,从而计算ROI。这个方法比较适合管理人员从整体考量自动化的收益。
$ V1 ~5 j# k- i
- v6 i% X/ }  B0 e  那么,目前我们的团队期望自动化测试能带来哪些收益,尤其是哪些收益是目前不能奢望的?我们的经理愿意提供多少资源投入自动化测试呢?带着这些问题,我们开始了自己对自动化测试ROI的定义和度量。1 O0 [6 ?. L- \) R! R
$ X' y6 \2 o% V$ B
  第二部分:我们计算自动化测试ROI的方法
2 h: F- }% m% A+ I2 W7 c5 H+ s5 Z' P6 h( X0 |! H# _
  在度量自动化测试的收益方面,角度很多。我们选择的是从“多、快、好、省”四个方面去看。9 k; {. g7 y. T( t) [+ j4 L+ |
  ^7 o+ k. P8 r
  更多
$ a: Q9 N$ v' {) w- K
2 ?7 h+ S7 `9 O+ @; e  鉴于我们处于自动化测试的初级阶段,我们打算暂时先不去追求“更多”。即我们不奢望一年之内整个项目组在一个版本里做更多的工作,因为在自动化投入初期难以提高团队的生产力。我们也不奢望测试人员马上能有更多时间去做更有价值的工作(相对于一次测试的多次重复执行)。因为测试人员通过自动化测试从测试执行上节约出来的时间需要投入到自动化工具和技能的学习上去。
% S% W- |* H% D: ]7 Z+ W+ e! P* d8 e2 N0 o3 n  ~+ K
  更快8 A6 z; M! u, r; Y8 ~$ S  e) T
+ M% |) E3 D! T3 m+ ]/ e' b
  在时间维度上,我们希望能够更快地发现和修复稳定的主流程上的明显的严重缺陷。如果一个测试人员手工测试多个功能,那么测试执行的并行度总有个上限。而多个并行执行的自动化测试脚本可以更快速地验证版本,一次性地报告问题。这尤其在测试初期版本不稳定,或者是每日构建的时候有用。有时,甚至是在我们不觉得有测试必要的时候,自动化测试可以及时报告刚引入的问题。另一方面,更快地发现缺陷也意味着可能可以更快地修复缺陷。
, k4 e; O+ w6 k" r2 r1 |6 C0 x# a5 M$ i' b' N# X, D2 _& N  l
  更好2 V. x3 J. ]* C9 |

/ q( r. F. b4 I* _  我们希望自动化测试可以帮助我们实现对“更好”的追求,包括质量、信心、士气三个方面。
8 }! {- J9 M$ }1 K1 ?& B& O" B, q' @) J7 H$ J
  1、更好的质量( l, X5 P- n/ ]6 m5 ]" m; c

, s0 A6 X( p- T- }9 l  更好的质量最容易被理解成为更少的缺陷。但这里需要强调的是“更少的缺陷个数并不仅仅能依靠我们基于界面的自动化测试来达到”。我们这里希望自动化测试能够帮助我们减少生产环境中某种特定类型的缺陷。这些缺陷包括环境或者配置相关的缺陷、在主流程上本来正常但因为后期修改影响到的功能、以及容易被忽略的地方(如:同一功能的多个入口、不常使用的功能)等。
; J3 z! x7 @1 _7 \
. H( ~( f9 E8 f6 g$ I  2、更强的质量信心- t( A: {# @. C1 l

( k+ L8 d7 |. f% ?  R  在内部测试中,我们希望借助自动化测试来提升的是对质量的信心。这主要体现在:(1)对于小版本和并行版本的质量更好地把关。小版本通常要求更快速的响应。并行版本通常要求测试人员频繁切换环境和被测对象。而人在压力下也更容易犯错。所以,我们常碰到的是匆忙中由于疏忽,一些比较重要或者明显的问题没有被及时发现。(2)对缺陷修复的质量更好地把握。根据统计,大约7%的缺陷修复会产生新的缺陷,而这些新缺陷有时会出现在前面已经测试过并且不会再手工测试的地方。对于如上两种情况,重复利用自动化测试脚本可以不需要额外的投入,快速得到关于整个版本稳定性的信息和质量信心。
8 |# d4 {8 r0 |. I8 ?; b8 x8 X( p3 T: ~; ^9 N3 B
  3、更高的士气, w3 G7 f) G2 A

( e  ?/ @0 |0 [" D, Y  对于测试团队,我们希望自动化测试可以唤起更高的工作热情。这一方面来自于可以部分地将测试人员从大量重复的测试执行中解放出来,另一方面来自于新技术、新工具带来的新鲜感。开发团队和终端用户会是自动化测试的间接受益者,因为开发团队能感到问题会更快地暴露出来,终端用户会感到应用程序更稳定了。甚至在不远的将来,如果测试时间可以借力自动化而缩短,那么用户希望的功能也能更快地交付使用了。) z3 e( r! a9 D4 Z# X# Z0 k

" \  M% i6 [  R 更省4 y7 i- P" \8 m

* f4 D8 d; `3 X6 Q1 s; a  有了自动化测试,我们希望能省去以下工作:1、在每日构建后不需要手工验证版本的可测试性;2、在非需求(硬件、其它软件)变更的时候,尽量少的(甚至没有)手工主流程测试;3、在上线支持方面的不需要手工批量操作。
7 C5 e7 ]6 }$ I' S) O; W& i) D
2 K3 _5 e9 O: p! E& i1 m3 g3 l) p  从上面的“多快好省”的分析中,我们明确了目前这个阶段我们希望从自动化测试中获得的主要收益,也发现了其中有些收益并不好度量。简单起见,我们决定记录可以量化的收益如下:
& p7 p2 Y7 d1 R" G1 }, _, X6 p# R# Y/ y( L. ?2 I% h3 U9 c" Y
  节省的测试人力:如果需要手工执行自动化测试案例覆盖的功能,那么需要多少人力。这个数据乘以自动化测试执行的次数,代表节约的手工测试人力。
) d7 X! P/ N8 m/ v7 z6 F4 V# Y4 J* A, w- m  D. x
  发现缺陷的收益:对于自动化测试发现的缺陷,根据其发现的阶段设定不同的权重,并折算成它的风险收益。根据“持续交付”一书提到的理念,持续集成中“常红”或者“常绿”都是不正常的状态。类似地,我们认为自动化测试应该在验证版本基本正确性(绿)的基础上增加一些可能失败(红)的脚本/数据。因此我们将发现内部缺陷当作我们希望的自动化测试收益。% m. R4 C! v! X+ n, D- b* E, f

- p" g3 @& D' _" i  o  自动化测试的投入这一方面,因为测试工具已经购买而且是共享的,硬件方面也是利用已有资源,我们选择只考虑人力方面的投入,包括测试人员和开发人员一起投入的人力。因为开发人员有时会和测试人员一起解决自动化脚本的技术问题以及环境问题,如果其投入超过一定数量,我们将纳入计算。当然,测试人员的投入占绝大部分。为此,我们设计了一个表格,要求测试人员如实填写自动化测试的相关时间投入。除了时间,还需要记录其对应的类别,如团队学习(开会、培训)、个人学习(学习、研究)、测试用例设计、脚本开发与维护、环境等。做类别的区分主要是想看看剥离掉前期学习部分,每个版本在脚本维护方面的平均开销是多少。
2 J: X0 `% b1 o: }& t8 ^5 h. }' _+ q. b* I4 h& s' c2 i
  第三部分:我们的结果6 a7 y- G" |- |+ c5 \/ i

* O( u- n) q' f  在首个半年的实施中,我们多个项目都实现了基于QTP的主要业务流程的自动化。我们的投入和收益实际情况如下:( @( \4 Y4 M$ E$ b. x

/ i( d; c6 L8 a3 g  o3 o
QA人数 自动化测试投入(man*hour) 自动化测试带来的收益 (man*hour)
项目1 3 160 40
项目2 3 19032
项目32 16133
( H& X, c  k9 o, Q8 L- g
0 r7 G6 b# V% n# I- L' R' S
  从上述数据中我们可以看到自动化测试的收益并不高。这迫使让我们思考下一步如何才能获得更多的收益。而我们也马上产生了许多具体的想法。1、提高执行的次数。这可能需要我们把自动化测试和每日构建集成起来。2、在增加发现缺陷可能性方面,可以(1)利用现有的自动化测试脚本,但增加数据的多样性,这样脚本方面投入不大,但能增强发现缺陷的可能;(2)增加现有脚本的检查点,发现更多可能的缺陷;(3)分析缺陷,增加对容易聚集缺陷的相关功能的覆盖。3、优化脚本:对脚本的结构进行优化,提高复用性、灵活性、易维护性;加强脚本的稳定性和健壮性,提高其正确执行的概率。% r3 c9 v/ t/ g4 G! M9 [
1 e. u0 E) P3 Y! m9 p3 Q/ Q. x
  接下来,我们尝试了自动化测试脚本和版本构建的持续集成,增加了测试数据的多样性,并随着项目的变化对原有脚本进行了必要的维护。与此同时,我们的项目也意外地碰到了多次硬件设备迁移,软件(操作系统、数据库、底层构架、第三方控件等)版本更新,以及小版本和并行版本的测试。此时我们都借助于自动化测试脚本,迅速地验证了版本,发现了一些缺陷,在项目组面临巨大的时间压力的时候提升了大家对质量的信心,项目经理开始纷纷表示对自动化测试的支持!自动化测试如同零存整取,平时挤一些时间去做,到了紧急需要的时候,那种雪中送炭的感觉真的很棒!
3 m% k4 x3 t8 S% G
4 @, G; C: c) Y( O* u; b0 h1 y  第四部分:结语
/ k$ e; G5 f* I" `, Y% v$ A7 y+ o+ p  [1 J$ Z$ G
  我们的自动化测试刚刚起步,度量的ROI结果也并不漂亮,但我们相信只要跨出了第一步,自动化测试的千里之行始于足下。
" u+ }' X. f% r  G9 Q% J
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

SCMLife推荐上一条 /4 下一条

QQ|小黑屋|手机版|无图版|SCMLife.com ( 京ICP备06056490号-1 )

GMT+8, 2019-9-22 16:54 , Processed in 0.060636 second(s), 6 queries , Gzip On, MemCache On.

Powered by SCMLife X3.4 Licensed

© 2001-2017 JoyShare.

快速回复 返回顶部 返回列表