漫谈敏捷开发

标签: 敏捷开发 | 发表时间:2010-11-27 22:31 | 作者:(author unknown) scotty
出处:http://www.iteye.com
软件开发
软件开发是一种非零和博弈,意思是某一方的获得不是建立在另一方的损失之上,所以软件开发必须实现双赢,帮助客户成功的同时帮助自己成功。如:通过软件帮助客户把手上的5块钱变成50块钱,然后从客户那里拿5块钱。通过软件帮助客户节约50块钱,然后从客户那里拿5块钱。

从精益说起
敏捷开发源于丰田的精益思想。传统的汽车制造是以计划驱动,如根据往年的经验判断今年应该生产多少汽车,但是这样带来的问题是有可能等汽车生产出来,市场已经不需要了,而这就是一种极大的浪费。精益思想是以价值为驱动的方法论,精益思想的核心是消除浪费,它认为不直接产生价值和投入产出比低都视为浪费。浪费有七种:过量生产(生产多于所需),库存(不直接产生价值,并增加管理成本),搬运,返工,过程不当(对最终产品不能增加价值的活动),多余动作(任何不增加价值的设备和人员的动作),等待(两个关联的要素间,未能同步)。

敏捷开发
敏捷开发的核心就是消除浪费。那么在软件开发当中应该如何消除浪费呢?
  • 过量生产:在我们开发的产品当中,如果需求(用户故事)不是把握的很好,那么就会造成很大一部分功能用户从来都不会使用,这就是生产多于所需。所以我们需要用户和业务分析师(BA)或者需求分析师一起来规避过量生产。
  • 库存:在我们的软件开发过程中,如果一直处于开发中,那么产品未给客户带来直接的价值,这就是一种库存。所以我们可以通过迭代开发和快速交付来减少库存。
  • 返工:这个在软件开发当作比较常见,可能是对需求理解不透彻,开发出来的功能,不是客户所想的,导致返工。也有可能是当初的设计不合理,不能满足客户的新需求,导致返工。
  • 也有可能是开发人员不注意编码质量,导致代码的坏味道越来越重,最终导致代码无法修改,导致返工,我曾经遇到一个核心类有几千行,无人敢动。所以我们需要BA来规避需求风险,需要架构师来规避设计风险,需要好的基础和习惯来提高软件质量。
  • 过程不当:我觉得这个主要体现在沟通方面。比如我和某同学讲述一个需求,如果别人不用心听,那么信息就不会有效的传递给他,或者是我表达的是A,而他听到的是B。所以在沟通的过程中一定要通过消除沟通壁垒来消除浪费,在表述者和聆听着之间存在两道沟通壁垒,减少第一个壁垒,表述者应该尽量站在聆听者的知识背景上去清楚的表达内容。减少第二个壁垒,聆听者应该怀着一个开放的心态,去用心的接收表述者传达的信息,不要在没完全听明白表述者传达的信息之前,就用惯性思维去抵触信息的传递。另外一点,我提倡定期沟通,而不是时时沟通,定期沟通是消除信息传递不畅导致的浪费,不提倡时时沟通,是为了减少开发人员的任务切换,从而提高效率。
  • 等待:这个可能是不同模块之间的依赖和接口的联调需要等待,所以这个可以通过合理的计划来减少等待。也有可能是测试和研发的资源和计划不对称,导致开发的时候,测试闲置,开发完之后,测试资源不足。这个可以通过迭代开发持续交付的方式,来提高测试资源的利用。
  • 多余动作,我觉得主要体现在重复开发。比如每个模块可能都会开发上传组件,分页组件和验证组件,可能都会调界面样式,可能花时间解决一个重复的问题。所以要减少多余动作造成的浪费,我觉得应该加强团队沟通,有专门的人负责公共组件的开发和复杂问题的解决。


SCRUM
SCRUM是一套敏捷开发的框架,说的是在进行一次敏捷开发的过程中,所需要参与的角色,进行的活动和输出的产物。
角色有三个:
  • 团队负责人:作为客户代表,确定产品的方向和愿景,定义产品发布的内容、优先级及交付时间,为产品ROI负责。没有BA的情况下,可以充当BA的角色,来规避因需求问题导致过量生产和返工所产生的浪费。
  • SCRUM MASTER:主要负责消除团队障碍。我觉得他可以负责开发公共组件,解决复杂问题来规避多余动作。通过制定沟通机制,开发流程规避过程不当造成的浪费。通过协调开发计划,来规避等待所造成的浪费。
  • 团队:一个完成的软件开发团队应该包括销售,售前,用户,研发,测试,售后等所有相关人员,因为任何几个角色都有可能导致软件开发的失败。对于团队而言最重要的是加强沟通,使信息能够准确的传递给团队的每一个人。

其他的不一一细说了,我认为SCRUM的核心是通过敏捷回顾来持续改进,从而消除浪费。因为在软件开发中遇到的小问题非常多,从而造成大量的浪费,所以必须通过敏捷回顾,不断的总结团队做得好的习惯和遇到的问题,在下一个迭代的开发中的解决这些问题。

XP
XP是实现敏捷开发的一些非常好的实践。
  • 用户故事:是站在用户的角度和应用场景下来描述业务需求。格式为作为..我能..以便于..如作为网络管理员,我能查实时的查看每个设备的CPU利用率,以便于我能即时发现有问题的设备。
  • TDD:测试驱动开发,通过先写测试代码再写程序代码的方式,来理清编码思路和写有效的代码,之所以说有效的代码,是因为有时候写的方法,你会发现从来没有任何其他的方法会调用它,如多余的修改器(getter)和访问器(setter)。我强烈建议业务服务层代码使用TDD进行开发。
  • 持续集成:通过自动化构建工具(cc),持续集成版本,从而可以快速的反馈集成问题。
  • 结对编程:两个程序员用一个电脑进行编程,一个人负责编码,另一个人负责思考,在编写之前需要和结对的同学表述自己的编程思路,从而将每一个程序员的优秀习惯传播给整个团队,但是遗憾的是结对编程对程序员的要求比较高,最好是两个程序员有一定的能力,并且能力差不多,如果一个能力很高的程序员和一个能力低的程序员结对可能效率很低。


作者: fantasy 
声明: 本文系JavaEye网站发布的原创文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

已有 0 人发表回复,猛击->>这里<<-参与讨论


JavaEye推荐



相关 [敏捷开发] 推荐:

敏捷开发——Programmers(27)

- plidezus - 西乔的九卦
载于《程序员》杂志2011年第7期. 从这一期起,开始在杂志上登出整P的大幅漫画,需要看大图的同学们,讯猛点击下图. 这个系列的漫画讲述程序员——这种神秘人类的囧事,故事多来源于我身边的程序员朋友,且以互联网开发背景为主. 如果你有什么可乐的关于程序员的故事、对话、代码,愿意通过漫画的形式分享,请给我发邮件.

漫谈敏捷开发

- scotty - ITeye论坛最新讨论
软件开发是一种非零和博弈,意思是某一方的获得不是建立在另一方的损失之上,所以软件开发必须实现双赢,帮助客户成功的同时帮助自己成功. 如:通过软件帮助客户把手上的5块钱变成50块钱,然后从客户那里拿5块钱. 通过软件帮助客户节约50块钱,然后从客户那里拿5块钱. 传统的汽车制造是以计划驱动,如根据往年的经验判断今年应该生产多少汽车,但是这样带来的问题是有可能等汽车生产出来,市场已经不需要了,而这就是一种极大的浪费.

[趣图]敏捷开发:Programmers

- FPb - 草根网
载于《程序员》杂志2011年第7期. 从这一期起,开始在杂志上登出整P的大幅漫画,需要看大图的同学们,讯猛点击下图. 这个系列的漫画讲述程序员——这种神秘人类的囧事,故事多来源于我身边的程序员朋友,且以互联网开发背景为主. 如果你有什么可乐的关于程序员的故事、对话、代码,愿意通过漫画的形式分享,请给我发邮件.

关于敏捷开发(Scrum)

- - 前端攻城师-攻城记
敏捷开发的话题已经由来已久,但是我们如何实施敏捷开发一直成为争结. 很多团队协作性差,产品、技术、测试、运营脱节,我们如何解决这些问题,成为了很多团队面临的问题. 有幸接触到Scrum项目管理,我想如果我们真的把Scrum实施起来,协作一定会上一个层次. 1.一切从产品出发 我一直信奉一个出色的产品经理不应该因为种种原因降低产品质量,不要因为技术难度大,不要因为项目时间紧,不要因为人员不足,领导压力,其实产品要说的就是:“喔.

Android敏捷开发指南

- - 互联网的那点事
本文紧密结合移动开发方法与技术,围绕Android平台的开发探讨提供更高质量移动产品的解决方案. 作者中分析了移动开发中常见的问题,从两方面阐述了ThoughtWorks使用的测试开发方案和相应的架构方法与常用工具应用,并进一步阐述了为移动开发流程所提供的持续发布方案. 随着云计算、移动互联等一系列新技术概念的崛起,新一轮的IT经济正在不断扩大发展.

Scrum敏捷开发简介

- - CSDN博客编程语言推荐文章
       Scrum是一种灵活的敏捷软件开发管理过程. Scrum方法由Ken Schwaber和 Jeff Sutherland 提出,它将软件开发团队比作橄榄球队,全队有明确的最高目标:发布产品的重要性高于一切. 团队高度自治,队员们熟悉开发过程中涉及到的各种技术,紧密合作,确保每个迭代都朝着最高目标推进.

敏捷开发 Scrum 总结

- - 行业应用 - ITeye博客
  最近把之前学习 Scrum 的资料整理为一篇文档,在接下来的团队和项目开发中,根据项目的情况引入 Scrum 的一些实践,提高团队成员之间的协作能力和项目的交付质量.          参考资料:. 《轻松Scrum之旅—敏捷开发故事》、《敏捷无敌》.          Scrum 工具.

敏捷个人和敏捷开发

- beralee - 博客园-首页原创精华区
    自2001初成立了敏捷联盟到现在10年的推广,敏捷开发已日渐成为当前IT行业软件开发的一种主流方法. 没有银弹,任何方法都不可能解决所有问题,反而方法应用本身还会带来新的问题. 我在今年6月份上海举办的ScrumGathering中进行了一场敏捷个人话题的分享,我说到,想要Doing敏捷并不难,只要花上几天功夫学习敏捷知识之后就可以在小范围团队中去实践了,而要做到真正的Being敏捷则并不容易,而导致并不是真正敏捷的原因中,人是一个主要问题之一,这也是为什么现在敏捷社区中对人开始越来越关注的原因.

敏捷开发思想谈(一)

- - 所有文章 - UCD大社区
       敏捷的原则.       敏捷开发其实并没有标准型的流程. SCRUM也只是众多衍生体中的一个. 实际上就算是SCRUM的实际使用也情况千差万别. 所以首先,请大家有这么个概念:.        敏捷开发绝对不是一套一成不变的标准化流程. 而更多的是一种自适应,自我优化的流程优化理念.

敏捷开发思想谈(二)

- - 所有文章 - UCD大社区
敏捷开发思想谈(一)     http://ucdchina.com/snap/11431   .        为什么需要版本.       我们的设计在我们的脑海里,很可能和在别人脑海里得到的认识是不一样的. 或许大家都能有幸得到统一的认识,但是做出来实际体验的时候又不一定能够符合我们的预期.