现在大多数团队都在谈敏捷开发,似乎觉得敏捷是软件开发的银弹。只需要实践下一些敏捷开发的模式就能如何如何,其实我觉得不论是敏捷开发还是传统的瀑布流开发都是有他们的市场的,取决于团队人员构成,取决你的产品的属性,所在市场的竞争环境。最终希望达到的目的都是一个:以最快的方式、最高的质量,实现所需的需求。

我最近所在的两个团队都是移动研发团队,一个是在相对大型的外企内部面向企业级软件,一个是创业型团队面向消费级应用。第一个团队我们是从传统的瀑布流开发模式向Scrum转变而来的,第二个团队我主导整个研发团队,结合了Scrum以及Kanban的,采用的是混合型的开发模式。

Scrum实践

Scrum的基本概念我就不赘述了,希望快速了解的人可以一步到此

我谈下我们是如何操作的:

1. team角色的分配:产品,研发,Program Manager。产品提供业务的需求描述,MockUI。研发包括Scrum Master, Developer, QA,负责软件的研发测试。Program Manager负责整个项目的进度控制以及对外team的沟通协调等等。

2. 使用的工具:VersionOne用于整个Scrum开发的项目管理,后期我们换成了Jira Agile,主要是因为我们也用Jira来做bug Track,分散在不同系统管理也是挺复杂的。代码管理Github,文档管理Confluence,测试用例TestLink。

3. 流程:

我们以一个月作为一个release周期,每个月的15号到下个月15号,发布一般在下个月15号的那个周五。一个月分为3个dev sprint, 1个release sprint。

Release Planning阶段

Release kickoff meeting: 周期开始阶段,产品team负责解释未来一个release要做的功能。通常产品team是维护Epic,并且将Epic分解成backlog(具体需求),并排好backlog优先级。

Engineer backlog discuss meeting: 拿到backlog,研发团队就需要对backlog进行分析,理解需求,并能分解成Task (任务),并对每个task的工作量进行估计。这时会有两种方式进行工作量的估计,传统的人天,或者用Poker Points

人天的方式比较容易操作,大家熟悉也比较好理解,但这种方式是没有办法去衡量一个团队的生产力变化情况。对于一个固定人数的团队,在固定时间内可以产出的人天数是固定的。

Poker Point的做法是选定一个task作为基准,比如1分,然后评估其他任务的时候始终以这个基准作为参考给出相应的分数。这个时候其实需要注意避免一言堂,所以很多时候是通过出扑克牌的方式来达成整个团队的一致的,可以通过多轮的出牌,一定要整个团队都对这个分数表示同意为止。使用Point的评估方法相对难操作,但好处也是显而易见的,通过每个release point的数量可以非常明晰的了解团队生产力的变化。

这个阶段通常需要在1~2天完成,一个好的planning对于整个release的成功与否至关重要!好的开始以为着成功了一半!

Plan结束后我们会在VersionOne/Jira Agile系统中填入所有数据:

Epic Backlog Task Effort Developer
EP1 feature1 taskA 1 MemberA
    taskB 3 MemberB
  feature2 taskC 8 MemberA
EP feature3 taskD 5 MemberB
  feature4 taskE 3 MemberA

Development Sprint

Daily Scrum Meeting: 很多团队都是使用这个,每天的scrum站立会议,通常是每个成员介绍自己昨天的工作,今天的计划以及碰到了什么问题。这个会议一定要强调效率,15分钟内解决,所以超过10人的团队建议拆分分别开这个会议。Scrum Master在这个会议需要起到一个计时的工作,保证控制会议的节奏,如果碰到复杂问题一定要会后再讨论,不要陷入无休止的讨论中。

每人都要及时记录自己做的任务的情况,做了多少,还剩多少。这样可以产生一个非常有用的图表,Burndown Chart。这个图表可以很容易看到项目进展的情况。

在整个Dev Sprint里面,测试团队是和开发团队紧密合作的,测试应该是在整个开发周期最开始就介入,一起讨论需求,一起评估,同时写测试用例,不断进行新功能的测试以及迭代测试。理想状态下3个星期的开发周期内,开发和测试一直是同步的,3周内开发完成,新功能测试也基本能完成。

Release Sprint

这个阶段是为了稳定产品质量,为发布做准备。我们采用标准的Git flow来管理代码库。

在Release sprint开始的时候,我们会从develop分支checkout出Release分支。在Release分支只接受bug fix的commit,在develop分支依旧可以提交新功能,不过这时提交的新功能是要到下个发布周期才会发布的。

发布的标准:

1. 没有高优先级的问题

2. 没有regression的问题,就是以前版本是好的,新版本导致

发布时,将release分支的代码同时merge到develop和master分支,并在master分支上打上标签。

每个release结束后还需要retrospective meeting, 大家可以总结,并进行不断的改进。

Scrum是个相对完善的项目开发模式,各种工具也非常完善。我觉得需要注意几点:

1. 固定的发布周期:这样可以培养良好的开发迭代的周期性,同时也容易可以评估每个周期的效率。

2. 产品团队和研发团队的时间是不一样的,一般产品团队工作要提前1~2个星期,保证研发团队不会因为需求的不明确而影响效率。

3. 避免需求的变更,无论何种开发模式,需求的变更总是不可避免,所以最好是将周期缩短,可以让产品团队可以忍受延迟些时间来实现这些变更的需求。

4. 要预留一定的buffer,毕竟程序员也是人,也会有不能出活的时候,也需要学习分享知识,所以不要把时间完全填满,留给大家时间调剂。

Scrum&Kanban在移动开发团队的实践 (一)的更多相关文章

  1. Scrum&Kanban在移动开发团队的实践 (二)

    Scrum&Kanban在移动开发团队的实践系列: Scrum&Kanban在移动开发团队的实践 (一) Scrum&Kanban在移动开发团队的实践 (二) 在第一篇分享文章 ...

  2. 如何避免Scrum敏捷开发团队反思会形式化,海星法介绍

    如何避免Scrum敏捷开发团队反思会形式化? 迭代压力很大,根本没时间,而且,反思会上大家都在互相推脱责任,会议成了“批斗大会”,所以团队的人都觉得这个会很鸡肋. 很多团队在开反思会时是这么干的:产品 ...

  3. 微服务与敏捷开发(Scrum/Kanban)的核心思想之我见

    微服务与敏捷开发(Scrum/Kanban)的核心思想之我见   关于"微服务"和"敏捷开发"的文章网络上有很多,所以这里不再重复叙述这些概念的解释和特点,而是 ...

  4. 杨学明老师推出全新课程--《敏捷开发&IPD和敏捷开发结合的实践》

    课时:13小时(2天) 敏捷开发&IPD和敏捷开发结合的实践 讲  师:杨学明 [课程背景] 集成产品开发(IPD).集成能力成熟度模型(CMMI).敏捷开发(Agile Developmen ...

  5. 开发团队(Team)的主要职责和特征

    角色介绍 开发团队是Scrum团队的三个角色之一. 开发团队包括架构师.开发工程师.测试人员.数据库管理员和UI设计师等,这几类人的跨职能组合.具备的技能足以实现产品开发. Team的主要职责 1.S ...

  6. Scrum Master如何让敏捷团队正常运转?

    官方<Scrum指南>中定义:Scrum Master在Scrum团队中属于服务型领导,负责践行和支持<Scrum指南>中定义的Scrum,要帮团队的每个人理解Scrum理论. ...

  7. 20145205 《Java程序设计》实验报告三:敏捷开发与XP实践

    开发与XP实践 实验要求 1.XP基础 2.XP核心实践 3.相关工具 实验内容 敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营和维护上的过程.软件工程包括下列领域:软 ...

  8. 20145213《Java程序设计》实验三敏捷开发与XP实践

    20145213<Java程序设计>实验三敏捷开发与XP实践 实验要求 1.XP基础 2.XP核心实践 3.相关工具 实验内容 1.敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法 ...

  9. 记一次小团队Git实践(上)

    公司规模不大,成立之初,选择了svn作为版本控制系统.这对于用惯了git的我来说,将就了一段时间后,极为不爽,切换到git-svn勉强能用.随后,因为产品需要发布不同的版本,而git-svn对远程分支 ...

随机推荐

  1. Nginx 301重定向域名

    为何要使用301重定向 在网站建设中需要网页重定向的情况很多:如网页目录结构变动,网页重命名.网页的扩展名改变.网站域名改变等.如果不做重定向,用户的收藏和搜索引擎数据库中的旧地址只能让访客得到一个4 ...

  2. float2int

    flaot转int时,会直接舍弃小数为,但是当把f所在的地址的数据当成int解析时,就是另外的情况了. #include<iostream> using namespace std; in ...

  3. make -f dc_debug.mak 提示错误"/usr/bin/ld:can not find -l***"解决办法

    在公司不同服务器上"make -f ***"程序的时候,有的服务器可以编译通过,有的却提示"/usr/bin/ld:can not find -l***"的错误 ...

  4. c++中new和delete的使用方法

    c++中new和delete的使用方法 new和delete运算符用于动态分配和撤销内存的运算符 new用法: 1.     开辟单变量地址空间 1)new int;  //开辟一个存放数组的存储空间 ...

  5. Interface Comparator

    int compare(T o1, T o2) Compares its two arguments for order. Returns a negative integer, zero, or a ...

  6. POJ 3292

    Semi-prime H-numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7059   Accepted: 3 ...

  7. POJ 2106 Boolean Expressions (布尔表达式求值)

    题意:关于!,&,| 的运算,表达式中V代表true,F代表false. 思路:见代码吧,很详细了. 要注意 !!!F,!(...) 的情况. #include <iostream> ...

  8. [转]C++常见内存错误汇总

    在系统开发过程中出现的bug相对而言是比较好解决的,花费在这个上面的调试代价不是很大,但是在系统集成后的bug往往是难以定位的bug(最好方式是打桩,通过打桩可以初步锁定出错的位置,如:进入函数前打印 ...

  9. java io知识点汇总FIle类

    1.路径分隔符问题: 因为java有跨平台行,而在windows和linux中的目录分隔符是不同的.windows是"\" 而linux是"/"  所以必须想办 ...

  10. Spring + JMS + ActiveMQ实现简单的消息队列(监听器异步实现)

    首先声明:以下内容均是在网上找别人的博客综合学习而成的,可能会发现某些代码与其他博主的相同,由于参考的文章比较多,这里对你们表示感谢,就不一一列举,如果有侵权的地方,请通知我,我可以把该文章删除. 1 ...