荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: EDE (Eddie阿德), 信区: SoftDev
标  题: The Joel Test: 软件开发成功 12 法则
发信站: 荔园晨风BBS站 (2005年12月17日11:23:19 星期六), 站内信件

看前面时觉得很苛刻的样子,但是看到每一点细说时才领悟到
"就应该这样",我想即使是一个人开发,照着来还是很有好处的

Joel 衡量法则
1.你们用不用源文件管理系统?
2.你们可以把整个系统从源码到CD映像文件一步建成吗?
3.你们每天白天都把从系统源码到CD映像做一遍吗?
4.你们有软件虫管理系统吗?
5.你们在写新程序之前总是把现有程序里已知的虫解决吗?
6.你们的产品开发日程安排是否反映最新的开发进展情况?
7.你们有没有软件开发的详细说明书?
8.你们的程序员是否工作在安静的环境里?
9.你们是否使用现有市场上能买到的最好的工具?
10.你们有没有专职的软件测试人员?
11.你们招人面试时是否让写一段程序?
12.你们是否随便抓一些人来试用你们的软件?

“Joel 衡量法则”好就好在你只需照着逐条回答以上问题,然后把所答为“是”的问题
算成一分,再加起来就可以了,而不需要去算什么每天写的程序行数或程序虫的平均数等等
。但咱丑话说在前面,可别用“Joel 衡量法则”去推算你的核电站管理程序是否可靠。

如果你们得了12分,那是最好,得了11分还过得去,但如果只得了10分或低于10
分,你们可能就有很严重的问题了。严酷的现实是:大多数的软件开发公司只能得到2到
3分。这些公司如果得不到急救可就玄了,因为像微软这样的公司从来就没有低过12分


当然,一个公司成功与否不仅仅只取决于以上标准。比如,让一个管理绝佳的软件公司去
开发一个没有人要的软件,那开发出来的软件也只能是没有人要。或反过来,一帮软件痞
子以上标准一条也达不到,没准照样也能搞出一个改变世界的伟大软件。但我告诉你,如
果不考虑别的因素,你只要能达到以上12条准则,你的团队就是一个可以准时交活的纪
律严明的好团队。

1. 你们用不用源文件管理系统?
我用过商业化的源文件管理系统,我也用过免费的系统,比如CVS,告诉你吧,CVS挺好用
。但如果你根本就没有用源文件管理系统,那你就是累死了也没法让你的程序员出活:他
们没法知道别人在改动什么源文件,写错了的源文件也没法恢复。

使用源文件管理系统还有一大好处是,由于每一位程序员都把源文件从源文件管理系统里
提出来放到自己的硬盘里,几乎不会发生丢失源文件的事,最起码我还没听说过。

2. 你们可以把整个系统从源码到CD映像文件一步建成吗?
这句话问的问题是:从你们最新的源码开始到建立起能够交出去的最后文件,你们有多少
步骤要做? 一个好的团队应该有一个批处理程序一步便可将所有的工作做完,像把源文件
提取出来,跟据不同的语言版本要求(英文版,中文版),和各种编译开关(#ifdef)进
行编译,联接成可执行文件,标上版本号,打包成CD映像文件或直接送到网站上去,等
等等等。

如果这些步骤不是一步做完,就有可能出人为差错。而且当你很接近产品开发尾声的时侯
,你可能很急于把最后几个虫解决,然后尽快地交活。如果这时候你需要做20步才能把
最终文件制出来,你肯定会急得要命,然后犯一些很不该犯的错误。

正因为这个原因,我工作的前一个公司从用WISE改用InstallShield:我们必需要让我们的
批处理程序完全自动化地,在夜里,被NT scheduler起动把最终文件制成,WISE不能被NT
scheduler启动而InstallShield可以,我们只能把WISE扔掉。(WISE的那帮家伙向我保证
他们的下一代产品一定支持在夜里自动运行.)

3. 你们每天白天都把从系统源码到CD映像做一遍吗?
你们有没有遇到过这样的事情:一个程序员不小心把有毛病的源码放进源文件管理系统,
结果造成最终文件没法制成。比如,他建立了一个新源文件但忘了把它放进源文件管理系
统,然后他高高兴兴锁机回家了,因为在他的机器上整个编译得很好。可是别人却因为这
没法工作下去了,也只好闷闷地回家了。

这种造成最终文件没法制成的情况很糟糕,但却很常见。如果每天在白天就把最终文件制
一遍的话,就可以让这种事不造成太大危害。在一个大的团队里,要想保证有毛病的源码
及时得到纠正,最好每天下午(比如午餐时)制一下最终文件。午餐前,每个人都尽可能
地把改动的源文件放到源文件管理系统里,午餐后,大家回来,如果最终文件已经制成了
,好!这时大家再从源文件管理系统里取出最新的源文件接着干活。如果最终文件制作出
错,出错者马上修正,而别人还可接着用原有的没问题的源程序干活。

在我以前曾干过的微软Excel开发组里,我们有一条规定:谁造成最终文件制作出错,谁就
得被罚去负责监视以后的最终文件制作过程,直到下一位造成最终文件制作出错的人来接
任他。这样做不仅可以督促大家少造成最终文件制作出错,而且可以让每个人都有机会去
了解最终文件制作过程。

4. 你们有软件虫管理系统吗?
不论你有任何借口,只要你写程序,哪怕只是一个人的小组,如果你没有一个系统化的管
理软件虫的工具,你写的程序的质量一定高不了。许多程序员觉得自己可以记得自己的软
件虫。没门!我从来记不住超过2到3个软件虫。而且第二天早上起床后忙着去买这买那
,好不容易记住的软件虫早忘掉了。你绝对需要一个系统来管住你的那些虫。

软件虫管理系统功能有多有少。但最少要管理以下几种信息:
1.如何重复软件虫的详细步骤
2.正常情况(无虫)应是怎样
3.现在情况(有虫)又是怎样
4.谁来负责杀虫
5.问题有没有解决
如果你觉得用软件虫管理系统太麻烦,可以简化一下,建立一个有以上5列的表来用就行
了。

5. 你们在写新程序之前总是把现有程序里已知的虫解决吗?
微软Windows Word的第一版的开发项目曾被认为是“死亡之旅”项目。好象永远也做不完
,永远超时。所有人疯狂地工作,可怎么也完成不了任务。整个项目一拖再拖,大家都觉
得压力大得受不了。最后终于做完了这个鬼项目,微软把全组送到墨西哥的Cancun去度假
,让大家坐下来好好想想。

大家意识到由于项目经理过于强求程序员们按时交活,结果大家只能匆匆地赶活,写出的
程序毛病百出。由于项目经理的开发计划并没有考虑杀虫的时间,大家只能把杀虫的任务
往后推,结果虫越积越多。有一个程序员负责写计算字体高度的程序,为了图快,居然写
一行“return 12;”了事。他指望以后的质检人员发现这段程序有毛病后报告他再改正。
项目经理的开发计划事实上已变成一个列写程序功能的清单,而上面列的所谓程序功能迟
早都会成为软件虫。在项目总结会上,我们称这种工作方法为“绝对劣质之路”。

为了避免再犯这个错误,微软制定了“零缺陷策略”。许多程序员嘲笑这个策略,觉得经
理们似乎在指望靠行政命令来提高产品质量。而事实上“零缺陷策略”的真正含义是:在
任何时候,都要把解决现有程序里的问题作为首要问题来抓,然后再去写新程序。

为什么要这样做呢?
一般说来,你越不及时地杀虫,杀虫的代价(时间和金钱)就会越高。比如,你写程序时
打错了一个字,编译器马上告诉你,你很容易就把它改正。你刚写好的程序在第一次运行
时发现了一个问题,你也很快就能解决它,因为你对你刚写的程序还记忆犹新。如果你运
行你的程序时发现了一个问题,可这个程序是几天以前写的,你可能就需要折腾一会儿,
还好,你还大致记得,所以不会花太长时间。但如果你在你几个月以前写的程序里发现了
问题,就比较难解决了,因为你已经忘了许多细节。这时候,你还没准儿正忙着杀别人程
序里的虫呐,因为这家伙到加勒比海阿鲁巴岛度假去了。这时候,解决这一堆问题的难度
不亚于从事尖端科学研究。你一定得小心翼翼地,非常系统化地从事,而且你很难知道多
长时间你才能把问题解决。还有更糟糕的,你的程序已交到用户手里了,才发现问题,那
你就等着套腰包吧。

总结起来,就一条:越早解决问题,越容易解决。

另外还有一个原因,刚写的程序里发现问题,你能够比较容易地估算解决它的时间。举个
例子,如果我问你写一段程序去把一个列表排序需要花多长时间,你可以给我一个比较确
切的估计。如果你的程序,在Internet Explorer 5.5安装以后,工作不正常。我问你要多
长时间把这个问题解决,你恐怕都估计不出来,因为你根本就不知道是什么原因造成了这
个问题。你可能要花三天时间才能解决,也有可能只花两分钟。

这个例子告诉我们,如果你的开发过程中有许多虫没有及时解决,那你的开发计划肯定不
可靠。反过来,如果你们已经把已知的虫全部解决了,要做的事只是写新的程序,那你的
开发计划就会比较准确。

把已知的虫全部解决,这样做还有一个好处:你可以对竞争对手快速反击。有些人把这叫
着“让开发中的产品随时处在可以交给用户的状态”。如果你的竞争对手推出一个新的功
能想把你的客户抢走,你可以马上在你的产品里加上这个功能,立刻将新产品交付用户,
因为你没有一大堆积累下来的问题要解决。

6. 你们的产品开发日程安排是否反映最新的开发进展情况?
为什么我们需要开发日程安排?如果你的程序对公司的业务很重要,那公司就必须知道你
的程序何时能写完。满世界的程序员都有一个通病,那就是他们都搞不清自己何时才能写
完要写的程序。他们都只会对管理人员嚷嚷:“等我做好了就做好了!”

不幸的是,程序写完了,事远远没完。作为一个公司,在发行产品之前,还有许许多多的
事情要做:何时做产品演示?何时参加展览会?何时发广告?等等。所有的这一且都依赖
于产品的开发日程安排。

定下产品开发日程安排,还有一个很关键的好处:它逼着你只做叫你做的功能,甩掉那些
可要可不要的功能,否则这些可要可不要的东西有可能把你缠住。请看

7. 你们有没有软件开发的详细说明书?
写软件开发的详细说明书就像是绣花:人人皆知是好东西,可没谁愿意去做。
我不知道这是为什么,也许是因为多数程序员天生就不喜欢写文章。其结果是,一个开发
组里的程序员们,宁可用程序来沟通,也不愿写文章来表达自己。他们喜欢上来就写程序
,而不是写什么详细说明书。

在产品的前期设计过程中,如果你发现了一些问题,你可以轻易地在说明书里该几行字就
行了。一旦进入了写程序的阶段,解决问题的代价就要高得多了,不仅仅是时间上的代价
,而且也有感情上的代价,因为没人愿意将自己做成的东西扔掉。所以这时候解决问题总
有一些阻力。

没有产品开发详细说明书就开始写程序,往往会导致程序写的乱七八糟,而且左拖右拖不
能交付使用。我觉得这就是Netscape遇到的问题。前四个版本的程序越写越乱,以至管理
人员作出一个愚蠢的决定:把以前的程序统统扔掉,重新写。后来他们在开发Mozilla时又
犯了同样的错误。产品越做越乱,完全失控,花了几年的时间才进入内部测试阶段。

我最得意的理论是:如果让程序员们接受一些写文章的训练如an intensive course in
writing,他们就可能会改变一下不写说明书的坏习惯,而以上所说的糟糕的例子就有可能
少发生。

另一个解决问题的办法是:雇一些能干的项目主任,专职写产品开发详细说明书。
不论采用以上哪种方法,道理只有一个:在没有产品开发详细说明书之前,决不可写程序


8. 你们的程序员是否工作在安静的环境里?
当你让你的智囊们工作在安静,宽敞,不受人打扰的环境里,他们往往能更快地出活,这
已是不争的事实。有一本经典的讲软件开发管理的书Peopleware 把这个问题阐述得很清楚

问题在于,我们都知道最好不要打断这些智囊们的思路,让他们一直处于他们的最佳状态
中,这样他们就能全神贯注,废寝忘食地工作,充分发挥他们的作用。作家,程序员,科
学家,甚至篮球运动员都有他们的最佳状态。

问题还在于,进入这个最佳状态不容易。我觉得平均起来,需要15分钟才能进入最佳状
态,达到最高工作效率。有时侯,当你疲劳了或已经高效率地干了许多工作了,你就很难
再进入这个状态,只好干点杂事打发时间,或上网,玩游戏等。

问题更在于,你很容易就被各种各样的事打扰,被拽出你的最佳状态:噪音啦,电话啦,
吃午饭啦,喝杯咖啡啦,被同事打扰啦,等等。如果一个同事问你一个问题,只花你一分
钟,可你却被拽出你的最佳工作状态,重新回到这个状态需要花半小时。你的工作效率因
此而受到很大影响。如果让你在一个嘈杂的大房间里工作(那帮搞网站的家伙还就喜欢这
样),边上的推销员在电话里大叫大嚷,你就很难出活,因为你进入不了你的最佳工作状
态。

作为程序员,进入最佳工作状态更难。你先要把方方面面的细节装在脑子里, 任何一种干
扰都可能让你忘掉其中某些东西。你重新回来工作时,发现好些东西记不起来了(如你刚
用的局部变量名,或你刚才的搜索程序写到哪里了等)你只好看看刚写的程序,回忆一下
,慢慢地回到你刚才的最佳工作状态。

我们来做一个简单的算数。假设一个程序员被打扰一下,哪怕只有一分钟,他却需要花1
5分钟才能回到最佳工作状态(统计资料显示如此)。我们有两个程序员:杰夫和愚夫,
坐在一个大办公区里工作。愚夫想不起来用什么函数去进行Unicode 字符串复制。他可以
花30秒查一下,或者花15秒问杰夫。由于他坐在杰夫的旁边,他就选择去问杰夫。杰
夫被打扰了一下,耽误了他15分钟,节省了愚夫15秒钟。

现在,我们把他们俩用墙和门隔开,让他们俩分坐在不同的办公室里,愚夫又想不起来什
么涵数名,自己查一下要花30秒;问杰夫,要花45秒,因为他要站起来走过去问(对
这帮程序员来说,这可不是件简单的事,看看他们的体质就知道为什么了)。所以他选择
自己去查。愚夫损失了30秒钟,可是杰夫少损失了15分钟。哈哈!

 9. 你们是否使用现有市场上能买到的最好的工具?
用可编译语言写程序恐怕是这世界上为数不多的还不能随便抓一个破计算机就可以做的事
。如果你用于编译的时间超过几秒钟,你就应该换一台最新最快的计算机了。因为如果编
译时间超过15秒,程序员们就会不耐烦,转而去上网看一些无关的东西比如The Onion,
弄不好一看就是好几个小时。

调试图形界面软件时,用只有一个显示器的计算机不仅不方便,有时甚至是不可能。用有
两个显示器的计算机,要方便许多。

程序员们经常不可避免地要去画一些图标或工具栏图。多数程序员没有一个好的图形编辑
器可用。用微软的“画笔”软件去画图标简直是笑话,可事实上大家还就在这样做。

在我的前一个工作,系统管理员成天给我发来自动警告,说我在服务器上使用了超过22
0兆的空间。我告诉他,按现在硬盘的价钱,超出这点空间的价钱远低于我用的厕纸的价
钱。让我花10分钟去清理我的文件绝对是我工作效率的莫大浪费。

一流的开发组绝不折腾它的程序员。工具落后会让人用起来觉得难受,一点点积累起来,
会让程序员们成天叫苦,而一个成天叫苦的程序员绝对不会是一个高消率的程序员。

再添一句,要想使你的程序员高兴,最好的办法就是给他们买一些最新最棒的工具软件。
用这种方法可以让他们乖乖地为你工作,这可比用高薪吸引他们来得便宜得多。

10. 你们有没有专职的软件测试人员?
如果你的开发组里没有专职的测试人员,或没有足够的测试人员(两到三个程序员就应该
配一个测试员),那你的产品就一定是毛病百出,或者你在花100美元一小时的代价去
雇你的程序员去做30美元一小时就可以雇到的测试员的工作。想在测试员身上省钱,绝
对是打错了算盘。我真不明白为什么这么多人算不过来这笔帐。

11. 你们招人面试时是否让写一段程序?
我问你,让你去招一个魔术师,你是否连看都不看一眼他的魔术玩得怎样就要他?当然不
会!

你举办婚宴,要请一个厨师,你是不是连嚐也不嚐他做的菜好吃不好吃就要他?我想也不
会。

奇怪的是,几乎每天都有这样的事发生:在面试一个程序员时,简历写得漂亮,谈得热火
朝天,问几个简单的问题(如CreateDialog()和DialogBox()有什么区别?这种问题,查一
下帮助文件就知道了),人就招进来了。你真正应该关心的不是这人记不记得这些写程序
的边边角角的东西,而是他能否出产品!更糟糕的是,许多问题是知道就知道,不知道,
想死也不知道的问题。

12. 你们是否随便抓一些人来试用你们的软件?
这句话的意思是,让你从走道里走过的人中,随便抓几个人来,让他们试用你的软件。如
果你抓五个人来用你的软件,那你就可能把你的程序中95%的不方便使用的地方找出来


用户界面设计的关键是,如果你让几个人去用你的软件(五六人可能就够了),你可能很
快就找出最大的问题。只要你坚持随便抓一些人来试用你的软件,你就能将你
的用户界面设计得越来越好。

The Joel Test 软件开发成功12法则的四个实用领域

用该法则来衡量你的软件开发组,告诉我你得的分数,让我来品头论足。
如果你是开发组的经理,用该法则来使你的组提高效率。如果你们一上来就能得12分,
你就 别再打扰你的程序员了, 专心致志别让公司的管理人员来烦你的程序员吧。
如果你在找一份程序员工作,问问你未来的老板他能得几分,如果分数很低,你一定要确
信你进去后有足够的权力来改变这一切,否则,最好躲远点,不然,你在那儿会很难受的

如果你是投资者,正在决定是否向一个软件公司投资,或者你的软件公司正在决定是否兼
并另一个软件公司,该法则可以帮你做决定。

--
§……   ◎刻坏或者读不出来的包换,量多优惠    ……§
§……   ◎CD使用明基CDR,DVD使用威宝变色龙   ……§
§……  CD:4 RMB/张(680M) DVD:8 RMB/张(4.3G)  ……§
§……刻录上传:ftp://burn:burn@192.168.111.118……§
§……      站内联系或者短信13632644126       ……§
※ 修改:·EDE 於 12月17日11:23:36 修改本文·[FROM: 192.168.111.118]
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.111.118]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店