敏捷开发-开发以人为本

     再谈了需求(甚至可以说是complains)之后,就可以切入正体了,并且我将以我的一个项目经验来阐述敏捷开发?
      首先什么是敏捷开发?这个问题网上会有许多解释,事实上从技术的角度讲,就是将设计,编码,测试等传统软件工程学上的不同阶段混在一起。从开发哲学讲,就是以人为本!你可能会觉得诧异,将这些阶段混在一起不是进入了最初的混沌阶段了吗?当然不是,所以才有了许多敏捷开发方法学,包括XP Programming,TDD(Test-Driven Development)等。至于敏捷开发是谁提出的,我想许多人都会认为是Martin Fowler于01年发表的《敏捷开发宣言》那时候开始的吧。其实不然,敏捷开发是许多位优秀的开发人员,在实际的开发过程中,发生了诸如我上篇提到的诸多抱怨后,认真总结,不约而同的悟出的,真的是悟出的!这里举个例子, 在我离开kst的前几天,曾经参加了金碟中间件的apusic的宣传会,当时,金碟的cto,中国java的diyiren,JCP的中国代表袁红岗先生也出席了(对此人比较崇拜,所以用了许多头衔)。他在会上说,在01年之前,他觉得他在软件业没有什么特别成就感,虽然也写了中国第一个windows平台财务软件,卖了10多个亿(牛人...)。01年之后,他对他过去的开发经验做了一些,总结,并悟出了一套方法学,并在以后的开发工作中加以应用(包括领导开发了同Websphere,Weblogic同一级别,同样获得Sun J2EE规范认证的application server:APUSIC),这才有了一定的成就感。之后,Martin Fowler来了中国,袁红岗也参加了见面会,在和Martin Fowler交流之后,他才觉得,原来世界上有这么多人想法和他一样(汗...)。不错,他悟出的那套方法论就是敏捷开发!
      事实上我对这其中的许多方法学感受不深,不过我下面会谈到我参与过的一个算是用了半个敏捷开发的项目吧。不过我首先想提出的做为一个程序员,如果要开发一个项目,你第一件事想到的是什么?是设计吗?不,是代码!想马上写一段代码试试看?这在传统软件工程学中,是要被BS的。但敏捷开发不同,以人为本吗。事实上仔细想想,你实际上是在用代码做设计,而不是传统软件工程学中所说的编码过程!以人为本,所以这里不需要你有严格规范的设计文档,不一定非要用建模工具,但是有一点还是需要的,你写的代码,或者说你设计的框架,别人一定要看懂!怎么看懂?随你了,你可以用UML建模工具将代码做成UML模型(事实上我认为UML真正的用途在于程序员之间的交流,而非建模本身),可以写简单的设计文档,甚至,真正优秀的代码只通过注释就可以在程序员之间进行没有任何障碍的交流。当然了,这是需要用极高的代码质量保证的。袁红岗就说,他从不用任何建模工具,他就是考代码建模的,如果有任何人读不懂他的代码,就说明没写好,就要重写!
       下面要说的是测试驱动(tdd),什么是测试驱动?就是现有测试,再有代码!这听起来觉得匪夷所思,但如果你是从客户的角度取考虑问题,那自然是理所当然的了。你最终要呈现给客户或者说是其他调用你的代码模块的东西就是,一些输入和期望的输出,而就进有无期望的输出就是通过测试完成的!于是这又是一个以人为本的体现!再者,事实上tdd能尽量的把测试工作再编码阶段就完成,这样做的莫大好处在于补救bug的代价变小了,在软件工程学中有这样一个说法就是,bug发现的越完,补救的代价越大?如果你完全的依靠传统软件工程学中的测试步骤,以及测试人员的话,那补救bug的代价将会非常之大,开发人员甚至已经忘了这段代码的作用了。而如果采用测试驱动的方法学,将大大的缩短最终的集成测试的时间,使尽量多的bug在编码阶段就已经得到了解决!
       之后我就要结合一下我所做过的一个算得上使半个敏捷开发的项目的经验吧。之所以说半个使因为他用到了tdd方法,可又不完全是tdd。因为当时对我们的要求是写完一个方法就要做Junit或Dbunit单元测试。一开始是比较反感的,因为觉得要花费额外的时间去完成一个功能。但是最终的结果却是项目整体时间的大大缩短,最后的集成测试花了2天不到就完成了。(事实上不仅如此,在开发过程中往往会调用别人负责的模块,由于每个功能的完成都有单元测试的保证,碰到这种情况时,几乎也没有因为别人代码的问题而耽搁过)。当然了tdd的方法学还需要有工具的支持才能事倍功半。当时我们用了一个日构件系统,做到了每日集成,每日测试,每天这个系统都会在半夜自动把cvs上的代码下载下来,把所有的测试案例跑一遍,第二天开发人员来到公司之后所要做的就是登录这个日构件系统,看看每个人负责的测试案例有没有都通过,代码覆盖率时多少。事实上这又是另一个敏捷开发的方法,XP Programming。
      所有网上的文章都在描述敏捷开发所带来的效率和以人为本。不过我想在中国敏捷开发能够未我们带来的最重要的东西却是真正对程序员的尊重!敏捷开发的方法学是要开发人员以对开发工作的热情和开发人员之间的协作,良性竞争为基础的。这在中国目前的以外包业为主的软件业中是很少见的,我们目前的软件业所需要的似乎只是循规蹈矩的按照传统工程学的工序一步步走下来的,编写无数重复代码的廉价劳动力!而中国却还一直在叫嚣缺乏高级软件人才!事实上正是所谓的有了高级,低级,软件蓝领,软件白领之分,才导致了优秀人才的缺乏!正是由于这些对程序员的不尊重,才导致了中国软件业落后的局面!程序员就是程序员,既不是做简单重复脑动的所谓软件蓝领,也不是制定一些往往事与愿违的开发计划,管理管理手下的经理人员。那是什么呢?程序员是能够改变世界的工程师!是把现实问题,转换成计算机描述并加以解决的技术人员!是为这个世界变得更简单而出力的劳动者!最重要的是,他们是在感受世界的人!
     最后还是用这句话来结束这篇blog:开发以人为本!
 
展开阅读全文

没有更多推荐了,返回首页