`
liuguofeng
  • 浏览: 450481 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

浅谈即时验收在敏捷开发中的应用<转载>

 
阅读更多

http://xiaoqing.me/2009/10/05/ba-signoff/

这是2008年底写的一篇关于即时验收(即常说的BA sign off)的文章,原文发表于《程序员》杂志。从去年刚开始加入ThoughtWorks,对敏捷懵懂了解,到现在随着经历的增多,对敏捷的了解也有了越来越多的体会。即时验收是敏捷中很小、很容易被人忽视的实践,甚至很多人都不知道。但我参加了几个项目之后,越来越体会到了即时验收的重要性:每当项目中的bug数量明显增多,我都会提醒自己以及团队:是不是忽略了BA sign off这一环节?

敏捷软件开发相对于传统软件开发过程,在生产效率、 项目质量、成本控制等方面均有不同程度的改进与创新。这得益于敏捷开发方法中许多好的实践,仅技术相关的最佳实践就有结对编程、测试驱动开发、持续重构与持续集成等。这些实践可以提高代码质量、提高生产效率,并最终提高项目按时交付的成功率。敏捷实践中还有另外一个比较好的实践──即时验收,它可以尽早检 验代码实现与业务需求是否契合并能协助及时发现、修复并验证bug,从而有效地提高开发效率、保证质量。

什么是即时验收

即时验收也叫BA signoff,是指迭代开发过程中,每个story开发完成以后,开发人员并不马上开发下一个story,而是由BA快速验收测试。如果验收时发现了明显的bug,或者验收条件没有达到,开发人员可以立即进行修改。如此反复,直到BA验收通过为止。 具体说来,其一般步骤包括:

  • 开发人员初步完成story的开发;
  • BA在开发环境进行验收;
  • 在BA的快速验收过程中,如果发现明显bug或代码实现没有完全覆盖story中的全部业务逻辑,则开发人员立即修改代码以修复bug、补全业务逻辑。重新从步骤1开始;
  • 在BA的快速验收过程中,如果没有发现bug,则开发人员可以提交代码,认为此story开发完成,进入迭代中的下一步骤:产品环境中的测试。 在即时验收过程中,特别强调简单和快速:一是验收直接在开发机器上进行,不需要搭建产品环境;二是BA不需要测试每一个细节,而只关注于story的基本功 能是否实现、开发人员是否无意中漏掉了某些情况、写入story中的验收条件是否全部满足等问题。除此之外,如果发现一些没有写入story中的业务逻 辑,也可以由BA和开发人员甚至客户讨论是否修改。 一般来说,即时验收花费几分钟到十几分钟的时间即可完成。

即时验收与QA测试的区别

即时验收强调的是简单和快速,这是为了与QA的测试区分开来,因为它并不能取代QA的测试,而是对QA测试的一个有益补充。从实践上来看,它与QA测试的区别在于: * 即时验收是在开发者的机器上(也即开发环境下)进行,而不需要重新部署测试环境(即模拟的生产环境);

  • BA不需要准备测试用例以及复杂的测试数据,只需通过鼠标点击或其它简单的方式验收。而QA一般需要准备详细复杂的测试用例以及完备的测试数据,按照测试用例的步骤测试;
  • BA发现问题之后,不需要创建bug,直接由开发人员修复。而QA测试一般需要创建bug,通过bug跟踪管理系统进行修复、验证与关闭;
  • 从时间上来说,即时验收是在story刚刚开发完成以后立即进行,可以立即收到BA作为用户业务代表的质量反馈。而QA一般会有自己的测试计划,测试会比story的开发完成滞后一定的时间段,反馈也会较慢。

为什么采用即时验收

那么,采用即时验收有什么好处呢? * 充分发挥了BA对story的业务理解与把握。一般情况下,BA对story了解的更全面、更接近于真实用户。BA可以从业务用户代表的角度对story进行验收,利于检验代码实现是否契合业务需求; * 即时验收使得反馈更及时。传统软件开发中,很可能在项目完成以后才能收到客户的反馈,而这时的反馈对开发人员的代码修改来说往往是费时而致命的。敏捷采用 迭代式开发,每次迭代都可以有可运行的产品让客户体验,并根据用户反馈进行及时修改。而即时验收让反馈更及时,频率更高。如果开发现场有客户合作并且愿意 协助进行即时验收,那么用户反馈的效果更好;

  • 以最低的成本尽早发现并修复bug。在开发过程中发现的bug是最容易修复的,因为此时代码的逻 辑对开发人员来说新鲜而清晰。及时验收中BA不需要部署测试环境,也不需要像QA一样通过bug跟踪系统创建bug,包括录入复杂的bug主题、重现步骤 以及优先级等。开发人员当时就能明确bug的所在,不需要根据描述重现bug或找QA确认bug。这不仅仅节省了大量时间和人力,也尽早发现了潜在的 bug,并以最低的成本修复,确保了QA在产品环境下测试的代码的基本功能与质量;
  • 能够提高代码质量和开发效率。BA的即时验收与QA的测试,双重保证了发现问题和bug,从而有效提高代码质量。通过提前发现并修复bug,减少了后期QA测试阶段发现的bug量,可以减少陷入开发-测试发现bug-修复bug-再测试-再修复的糟糕循环的几率。 即时验收的以上优点,充分体现了它在敏捷开发过程中的重要性。当然,即时验收也有一些问题需要注意: 首先就是把握好尺度。每个story完成以后,可以花费几分钟到十几分钟进行即时验收。从花费的成本与获得的收益来说,是完全值得的。但是如果即时验收花费的时间过长,反而造成时间和人力成本过高,可谓过犹不及。 其次,即时验收不是BA一个人的事情,需要开发人员的支持和配合。双方一起验收,一起讨论交流,会使得验收过程更加顺利并能发现更多bug。 除此之外,分布式团队如何使用即时验收?每一边的分布式团队最好拥有自己这边的BA(事实上绝大多数的分布式团队都有自己这方的BA),保证每个story开发完成以后,都可以进行即时验收。 即时验收在实际项目中的应用介绍

结论

即时验收作为敏捷开发过程的一个重要实践,对提高敏捷开发效率有重要的作用。但是在实际的敏捷开发的实践过程中,有的团队为了节省时间,有意无意间忽视了这一最佳实践。

即时验收的本质是投入尽可能低的成本,收到尽可能快的反馈,尽早的发现并修复bug,从而达到提高生产效率、保证产品质量的目的。希望所有的敏捷团队都能尝试或者坚持(如果已经在使用)这一实践,体验即时验收给项目带来的好处。

分享到:
评论

相关推荐

    浅谈C#中ListT对象的深度拷贝问题

    一、List&lt;T&gt;对象中的T是值类型的情况(int 类型等) 对于值类型的List直接用以下方法就可以复制: List&lt;T&gt; oldList = new List&lt;T&gt;(); oldList.Add(..); List&lt;T&gt; newList = new List&lt;T&gt;(oldList); 二、List&lt;T&gt;对象...

    深入体验Java Web开发内幕

    &lt;br&gt; 本书深刻且通俗地揭示Java Web开发内幕,使您由内而外地明白使用Java进行Web应用开发的全过程——从XML基础知识到HTTP详述及相关体验,从用Tomcat配置Web站点到HttpServletResponse和HttpServletRequest的应用...

    vb控件开发 开发ocx

    浅谈用VB6.0编写BO程序&lt;END&gt; 47 , 47.txt 巧用Visual Basic的TIMER控件&lt;END&gt; 48 , 48.txt 取得控件绝对Top值&lt;END&gt; 49 , 49.txt 如 何 解 决VB 中 的Grid 控 件 的 打 印 问 题&lt;END&gt; 50 , 50.txt 如果自定义 MsgBox ...

    浅谈Vue.js组件(二)

    在子组件中定义一个名为`child`的组件,如果要在`child`组件中添加内容,需要在子组件的`template`中通过`&lt;slot&gt;`元素来占位。在父组件中,通过`&lt;child&gt;`标签内定义的内容会被渲染到子组件的`&lt;slot&gt;`元素位置。例如...

    Java 2核心技术,卷I:基础知识(第七版).part2

    Java基本的程序设计结构&lt;br&gt;3.1 一个简单的Java应用程序&lt;br&gt;3.2 注释&lt;br&gt;3.3 数据类型&lt;br&gt;3.4 变量&lt;br&gt;3.5 运算符&lt;br&gt;3.6 字符串&lt;br&gt;3.7 输入输出&lt;br&gt;3.8 控制流程&lt;br&gt;3.9 大数值&lt;br&gt;3.10 数组&lt;br&gt;第4章 对象与类&lt;br...

    浅谈c# 泛型类的应用

    - **子类中指定类型参数**:子类必须在继承时指定基类的类型参数,如`Node1 : BaseNodeGeneric&lt;int&gt;`是正确的,而`Node2 : BaseNodeGeneric&lt;T&gt;`和`Node3 : T`是错误的。 - **基类型约束**:从开放式构造类型继承的...

    Java 2核心技术,卷I:基础知识(第七版).part1

    Java基本的程序设计结构&lt;br&gt;3.1 一个简单的Java应用程序&lt;br&gt;3.2 注释&lt;br&gt;3.3 数据类型&lt;br&gt;3.4 变量&lt;br&gt;3.5 运算符&lt;br&gt;3.6 字符串&lt;br&gt;3.7 输入输出&lt;br&gt;3.8 控制流程&lt;br&gt;3.9 大数值&lt;br&gt;3.10 数组&lt;br&gt;第4章 对象与类&lt;br...

    浅谈SQL在VFP开发中的应用.pdf

    "浅谈SQL在VFP开发中的应用" SQL(Structured Query Language)是一种结构化查询语言,于1974年由Boyer和Chamberlin提出,并在IBM公司的关系数据库系统SYSTEM R上实现。SQL的语法结构类似于英语结构,易于学习和...

    ArcGIS_Desktop开发人员指南part1

    &lt;br&gt;&lt;br&gt;本书通过这个实例详细讲述了GIS和ArcGIS中的Why&How,&lt;br&gt;&lt;br&gt;详细讲解了每一步的处理过程以及相关截图,在此基础上&lt;br&gt;&lt;br&gt;讲述了这样做的目的和原理,可以说是在最好的实践平台&lt;br&gt;&lt;br&gt;ArcGIS9下,通过...

    ArcGIS_Desktop开发人员指南part3

    &lt;br&gt;&lt;br&gt;本书通过这个实例详细讲述了GIS和ArcGIS中的Why&How,&lt;br&gt;&lt;br&gt;详细讲解了每一步的处理过程以及相关截图,在此基础上&lt;br&gt;&lt;br&gt;讲述了这样做的目的和原理,可以说是在最好的实践平台&lt;br&gt;&lt;br&gt;ArcGIS9下,通过...

    ArcGIS_Desktop开发人员指南part2

    &lt;br&gt;&lt;br&gt;本书通过这个实例详细讲述了GIS和ArcGIS中的Why&How,&lt;br&gt;&lt;br&gt;详细讲解了每一步的处理过程以及相关截图,在此基础上&lt;br&gt;&lt;br&gt;讲述了这样做的目的和原理,可以说是在最好的实践平台&lt;br&gt;&lt;br&gt;ArcGIS9下,通过...

    ArcGIS_Desktop开发人员指南part4

    &lt;br&gt;&lt;br&gt;本书通过这个实例详细讲述了GIS和ArcGIS中的Why&How,&lt;br&gt;&lt;br&gt;详细讲解了每一步的处理过程以及相关截图,在此基础上&lt;br&gt;&lt;br&gt;讲述了这样做的目的和原理,可以说是在最好的实践平台&lt;br&gt;&lt;br&gt;ArcGIS9下,通过...

    网页html开发经典案例,easy

    网页标题通过`&lt;title&gt;`标签在`&lt;head&gt;`中设置,显示在浏览器的标签页上。而页面内容中的文本通常以`&lt;h1&gt;`到`&lt;h6&gt;`的标题标签组织,其中`&lt;h1&gt;`最大,`&lt;h6&gt;`最小。段落则用`&lt;p&gt;`标签表示。 三、链接与图像 HTML链接...

    浅谈PHP中数组的应用.pdf

    "浅谈PHP中数组的应用.pdf" PHP 作为一个主流的编程语言,在实际开发中数组是一个非常重要的数据结构。数组在 PHP 中的应用非常广泛,包括考勤系统、题库系统等。 PHP 数组的特点是采用 key=&gt;value 的存储结构,...

    深入浅出ja<x>vasc<x>ript(中文版)

    资源名称:深入浅出Javascript(中文版)资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    C#深入浅出全接触

    &lt;br&gt;二、Java与C#&lt;br&gt;三、C#的主要特征&lt;br&gt;四、安装运行环境&lt;br&gt;五、C#编辑器&lt;br&gt;六、C#的程序结构&lt;br&gt;七、C#和名称空间&lt;br&gt;八、C#中一个经典例程的编写与编译&lt;br&gt;九、C#编程实战演习ABC&lt;br&gt; 1、使用Visual Studio ...

    ArcMap编辑手册part2

    &lt;br&gt;&lt;br&gt;本书通过这个实例详细讲述了GIS和ArcGIS中的Why&How,&lt;br&gt;&lt;br&gt;详细讲解了每一步的处理过程以及相关截图,在此基础上&lt;br&gt;&lt;br&gt;讲述了这样做的目的和原理,可以说是在最好的实践平台&lt;br&gt;&lt;br&gt;ArcGIS9下,通过...

    c语言学习必备

    包含&lt;br&gt; c函数速查.chm&lt;br&gt; c语言编程宝典之一.chm&lt;br&gt; c语言教室.chm&lt;br&gt; c语言开发实例详解.rar&lt;br&gt; mfc深入浅出.chm&lt;br&gt; tc图形函数详解.chm&lt;br&gt; turbo c 2.0 函数中文说明大全.txt&lt;br&gt; vc++ 编程指南.chm&lt;br&gt; ...

    中国站长报改版 第一期

    &lt;br&gt; # 42个搜索引擎免费登陆入口大全 &lt;br&gt; # 网站赚钱联盟大全 &lt;br&gt; # 各大联盟最新公告 &lt;br&gt; # 浅谈个人网站的发展中的一些问题 &lt;br&gt; # 关于各个新联盟小联盟又起的感想 &lt;br&gt; # 如何建设成功的个人网站 &lt;br&gt; # ...

    C#邮件搜索王源码

    支持邮件地址批量整理,去除过滤重复或无效的邮件地址&lt;br&gt;软件架构:三层结构(表现层+商业逻辑层+数据处理层)&lt;br&gt;开发语言:ASP.NET + C#&lt;br&gt;数 据 库:SQL2000/Access2000&lt;br&gt;程序类别:WEB应用程序&lt;br&gt;该版特点...

Global site tag (gtag.js) - Google Analytics