敏捷软件开发实践-Release Process/Release Plan(转)
介绍:
因为我们的开发周期是迭代进行的,以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(转)的更多相关文章
- 敏捷软件开发实践-Code Review Process(转)
介绍: 在敏捷软件开发中,从代码的产生速度上来看,要比 传统Waterfall产生速度高很多.因为我们把时间安排的更加紧凑了.那么这么多的代码,如何能保证这些代码质量呢?很多人可能直接想到静态代码检测 ...
- 敏捷软件开发实践-Sprint Retrospective Meeting(转)
介绍: 在敏捷开发模式中,Sprint Retrospective Meeting 也是一个必不可少的环节,它通常发生在每个Sprint的结尾,其主要作用是对于当前的迭代周期做一个阶段性的总结,包括好 ...
- 敏捷软件开发:原则、模式与实践——第14章 使用UML
第14章 使用UML 在探索UML的细节之前,我们应该先讲讲何时以及为何使用它.UML的误用和滥用已经对软件项目造成了太多的危害. 14.1 为什么建模 建模就是为了弄清楚某些东西是否可行.当模型比要 ...
- 敏捷软件开发:原则、模式与实践——第12章 ISP:接口隔离原则
第12章 ISP:接口隔离原则 不应该强迫客户程序依赖并未使用的方法. 这个原则用来处理“胖”接口所存在的缺点.如果类的接口不是内敛的,就表示该类具有“胖”接口.换句话说,类的“胖”接口可以分解成多组 ...
- 敏捷软件开发:原则、模式与实践——第10章 LSP:Liskov替换原则
第10章 LSP:Liskov替换原则 Liskov替换原则:子类型(subtype)必须能够替换掉它们的基类型(base type). 10.1 违反LSP的情形 10.1.1 简单例子 对L ...
- 敏捷软件开发:原则、模式与实践——第8章 SRP:单一职责原则
第8章 SRP:单一职责原则 一个类应该只有一个发生变化的原因. 8.1 定义职责 在SRP中我们把职责定义为变化的原因.如果你想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责.同时,我 ...
- 【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 ...
- 《敏捷软件开发-原则、方法与实践》-Robert C. Martin读书笔记(转)
Review of Agile Software Development: Principles, Patterns, and Practices 本书主要包含4部分内容,这些内容对于今天的软件工程师 ...
- 敏捷软件开发:原则、模式与实践——第13章 写给C#程序员的UML概述
第13章 写给C#程序员的UML概述 UML包含3类主要的图示.静态图(static diagram)描述了类.对象.数据结构以及它们之间的关系,藉此表现出了软件元素间那些不变的逻辑结构.动态图(dy ...
随机推荐
- JS生成EXCEL(Chrome浏览器)
直接使用js+Html生成excel文件,当前版本:chrome浏览器 <!DOCTYPE html> <html> <head> <meta charset ...
- Android API Guides---Tasks and Back Stack
一个应用程序通常包括多个活动.每一个活动应环绕行动的用户能够运行,而且能够启动其它活动的特定种类进行设计.比如,电子邮件应用程序可能具有一个活动,以显示新的消息的列表.当用户选择一个信息.一个新的活动 ...
- 算法笔记_021:广度优先查找(Java)
目录 1 问题描述 2 解决方案 2.1 蛮力法 1 问题描述 广度优先查找(Breadth-first Search,BFS)按照一种同心圆的方式,首先访问所有和初始顶点邻接的顶点,然后是离它两条边 ...
- JQuery 之CSS操作
JQuery 之CSS操作 设置 <p> 元素的颜色: 将所有段落的颜色设为红色 $(".btn1").click(function(){ $("p" ...
- vue 表单 验证 async-validator
1.使用插件async-validator async-validator 地址:https://github.com/yiminghe/async-validator 2.示例(vue+elemen ...
- oracle 存储过程 示例
oracle 存储过程 示例 CreationTime--2018年9月4日09点49分 Author:Marydon 1.情景展示 对VIRTUAL_QRCODELOG表的静态二维码,动态二维码 ...
- js 回调函数 精析
UpdateTime--2018年9月13日16点51分 1.什么是回调函数? 在JavaScript中,回调函数具体的定义为: 函数A作为参数(函数引用)传递到另一个函数B中,并且这个函数B执行 ...
- HDU1823-Luck and Love-二维线段树(模板)
题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=1823 好吧,给这题跪了. ..orz.... 一道非常基础的二维线段树的模板题: 可是细节非常多:尤 ...
- jQuery获取select中全部option值
<select id="language"> <option value="">请选择</option> <optio ...
- 多语言 SEO
https://productforums.google.com/forum/?hl=zh-CN#!topic/webmaster-zh-cn/I0MMsm737pc