软件开发中的理想与现实(一)——先把观念引进门

来源:互联网 发布:淘宝号封了支付宝解除 编辑:程序博客网 时间:2024/05/24 04:00

首先要说明的是,我在软件开发中还只是一个小小的菜鸟,只不过因为有幸逮到一个进入大公司实习的机会,亲身体验了CMM4中一些“规范”的流程、“正确”的做法,自己也出于好奇的看了一些相关的书,所以开始渐渐有些自己的想法。现在,回到自己应该呆的小团队,总觉得可以把自己的些许想法变成点什么实际的东西,最好还能在这团队里留下些什么,也算是不枉费我这段经历。所以,当我回到这个团队时我就开始策划如何实践自己所想的东西、什么东西可能适合这里。

为了活得更多可利用的资源,我提前和刘老师(就是团队负责人了)谈了自己的想法,她非常的赞同我做这样的实验,并承诺提供一切的方便,我当然非常感动,而且也很有责任感。

说来也巧,正好团队里面有个项目缺人却不缺技术,也就是说,里面存在大量的重复性劳动,如果用心分析,完全可以写一个自动生成代码的程序。我觉得这是我做实验的好机会,因为在这样的项目里面,我可以找到现场客户,并可以和他们随时交流,而且,刘老师还分给我一间独立的房间,让我带领一个三人小组随意使用这个房间的资源。白板当然必不可少,随处可贴的便条纸当然必不可少,无阻碍的工作环境当然必不可少,由于刘老师的支持,很轻易的,我获得了所能想到的所有东西。接下来,自然是要实现我的一些想法了。

2月15日晚,项目正式开张。

大家都还不了解我的想法,当然无法按我的想象开始工作,为此我准备了为期三天的培训,为大家介绍我所要引进的东西。它们列在下面:

  1. 测试驱动开发
  2. 迭代开发
  3. 每日会议

 在这三点中,我最看重的是“测试驱动开发”,我觉得这一条最难以贯彻而且最能够改变人的观点。如果接受了这个思想,其实也就为后续“有序”的开发打下极好的基础。所以今天晚上,我将把我所了解的测试驱动开发说给大家听,作为以后的一个铺垫。

为了阐明测试驱动开发与传统软件开发方法的不同和优点,我给大家提了一个有趣的问题:

 “如果我现在是你们的客户,需要你们画出我心中的刘老师的样子,你们会怎么做?”

大家各有想法,最容易得到认同的是:先画出刘老师的样子,然后给我检查,并在我的指导之下进行返工。

这确实是一个好办法,但我认为并不是最好的。因为把图先画完再交给客户,有可能造成前期投入太多无用成本,况且,我们的开发人员其实并不是素描专家,只是刚刚能完成工作而已,而且还有一个更关键的问题,其实我这个客户自己可能都不清楚心中的刘老师应该是什么样子(我真是一个合格的客户啊),我仅仅是有这个需求而已!如何让客户一开始就知道正在开发的东西是不是自己要的东西呢?我的回答是:

“可以考虑创建一些‘标准’的五官,并在客户面前进行‘组合’的工作,这样就可以降低开发难度并让客户及早的参与进来;当确定了一些五官之后,我们就可以在已经确定的框架上进行细化工作,即使客户发现五官和细节配合的不好,由于五官之间耦合很小,我们可以轻易的拿出另外的标准五官。”

我认为,针对现实的情况,这是更好的做法。其实我一说完大家就懂了,这不就是刑警们干的事情么?对!他们作为这个项目的开发人员再好不过了,虽然他们确实只是刚刚能够完成工作而已,但是他们往往能够成功的完成工作。这是方法的威力。

从某种意义上来说,这就是测试驱动开发所能带来的好处,它可以让每一步更为坚实、让客户更加满意、让工作难度降低、让模块耦合下降、让整体框架相对稳定、让额外投入变少……不止这些表层的东西,它更能改变一个人的编程思维,让我们从“分析式”的开发思维转变成“归纳式”的开发思维,这样,我们的想法就更加贴近客户了……

看大家似懂非懂的样子(嗯,其实我也不能算是懂得这些道理),我知道,我只有通过真正的编程体验才能够让大家了解什么是测试驱动开发,如何开发。是的,我已经想好了,明天就会开始这些演练。

 


 

参考文献:

[1] Kent Beck,测试驱动开发,中国电力出版社,2004.3
[2] Alistair Cockburn,敏捷软件开发,人民邮电出版社,2003.11
[3] http://www.extremeprogramming.org/