敏捷方法横空出世
传统计划驱动的开发方法不仅没有获得良好的效果,并且由于强调过分过程控制,所以在开发过程中要产生大量的文档,以跟踪,检查设计各阶段的进度,设计状态,因此给程序员,管理者带来很多额外的工作量,这也是计划驱动方法一直为人诟病的地方,因此被称为重量级方法。这种方法的一个后果就是大量的开发时间被用在开发文档的撰写和维护上,而真正花在代码上的时间就相对少了;另外一个后果就是由于主要依赖过程控制,而不是程序员自我管理,开发过程的管理非常复杂和低效。程序员怨声载道,但是不得不服从。在计划驱动方法中,过程和工具不是为人(指程序员)服务的,而是为管理者服务的,程序员成了工具和过程的奴隶。这些都极大地阻碍了软件生产率的提高,这种开发模式越来越不适应现代瞬息万变的商业需求了。因此,在近几年,一种被成为敏捷方法的开发思想开始流行起来。
敏捷方法正是针对传统计划驱动方法的弊端而发展起来的。它是一类方法的总称。它有若干种不同的方法模型,比如水晶模型,scrum模型,XP编程。其中最著名的就是XP编程方法。虽然实际形式不同,但他们都有相同的思想。敏捷方法从另外的角度重新认识软件开发,颠覆了计划驱动方法的两个假设前提。就是我们在前面讲述过的1,需求固定。和2,人是可替换的。
敏捷开发的特征
敏捷方法有两个主要特征:敏捷方法的第一个特征是开发采用适应性方法,经过多次小型迭代开发过程逐步逼近实际需求,从而为客户提供实际需要的软件。这种开发方法的核心是,小型发布,不断集成和严格回归测试。每一次的小型发布都经过严格测试后集成到最终产品中,保证每一次小型发布都是经过测试的高质量的代码。在每一次小型发布后和客户沟通,得到客户反馈,不断修改,增加新的客户需要的功能,从而生产出符合客户需要的产品。开发过程以代码为核心,而不是以文档为核心。传统的以文档为主要输出的设计过程(需求分析,高层架构设计,概要设计,详细设计等)被大大压缩,以最快的速度进入代码的生产过程。设计以简单为原则,不进行多余的设计活动,小组通过密切而有效率的交流达到对设计的统一理解和认识。文档作为交流工具的作用被弱化,文档作为管理监督的功能被取消。一切以代码为核心,代码的编写,测试,发布,重构,然后进入第二次迭代。
敏捷开发的第二个特征是以人为本。这是革命性的转变。21世纪最重要的是什么才。这是一个连葛优这样的小偷团伙领导人都知道的道理。可是传统计划驱动方法却企图以文档,过程为核心,从而抹杀人的重要性。在敏捷方法里,程序员在软件开发中不再是单纯被管理的对象,而是开发的主体。所有的主要设计策略的制定,开发方法的选择,需求的确定都由程序员决定,因为他们才是真正生产软件的人,他们最了解如何开发软件。以往开发过程中的对开发过程的严格控制,检测,软件的各种测量等等都大大简化,因为这些措施都是为了监督程序员的。开发过程管理是为了更好地进行软件开发,而不是单纯为了管理者监测开发者的工作效率服务。开发者痛恨的官僚管理作风被统统取消,大家可能知道IBM, Microsoft, XEROR研究院的情况。在这些研究院里,公司只管为科学家提供足够的经费,良好的环境和诱人的待遇,但是公司从不干涉科学家的研究内容和方向,也不问科学家的生产率是都多少,科学家对自己的研究有决定权。敏捷开发在某种程度上借鉴了这种所谓科学家管理模式的思想。因为软件开发和科学研究一样都是高智力活动,它们生产的产品都依赖于参与者的主动参与而不是僵化的管理。虽然让一般人看起来似乎有点不可靠,但这可能是管理高智力活动的一种比较适合的方式。
敏捷开发的价值与局限
敏捷方法如何保证开发进度,开发效率,开发质量呢是一个传统开发方法想解决而没有解决好的问题。这个问题的答案就是靠人自我的管理,团队自我的管理。人是不可靠的,人不会像机器一样整齐划一,不犯错误;但人同时也是最可靠的,拥有超强个人能力,自律精神和充满信念和热情的人比任何机器都更有生产率。
但是任何方法都是有适用条件的。敏捷方法抛弃了繁琐的文档管理,就必须依靠程序员主动,开放,平凡的面对面的高效交流来达成对需求,目标,设计实现的理解;敏捷方法抛弃了机械、严格的过程控制,就必须依赖于程序员和开发团队的高标准自我要求:严格的自律,团队合作精神,个人高度自觉的主动性,责任感。敏捷方法的高效和高质量实际上是以程序员的高素质和开发团队的高度合作的开发文化为基础的。
因此敏捷方法的实施前提是必须找到愿意并有能力实施敏捷方法的团队。XP的创始人Beck也曾建议过有些情况是不适合采用XP方法的:比如,不能接受XP文化,团队规模过大,重构开销过大,等等。关于如何在一般组织中实施敏捷方法的讨论还在进行之中。
不管怎样,敏捷方法提供了一种崭新的,不同于以往的软件开发过程方法,敏捷方法提倡的简化设计,简化流程,迭代方法,以人为本的思想都是非常值得任何软件组织研究和借鉴的,它也是以往的软件开发大师们的开发实践成功经验的总结,我们必须学习,领会其根本思想,然后根据本组织的情况,有条件的借鉴其实践方法,把敏捷方法和传统开发方法结合起来,不断改进,持续提高,才能建立起一套适合自己的,具有本组织特色的,行之有效的软件开发过程体系。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!