介绍:

因为我们的开发周期是迭代进行的,以Sprint为单位,我们每个 Sprint如何去和客户说我们的成果呢,那么我就需要Demo和release一些新功能,或者一些bug fixing。Demo我这里不讨论了, 大体上就是部署都服务器上然后运行下给meeting的所有人看下,我们这里主要讨论和发布(release)有关的话题。

实现方式:

话题1:我们如何让发布者知道我们这个Sprint做的功能?因为就像jdk一样,它的每次大的release和小的release都有一些评注来说明他们这次发布有哪些功能,或者哪些修正,我们一样,我们的做法是:

在每个Sprint的结束日,如果对项目有任何变更(功能改变/修正) ,都会在项目中加一个release note.

具体的做法是:我们采用了maven-site-plugin,然后每次我们都会更新site folder,在site.xml中加一个条目到"Release Notes"中:

然后我们加一个apt文件,并且在其中加上release notes

现在我们用mvn site,就可以显示这些我们写入的release notes 了。

话题2:选择合理的release plan

我 们何时去release artifact,这是一个很困难的问题。也许有人想简单了,这不就是把版本号升级下,然后build一下不就完事了么?你差的远呢。 因为你要发布一个项目,不是操作那么简单,你必须对于这个项目的质量有很严格的把关,也就是说你要确保它的正确性,所以我们必须先把产品在某些环境上做 Regression ,如果Regression没问题,我们还要往更高层的环境上做Regression ,直到几个环境的Regression 都没问题了,我们才可以放心大胆的去Release. 具体说,我们有4套环境,分别是Dev,  DevInt,QA ,Production,我们必须一层层往上走,都没问题了,我们才可以最后的Release并且发布都Production环境中。那么问题来了,因为 Release要动代码仓库,而我们的开发是迭代进行的并且是时刻不停的,如果Release团队发布项目时候开发人员又对同一个仓库提交了代码,就会导 致代码的不一致性导致发布失败。我们现在也没有严格的code freeze制度,因为这种制度多半是在瀑布模型中的,我们的开发不能停,那么如何选择恰当的Release时间点呢?这就是Release Plan要解决的问题。

这个问题很复杂,当时我应邀去设计Release Plan时候,我足足想了2天才拿出一个合理的方案,这里毫无保留的共享下,具体结构如下:

这张图中,黄色的状态条代表了开发团队,绿色的状态条代表了测试团队,在每个Sprint中,我吧10天分成了N+1到N+10,其中N代表在第N个Sprint,蓝色文字代表开发团队的动作,紫色文字代表测试团队的动作,红色文字代表release的人的动作。

所 以从上图不难发现,对于开发团队来说,他们的主要开发日期是从(N+3)到(N+9),一共7天,这七天他们做开发,所以会去碰代码仓库,而对于前2天 (N+1),(N+2)和最后一天(N+10),他们都是做一些和代码无关的事情,所以不会去影响到代码仓库。所以我的建议是,让release的人在 Dev和DevInt上做release和Regression的时间控制在(N+1)和(N+2),因为这两天代码仓库的稳定性是可以保证的,然后当开 发人员从N+3开始提交代码后,releaser做QA和Production环境的release和regression,这样不会影响开发团队提交代 码。

风险和经验分享:

其实最大的风险是对于开发团队,万一API或者UX Spec不是很明确,或者不稳定,这样他们的开发时间就会推迟,也许不一定从(N+3)开始了,对于这些情况,我的建议是,如果在(N+1)天遇到了这些 各种开发的不利因素,那么尽可能在(N+3)之前全部解决,如果能解决,那么最好,如果不能解决,那么scrum master可以砍掉一些story,这样至少可以保证开发团队的按时交付。

还有,就是万一release失败了怎么处理?我的建议是:如 果release或者regression失败了,那么代码会返回到开发团队的手里,然后变成一个urgent fix 的活动。如果开发团队足够给力,他们可以在N+1就解决了,那么万事大吉,如果到N+2才解决,那么开发团队就要推迟一天开发,从N+4到N+9,这就需 要他们适当提高效率,事实上我们在工作量预估时候也都加了很多buffer时间。如果到N+3了还没解决,那么releaser就停止release,并 且宣告N-1迭代的release 失败,然后等2星期再进行新一轮的release. 只有这样,才能保证整个流程的顺畅。

总结:

Release是一个非常重要的步骤,我们必须把好这一关。

(1)Release的过程我们可以用release插件并且加好足够详细的notes方便以后去追踪项目的演化。

(2)设计一个非常行之有效的release plan非常重要,关键立足点是各种角色之间要不交叉,不相互block,没有plan的release会让项目弄的一团糟。

本文出自 “平行线的凝聚” 博客,http://supercharles888.blog.51cto.com/609344/1262090

敏捷软件开发实践-Release Process/Release Plan(转)的更多相关文章

  1. 敏捷软件开发实践-Code Review Process(转)

    介绍: 在敏捷软件开发中,从代码的产生速度上来看,要比 传统Waterfall产生速度高很多.因为我们把时间安排的更加紧凑了.那么这么多的代码,如何能保证这些代码质量呢?很多人可能直接想到静态代码检测 ...

  2. 敏捷软件开发实践-Sprint Retrospective Meeting(转)

    介绍: 在敏捷开发模式中,Sprint Retrospective Meeting 也是一个必不可少的环节,它通常发生在每个Sprint的结尾,其主要作用是对于当前的迭代周期做一个阶段性的总结,包括好 ...

  3. 敏捷软件开发:原则、模式与实践——第14章 使用UML

    第14章 使用UML 在探索UML的细节之前,我们应该先讲讲何时以及为何使用它.UML的误用和滥用已经对软件项目造成了太多的危害. 14.1 为什么建模 建模就是为了弄清楚某些东西是否可行.当模型比要 ...

  4. 敏捷软件开发:原则、模式与实践——第12章 ISP:接口隔离原则

    第12章 ISP:接口隔离原则 不应该强迫客户程序依赖并未使用的方法. 这个原则用来处理“胖”接口所存在的缺点.如果类的接口不是内敛的,就表示该类具有“胖”接口.换句话说,类的“胖”接口可以分解成多组 ...

  5. 敏捷软件开发:原则、模式与实践——第10章 LSP:Liskov替换原则

    第10章 LSP:Liskov替换原则    Liskov替换原则:子类型(subtype)必须能够替换掉它们的基类型(base type). 10.1 违反LSP的情形 10.1.1 简单例子 对L ...

  6. 敏捷软件开发:原则、模式与实践——第8章 SRP:单一职责原则

    第8章 SRP:单一职责原则 一个类应该只有一个发生变化的原因. 8.1 定义职责 在SRP中我们把职责定义为变化的原因.如果你想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责.同时,我 ...

  7. 【Scrum】-NO.40.EBook.1.Scrum.1.001-【敏捷软件开发:原则、模式与实践】- Scrum

    1.0.0 Summary Tittle:[Scrum]-NO.40.EBook.1.Scrum.1.001-[敏捷软件开发:原则.模式与实践]- Scrum Style:DesignPattern ...

  8. 《敏捷软件开发-原则、方法与实践》-Robert C. Martin读书笔记(转)

    Review of Agile Software Development: Principles, Patterns, and Practices 本书主要包含4部分内容,这些内容对于今天的软件工程师 ...

  9. 敏捷软件开发:原则、模式与实践——第13章 写给C#程序员的UML概述

    第13章 写给C#程序员的UML概述 UML包含3类主要的图示.静态图(static diagram)描述了类.对象.数据结构以及它们之间的关系,藉此表现出了软件元素间那些不变的逻辑结构.动态图(dy ...

随机推荐

  1. jsp简单实现统计在线人数

    通过重写HttpSessionListener接口实现 //session操作类 public class SessionMap { private static Map<String,Http ...

  2. Java之JVM调优案例分析与实战(5) - 服务器JVM进程奔溃

    环境:一个基于B/S的MIS系统,硬件为2个CPU.8GB内存的HP系统,服务器是WebLogic9.2(就是第二个案例中的那个系统).正常运行一段时间后,最近发现在运行期间频繁出现集群节点的虚拟机进 ...

  3. Tomcat 改服务器编码(Java 修改字符串编码格式)

    对于客户端发来的汉字,我们一般需要转码: ------------------------------------------------------------------------------- ...

  4. Android系统源代码学习步骤

    目前,互联网行业正在朝着移动互联网方向强劲地发展,而移动互联网的发展离不开背后的移动平台的支撑.众所周知,如今在移动平台市场上,苹果的iOS.谷歌的Android和微软的Windows Phone系统 ...

  5. checkbox显示选中内容个数

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. Linux的内存映像导出接口—kcore

    发表于 2012-4-10 15:00   /proc/kcore文件提供了整个机器的内存映像,和vmcore不同的是,它提供了一个运行时的内存映像,为此和vmcore一样,内核提供了一个类似的但是稍 ...

  7. spring的注解形式:@Repository、@Service、@Controller,

    Spring的注解形式:@Repository.@Service.@Controller,它们分别对应存储层Bean,业务层Bean,和展示层Bean. @Repository.@Service.@C ...

  8. BAT解密:互联网技术发展之路(5)- 开发层技术剖析

    BAT解密:互联网技术发展之路(5)- 开发层技术剖析 1. 开发框架 在系列文章的第2篇"BAT解密:互联网技术发展之路(2)- 业务怎样驱动技术发展"中我们深入分析了互联网业务 ...

  9. AutoFac文档13(转载)

    目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 属性注入 属性注入使用 ...

  10. php图片采集后按原路径保存图片

    php图片采集后按原路径保存图片. 代码: <?php $domain ='http://www.jbxue.com'; $url = '/newskin/images/v4/logo.jpg' ...