——Phone GAL 0.2的开发总结与思考
(注:Phone GAL即Phone通用应用层,是Phone应用软件分层体系结构中独立的一层,直接为Phone专用应用层提供服务。该项目是国内某款3G移动电话应用软件中的重要组成部分。)
完成,如期完成,如期完成,如期完成。在持续而稳定的四次内部交付之后,Phone GAL 0.2版本的开发历时二十八个工作日于三月二日宣告结束。从我个人的角度来看,最终发布的版本是令人满意的,它的需求经过业务人员认真的验证,它的设计简单大方,它的实现经过了比较充足的测试,至今没出现任何问题。
我们这个小的开发队伍包括一个业务人员,一个开发人员,共有三个测试人员先后分别参与。版本被分为四次小的交付,在每一次交付的开发中,业务人员、开发人员、测试人员共三人坐在一起,面对面密切交流。在下一次交付计划启动之前,业务人员完成功能需求分析,并提供简洁明了的文档。在快速学习到足够的业务知识之后,开发人员估算日期,并将整个交付分割成若干两天左右的任务,形成进度表。此后的每天,我们做以下事情:
1. 业务人员继续下一次交付的需求工作,并随时回答其他人的业务问题;
2. 开发人员与测试人员协商测试接口,并不断产生简洁的代码,其中包含单元测试和功能测试代码;
3. 测试人员编写当天的测试用例和脚本,如果时间充足,他可以运行一个最简单的用例,并让开发人员解决其中暴露出的问题。
任务全部完成之后,团队集中火力进行功能测试,解决问题,然后整理全部产出,完成交付。
有什么不同对我们很多人来说,这样的一次开发是一次全新的体验,其中有些做法和想法与以往的开发过程有很大差别,最重要的有如下几点:
1. 全体成员坐在一起,面对面的交流;
2. 在团队中引入专职业务人员;
3. 测试与开发紧密结合;
4. 尽早交付,养成良好的交付习惯;
5. 提倡干净简洁的文档,减少中间产品;
6. 反对加班;
缺少沟通与交流,每个人都将成为信息孤岛,这里将不存在团队的概念。有效的交流是困难的,特别是对技术人员而言。抛开如何洞悉人类的复杂情绪与微妙感情不言,如果首先在物理位置上制造障碍,交流根本就无法保持畅快。面对面的交流是最有效的交流,其反馈速度、知识传播速度、沟通的效果,远非电话、Email可比。
需求是软件开发中最重要的一环,因而应该受到应有的重视。不是每个开发人员都是全能选手,需求捕获需要专职业务人员。不是每个人都可以去做需求分析,正如不是每个人都可以去做设计、测试。每个人都有不同的背景,应该安排合适的人去做合适的事情。
我们关注两类测试。程序员做单元测试,专职测试人员负责完成功能测试。测试应该与开发紧密地结合起来,系统以很高的频率被测试。每当有新的功能加入进来,测试便要开始。这样就能够保证我们始终拥有一个运行良好的软件。
尽早交付,最主要的目的是为了暴露风险。精心选择好第一次交付要完成的事情,系统的大多数主要风险将在第一次交付之时被发现。我们不允许错过任何交付日期,一旦养成良好习惯,交付良好的系统将成为理所应该、自然而然的事情。我们期望每隔一两个星期,我们的全体成员能够听到“锵”的一声——系统各部分已全部到位。
和详细设计文档一样,有很多文档都是昂贵的垃圾。它们之所以被要求,并不是因为它们有用,而是因为它们一直都被要求有。少数人会关注设计细节,细节应该出现在代码编辑器里,在那里它们外观上更美观,更容易阅读和理解。另外设计细节非常容易变化,其维护就像是一场梦魇,需要付出惨痛代价,稍稍跟不上节奏,便会漏洞百出。错误的文档如同一趟错误的航班,你想飞往纽约,结果却来到巴黎。
“有无数种方法可以浪费一天的时间,但是没有任何一种方法可以拿回一天的时间。”我们反对加班,因为我们希望每天的开发工作就像是呼吸,保持自然均匀的呼吸,没有必要戴上氧气瓶。当然,有时候我们不得不深呼吸,比如在交付前的一两天,这时候如果感觉不对劲,可以考虑加班。
当然,必须承认我们的工作存在着一些不足,主要有以下几点:
1. 频繁交流对其他同事造成影响;
2. 开发工作节奏太快以至无法进行充足的单元测试;
3. 功能测试没有做到自动化;
4. 没有进行程序性能上的测试;
5. 没有在开发过程中适当准备一些食品;
6. 开发结束时未能召集全体成员来一次轻松的回顾。
将鸡蛋打碎两年前我曾取笑我的一位朋友,因为他在做鸡蛋挂面时竟然将鸡蛋打碎!在我二十多年的记忆中,母亲是从来不会那样做的,她总是将去壳后的鸡蛋整只放进锅里。今年二月中旬的某天,有一次我不得不以鸡蛋挂面来解决自己的午饭问题。由于众所周知的原因,我将鸡蛋打碎。我发现,将鸡蛋打碎并不是什么不可思议的事情,事实上那碗面条别有风味。
软件开发中也有着类似的问题。有时候我们觉得别人的想法可笑甚至愚蠢,我们说事情怎么可能会是这个样子。那么为什么不能这么做呢?这个,这个,哦,实在说不出什么高明的道理。原来我们之所以有这样的想法,那是因为我们的教科书不是那样讲的,我们的主管、经理从来就不是那样做的。长期的直接教育、间接教育,潜移默化中已经造就了我们心目中不可触犯的直觉和真理。
条条大道通罗马。经验诚然宝贵,但成功之路颇有途径。软件开发方法学成果不断,软件项目管理的研究也在不停进展。放弃顽固,停止取笑,将鸡蛋打碎。
记住霍商效应:人们在尝试新东西时,他们会表现得更好。
忧伤的猴子去年十二月下旬的某天,我去和几个朋友会面,地点在上海动物园。在冬日温暖的阳光之下,动物园里并无生气。我看到那些关在笼子里的猴子,它们表情呆滞,眼神里流露出忧伤。有时候,研发人员就像这猴子,他们被繁文缛节困扰着,被复杂的过程控制着,被日复一日的挫败感笼罩着,青春、激情和创造力随时光一同流失。与此同时,团队的战斗力在下降,公司的生产力在下降。
在第四次发布完成之后,我以一封Email告知所有相关的人,我们的业务人员在回复中以这样一段话语结尾:在整个0.2的开发过程中与小浪、xingbo、wuyali和peishengqiang合作的非常愉快,希望我们能继续合作下去。
对此回复,您有什么样的感受?在回答这个问题之前请再思考这样一个问题:人一生辛勤地工作,那是为了什么?名利,金钱,还是地位?奢靡,辉煌,还是平淡?或许您还有更多的答案,但不管它是什么,我知道其本质很简单,而且您不会反对,那便是快乐。
我看到过很多有关项目的报道,无一不是说虽然过程很辛苦、很累人,但是看到多么多么成功的果实,人们又感到了欣慰。这样的同志无疑是值得钦佩和尊重的,但是遗憾的是他们体会到的并不是过程的快乐,而仅仅是因为结局。同样还有很多未经报道、不为人知的项目,人们疲惫不堪,互相抱怨,彼此隔离;项目以失败而告终,而人们则祈祷今后不要再与其他人工作在一起。现在再想一想,如果您是一个团队的领导,团队成员在一起愉快地工作,他们因此得以朝同一个方向努力,并牢牢胶冻在一起,还有什么比这个更能值得您欣慰?
获得快乐,这是人与生俱来的权利。要让人快乐,就不得忤逆人的本性。在打碎了无形的枷锁之后,在紧密地坐在一起之后,在频繁高效地面对面交流之后,在整个团队开始有节律地小步伐持续前进之后,等着吧,他们定能如期交付高质量的、有价值的软件,并在整个过程中体会到职业的乐趣。
2004年3月
参考书籍:
1. Tom Demarco & Timothy lister. 人件。
2. Tom Demarco. 最后期限。
3. Alistair Cockburn. OO项目求生法则。
4. Kent Beck. 解析极限编程——拥抱变化。
5. Robert Cecil Martin.敏捷软件开发 原则,模式,与实践。
6. three amigos.统一软件开发过程。
本文地址:http://com.8s8s.com/it/it37021.htm