敏捷开发的常见误区_第1页
敏捷开发的常见误区_第2页
敏捷开发的常见误区_第3页
敏捷开发的常见误区_第4页
敏捷开发的常见误区_第5页
免费预览已结束,剩余3页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、敏捷开发的常见误区1 .误区:敏捷项目没有计划由于产品需求的不确定性、甚至是未知的,敏捷项目团队很少能在项目之初建立一份类似于WB亚务分解的进度表和甘特图,但敏捷项目依然是有计划的,和传统的进度计划不同,敏捷的计划不是关注在完成项目的一个个活动或者说任务,比如说需求分析、概要设计、详细设计,模块一编码等等,而是关注在客户的需要,关注客户价值的优先级,其计划的对象是用户要求的功能,例如用户故事,计划活动的产出是一个设置了优先级的用户需要的功能列表。敏捷计划分为以下几个层次:愿景-制定产品的长远目标;路线图-制定实现长远目标的分步实施计划;发布-制定一次发布的目标,包含在一个发布中希望交付的需求清

2、单,并设置了优先级;迭代-制定一次迭代的目标,包含了在一个迭代中团队承诺交付的需求清单与为了达成目标而设置的工作任务;每日计划-制定每天的工作目标,包含了团队中每个成员的工作任务。其计划的过程是一个持续的过程,从项目开始时制定产品的愿景,到每个迭代开始时制定迭代计划,敏捷项目的计划不断的细化,不断的根据变化而调整,是Just-In-Time的计戈限2 .误区:敏捷就是追求速度一次在和几个朋友聊天的时候,有朋友说最近装了有线数字电视,他觉得开发数字电视频道服务的团队应该是采用了敏捷的团队,因为每隔一段时间,就会有新的功能发布,只是系统不稳定,不得不经常的重新启动机顶盒。这无疑是个非常有趣的关于敏

3、捷的理解,似乎敏捷就是关注软件功能的投放市场速度,而往往忽略质量。这是很多有关敏捷的理解中,比较典型的一种误识。如果我们重读一下敏捷的四句宣言以与12条敏捷原则,应该不难看出,敏捷实际是关注实现客户的价值,而这一价值表达在“可工作的软件”之中,这其实是对质量的要求,它意味着交付的软件是客户需要的并且质量稳定的,是同时对需求质量和开发质量提出要求。另外,因为市场的变化会促使客户重新调整需求,以获取最大的价值,因此敏捷强调“响应变化”,迅速调整策略,以帮助客户迅速对市场变化做出响应。3 .误区:敏捷是放之四海而皆准的开发模式敏捷开发模式被互联网企业广泛采用的最重要的原因有两个:1)产品的功能升级更

4、新换代非常快,大家都必须要在最短的时间抢占市场,吸引用户,而需求往往又不是非常的明确,甚至有时只是一个idea,需要市场的反馈;2)产品的升级是可控的,即便是带着一定缺陷的产品发布(又称为“灰度发布”),我们都可以在后台悄悄的升级系统或修改BUG对于用户来说,任何时间打开浏览器都可以看到最新的产品,因此对用户的影响是最小的,甚至用户是不感知的。对于那些需要安装到用户使用的终端(电脑、手机、平板等)的应用来说,这样的升级方式可能就会导致客户的反感、投诉和客户流失。对于软件提供商来说,还必须要考虑客户拒绝升级情况下,后台系统必须要同时支持多个版本的运行,否则就会遭到客户的投诉,甚至会引发负面影响的

5、广泛传播。因此对于不同形式、不同需求阶段、不同质量要求的产品,对于敏捷开发的实际应用是需要谨慎研究的,而不是绝对的生搬硬套和教条主义。4 .误区:敏捷是“一个”过程敏捷不是一个过程,是一类过程的统称,它们有一个共性,就是符合敏捷价值观,遵循敏捷的原则。敏捷的价值观如下:个体和交互胜过过程和工具可以工作的软件胜过面面俱到的文档客户合作胜过合同谈判响应变化胜过遵循计划由价值观引出的12条敏捷原则:1)我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。2)即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势c3)经常性地交付可以工作的软件,交付的间隔可以从几个星期

6、到几个月,交付的时间间隔越短越好。4)在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。(注:这并不是地理位置上要求双方在一起,否则跨国公司的协同开发就成了空话)5)围绕被激励起来的个体来构建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。6)在团队部,最具有效果并且富有效率的传递信息的方法,就是面对面的交谈。7)工作的软件是首要的进度度量标准。8)敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。9)不断地关注优秀的技能和好的设计会增强敏捷能力。10)简单一一使未完成的工作最大化的艺术一一是根本的。11)最好的构架、需求和设计出自

7、于自组织的团队。12)每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。建立敏捷联盟的17位大师所创立的敏捷方法包括:极限编程,Scrum,特征驱动开发,动态系统开发方法,自适应软件开发,水晶方法,实用编程方法。这些方法统称为敏捷方法。每个人都可以从敏捷宣言和原则出发,明确问题,找出一些解决方法,形成自己的过程。要实用而不是要机械式的规。让开发人员理解并实施,体验到敏捷的好处,而不是盲目机械地实施规。CMM的最高境界(Level5)也是要求组织有足够的灵活性适应外界环境的变化,灵活的运用规,而不是教条主义。5 .误区:敏捷只适用于小型项目和团队敏捷实践确实

8、很多发源于小型的项目团队,但并不是说敏捷只适合小型项目团队。其实,早期的Scrum项目就已经有在500多人的大型项目中成功实施的案例。可能是由于大多数的敏捷团队一般都希望在59人的规模,并且希望团队成员在同一个工作区域,所以很多时候被认为不适合跨地域,跨团队的大型项目的开发。其实,59人的团队规模是一个类似于一个战斗小组的规模,这个团队小组负责完成一个共同的目标。对于一个小型的项目而言,可能只需要一个这样的战斗小组就可以了,而对于一个大型的项目,我们就可以建立多个这样的战斗小组来完成项目目标。在Scrum中,就有ScrumScaling,通过把一个大型项目团队合理分解为多个小型的Scrum团队

9、,每个团队都负责一个相对独立的模块或者功能,再配合其他的敏捷实践,比如持续集成,ScrumofScrums等,加强团队之间的协作,从而确保项目的成功。所以,将敏捷实践应用于大型的、复杂的项目是完全可以的。6 .误区:敏捷开发=简化流程敏捷开发不一定能简化工作流程,而且简化流程也并非提出敏捷开发的初衷。敏捷开发最重视的是拥抱变化,至于怎么拥抱,只能随机应变。实际应用中,既有流程相当简单的经典Scrum过程,也有极为冗繁、不亚于CMMI的RUP根据应用场景不一样,项目组应该使用最适合的流程。选择敏捷开发流程时也应带着敏捷开发的思维去选择,即快速响应项目实际的流程需求、拥抱流程应用过程中遇到的各种变

10、化。没有银弹,也没有长期适合的项目流程,生搬硬套某个看似成熟的敏捷开发流程是大忌。7 .误区:敏捷开发=快速开始编码敏捷开发强调迭代,鼓励开发人员用代码说话,不过绝对不鼓励没想明白就写代码。符合敏捷开发思想的流程往往主在一个稳定的基础之上迭代完成各种功能。如果基础都不牢固,迭代就无法进行,整个开发过程就退化成不断重写的过程,浪费开发时间。敏捷开发实际非常重视“设计”,并且对开发人员的设计水平提出了极高的要求,既要“持续重构”又不能“过度设计”,稍有不慎就会陷入反复推翻已有代码的窘境。对于功不够的开发人员最好还是想好再写代码,设计的时候慢一点没关系,尽量少的做无用功才是最重要。8 .误区:敏捷是

11、彻底革命的。敏捷,特别是XP,让人有耳目一新的感觉,觉得以前的所有软件工程理论,设计方法都可以抛弃掉了,推翻一切,从头再来。抱着这种想法实施敏捷,那就错了,敏捷不是“石头里蹦出个大圣”,以前的软件过程中也有敏捷的影子,只是没有像敏捷一样上升到价值观和原则的高度,比如快速原型法。敏捷是在对已有的软件过程方法的改进,抛弃的是传统软件工程低效的外表,以往的软件过程中很多技巧都是很实用的。实施敏捷应该以现有的软件过程为基础,从敏捷宣言和原则出发,利用敏捷的方法来改善过程。9 .误区:敏捷是反文档的。文档只是为了达成目标的一种手段,如果这种手段是低效的,那就换一种手段。可是完全抛弃了文档,怎样解决沟通的

12、问题?难道你想每次沟通都完全用手比划,用嘴说,跟不同的人重复表述同样的想法,那样更是低效的。应该清楚文档的本质是把知识显性化。在一个项目中存在很多需要沟通的知识,知识具备两种形态,显性的和隐性的,传统的观念是尽量把隐性知识显性化,即文档化,而忽略了这其中的代价(特别是更新同步文档的代价)。因此,在实施敏捷的时候,需要在团队明确哪些知识是必须显性的,这些知识可以通过文档交流。哪些知识是可以隐性的,这些知识则完全可以通过口头的方式进行交流,以达到沟通的最正确效率。文档不是目的,有效沟通才是目的。就工作量而言,不写文档,减少写文档时间,看起来确实可以加快开发速度,但实际会严重伤害项目。互联网应用开发

13、不需要似传统大型软件开发那样,按照软件工程,花大量时间去写文档。不要为了写文档而写文档,而是为了开发而写文档。例如需求文档(或者功能文档-可以含有版本信息,业务流程文档,互通操作文档),无论具体形式如何,需要清晰地给出你的应用针对什么,提供什么,解决什么。需求文档有时也可以作为测试的指导。如果是client+server,你需要给出本期目标的性能,可以简单到一两页纸,但是绝对不能缺。在迭代开发中,你不断地修改它,它是你开发的轨迹。例如开发文档,不一定要什么概要设计、详细设计这类学院派的东东,但是你需要有文档能够清晰描述开发对象的架构,模块划分,client和server的交互流程,以与关键的核

14、心技术,例如,如何避免client和server中过多连接造成的server压力,为何采用长连接tcp而非upd(反之亦然),如何制定心跳,是否需要通过使用底层的socket进行特定优化等等。你至少需要从架构师的角度对产品进行梳理,描述实现的架构、采用的机制和关键技术。开发文档或繁或简,甚至可以在代码过注释说明,利用javadoc生产HTML格式不论。不要让文档成为开发的负担,而是成为帮助。现在工作的流动性很大,没有文档,当中一两个开发人员离职,如何后续处理。没有开发文档,在架构和关键技术上没有想清楚,贸然而上,开发的永远只是个demo产品。没有任何文档,极容易导致推出后,疲于奔命地修修补补,

15、每天一个版本。敏捷开发是快,但是快不等于敏捷开发。10 .误区:敏捷是自由的,无约束的。敏捷强调的是自组织团队,发挥人的能动性,以动力代替压力,让人有绝对自由的错觉。但是应该清楚,凡事都是要讲究一个平衡,人也是两面的,消极的一面和积极的一面同时并存,绝对的自由会放纵人消极的一面。敏捷并非是绝对自由,无约束的。作为管理者,有一个职责,就是引导团队成员用自己积极的一面去压制消极的一面,不能放任团队中出现搭便车的现象,否则将打击整个团队的士气。如果实在无效,那就只能将其排除出团队了,这个惩罚够有约束力吧?11 .误区:为了敏捷而敏捷“嗯,敏捷这么好,我们也敏捷吧”,可能很多人会有这种想法。忘了以前是

16、在哪儿看的大师采访录:Q“我们现有的过程很好,不知道怎么用敏捷改进?”A:“既然很好,那就不要用敏捷”。做什么事情都要有明确目标的,敏捷虽好,得看你需不需要,能不能解决你现在头疼的问题,如果不是,那就不要给自己找麻烦了。12 .误区:传统开发能随时转变成敏捷开发敏捷开发过于诱人,很容易让深受传统软件开发思想折磨的开发人员感觉敏捷开发就是灵丹妙药。要想转变,首先需要从思想上正确认识敏捷开发的含义,了解它能解决什么问题、会带来什么新的问题、对现有软件/硬件资源有什么要求等。例如在原先采用CMM勺团队中,想利用敏捷开发简化冗余的文档、降低沟通成本,那么敏捷开发确实能在一定程度上缓解这些问题,但也会造

17、成部文档缺失、沟通不够深入的问题,在应用敏捷开发之前需要先确定适合团队的新的文档流程(代码注释能够自动/半自动的变成团队需要的文档么?),并且确定沟通的一些原则(比如,对于一些重要的沟通,是否还是用来进行,不要过于“敏捷”?)。有趣的是,有可能在回答这几个问题之后会发现,敏捷开发并不能解决项目中遇到的问题,反倒是其他方面出了问题。举例来说。如果此前的开发方法是简单的目标管理,遇到的问题是项目进度不可控、开发+测试的周期较长、不能与时响应需求变化,那么敏捷开发能解决的是快速响应需求变化,对项目进度和开发测试周期帮助不大(没有一种流程能够承诺改善项目的开发效率!),但前提是开发人员必须懂得怎样正确

18、的去迭代开发,并且必须认识到一次迭代的完毕是以完成测试为标准的。在这个例子中可以看到,敏捷开发能带来的好处非常有局限性,如果开发人员达不到一定的层次是很难受益的。与其号召使用敏捷开发,不如想想如何增加执行力,以与找到周期偏长的根本原因(是因为设计不充分而返工?还是因为没有可以快速回归的测试用例?等等)C13 .误区:敏捷是CMM勺反义词CMW是一种衡量软件成熟度的标准,并非过程,和敏捷不是一类概念。如果要给敏捷找一个反义词,传统的瀑布式开发应该更适宜一些。14 .误区:敏捷开发=极限编程/Scrum/敏捷开发是一种方法论,只是一些基本原则的集合,并非具体流程。极限编程、Scrum等流程是具体的

19、实施方法,它们都声称符合敏捷开发的思想,但执行起来是否真的“敏捷”,还得看参与者究竟思想上是否真的承受敏捷开发的原理。如果把结对编程、dailyscrum当做是敏捷开发的表现,那更是本末倒置,可悲的是,不少人还真是这么认为的。15 .误区:迭代就是敏捷,UP属于敏捷。UP是重型的过程,虽然引入了迭代,但是其原则和价值观与敏捷是不同的。敏捷注重的是反馈,迭代周期尽量的短,重在客户的参与,通过客户的参与,获取持续的反馈,不断调整使整个项目走在正确的方向上。同时也给客户一个感受和思考的机会,因为对于大多数客户而言,目标是明确的(不排除有些客户目标也不明确),但是具体怎么做,开始时是没有想法的,只有看

20、到具体的东西的时候,才知道“噢,原来可以这样,那我想把这里调整一下”16 .误区:重做就是重构重做不等于重构,很多场合这两个概念是混淆的。但是在敏捷中,重构的一个特征是必须可控的。当对系统结构进行大的调整时,如果没有测试驱动辅助的话,那么可控性就会很差,这不能叫做重构。17 .误区:版本更新很快,甚至每天都有新版本。每天一个新版本。这种情况,最大可能是产品没有经过严格的测试,根本不稳定,就直接放出来,结果在实际使用中bug漫天飞,开发人员不断地推出版本来补窟窿。这种情况,别说商用版本,用户无法承受如此频繁的升级(升级毕竟耗时麻烦,而且流量是用户自己掏的钱)即便是测版本,也绝不应该如此频繁和随意

21、。测版本或试用版本也是经过开发人员验证和测试后放出来,通过实际使用情况,收集用户对功能和操作中的意见,并对实际使用中测试案例无法覆盖的可能异常情况进行验证。不是发现一个bug,就改一个,发布一个,而是收集反馈,统一修订后,再释放新版本(而这,通常时间是按周来计算的),除非这个bug是个极其严重,必须马上更正。每天一个版本,混乱。在Android上,你可以自行发布更新,但如果基于iOS的,在Apple的AppStore上发布,别说每天一个版本,就算每周一个版本,Apple的软件审核流程还没走完,就又扔一个新的版本,这就很容易造成下游工作根本没常进行。将版本更新速度视为敏捷开发,是完全错误的。敏捷

22、开发在于你能够准确抓住市场,在时间窗口快速推出产品。由于市场的不确定性和用户喜好/需求的不确定性,用户通常不清楚需要什么,你先给他,他再去判断,这需要在需求-开发-市场验证中进行循环迭代,以用户为最终目标,而不是机械地将敏捷视为快,而判断什么为快,又机械地用版本推出速度来说明,每天推一个版本,只能说明开发流程出了问题,整个学生小作坊。敏捷开发也仍然是和版本更新有一定的关系。但这个版本,不是小修小补的小版本,而是有新功能,新UI,新互动方式,在用户体验上有新的感受。这样的版本,不可能一两天就升级。另外,你推给客户的都应该是个稳定的版本。18 .误区:没有分析和设计敏捷开发强调简单设计,团队每个成

23、员都从接触客户到分析设计,到编码,全部承当。但是实际上团队成员的素质参差不齐,如果只有简单设计、立即编码,而没有后续的持续重构等实践,将导致设计混乱不一致,尤其是对老系统的功能升级,如果对原有系统的影响分析不够,弱化了分析设计,将导致很多工作在后期频繁变更,使得团队的挫折感增强,产生较多的重复工作和浪费。必要的系统架构和设计从来都是非常重要的。只是这里的分析设计有别于传统的开发模式,应该应用敏捷的思想,简单设计,持续重构,尽快反馈等。19 .误区:敏捷拥抱变化,因此前期需求可以随意简单因为敏捷的导向,可能造成的问题是,前期需求比较随意,对需求质量的控制弱化,需求变更更加频繁,但是这并不意味着对需求可以不做深究,甚至可以随意变更需求。(1)需求质量的审核,仍然需要改进,需求方向性的错误将导致后续一系

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论