Scrum&Kanban在移动开发团队的实践 (一)
现在大多数团队都在谈敏捷开发,似乎觉得敏捷是软件开发的银弹。只需要实践下一些敏捷开发的模式就能如何如何,其实我觉得不论是敏捷开发还是传统的瀑布流开发都是有他们的市场的,取决于团队人员构成,取决你的产品的属性,所在市场的竞争环境。最终希望达到的目的都是一个:以最快的方式、最高的质量,实现所需的需求。
我最近所在的两个团队都是移动研发团队,一个是在相对大型的外企内部面向企业级软件,一个是创业型团队面向消费级应用。第一个团队我们是从传统的瀑布流开发模式向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在移动开发团队的实践 (一)的更多相关文章
- Scrum&Kanban在移动开发团队的实践 (二)
Scrum&Kanban在移动开发团队的实践系列: Scrum&Kanban在移动开发团队的实践 (一) Scrum&Kanban在移动开发团队的实践 (二) 在第一篇分享文章 ...
- 如何避免Scrum敏捷开发团队反思会形式化,海星法介绍
如何避免Scrum敏捷开发团队反思会形式化? 迭代压力很大,根本没时间,而且,反思会上大家都在互相推脱责任,会议成了“批斗大会”,所以团队的人都觉得这个会很鸡肋. 很多团队在开反思会时是这么干的:产品 ...
- 微服务与敏捷开发(Scrum/Kanban)的核心思想之我见
微服务与敏捷开发(Scrum/Kanban)的核心思想之我见 关于"微服务"和"敏捷开发"的文章网络上有很多,所以这里不再重复叙述这些概念的解释和特点,而是 ...
- 杨学明老师推出全新课程--《敏捷开发&IPD和敏捷开发结合的实践》
课时:13小时(2天) 敏捷开发&IPD和敏捷开发结合的实践 讲 师:杨学明 [课程背景] 集成产品开发(IPD).集成能力成熟度模型(CMMI).敏捷开发(Agile Developmen ...
- 开发团队(Team)的主要职责和特征
角色介绍 开发团队是Scrum团队的三个角色之一. 开发团队包括架构师.开发工程师.测试人员.数据库管理员和UI设计师等,这几类人的跨职能组合.具备的技能足以实现产品开发. Team的主要职责 1.S ...
- Scrum Master如何让敏捷团队正常运转?
官方<Scrum指南>中定义:Scrum Master在Scrum团队中属于服务型领导,负责践行和支持<Scrum指南>中定义的Scrum,要帮团队的每个人理解Scrum理论. ...
- 20145205 《Java程序设计》实验报告三:敏捷开发与XP实践
开发与XP实践 实验要求 1.XP基础 2.XP核心实践 3.相关工具 实验内容 敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营和维护上的过程.软件工程包括下列领域:软 ...
- 20145213《Java程序设计》实验三敏捷开发与XP实践
20145213<Java程序设计>实验三敏捷开发与XP实践 实验要求 1.XP基础 2.XP核心实践 3.相关工具 实验内容 1.敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法 ...
- 记一次小团队Git实践(上)
公司规模不大,成立之初,选择了svn作为版本控制系统.这对于用惯了git的我来说,将就了一段时间后,极为不爽,切换到git-svn勉强能用.随后,因为产品需要发布不同的版本,而git-svn对远程分支 ...
随机推荐
- 安装 SQL SERVER PROFILER
SQL SERVER 2008 R2 (10.50.40) 版本,安装 SQL SERVER PROFILER:通过 command prompt,使用以下命令:setup.exe /FEATURES ...
- JSP/SERVLET重定向技术综述
1.RequestDispatcher.forward() 是在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet or JSP到另外一个S ...
- Finite State Machine
Contents [hide] 1 Description 2 Components 3 C# - FSMSystem.cs 4 Example Description This is a Dete ...
- MVC中SelectList和@Html.DropDownList("MainDuty_UserId","请选择")的运用
Models.Project model = projectdb.dbSet.SingleOrDefault(e => e.Project_ID == id); ViewB ...
- ****Git 常用命令和使用思维导图
Git 是一个很强大的分布式版本控制系统.它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势. 本来想着只把最有用.最常用的 Git 命令记下来,但是总觉得这个也挺有用.那个也用 ...
- TCP 流模式与UDP数据报模式(转)
TCP流模式与UDP数据报模式http://blog.csdn.net/s3olo/article/details/7914717 数据报(datagram)通常是指起始点和目的地都使用无连接网络服务 ...
- 使用 C# 对文件进行压缩和解压
C#中对文件压缩和可以使用两个类: GZipStream 类 此实例分为几个模块,分别为: 压缩函数: /// <summary> /// 压缩文件 /// </summary> ...
- C Primer Plus之C预处理器和C库
编译程序前,先由预处理器检查程序(因此称为预处理器).根据程序中使用的预处理器指令,预处理器用符号缩略语所代表的内容替换程序中的缩略语. 预处理器不能理解C,它一般是接受一些文件并将其转换成其他文本. ...
- GDB笔记
GDB是在Linux命令行下对C/C++的程序进行调试常用的一个命令,现将平时记录在本子上的笔记整理如下: 一.断点 断点类型有breakpoints, watchpoints, catchpoint ...
- HTML5入门十---Canvas画布实现画图(一)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...