敏捷开发在西方的应用和对中国软件业影响
前面得到的都是一大堆文档到最后真正编辑代码的时候,得到的才是程序。敏捷式开发也会做高层分析或者架构分析,只不过这些设计非常的粗略,非常高层,针对一小部分需求进行设计开发,每一次小的叠带中是达到可以发布的软件,当这些功能积累到一定程度,客户决定把这个投到市场,最后一点一点完成。最大一个好处就是客户的反馈,无论怎么样,项目最后做完以后,才能提供反馈,而是开发过程中,每个循环的时候,可以让客户测试使用,对软件满意不满意,哪些东西想改,哪些东西不想改,将来开发哪些东西,软件开发掌握在客户手中,由他来决定,因为市场是他的,他是唯一知道软件开发应该往哪个方向的关键人。从软件投入使用角度来讲,产品上市时间非常重要,尤其是竞争性非常强的行业,金融保险,如果有一个产品提前上市,对市场占有率影响不可忽略,所以如果作为一个客户,觉得核心部门已经开发出来,可以投入市场让客户使用。就可以让客户决定,这种提高上市时间,最主要是能够极大加快商业利润的实现。从架构的角度来讲,提早进行编程,可以减少风险。
叠带式开发并不是没有人尝试过,像70年代的时候,IBM公司都做过尝试,发现代码成本太高,修改的成本需要重新做一遍,现在我们可以做最主要一点就是掌握了很多,包括OV的技术,我们知道能够怎样修改代码,然后就是汽车制造业瘦身管理,比如快速反馈提高质量,这种反馈包括频繁的发布,由最终的客户提供反馈,通过缩短叠带周期,通过设计和编程的交替让客户反馈。还有就是叠带的测试也成为了可能。
还有就是这个变化的修改成本和刚才看到的几个技术增长的形势正好相反,使得对系统的修改达到平稳的极端,在任何情况下对系统进行修改,而不会花很大的代价。很多人对敏捷开发尤其架构师,作为设计者来讲,原来坐下来把问题想清楚,再做文档,现在叠带式开发是不是没有设计了,现在敏捷式开发不排除设计,只不过这个设计不是由架构师单独坐在屋里想出来,而是会想到一些高层设计,开发过程中,每次叠带都要进行开发设计,设计开发,这样不断循环交替的形式做出来的,系统的设计等于从简单到复杂,到细化,最后逐渐形成。这个过程不是非常容易的事情,有很多技术要来支撑叠带式开发进行改进,最核心的就是测试系统开发,重购还有自动化。测试系统开发,就是在敏捷开发过程中,测试系统是扮演非常重要的角色。任何一个功能开发过程中,作为一个程序员,既要写出测试程序,也要写出功能程序,测试程序通常先于功能程序写出来,换句话说,拿到功能以后,跟分析人员进行讨论,先把测试东西写出来,怎么样进行运行测试,这个测试通过了,这个功能做出来了,这个时候再去写功能,把需求忘掉,写的目的是为了测试。很简单的一点就是它确实减少了很多浪费,因为这个过程中,光对需求的考虑通常会使得程序员写出很多没有必要的东西来,如果集中在测试上,能够减少很多的浪费,而且能够有效保证质量,这些测试可以不断重复执行,换句话说,一个系统开发过程中,这些终端程序不断增加,你手里的测试不断增加,从几十个,几百个,上千个,最后到系统开发快结束的时候,你可以随便运行一下所有的测试程序,就可以知道以前开发过的功能是否还在,是否没有被破坏掉,这就是我们的重构的概念成为可能,通过有继续性的修改来改善设计,这种对设计的改善是一小步一小步的改善。不是说想把三层的架构改成四层的架构,而是在一个类里有重复的,我怎么样提取一个方法出来,或者相似的东西提出一个类来。这个小范围改动,使得你的程序一直保持在具有极高的灵活性上,第一使你的细节设计可以得到不断提高,第二可以使你的将来进行任何大范围或者大规模的改动变成非常轻而易举的一件事情。这样才真正使得我们的设计是在不断改进过程中成为真正的可能。
还有一点就是从成本角度讲,自动化很重要的一个方面,很多我们提到的测试,编辑、集成都可以用机器完成,这些测试工具,大家可能都听说过。谁都可以自己来使用。敏捷开发还有一个很大特点,是以人为本,而不是以方法为本,因为软件开发是一个有创造性的脑力活动,不是一个简单的插接一些程序单元的工作,在这个过程中,如果设计出一套方法,不管什么方法,强加到人的头上,让每个人适应这个方法,最后开发的效果,反而不如组建一个进取性的团队让他们决定什么样的团队最适合自己,敏捷方法有很多的分支,细节不一样,先选择一个方法,开发过程中,不断对方法进行反思,直到达到开发效益最高的成果为止,换句话说,一个项目结束的时候,标准的敏捷开发,项目结束的时候,方法的细节和项目开始已经完全不一样了,这个方法最适合一个团队开发使用的方法,而且这个方法的改进,不是一个项目经理或者管理人员执行,而是项目所有人的工作,这一点其中CMM非常接近,CMM一到四都不可以改动方法,到五个时候就是可以改动了。所以说,敏捷式开发和CMM有相近的地方。我们这个时候对敏捷式开发做定义,敏捷开发不是单一固定方法,有很多的分支,包括极限编程,DSDM,五六年以前,这些方法开发的创始人,包括我们公司的首席构建家,他们一起开了会议,总结方法,提出敏捷开发的概念,换句话说,敏捷开发只要你具有跟这所有方法相似的,开发哲学,你就算敏捷开发,这些开发哲学体现在敏捷式开发宣言里,最核心的四点,我刚才讲的过程中已经反映出来了,第一个人和交互,与客户的协作远远比合同的协商更重要,对电话的相应远远比原守的计划更重要。
通过在中国开展业务差不多四五个月时间,我们发现中国市场有很多他们自己的特点,其中一个很多各种不同的软件不断在使用,生命周期比较短,我们遇到的情况,软件尤其定制软件很少有能做到第二、第三个版本以上的,通常做了第一个版本以后,就由其他的软件包来替代了。敏捷式开发变化的速度,对一个企业提高软件竞争力是很高的。还有一个就是对CMM过渡依赖,可能是认证业务,尤其印度走在前面,尤其外包方面得到很大利益。但是这牺牲了时间和客户满意度,如果你采用敏捷式开发,产品上市时间大大提高,第二客户满意度大大提高,因为CMM开发出来的东西,很多客户抱怨,你做出来的东西已经不是我想要的了,如果一个软件交换不是最后的成功,而是最后客户满意才是真正的成功。
上午包括很多报告都看到中国现在软件市场在世界上少有的,最主要是发展速度非常快,由于整个经济市场发展,电视上随之而来的机会非常多。还有一个特点,在以前的方法积累不是特别多,这也是一个好处,就是说,在西方过去几十年里犯过的错误得到的经验可以在中国很轻易的实施,但是西方的敏捷式开发走的历程太长,既使知道有些东西是对的,但是也没有办法实施新的技术,如果说中国能够把握住这个机会,带开发方法或者其他系统方面,采用非常先进在美国和欧洲非常先进的技术,而不是跟着它以前的东西来做的,很可能对中国企业制式来说,使得中国企业本身真正在局部上,跟美国企业进行竞争。比如有很多公司我们遇到的银行的公司,如果你是软件系统跟不上,你作为一个企业很难和他们竞争的。
如果说要赶上新一轮创新浪潮,一个是敏捷式开发从CMM,不是说CMM不要做,而是不要全部做,有些开发比敏捷式开发适合得多,在外包行业,印度很多外包公司已经开始使用敏捷开发的概念,如果我们还使用CMM的开发,永远落后于别人的后面。从架构方面,包括架构模式等等这些东西,以及开源代码,不仅仅是操作系统,在操作系统之上,有很多包括数据库,包括应用服务器,各种开发供应有很多的开源工具,我们公司还有一个很大特点,做很多很多开源代码,我们公司做定制软件的,我们现在有130多个开源项目了。在我们公司的网页上大家可以看到。我们公司在软件开发过程中,不管从技术还是开发理念上都是属于一个领先的地位。我们公司首席科学家拉丁帕迈先生写了很多这方面的书,包括写了很多书。在很多的大公司对我们的评价,主要技术上处于领先地位,创新是我们公司最核心的理念。我们刚才提到敏捷式开发方法,开源代码,这些都是我们公司处于领先的地位,结合中国的市场还有所遇到的机会和挑战,我们觉得把我们在西方遇到的这些问题和经验,带到中国来,能够真正的帮助中国的软件企业一起成长,走到世界领先地位。谢谢大家!