time 
设为首页】【收藏本站
当前位置: 主页 > 软件工程 > 软件过程 > 敏捷、生产力和商业价值

敏捷、生产力和商业价值

时间:2009-12-04 22:56 点击:843次 字体:[ ]




  我们曾举办了一次为期三天的敏捷培训,学员主要是一些知名软件公司的项目经理和资深开发人员。培训期间,我们带领学员进行了丰富的游戏,通过寓教于乐的方式让他们体验了敏捷方法学的大部分知名实践,并讲解了敏捷方法学推崇的价值和原则。从学员的回顾以及意见表上可以看出培训效果是显著的,但是在培训过程中学员也提到一些问题,主要是对敏捷方法学的实践和价值比较疑惑。在回答问题的同时,我们能感觉到随着敏捷方法学在国内被引入、被宣传,很多软件组织或人员对敏捷方法学都已经有了基本的了解,但是对敏捷方法学向软件行业承诺的价值还存在不同程度的顾虑。

  作为以“交付更多客户价值”为核心原则之一的方法学,敏捷方法学向软件行业承诺:敏捷方法学能提升软件团队交付能力,给客户交付更多商业价值。为什么敏捷方法能做到这两点承诺?软件组织如果没有实施过敏捷方法学,或者实施方法不得当,通常会对这两点产生怀疑,从而对是否决心在组织内部实施敏捷产生犹豫和观望情绪。那我们就来分析敏捷方法学是怎么做到的。

  敏捷方法学提升交付能力

  提升软件团队的交付能力,其实最好的办法就是释放团队的软件生产力,而不是试图去规范它、约束它。这里,我们用“软件生产力”来定义软件团队开发软件的能力,包括软件团队在软件开发过程中为了解决各种各样的问题而使用的开发语言、开发工具以及开发实践。

  软件生产力是不断发展的。为了解决软件开发过程中的问题,方法学才被提出来。从某种意义上讲,只有方法学积极采纳并改造新的软件生产力,而不是因循守旧地墨守成规,才能真正释放软件团队的软件生产力。

  那么问题就变成:敏捷方法学如何采纳并改造现在的软件生产力?

  现在的软件生产力

  在开发语言方面,现在JVM/C#.NET是转为平台语言,支持在其基础上多语言开发,比如Jruby,groovy,jython等语言就能在JVM上运行。原来不受重视的脚本语言,像ruby、python等也是重登大雅之堂,给软件团体提供了更多的选择。

  IDE:现代IDE不只是集成了编码、运行和调试功能的工具,而且是把应用程序开发的整个生命周期都纳入管理,从分析建模、代码编写、配置管理、构建管理,再到测试的集成,突破了原来软件过程里定义的各个环节的边界。一些大受好评的IDE无不是内建了ALM的支持,并集成了软件开发的大部分最佳实践,如Intellij IDEA。

  Build tool:自动构建越来越受到开发团队的欢迎,Ant、nant、rake、gant……各种平台各种语言的build工具不仅提供了丰富的build task,而且给开发人员进行扩展提供了足够的自由度。至于maven,更是希望充当项目底层设施的角色,成为管理项目不可或缺的一部分。

  Revision management tool:在项目开发过程中,版本管理是非常重要的一个部分。随着技术的发展,VSS这种笨重的工具早已被冲进历史的车轮。而且除了CVS、SVN这些central server的版本管理工具,分布式版本管理工具,如git、mercurial也是日益成熟。

  前面只是简单列举了现在软件开发过程会用到的一些工具,其实,现在的软件开发实践也有非常鲜明的特征。很多在日常开发中涌现出来的开发实践,并不专属于特定的软件方法,却早已得到业界的认可。

  Developer unit test:自Kent Beck的junit框架发布以来,人们才意识到开发人员写unit test也是如此的轻巧和方便。在其他语言方面,testNG、nunit、runit等测试框架也极大地推广了单元测试的编写。

  Refactoring:重构是优化代码设计的重要手段之一,在Martin Fowler出版Refactoring之后,才真正被大家所关注。up-front design就逐渐被日常开发中的incremental design所取代。而随着对重构的研究,越来越多的相关书籍给开发人员提供了更多的实践指导,比如Refactoring to Pattern等。

  Periodic auto build:因为SCM工具和integration tools出现,自动构建越来越受到开发团队的欢迎:一方面提高了软件产品的质量,减少了产品对特定环境的依赖;另一方面减少了重复乏味的工作,也给开发团队节省了时间和精力。像Cruisecontrol这样的开源工具出现之后,自动构建就时时刻刻都在进行,并能及时给开发团队提供反馈。
敏捷方法学释放现在生产力

  那么,敏捷方法学里面是如何对待这些软件生产力呢?是不闻不问,还是积极采纳它们,按照自己的价值观和理念改造它们,进一步提供更有效的开发实践呢?我们以一些知名敏捷实践为例,看看这些实践与当前软件生产力之间是什么关系。

  Test-Driven Development

  TDD的实践形式可以简单地归纳成:添加足够简单使得失败的测试,尽可能简单地修改功能代码使测试通过,重复这个过程;如果功能代码产生了bad smell,你需要重构来消除。用简单的方程式来描述,就是:

  TDD = TFD + Refactoring

  很明显,这个最有名的实践脱胎于unit test,又融合了重构的优点。“通过unit test可以改善代码质量”、“持续重构可以改善程序设计”,这些观点已经得到广泛认可。敏捷方法把developer unit test和重构吸收进来又加以改造,使得开发人员通过小步前进的方式获得更高的生产率,并交付更高质量的软件。而IDE集成ALM工具,更是让普通开发人员在应用TDD的开发过程中如虎添翼。

  Pairing

  Pairing 要求两个人在一起结对工作,结对的双方不要求都是开发人员,可以是开发人员与商务分析人员,或者开发人员与质量分析人员,又或者是商务分析人员与质量分析人员,甚至是团队成员与客户。

  坚持代码评审以及保持团队概念一致性是两项被很多经验证明能提高生产率和交付质量的实践。Pairing就把这两者做到了极致:编码设计的时候,始终有另外一个人在评审你的代码,从一开始就杜绝了不良设计和代码的引入;工作的时候,始终有另外一个人和你保持对概念理解的一致性,便于团队保持概念一致性。

  Continuous integration

  有了持续集成服务器Cruisecontrol或者Cruise、自动构建工具ant等等、版本管理工具,以及其他代码分析工具,比如测试覆盖率工具、checkstyle工具,持续集成涉及的功能越来越强大,不仅能自动快捷地给开发团队提供构建结果,而且能提供其他更多的分析结果以帮组开发团队改进软件质量。这样,开发团队通过快速得到构建反馈而提升了生产率,也可以凭借分析结果验证交付软件的质量。

  敏捷方法实践还有很多,比如Stories、story wall、stand up、retrospective等等。不管这些实践形式如何,其实我们都能从它们身上看到已经存在并被证明能提升生产率的开发实践。也就是说,敏捷方法学充分利用了已有的软件开发工具和开发语言的威力,极大地采纳了被证明了的软件开发实践,再按照一定的价值观和理念进一步改进这些开发实践。

  从敏捷方法学对待现在软件生产力的态度,我们可以说敏捷方法学面对新兴软件生产力是积极采纳的,释放了软件团队最大的软件生产力,从而促进了软件团队交付能力的提升。



本文地址 : http://www.fengfly.com/plus/view-159843-1.html
标签: 方法 软件 敏捷 生产力 价值 商业
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码: