敏捷开发的利与弊
Posted 互联网周刊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了敏捷开发的利与弊相关的知识,希望对你有一定的参考价值。
若问现今软件开发模式的热词,那就非“敏捷”莫属了!敏捷开发的确蕴涵着无限商机,但同时也是对中国软件产业的严峻挑战。对于起步远远滞后于西方的中国软件业来说,各种提高软件开发速度及降低软件开发成本的方式和措施都是值得探讨与借鉴的。笔者认为敏捷开发模式对中国的软件企业正是一个行之有效的开发方式。
早在上世纪60年代,北约(NATO)就提出了软件危机这一概念。在《人月神话》一书中,软件开发则被喻为让众多史前巨兽痛苦挣扎,却无力摆脱的“焦油坑”。随着需求和应用的日趋深入与复杂化,软件开发的难度和遇到的问题正以几何级数增长,“焦油坑”也由此变得更深、更大。
复杂程度高、开发周期长、结果无保证等等,作为软件开发的通病,激发了人们的无限潜能,并由此产生了软件工程学。但在实际工作过程中,需求变更在整个软件开发的生命周期中仍是一个永恒的话题,也是客户与服务提供方最纠缠不清的地方。改变的导火索源自方方面面,既有可能是一觉醒来后的灵光一现,也有可能是来自客户外部商业环境的改变。我至今还依稀记得最初从事ERP开发时,其中的某个项目排程模块,当团队按客户最初的要求完成并测试顺利通过时,客户的新要求突如其来,180度大转弯完全出于团队预料之外,项目开始时全队苦心经营的开发架构体系就这么被摧毁了,既然是现实,只能勇于接受!诚然,处理得当,这种变化就能协助双方得到一个更优秀的软件,也让客户对团队的快速应变产生好感,否则,如果固守原始的设计稿件,或者永远作为一个新功能要求追加资金,有可能得到一个Case,却失去一个用户。可见无论是业界公认的需求、变更、人员流动,还是各种看起来并不起眼的小事件,都有可能让软件开发流程重新洗牌。其实,一个过程中的再设计,有可能会降低开发的成本。
颠覆传统 适应变化
在传统的软件开发工作中,项目团队分配工作的重点是明确角色的定义,以个人的能力去适应角色,而角色的定义就是为了保证过程的实施,即个人以资源的方式被分配给角色,同时,资源是可以替代的,而角色不可以替代。
然而,传统软件开发的这些方法在敏捷开发方式中被完全颠覆。敏捷开发试图使软件开发工作能够利用人的特点,充分发挥人的创造能力。敏捷开发的目的是建立起一个项目团队全员参与到软件开发中,包括设定软件开发流程的管理人员,只有这样,软件开发流程才有可接受性。同时敏捷开发要求研发人员在技术上独立自主地进行决策,因为他们最了解什么技术是需要和不需要的。再者,敏捷开发特别重视项目团队中的信息交流,有调查显示:“项目失败的原因最终都可追溯到信息没有及时准确地传递到应该接受它的人。”
在土木工程实践中,有比较稳定的需求,同时建设项目的要求也相对固定,所以此类项目通常非常强调施工前的设计规划。只要图纸设计得合理并考虑充分,施工队伍可以完全遵照图纸顺利建造,并且可以很方便地把图纸划分为许多更小的部分交给不同的施工人员分别完成。
然而,在软件开发项目中,这些稳定的因素却很难寻求。软件的设计难处在于软件需求的不稳定,从而导致软件过程的不可预测。但是传统的控制项目模式都是试图对一个软件开发项目在很长的时间跨度内做出详细的计划,然后依计划进行开发。传统方法在不可预测的环境下,很难适应变化,甚至是拒绝变化。而与之相反的敏捷方法则是欢迎变化,目的就是成为适应变化的过程,甚至能允许改变自身来适应变化。
企业管理挑战多多
敏捷开发要求将大项目分解成为很多小项目,这样虽然易于考察、易于管理和易于控制,但同时也带来了项目内部各个小项目的协调问题。对于各个小项目的执行,人员分配和其它资源分配的冲突及进度的冲突是最主要的冲突,而且这些冲突如果解决不彻底,将会对整个大项目带来难以预测的负面结果。
敏捷开发最大的问题还是管理的问题。这和很多软件企业重技术、轻管理的做法是截然相反的,企业的这种心智模式一方面是源自管理人才的缺乏和项目组成员对管理制度的排斥;另一方面则是因为现行规范和管理制度与实际工作中的不合拍。从这一层面而言,敏捷开发对管理水平要求的提高是对软件企业领导者观念的一种挑战。
敏捷方法对需求不确定或常常变更的情形是有效的。但是,没有哪一种开发方法是适用于所有项目开发的。敏捷方法给传统软件开发带来了一种新的思路和开发模式,但也给企业带来了软件研发项目管理开发过程的整合困难。
在敏捷开发中,一个很重要的因素就是团队成员的自律性,换句话说,就是营建一个自管理的团队。虽然敏捷是一个项目管理层的理念,但这个理念决定了项目的每一个参与者,即程序员都需要有较高的素质。事实上,敏捷开发的实施很大程度上是一个自下而上的过程:无论是怎样的敏捷方法,都需要参与者主动领取任务,更重要的是主动交流。因此,有着良好自律性和主动性的程序员将成为项目成功的重要因素。虽然传统的项目也需要优秀的程序员,但不得不说敏捷开发对于每个程序员的要求会更加的高。
敏捷开发现在在欧美已非常普及,在国内也已经流传实践了几年,现在正逐渐进入到越来越多的项目中。虽然敏捷开发既有成功的案例也有失败的案例,但其高效可靠、节省成本的潜在特性决定了敏捷开发的广泛应用性。
但纵观国内整体市场,尚有不少软件企业并未采用敏捷开发,主要还是出于以下几点考虑:要做一个成功的敏捷开发者,需要同时具备码农、架构师、测试工程师和客户经理的能力,公司为培训这样的员工代价颇高;加之不少优秀程序员都是不善于社交、沟通的;并且对一个大型项目而言,每个人只负责其中的一个小功能,一旦某个人休假或者离职,那么顶替上的程序员可能对这块功能的业务不是特了解,当他去和客户沟通的时候就会显得不专业。
总而言之,在实际开发过程中,需要根据实际项目的需要选择合适的开发方法,并尽最大可能发挥人的创造性和潜能,利用不同人的不同特点,充分沟通,这才是在敏捷方法中真正需要学习的。
(文/谢然)
转载请注明出处
以上是关于敏捷开发的利与弊的主要内容,如果未能解决你的问题,请参考以下文章