敏捷那些事儿(三)

来源:互联网 发布:在手机上写js代码 编辑:程序博客网 时间:2024/04/29 01:28

       离第二篇已经很长时间了,今天终于能够重新来跟大家一起探讨下敏捷模式。

 

      上次谈论了有关敏捷的宣言和一些敏捷项目失败的原因分析。敏捷宣言只是敏捷创世团队提出的一种口号,即思想,并不是一种可抄袭、可复制的模式。因为敏捷并不是一个产品。敏捷的产生,是因为敏捷的创始者们在敏捷诞生之前的开发过程中犯了错误,所以他们总结出了4条原则,希望节省后来人的时间。但是,学习敏捷不能模仿,不是复制,更不能抄袭。敏捷是一种思想,它需要的是行动者(Actor)。也就是说,他们提供给了我们一些敏捷的实践总结(源于敏捷创始者),给出了我们可以参考的形式。而在我们自己的项目过程中,不会只出现他们遇到过的问题,这就需要我们自己去根据他们的经验和思想,来总结出我们自己的敏捷之道-----敏捷实例化。

 

      敏捷开发模式,有别于传统瀑布式的开发模式,而对于很多项目而言,瀑布式的模式是不适合的,而且很多项目都会以失败而结束。也许是大家习惯了瀑布式的思维模式,而忽略了软件开发的本质-----软件开发过程充满了创新性(novelty)和不可预见性(unpredictabiliby),因为软件属于-----新产品开发,而非预见性制造。

 

      传统瀑布式的模式,适合于预见性的制造,因为你知道最终的结果是什么,而且每个规定好的阶段结果是什么都是可预见的,如果在一个装配线上制造移动电话,那么预先定义的规格说明和生产步骤就可能很准确。当制造了一些电话,并且测量了相关进度之后,就可能准确的估算和调度未来电话的制造过程。(该例子引自《敏捷迭代开发-管理者指南》)。可以再说一个更贴近的例子,印钞厂的生产线。他们的需求就是印刷出合格的money(纸币或硬币),而他们的过程则是由多个阶段串联起来的。首先是刻制模板,其次是纸张选择,再次是印刷。这些都是可以预见的,因为需求明确,而且结果也清楚,加上批量生产的动作,因此,整个过程中几乎没有创新或变动。

       而软件却恰恰相反。过程变化频率高、创新性强。更何况没有以前的类似案例可供参考,那这样的一个生产过程就是一个新产品的开发或者叫创新项目。客户起初确定软件功能需求,然后开发人员开始编码、测试等工作。但突然交付前一周,客户又有了新的改变,原来某个功能不要了,需要换其他的一些东西。完了,直接崩溃。很多软件从业人员都有过这样的经历。其实,在瀑布式的生产过程中,没有一个人都是心里100%有底气的,因为他们无法预测到下一秒钟能发生的变化-----这就是创新。

    

     比较下预见性制造和新产品开发,我们就可以发现,其实,我们一直在犯同样的错误:

 

 

     预见性制造新产品开发在第一次完成规格说明后,就进行构建不可能在前期创建一成不变的、详细的规格说明 在开始阶段,就能够估算出具有参考价值的工作量和成本在开始阶段,很难进行预期分析,随着经验数据的出现,

计划与估算的可能性才会相应增加

有可能识别、定义、调度和安排所有的细节活动在开始阶段,识别、定义、调度和安排所有的细节活动是不可能的。

通过构建反馈周期,推动自适应步骤

一般情况下是不去适应没有预定义的变动,并且改动率比较低一般情况是主动适应没有预定义的变动,并且改动率比较高

       
  

     可见,我们在使用瀑布式的开发模式时,暴露了很多我们已经看到但并没有思考如何去解决的问题。正如许多项目一样,采用新的带有bug的技术,加剧了创新性和不可预见性。

 

     瀑布式的生命周期形式,有着笨重的前期规格说明、估算、推测计划等适用于预见性的生产项目的条件,却无法在软件项目上很完美的诠释其优势。在此,我并不是要完全否定瀑布式的模式,只是就软件项目而言,瀑布式并不适合。而在我们开始拒绝采用那些瀑布式流程的前期规格说明时,我们的理由就是:

 

    1、客户或者用户不能明确他们到底要什么。

    2、客户或用户很难陈述所有的需求和知识,因为他们不是专业技术人员。

    3、客户们想要的细节只能在开发过程中逐步的加强和展现。

    4、软件细节对于客户来说算是比较复杂的东西了。

    5、一旦客户们看到产品的开发,那么他们就很有可能会改变最初的想法,而给出“奇思妙想”。

    6、对于同行间同类产品的竞争,客户势必会因为商业上的压力而改变一些需求,甚至是加强某些方面功能点。

 

    所以说,在软件开发过程中,因为不可预见性等因素,我们需要更加高效的手段和方法-----敏捷-----构建软件是复杂的过程,属于新产品的开发,修改频度很高,而不是仅仅预见性的批量生产活动。这是敏捷和迭代方法动机的核心所在,也是我们实行敏捷前必须要了解的点。

 

    敏捷,是一个概念,一种思想,一些总结,并不是一个实体或一个实物。敏捷意味着成功与收益。所谓成功,就是指在与对手的竞争中脱颖而出;而收益则是说,在许多公司望而生畏的竞争风暴中,获得利润、市场份额和客户。这才是生产软件的最根本的动力和因素。

 

 

    OK,今天写了些关于敏捷和传统瀑布式的区别和优势,下一次会开始逐步对几种敏捷方法分类进行一个概念性的说明和解释,让敏捷的概念深入到实际开发过程中。下周见!

    

 

     

原创粉丝点击