??xml version="1.0" encoding="utf-8" standalone="yes"?> 互联|的产品大都是面向v量用L服务Q且用户分布区域q泛Q其教育水^、习惯也大多不同Q具有高度不定性,我们必须非常x用户的行为和反馈。因而,在互联网产品服务的整个用LIӞ需求分析、品研发及交付服务的过E中Q都采用探烦式、适应性的研发理念q行产品的研发。通常Q会把整个品研发周期划分ؓ若干个P代,采用q代式的演进q程Q不断的M付新的品特性,q过观察用户的行为和反馈获取Q进而随时调整品的思\和方向。一切以用户价gؓ核心是互联网产品最核心的特点,而以价值驱动的敏捷开发方法非常符合这一特点?/span> 从阿里Y件开始,内N团队׃直在实行着敏捷目理实践Q?/span>通过步快跑Q快速P代、增量交付用户h|不断获取用户反馈Q持l、快速的调整产品Q验证ƈ适合用户价倹{正是通过q些实践zdQ我们以q代的、增量的交付用户价|最大限度的保证产品朝着W合用户实际需求方向发展。目前,在内贸团队应用较成熟的敏捷实跉|动有Q?/span> 1)、P代计?Sprint Planning Meeting) 2)、每日晨?Daily Scrum Meeting) & d?Task Wall) 3)、功能预?Spring Review) 4)、项目ȝ(Retrospect Meeting) 5)、结对编E?Pair Programming) 6)、其他技术实跉|动等 二、敏捷团?/span> Q?、自l织文化 如google、facebook{互联网企业Q他们很甚x有特定的目程Q通常怎么敏捷怎么做,h厚的工E师驱动文化。我们则有较完整的开发流E指导和规范我们的项目研发工作,相比而言Q׃一些灵zL和U极性,不利于我们工E师自我理、自我驱动意识的培养。臃ѝ缺乏灵zL的程同互联网产品快速更新、快速发展是不相适应的,同时也弱化我们的责Q心意识。除了遵守详的程Q我们是否可以换个角度、换U方法,提倡和营造一U自我管理、自我驱动的开发文化,省却一些ƈ不能l我们带来帮助却影响效率的流E呢Q?/span> 敏捷团队的自l织Ҏ弱化了团队技术领D个角Ԍ自我理和自我驱动?/span>虽然q对工程师的素质要求更高Q相Ҏ术能力更难提高。但是,团队导向很重要,我们努力营造这L氛围Q从团队做P逐渐ȝ和培养自l织团队。相信在q样的开发氛围下Q会让我们做的更高效、更敏捷Q可以走的更E뀁更q?/span> Q)、追求一体化 一体化团队作ؓ敏捷开发方法中最L益思想基因的实践,是指每个目团队包括分析Q开发,试{角Ԍ使团队满一个需求从设计Q开发到试各个阶段利完成Q达到符合质量标准ƈ满需求的软g。这U以目/产品为单位的虚拟团队Q坐在一P全n心的为共同的目标而努力,可以更好的凝聚项目组中的各种角色Q消除部门墙?nbsp; 3Q、追求全功能 q里所指的全功能是希望目团队能打破工E师角色之间的边界,如研发、测试和前端工程师的界线Q消除开发、测试流E中一些潜在浪费,提高效率。在目团队内部通过角色互换Q不限角色的l对工作Q加Z同角Ԍ不同模块间的知识传递,打破技术壁垒,帮助员工从不同视角理解项目,ȝ技能,q而增加团队均衡生产的能力?/span> Z么要提倡打破边界?目整体效率依赖于项目过E中各环节的工作效率Q而整体效率的优化往往依赖于均衡生?_思想的按需生)Q即消除生的L?q度生)和L?生不)Q只有局部效率的增加无法直接转换为整体效率的增加(p桶能装多水Q决定于最短的那块?。整体效率的优化要求IT团队消除技能壁垒,培养多面手,Ҏ计划的的变动Q弹性地调整dQ达到各角色和流E之间的q?/span> 三、质量保?/span> 我们q求开发效率,同时也注重项目质量。如何去保证质量Q就象美国的一位教授爱德化.戴明QW.Edwards DemingQ所_“我们应该停止依靠大量验来保证质量Q而是要改q工艺流E,从一开始就生Z质的产品”。我们要在整个开发过E中多个环节M证质量。同Ӟ质量保证是整个团队的责QQ就如同前面所说的q求全功能团队,打破边界?/span> 至于在哪些环节采用哪些实践,我们先做个分c,按是否能被系l用h知将质量问题区分内部质量和外部质量。外部质量指能直接被pȝ用户感知Q如q行~慢Q不可操作或是操作复杂就属于外部质量低劣。而不能直接ؓpȝ用户所直接感知的要素,对品键壮性、可l护性有p影响的问题就属于外部质量Q如pȝ设计的一致性、代码可L、逻辑完整性等。内部质量对用户的媄响比较间接,但比外部质量意义更深q。一般来_pȝ内部质量优秀Q外部质量仍有可能很差。而内部质量差的系l,外部质量肯定也不怎么栗?/span> 1Q、外部质量保?/span> 在外部质量保证上Q大部分会在开发后期介入,可以通过性能试、自动化试及工E师的功能测试来保证Q通过q些实践zd发现q保证例如运行缓慢、不可操作等质量问题不会存在。针对交互特别复杂的web应用Q可以更多的考虑采用webui自动化测试工P如selenium、pwaitr(b2b)、automan(淘宝){,可以很好的完成那些简单、重复的TC用例Q可以大大提高测试效率,解决试工程师的资源瓉?/span> 2)、内部质量保?/span> 相对于外部质量,内部质量问题影响更ؓpQ在开发开始阶D就应该M证。如通过单元试、静态代码扫?PMD\findbugs)、持l集成、重构、结对编E、code review{多U实跉|动来保证目代码的健店?/span> 除了一些实跉|动去查代码质量外Q更为重要的是研发工E师对内部质量的重视Q如果工E师没有形成良好的质量意识,很可能这些实践也只是停留于Ş式,q不能带来较好的l果。如我们在开发过E中的编码规范、单元测试的质量及覆盖率Qcode review的及时性及问题是否持箋跟进{等。此外,有选择的采用结对编E实践,有助于质量的提高?/span> 以下为本人在公司内部关于目质量和工作效率邮件回复的一此意见和x?br /> 1?谈流E?/span> 不可否认程的重要性,?strong>我们需要根据具合格情况分析Q不断的梳理和优化我们的程Q让程更好的指导我们工作,而不是束~?/strong>目前Q我们的程慢慢多了hQ感觉不如以前敏捷了。经qrpm攚w后Q无论在试环节q是发布阶段Q较之前失去了很大的灉|性。测试阶D,开发bugfix后想在测试环境验证,每次必须重走aone的流E及打包布vQ相比之前的build效率真的差了好多。当Ӟ也许是我们项目组对这个流E熟l度、方法还不够Q很多环节有待改q?/span> 发布阶段Q目前统一由SCM来发布,必然会导致开发对U上环境及发程更加陌生Q同我们提倡的打破边界Q敏捷响应有些相背。再者,SCM资源有限的原因,要支持ITU众多产品U,能否应付的过来,始终是个问题。发布统一理有好处,同样也带来了弊端QITU不同于网站,大多数的技术团队共同在l护在几个应用,而itu的应用多、规模相对小、环境各异,q样的品线采用l一理性h比不高?strong>希望相应的ownerQ能不定期的搜集各品线的意见和反馈Q不断的优化Q让我们的流E更合理?/strong> 2?谈自?/span> 我们团队一直在自测意识Q也在这斚w不断的ȝ和改q。我觉的要提高自,首先应让每位开发同学Ş成较好的自测意识Q而不是自上而下的命令式理Q只有自己有q方面的意,才会L考、去惛_法,dc?strong>再者,需要PM或技术经理去思考,目前阶段实行自测会有什么困?/strong>Q如没有pȝ的自方法、时间不充Q需要熟悉下阶段的UC、下q代的设计、单元测试补写等Q,扑ֈq些困难或问题,容易对症下药了?strong>最后,不断ȝ和积累自方式,优化目程?/strong>自测不是一UŞ式,而要q求效果Q开发自同样需要计划和ҎQ所以我们需要向QA同学hQȝq去 bug常犯的错误,整理自己的checkV相信通过q样的一些自方法,能真正提高我们的目质量Q打破同QA的界U,我们的开发、测试资源比例可以得到更大的优化Q将以前开发阶D늴Q测试阶D|的状况加以改善,使整个项目过E中的紧张度于q缓?/span> 3?谈故障分 “量不要让故障分成ؓ大家包袱Q可以考虑被实施品对事故U和AcL对个故障分,B和CcL障分记在ȝ头上Q?#8221;Q个Z比较支持骆驼的观炏V目前大家对U上故障都小心翼|大家对质量的意识很高Q这当然是好事,但同时带来的影响是效率低了。我的观ҎQ作为增值服务的互联|品,我们更需要快速P代增量提供用户h|快获取用户反馈q改善品,产品推出的迟早,不仅影响获得回报的时_q媄响到获得价值的多少Q错q了一个时间窗口,产品可能׃再有M价倹{所以,我们需要找C个^衡量点,可接受的质量状况辑ֈ最大的效率?/strong> 从客L一角度谈质量,某些时候,客户可以接受服务偶而不可用重启下,却不能接受品没价倹{交互性太差,操作太复杂。所以,对于客户来说什么对他们更重要,需要我们每个hd析和评估。所以,我们一呛_注重质量Q而忽略客L实需求,那就太悲哀?strong>我的观点是,case by caseQ带着q样的观点去思考和解决问题?/strong> 4、谈敏捷目团队 从打破边界,我想C一体化的敏捷项目管理团队,一个目标一致、自我管理的团队Q应该具备良好的目标意识和执行力Q不仅能好自己的一亩三分地Q同时也能站在项目、团队的角度看待问题?/strong>PD出现了问题,开发积极去弥补Q开发出C问题QQAU极dI补,目团队的目标非怸致。每位项目组成员一定要把好每一养I万不可把问题向下抛,因ؓq有开发或QA会把养I所以差不多p了,q样往往是N的开始?/span>
]]>
]]>
IterationQP代)Q在固定的周期内Q经q需求分析、设计、实现、测试等zdQ完成计划的的业务需求,q代l束提供一个可工作的品。计划的业务需求,可能是一个完整的User StoryQ也可能是一个Story中的若干task?br />
Release(发布)Q经q一个或若干个iteration后,完成计划中的所有User StoryQ经q测试后才releaseQ最l真正交付给客户使用?br />
在我们的实践zd中,一个User Story所需的工作量过我们的有效资源,无法安排在一个iteration内。我们就会想当然的会dg长P代周期,增加有效资源以适应所需工作量。殊不知Q这更象是Ş式上的P代开发,无异于瀑布式项目开发过E?br />
2、徏立固定的q代周期Q保持稳定的开发节?/strong>
ScurmҎ也非常强调稳定的q代节奏Q一个稳定的q代节奏如同项目的的心跟뀂Simon Baker描述_"像心脏有规律地跛_来保持n体运行,固定的P代长度提供了一个恒量,有助于徏立开发和交付的节奏。根据我的经验,节奏是帮助取得不变的步幅的重要因?Q?004Q。对于敏捷开发的团队而言Q稳定的q代节奏可以让品保持更E_的交付?br />
3、如何保持稳定的开发节奏?
当一个P代期内可提供的有效资源无法实C个User StoryӞ我们如何按排呢? ?谈P代周期控制的困惑 中已谈到Q这里不在细q?br />
4、如何选择适合自己团队的P代周期?
一般需要考虑以下因素Q?br />
1Q、整个项目周期长度(完成计划的商业需求所需旉Q?br />
较短的P代周期将会有以下一些好处:更频J的向客户展C?交付可用的YӞ更频J的度量开发进度;更频J的取得反馈q改q;一般大的项目最好有多次(3ơ或以上)获取反馈、修正的ZQ根据项目周期调整P代周期长度?br />
2Q、不定性的多少
不确定性有多种形式Q客户到底想要的是什么?组的工作效率,旉Q技术门槛等都不存在不确定性,不确定性越多,q代应该越短?br />
3Q、获得反馈的难易E度
指小l获取反馈数量、频度和及时性,视所处的环境不同Q选择合适的q代长度Q?br />
4Q、优先要以多久保持不变
开发小l承诺在一ơP代中完成一l特定的功能Q重要的是不要改变他们的目标方向Q?/span>优先U不会被改变的时间长度是选择q代长度旉要考虑的因素?/span>
5Q、P代的pȝ开销
每次q代的成本(旉Q,如P代中q行的完整回归测试。最佌P代周期的目标之一是减少或近似消除每ơP代的pȝ开销。如每次回归旉成本很高Q那军_周期长度时更們于长一些?br />
6Q、团队成员的紧迫?br />
Niels Malotaux指出Q?只要目的结束日期还在遥q的来Q我们就不会感到M压力Qƈ从容不迫的工作。当l束日期DӞ我们才会开始更努力的工?。意思指目开始大家比较放松,而越临近l束Q工作越忙压力越大。因此,选择一个合适的q代周期长度Q让团队成员在整个P代过E中感受到的压力更^均,不是l团队更多的压力Q而是压力总量q_分布在P代过E中?br />
每个团队Ҏ所在环境和条g定一个合适的q代长度Q一般徏?~4周。在我们的实践中Q以2周一ơP代的频率Q保持相对稳定的开发和交付的节奏?br />
5、参考资?
《敏捷估计与规划?Mike Cohn
]]>
注:
有效资源
评估工作?/td>
1
?/td>
?/td>
2
?/td>
?/td>
3
相同
相同
有效资源Q指q代周期内,开发团队所能提供的有效工作日,单位?天?br />
评估工作量:指P代周期内Q品经理提供需要实现的业务需求所评估的工作量之和?br />
上表描述以固定周期ؓ两周的P代中Q可能会出现的有效资源和评估工作量对比情c其中,1?两种情况因ؓ评估工作量小于或{同能提供的有效资源Q所以不会媄响P代周期。重炚w讨论的是有效资源于评估工作量时Q如何保持固定周期?
例DQ一q代周期Q能提供有效资源20?天,需求评估工作量30?天?br />
1、功能较独立Q需求不能拆分发布;
安排一个releaseQ两个iterative。这U情况需要在q代2中附加一些技术改造或低优先的小需求、bugfixQrelease日期相对会慢几天?br />
2、一个P代中包括多个产品的需?需要各位品经理协商,军_需求优先)Q?br />
a)、以保证质量为重Q?br />
忽略商业优先U,先处理一个P代中p全部完成的需求?br />
b)、保证h?br />
分两个P代完成,一ơrelease?br />
通常情况下,我们力保证q代周期的稳定,但也允许例外Q如Q商业需求,产品上确定了发布旉点,或者节假期间团队请假比较多Q一个P代所能提供的有效资源相对比较的情况?br />
保持q代周期E_Q其核心是:固定Timebox和可提供的资源,让品经理来军_需求的优先U,每P代只接纳(开?QA资源)可承受的需求?/strong>
]]>
上图描述了一个基本项目P代流E,其中涉及三个角色Q其职责同等于Scrum中的Product Owner、Scrum Master、Scrum Team。P代流E中分别包含了以下敏捷实践:
1Q、P代计划会议,按商业优先{选需求列表,定本项目需求范_
2Q、确认本ơP代需求、资源、时间的具体情况Q?br />
3Q、简单设计,对关键技术点q行必要的设计;
4Q、晨会;
5Q、结对编E;
6Q、持l集成;
7Q、showcaseQ?br />
8Q、项目ȝ会;
9Q、新q代的开?.. ...
以上具体实践zd内容及组lŞ式,后箋逐一介绍Q敬请关注?br />
]]>
2、激励Ş式、方?
q义的分物质Ȁ励和_Ȁ励(职务、荣誉、目标、信仅R情感等Q?br />
3、原则:
1Q、精激׃ؓ主;
2Q、只ȀpȀq人;
3Q、只ȀpȀq事;
4Q、激励方法、手D因异Q把握按需Ȁ励;
5Q、鼓励公开竞争、和谐竞争;
4、案例:
1)、压力非常大的时候,采用Ȁ励手D?-- 目标Ȁ?br />
2)、当前员工不开心,采用的手D?-- 先沟通,明确原因
3Q、表现好的员?-- 信QȀ励,肯定
4Q、推行新Ҏ -- 目标Ȁ励,竞赛
5、附Q?br />
马斯z需求层ơ理论(Maslow's hierarchy of needsQ,亦称“基本需求层ơ理?#8221;Q是行ؓU学的理Z一Q由国心理学家亚伯拉罕·马斯z于1943q在《hcLq论》论文中所提出?br />
安全、生理需要属于物质性h值需求;C会需要、尊重需要、自我实现属于精h值需求;
]]>
关于CodeReview的几点作用:
1、提高团队的~码规范Q培养良好的coding风格
旨在提高整个团队的编码规范程度,l一~码风格。通过每次的codereivewQ发现团队成员在实际开发中的一些细节问题,如不良的~码习惯、错误的调用方式{。通过多次的发现、解决问题,使大安L良好的编码习惯。review的内容一般包括:
1)、异常、日志的处理Q?br />
2)、常量的定义及用;
3)、字W串处理、BigDecimal.ZERO{;
4)、代码的装Q提高重用性;
5)、代码注释情况;
6)、javascript文g的抽取情况;
2、检查业务逻辑
寚w目实现的功能逻辑q行一ơreivewQ结合众人发散思维Q检查业务逻辑是否有盲Ҏ错误。通常需要参与review的成员能够静下心来深入地认真分析Q比较耗费旉?br />
3、分享和培训
每个目的工作安排相Ҏ说都是比较紧凑的Q所以每个团队成员在完成自己的开发Q务完Q没有太多的旉M解或熟悉其他成员的功能实现。但对于敏捷开发来_每个功能模块的开发者ƈ不是固定的,Ҏ目需要,很有可能由非原开发h员来完成增值功能或重构Q所以codereivew是一ơ不错的培训及分享机会,特别是对功能相对复杂的需求实现。可以让团队成员了解或熟悉基本的设计思想和相关的cd义,保在今后接手这一块工作时Q可以更快的上手或找到最到最合适的人去了解更深层的逻辑?/p>
关于reivew的方式:
1、集体review;
目成员一起参与codereiveQ成本比较大Q一般一个项目组l一ơ。比较适合开发经验分享,以及新功能的实现介绍Q利于其他成员了解、熟悉实现者的设计思\及代码结构,在后l项目接手这些新功能Ӟ更加从容?br />
2、TMl织若干开发经验丰富的一起review;
3、分l、交叉review;
h较好的灵zL,Ҏ情况随时扄关h员一起对已实现的代码q行reviewQ及时发现过E中问题q予以修正。比较适合分组\抱团开发,?-3Zؓ单位Q对具体的功能模块负责,一起分析、设计、编码,每位成员对于功能逻辑都比较逻辑Q对业务逻辑reivew有比较好的效果?/p>
实际工作中,Ҏ实际情况灉|选择合适的review方式Q不应拘于某UŞ式。reviewq程Q应有明的目的Q具有针Ҏ,而不是停留于表面Q避免逐渐成ؓ一U负担,于形式。另外,应对每次reviewl果Q整理出一份问题列表,q行分析和ȝQ避免相同问题的重复出现。同Ӟ也应按排相关人员跟进q解决问题。MQ通过codereivewq一手段Q尽可能的在提交试之前dC码中存在的一些实际问题,从项目经历中得到成长?/p>