团队敏捷开发

敏捷软件开发 Agile software Development

  敏捷开发是一种软件开发方法,基于迭代和增量开发,通过自组织,跨团队,沟通协作完成开发工作。

  敏捷宣言的诞生: 
  2001年2月11日到13日,17位软件开发领域的领军人物聚集在美国犹他州的滑雪胜地雪鸟(Snowbird)雪场。经过两天的讨论,“敏捷”(Agile)这个词为全体聚会者所接受,用以概括一套全新的软件开发价值观。这套价值观,通过一份简明扼要的《敏捷宣言》,传递给世界,宣告了敏捷开发运动的开始。

  敏捷软件开发宣言

  我们一直在实践中探寻更好的软件开发方法,身体力行的同时也帮助他人。由此我们建立了如下价值观:

  个体和互动 高于 流程和工具

  工作的软件 高于 详尽的文档

  客户合作 高于 合同谈判

  响应变化 高于 遵循计划

  也就是说,尽管右项有其价值,我们更重视左项的价值。

  We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value: 
  Individuals and interactions over processes and tools 
  Working software over comprehensive documentation 
  Customer collaboration over contract negotiation 
  Responding to change over following a plan 
  That is, while there is value in the items on the right, we value the items on the left more.

  敏捷开发的12条准则: 
  准则1:Our highest priority is to satisfy the customer through early and continuous delivery of valuable software. 
  我们的最高目标是,通过尽早和持续地交付有价值的软件来满足客户。 
  准则2:Welcome changing requirements, even late in development. Agile processes harness change for the customer‘s competitive advantage. 
  欢迎对需求提出变更——即使是在项目开发后期。要善于利用需求变更,帮助客户获得竞争优势。 
  准则3:Deliver working software frequently, from a couple of weeks to a couple of mouths, with a preference for the shorter timescale. 
  要不断交付可用的软件,周期从几周到几个月不等,且越短越好。 
  准则4:Business people and developers must work together daily throughout the project. 
  项目过程中,业务人员与开发人员必须在一起工作。 
  准则5:Build projects around motivated individuals. Give them the environment and support they need, and  trust them to get the job done.  
  要善于激励项目人员,给他们以所需要的环境和支持,并相信他们能够完成任务。 
  准则6:The most efficient and effective method of conveying information to and within a development team is face-to-face conversation. 
  无论是团队内还是团队间,最有效的沟通方法是面对面的交谈。 
  准则7:Working software is the primary measure of progress. 
  可用的软件是衡量进度的主要指标。 
  准则8:Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely. 
  敏捷过程提倡可持续的开发。项目方、开发人员和用户应该能够保持恒久稳定的进展速度。 
  准则9:Continuous attention to technical excellence and good design enhances agility. 
  对技术的精益求精以及对设计的不断完善将提升敏捷性。 
  准则10:Simplicity -- the art of maximizing the amount of work not done -- is essential. 
  要做到简洁,即尽最大可能减少不必要的工作。这是一门艺术。 
  准则11:The best architectures, requirements, and designs emerge from self-organizing teams.  
  最佳的架构、需求和设计出自于自组织的团队。 
  准则12:At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.  
  团队要定期反省如何能够做到更有效,并相应地调整团队的行为。

  敏捷方法 Agile

  Scrum:http://zh.wikipedia.org/wiki/Scrum

  Scrum Role 角色

  Product Owner, Team, ScrumMaster, Chicken and the Pig

  产品经理,团队,ScrumMaster,鸡和猪,有一则小故事

  Scrum Meetings

  Sprint 计划会议 Sprint Planning Meeting

  需求澄清,确定那些用户故事需要在接下来的迭代里完成

  根据Product Owner制定的产品或项目计划在Sprint的开始时做准备工作。

  他要准备一个根据商业价值排好序的客户需求列表。这个列表就是Prodct Backlog[需求池],一个最终会交付给客户的产品特性列表,它们根据商业价值来排列优先级。

  商业价值"公式":As a <type of user> I want <some functionality> so that <some benefit>

  每日站立会 Daliy Meeting

  在会议上每个团队成员回答三个问题(During the meeting, each team member answers three questions)

  1. 昨天你完成了那些工作?(What have you done since yesterday?)

  2. 今天天你打算做什么?(What are you planning to do today?)

  3. 完成你的目标是否存在障碍?(Do you have any problems that would prevent you from accomplishing your goal?)

  会议准时举行(The meeting starts precisely on time.)

  任何人都可以参加,,但只有团队内部人员发言(All are welcome, but normally only the core roles speak.)

  会议时长限制为15分钟(The meeting is timeboxed to 15 minutes.)

  会议时间地点应该固定(The meeting should happen at the same location and same time every day)

  评审会议(Sprint Review Meeting
  评审会议在每个迭代结束后举行,在会议上团队演示此次迭代中完成了那些工作,一般会有相关的DEMO演示。
  At the end of each sprint a sprint review meeting is held. During this meeting the Scrum team shows what they accomplished during the sprint. Typically this takes the form of a demo of the new features.

  这个会议演示的内容应该是启动会议上确定的那些内容

  During the sprint review the project is assessed against the sprint goal determined during the Sprint planning meeting

  回顾会议(Sprint Retrospective Meeting)
  冲刺回顾会议一般限时为3个小时(The sprint retrospective meeting is timeboxed to 3 hours.)

  仅团队成员参加,产品经理和ScrumMaster,产品经理选择性参加(It is attended only by the team, the scrum master and the product owner. The product owner is optional.)。

  会议上团队中每个成员需要回答两个问题(Start the meeting by having all team members answer two questions):

  1. 此次冲刺中那些地方做得好?(What went well during the sprint?)

  2. 下个迭代中那些地方可以改进? (What could be improved in the next sprint?)

  scrum master记录每个成员的答案(The scrum master writes down the team’s answers in summary form)。

  团队为这些改进意见评定优先级(The team prioritizes in which order it wants to talk about the potential improvements)。

  scrum master在回顾会议中不允许给出答案,但要鼓励成员自己找到较好的办法(The scrum master is not in this meeting to provide answers, but to facilitate the team’s search for better ways for the scrum process to work for it)。

  这些改进工作可以添加至下个迭代中,作为一个非功能性工作,回顾会议最不担心的就是变化(Actionable items that can be added to the next sprint should be devised as high-priority non functional product backlog. Retrospectives that dont result in change are sterile and frustrating.)。

  测试驱动开发(TDD/Test-Driven Development)

  测试驱动开发不是指测试人员驱动开发人员搞开发,一开始我真这么认为了,实际上测试驱动开发指以测试用例为出发点,不写一行代码的情况下,编写单元测试,从而无法通过,然后开始编写代码使之通过测试。这样做的好处是直指目标,达到目标被视为最高优先级,TDD的执行离不开重构,因为这种开发方式完全漠视设计。所以设计在开始时一定很差,通过不断的重构达到最优的代码,绝不会过度设计,也不会做偏。网上多半会说实践后你会喜欢上它,它的大概流程如下图所示:

  极限编程XP

  XP是一个轻量级的、灵巧的软件开发方法;同时它也是一个非常严谨和周密的方法。它的基础和价值观是交流、朴素、反馈和勇气。即任何一个软件项目都可以从四个方面入手进行改善:加强交流;从简单做起;寻求反馈;勇于实事求是。XP是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期;通过积极的交流、反馈以及其它一系列的方法,开发人员和客户可以非常清楚开发进度、变化、待解决的问题和潜在的困难等,并根据实际情况及时地调整开发过程。

  结队编程Paring Program -即时反馈

  http://kb.cnblogs.com/page/91650/

  http://www.blogjava.net/moxie/archive/2006/09/14/69714.html

  流模式(Flow)——两个程序员共同从事一个有趣又有挑战性的问题。

  指导模式(Coaching)——老练的程序员在解决问题方面有经验和知识,可以与其他不能有效地独自解决问题的程序员分享。

  看板Kanban - 工作可视化,专注于当下

  非常软的软广告:国产开源敏捷工具 - fKanban

  http://www.cnblogs.com/a311300/archive/2010/11/18/1880776.html

  ToDo, OnGoing, Done, Impediment

  敏捷估算扑克 - 合理的任务分解 
  http://community.techexcel.com.cn/010DevSuite/070Agile_Scrum/010Posts/010Agile_Poker

  http://www.csaipm.com/cost/201005101141211188.htm

  敏捷方法中的估算应该是由团队成员共同进行,而不是由项目经理“闭门造车”式地得出。这样做的原因之一是因为开发团队是由不同经验的同事组成,对于同一个问题,经验不同的人往往会给出不一样的解决方案。如果可以将所有人的能力集中到一起,那么最后对问题的求解也就八九不离十了。

  持续集成(Continuous Integration)- 团队协作的基础

  http://blog.csdn.net/tony1130/article/details/1876819

  http://www.hansky.com.cn/cn/dokuwiki/doku.php/corp/case/digitalchina

  什么是持续集成(Continuous Integration)?

  这个名词已经在软件开发领域持续了N年,一个比较简单的定义如下:

  持续集成(CI)是一种实践,可以让团队在持续发布的基础上收到反馈并进行改进,不必等到开发周期后期才寻找和修复缺陷。

  单元测试Unit Test - 重构的保障

  http://www.hudong.com/wiki/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95 
  单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。

  敏捷测试 Agile Test

  http://subject.csdn.net/agile-testing.htm 
  所谓敏捷测试,就是指测试遵循敏捷宣言进行,把开发作为顾客看待。与敏捷宣言中的“个体和交互比过程和工具更有价值”一样强调人的作用。

  代码重构(Reconstruction)

  Duplicated Code(重复代码)

  Long Method(过长函数)

  Large Class(过大的类)

  Long Parameter List(过长参数列)

  Divergent Change(发散式变化)

  Shotgun Surgery(霰弹式修改)

  Feature Envy(依恋情结)

  Data Clumps(数据泥团)

  Primitive Obsession(基本类型偏执)

  Switch Statements(switch惊悚现身)

  Parallel InheritanceHierarchies(平行继承体系)

  Lazy Class(冗赘类)

  Speculative Generality(夸夸其谈未来性)

  Temporary Field(令人迷惑的暂时字段)

  Message Chains(过度耦合的消息链)

  Middle Man(中间人)

  Inappropriate Intimacy(狎昵关系)

  Alternative Classes with Different Interfaces(异曲同工的类)

  Incomplete Library Class(不完美的库类)

  Data Class(纯稚的数据类)

  Refused Bequest(被拒绝的遗赠)

  Comments(过多的注释)

  Extract Method(提炼函数)

  Inline Method(内联函数)

  Inline Temp(内联临时变量)

  Replace Temp with Query(以查询取代临时变量)

  Introduce Explaining Variable(引入解释性变量)

  Split Temporary Variable(分解临时变量)

  Remove Assignments to Parameters(移除对参数的赋值)

  Replace Method with Method Object(以函数对象取代函数)

  Substitute Algorithm(替换算法)

  Move Method(搬移函数)

  Move Field(搬移字段)

  Extract Class(提炼类)

  Inline Class(将类内联化)

  Hide Delegate(隐藏"委托关系")

  Remove Middle Man(移除中间人)

  Introduce Foreign Method(引入外加函数)

  Introduce Local Extension(引入本地扩展)

  Self Encapsulate Field(自封装字段)

  Replace Data Value with Object(以对象取代数据值)

  Change Value to Reference(将值对象改为引用对象)

  Change Reference to Value(将引用对象改为值对象)

  Replace Array with Object(以对象取代数组)

  Duplicate Observed Data(复制"被监视数据")

  Change Unidirectional Association to Bidirectional(将单向关联改为双向关联)

  Change Bidirectional Association to Unidirectional(将双向关联改为单向关联)

  Replace Magic Number with Symbolic Constant(以字面常量取代魔法数)

  Encapsulate Field(封装字段)

  Encapsulate Collection(封装集合)

  Replace Record with Data Class(以数据类取代记录)

  Replace Type Code with Class(以类取代类型码)

  Replace Type Code with Subclasses(以子类取代类型码)

  Replace Type Code with State/Strategy(以State/Strategy取代类型码)

  Replace Subclass with Fields(以字段取代子类)

  Decompose Conditional(分解条件表达式)

  Consolidate Conditional Expression(合并条件表达式)

  Consolidate Duplicate Conditional Fragments(合并重复的条件片段)

  Remove Control Flag(移除控制标记)

  Replace Nested Conditional with Guard Clauses(以卫语句取代嵌套条件表达式)

  Replace Conditional with Polymorphism(以多态取代条件表达式)

  Introduce Null Object(引入Null对象)

  Introduce Assertion(引入断言)

  Rename Method(函数改名)

  Add Parameter(添加参数)

  Remove Parameter(移除参数)

  Separate Query from Modifier(将查询函数和修改函数分离)

  Parameterize Method(令函数携带参数)

  Replace Parameter with Explicit Methods(以明确函数取代参数)

  Preserve Whole Object(保持对象完整)

  Replace Parameter with Methods(以函数取代参数)

  Introduce Parameter Object(引入参数对象)

  Remove Setting Method(移除设值函数)

  Hide Method(隐藏函数)

  Replace Constructor with Factory Method(以工厂函数取代构造函数)

  Encapsulate Downcast(封装向下转型)

  Replace Error Code with Exception(以异常取代错误码)

  Replace Exception with Test(以测试取代异常)

  Pull Up Field(字段上移)

  Pull Up Method(函数上移)

  Pull Up Constructor Body(构造函数本体上移)

  Push Down Method(函数下移)

  Push Down Field(字段下移)

  Extract Subclass(提炼子类)

  Extract Superclass(提炼超类)

  Extract Interface(提炼接口)

  Collapse Hierarchy(折叠继承体系)

  Form Tem Plate Method(塑造模板函数)

  Replace Inheritance with Delegation(以委托取代继承)

  Replace Delegation with Inheritance(以继承取代委托)

  Tease Apart Inheritance(梳理并分解继承体系)

  Convert Procedural Design to Objects(将过程化设计转化为对象设计)

  Separate Domain from Presentation(将领域和表述/显示分离)

  Extract Hierarchy(提炼继承体系)

  代码Review

  不想重复说了,同单元测试一样重要。

  

总结

  以上是个人经过理论学习,实践检验后总结的一篇文章,其中大部分观点、素材皆来自网络和公司敏捷活动中所得。我想要说的是,我是支持这些观点的,我认为这些方法论可以很好的指导日常开发工作,能够解决实际问题。

时间: 2024-10-14 20:44:30

团队敏捷开发的相关文章

【DevOps】团队敏捷开发系列--开山篇

随着软件发布迭代的频率越来越高,传统的「瀑布型」(开发-测试-发布)模式已经不能满足快速交付的需求.2009 年左右 DevOps 应运而生,开发运维一体化,通过自动化工具与流程让整个软件开发构建.测试.发布更加快捷.频繁.高效和可靠. 本系列教程目录 本系列将详细讲解Devops落地细节.将构建整个持续集成与交付的一整套体系与流程.对于未来要开篇的系列博文列表如下: [DevOps]团队敏捷开发系列(一)--开山篇 [DevOps]团队敏捷开发系列(二)--版本控制之道Git [DevOps]

Leangoo:用敏捷开发管理思维做团队协作的SaaS软件

第一次看到leangoo这个产品时,笔者觉得又是一款团队协作软件工具,和其它的团队协作并没有什么本质区别. 当听创始人廖靖斌说起leangoo人员结构时,笔者起初蛮诧异,一家20多人的创业公司,顾问和研发差不多各占一半. 一家看起来做saas的公司为什么需要这么多顾问? 在和廖靖斌进行一个多小时的交流中,这个困惑渐渐被解开… Leangoo:一家顾问公司研发的SaaS工具 作为一个八年的“创业老兵”,廖靖斌始终在做的一件事就是实践.推广Scrum和敏捷开发.Scrum是风靡全球的敏捷产品开发框架

敏捷开发讲义---如何打造敏捷团队

PPT下载链接:http://pan.baidu.com/s/1bncprTd 敏捷开发分享讲义-修改版 第1页:个人信息 就不做自我介绍了,我的基本信息就在PPT第一页.7月26日,也就是上周六,我和会成参加了一天的培训,关于敏捷开发的.参加这次培训我们俩主动申请的,因为这次培训适合的听众除了中高层领导.项目经理.产品经理之外,还适合有软件经验希望往项目管理方向发展的人士."不想当项目经理或者项目主管的IT屌丝是真屌丝",不想成为真屌丝,所以参加了培训.但这次跟大家分享是被婷姐逼的(

简单的敏捷工具更受敏捷开发团队青睐

实施敏捷不需要一定或者建议使用工具.理想的情况是,看着索引卡上的需求,通过命令行就可以完成开发.但是,最近几年出现了多种工具,它们对顺利完成敏捷开发起到了很好的促进作用.Migan和Gaia近期做了一个调查,以试图得出敏捷开发团队对工具的使用情况. 据两位所言,他们做这个调查的原因之一是要评估敏捷团队是不是愿意使用简单的工具. 很多公司现在依然使用传统的项目管理工具来进行敏捷开发,比如MS Project.电子表格(MS Excel).在采访了多家公司后,我们发现这一现象的背后原因是,许多敏捷工

产品研发团队如何融合OKR与Scrum敏捷开发?

「 OKR 」现在非常的火爆,很多公司都在使用,不仅国外的 Google.英特尔等大公司在用,国内的一线知名互联网企业今日头条和一些创业团队也都在使用. 那为什么「 OKR 」这么受欢迎呢,因为把它可以帮助团队 达成共识.加深信任.加强协同. 并且「 OKR 」这套方法,不仅可以帮助我们开展工作,还可以用它来管理个人生活.例如互联网大牛 吴军 就是固定使用「 OKR 」来管理他个人年度目标和计划的. 乘着假期,我也仔细读了两本关于「 OKR 」的书籍,<OKR工作法>.<这就是OKR&g

产品经理必不可少的在线敏捷开发工具,可将团队工作效率提高90%

互联网时代,IT技术飞速发展,市场瞬息万变,产品经理如何进行敏捷管理?团队如何快速高效交付软件产品?如何拥抱变化?下面我给大家推荐一款敏捷开发工具,可以协助大家在最短的时间内完成开发任务,以最快的速度交付有价值的软件,使客户满意.一个好的开发流程,对于项目的进行,更新和维护都起着至关重要的作用.CORNERSTONE敏捷开发工具适用于一些开发周期长,需求不明确,或者随时间渐进明确,频繁更新的项目.一. 产品与设计项目决定启动后,第一步就是项目组准备需求,整理出需求文档.通过建立一个公开需求池,向

敏捷开发团队,最喜欢的开发工具CORNERSTONE

『先定一个能达到的小目标,比方说我先挣它一个亿』--这句被刷屏朋友圈的神句虽被无数网友调侃甚至吐槽,但如果只看前半句,真的是没毛病.不管多大的目标都是由一个个小目标组成的,而只有每个小目标都靠谱了,最后的那个大目标才是真的靠谱~ 有人要问,这和敏捷有什么关系?答:关系大了!因为敏捷开发的核心思想恰恰就是小步快跑.不断迭代,在一次次的迭代升级中最终完成那个『大目标』!正因为敏捷开发的这种不断迭代升级的开发模式,使得其更加适合当今瞬息万变的互联网,可以说是互联网时代的软件开发方式. 好了,下面请看官

用leangoo看板工具实施多团队大规模敏捷开发

概述 本场景描述的是针对多个Scrum团队/敏捷团队,开发同一款大型产品,或者大型项目的敏捷应用场景.Leangoo多团队大规模敏捷开发模板是基于大规模敏捷模型定义的,可以适配基于Scrum of Scrums, [email protected],LeSS和SAFe等模型.Leangoo多团队大规模敏捷开发模板,在团队级使用的是标准的Scrum模型. Scrum是用于开发和维护复杂产品的一个框架.上世纪90年代,Scrum在全球已得到广泛应用,Scrum最初用于产品研发,目前已广泛用于软硬件开

中小企业团队敏捷产品开发流程最佳实践

近期因为疫情的影响,不少互联网公司开始尝试远程工作.也出不了少如何做好远程工作的方法,我认为不管是场地办公还是远程办公都依赖于原来的产品开发流程. 我曾经遵循CMMI5的流程管理过15人左右的跨国/语言/文化团队,也遵循敏捷Scrum管理过9人的小团队,还针对一个从4人发展到近30人的团队尝试过各种方式的项目管理方法,这其中有2C和2B的产品,也有平台/生态型产品. 最后在自己创立公司的5人小团队(场地和远程办公融合方式)中摸索出了我认为最适合中小企业产品开发流程与管理方法. 今天我们聊聊产品开