屋顶上的木帷幕

海鸥之所以追着渔船飞,是因为它们认为会有沙丁鱼抛向大海 - Eric Cantona, 1995
随笔 - 146, 评论 - 3169, 引用 - 56

导航

关于


标签

每月存档

最新留言

广告

 

这篇《七十五条》原本是我写在自己的一个另一个Blog上的(http://www.blogcn.com/blog/cool/main.asp?uid=mvm&id=775872),但完全是纯技术的,所以在这里重新贴一下。的确也希望我在这里面表达的想法能够被更多人借鉴和讨论。

这七十五条,是我这些年来,尤其是在微软工作两年来的体会的总结,关于如何用正确的方法来写出质量好的软件的体会的总结。或许看似平淡无奇,但大音希声,这七十五条的效用,未必及不上那几十页几百页的体系,却远远比那好用:

1. 你们的项目组使用源代码管理工具了么?
2. 你们的项目组使用缺陷管理系统了么?
3. 你们的测试组还在用Word写测试用例么?
4. 你们的项目组有没有建立一个门户网站?
5. 你们的项目组用了你能买到最好的工具么?
6. 你们的程序员工作在安静的环境里么?
7. 你们的员工每个人都有一部电话么?
8. 你们每个人都知道出了问题应该找谁么?
9. 你遇到过有人说“我以为…”么?
10. 你们的项目组中所有的人都坐在一起么?
11. 你们的进度表是否反映最新开发进展情况?
12. 你们的工作量是先由每个人自己估算的么?
13. 你们的开发人员从项目一开始就加班么?
14. 你们的项目计划中Buffer Time是加在每个小任务后面的么?
15. 值得再多花一些时间,从95%做到100%好
16. 登记新缺陷时,是否写清了重现步骤?
17. 写新代码前会把已知缺陷解决么?
18. 你们对缺陷的轻重缓急有事先的约定么?
19. 你们对意见不一的缺陷有三国会议么?
20. 所有的缺陷都是由登记的人最后关闭的么?
21. 你们的程序员厌恶修改老的代码么?
22. 你们项目组有Team Morale Activity么?
23. 你们项目组有自己的Logo么?
24. 你们的员工有印有公司Logo的T-Shirt么?
25. 总经理至少每月参加一次项目组会议
26. 你们是给每个Dev开一个分支么?
27. 有人长期不Check-In代码么?
28. 在Check-In代码时都填写注释了么?
29. 有没有设定每天Check-In的最后期限?
30. 你们能把所有源码一下子编译成安装文件吗?
31. 你们的项目组做每日编译么?
32. 你们公司有没有积累一个项目风险列表?
33. 设计越简单越好
34. 尽量利用现有的产品、技术、代码
35. 你们会隔一段时间就停下来夯实代码么?
36. 你们的项目组每个人都写Daily Report么?
37. 你们的项目经理会发出Weekly Report么?
38. 你们项目组是否至少每周全体开会一次?
39. 你们项目组的会议、讨论都有记录么?
40. 其他部门知道你们项目组在干什么么?
41. 通过Email进行所有正式沟通
42. 为项目组建立多个Mailing Group
43. 每个人都知道哪里可以找到全部的文档么?
44. 你做决定、做变化时,告诉大家原因了么?
45. Stay agile and expect change
46. 你们有没有专职的软件测试人员?
47. 你们的测试有一份总的计划来规定做什么和怎么做么?
48. 你是先写Test Case然后再测试的么?
49. 你是否会为各种输入组合创建测试用例?
50. 你们的程序员能看到测试用例么?
51. 你们是否随便抓一些人来做易用性测试?
52. 你对自动测试的期望正确么?
53. 你们的性能测试是等所有功能都开发完才做的么?
54. 你注意到测试中的杀虫剂效应了么?
55. 你们项目组中有人能说出产品的当前整体质量情况么?
56. 你们有单元测试么?
57. 你们的程序员是写完代码就扔过墙的么?
58. 你们的程序中所有的函数都有输入检查么?
59. 产品有统一的错误处理机制和报错界面么?
60. 你们有统一的代码书写规范么?
61. 你们的每个人都了解项目的商业意义么?
62. 产品各部分的界面和操作习惯一致么?
63. 有可以作为宣传亮点的Cool Feature么?
64. 尽可能缩短产品的启动时间
65. 不要过于注重内在品质而忽视了第一眼的外在印象
66. 你们根据详细产品功能说明书做开发么?
67. 开始开发和测试之前每个人都仔细审阅功能设计么?
68. 所有人都始终想着The Whole Image么?
69. Dev工作的划分是单纯纵向或横向的么?
70. 你们的程序员写程序设计说明文档么?
71. 你在招人面试时让他写一段程序么?
72. 你们有没有技术交流讲座?
73. 你们的程序员都能专注于一件事情么?
74. 你们的程序员会夸大完成某项工作所需要的时间么?
75. 尽量不要用Virtual Heads

打印 | 张贴于 2004-05-19 18:32:00 | Tag:Software Engineering

留言反馈

#回复: 如何用正确的方法来写出质量好的软件的75条体会 编辑
写得挺不错的,虽然只是提纲摘要的形式.
2007-03-27 11:24:00 | [匿名用户:wcy234]
#vitamin 编辑
The strongest principle of growth lies in human choice.
2007-03-04 15:01:00 | [匿名用户:vitamin]
#re: 如何用正确的方法来写出质量好的软件的75条体会 编辑
不错。
不过我觉得能减少开发人员是质量好的最好保证。
2006-04-01 03:08:00 | [匿名用户:单手]
#re: 如何用正确的方法来写出质量好的软件的75条体会 编辑
不过,有些实际的体会,不过好象在中国,有些东西难实现
2006-03-26 22:30:00 | [匿名用户:sanniko]
#如何用正确的方法来写出质量好的软件的75条体会【转载】 编辑
Ping Back来自:blog.csdn.net
2004-10-13 23:48:00 | [匿名用户:baisun]
#答复:如何用正确的方法来写出质量好的软件的75条体会 编辑
我觉得罗亭和mvm的其实本身说的没有矛盾,只是表面上看来一个字多,一个字少而已,厚厚,或许就是这个原因导致的不兼容。诚然,质量控制的办法用流程(其实流程已经包含了代码检查)就可以保证,但是要满足质量好的软件,一定要有客户需求、战略指导、人员、执行等多方因素的配合才可以做出来。

就像mvm举的例子(对不起,我没有看到罗亭的帖子,或许罗也贴过的,要事看到,我就两个一起贴出来):例子1,航空订票系统

今天上午去公司的Travel Desk订星期五回上海的飞机票,结果很让我高兴:买到了5折的。要知道,前两个月,7折都是很罕见的。订票的时候,我仔细观察了一下那个终端:是在Windows上开了一个绿色的字符终端,直接敲命令查询航班,返回结果也是一行行的字符输出。返回的结果我是看不懂的,但Travel Desk的人就能看懂:他一眼就能看出有多少折扣,还有没有位子。而我只看到一串不知道什么意义的英文字符。

从纯粹的技术人员的角度来看,这种Client端显然是应该被淘汰的:操作不是GUI的而是Cmd Line的,查询是通过命令字符串而不是一个友好的Query Builder界面,返回结果也很不friendly。但我觉得这样的界面是很好的,因为它的用户已经习惯了用这样的界面,而且根据我的观察,Travel Desk的人操作起来很快,他们也能毫无困难的理解那些我无法理解的返回结果。所以,如果我是技术主管,我一定会反对任何把这种界面升级到GUI的提议。我的信条是:没有充足的理由,不要改动正用得好好的东西;没有充足的理由,不要引入新东西。

从客户的角度来看,即使你的代码质量再高,客户不需要的东西,本身就是一个致命的错误,质量已经没有存在的意义。所以客户需求是第一个要素。

那么,是不是流程就可以保证质量了呢?流程再完美,也需要人去执行,那么好了,如果你觉得流程的某些地方需要评审,那么评审本身是否需要评审呢,这样就会进入一个死循环,所以,不能过分倾向于流程。在一个公司了解了客户需求之后,就会和企业目标一起考虑,设计自己的战略发展方向,配备合适的人员,其中的领导者、员工都具有相当的执行能力,尤其是细节的执行能力。

上面其实说的过于简单化了,但是我想在bbs上,也只好说这么多,否则我的任务就不能完成了,厚厚。
2004-06-22 15:57:00 | [匿名用户:星星]
#回复: 如何用正确的方法来写出质量好的软件的75条体会 编辑
msn联系我吧,看看我能帮什么忙。我6/22以后就不在北京了。
2004-06-04 14:21:00 | [匿名用户:mvm]
#回复: 如何用正确的方法来写出质量好的软件的75条体会 编辑
MVM你6月份是否在北京?我们想请你做个讲座。
2004-06-04 09:50:00 | [匿名用户:dalian_sister]
#回复: 如何用正确的方法来写出质量好的软件的75条体会 编辑
高明
2004-05-25 11:43:00 | [匿名用户:zhengyun]
#回复: 如何用正确的方法来写出质量好的软件的75条体会 编辑
关于10. 你们的项目组中所有的人都坐在一起么?
预想的答案应该是“yes”吧。
这边有个小问题,75点里,有些问题的正确答案应该是yes(第1,2点),但有些的正确答案应该是no(第27点),未免让人有些困惑。高手当然无所谓,但是低手也不会在少数吧。
也许会被说,所有的问题答案都是显然,但其实并非这样。比如第10点,究竟是yes还是no呢?传统的想法也许是yes,但是实际上应该是no啊。
所以为了避免大家瞎猜,还是由MVM公布一个标准答案吧。
2004-05-24 11:56:00 | [匿名用户:杨晔]
#回复: 如何用正确的方法来写出质量好的软件的75条体会 编辑
长见识了,希望能看到更多评论。
2004-05-22 16:46:00 | [匿名用户:dalian_sister]
#回复: 如何用正确的方法来写出质量好的软件的75条体会 编辑
从别人争吵中学习!
2004-05-21 20:38:00 | [匿名用户:不至于]
#回复: 如何用正确的方法来写出质量好的软件的75条体会 编辑
to 罗亭
我倒是觉得mvm一直在摆事实讲道理,你却“很遗憾”或是“不想说”,道理越辩越明,别人一反驳就这样还不如当初不要辩,要么就是真的说不出什么了
2004-05-21 08:51:00 | [匿名用户:傻强]
#To:jack.king 编辑
完全同意您的话。

别的我就不想说了。
2004-05-20 17:59:00 | [匿名用户:罗亭]
#回复: 如何用正确的方法来写出质量好的软件的75条体会 编辑
“你还差得很远”-------这句话很耳熟

75条太多了,其中有轻有重,能不能归纳一下将最重要的和最通用的总结在30条以内岂不是更实用
2004-05-20 16:25:00 | [匿名用户:傻强]
#回复: 如何用正确的方法来写出质量好的软件的75条体会 编辑
TO 罗亭:
交流,当别人同你说,"你可以这样这样的时候",你会怎么样反映呢?
1.完全听不进去
2.说"你的这个办法不错,我们可以试试看,不过我这里也有其他的想法...."

我想mvm提供了一种想法,我们每一个人都有想法. 但是如果不能听取其他人想法的话,这个交流就没有意义了. 万事并无绝对.
2004-05-20 16:08:00 | [匿名用户:jack.king]
#回复: 如何用正确的方法来写出质量好的软件的75条体会 编辑
跳出来就拍砖,BS。

2004-05-20 14:40:00 | [匿名用户:rIPPER]
#回复: 如何用正确的方法来写出质量好的软件的75条体会 编辑
1. 我没有说CI与代码规范是一码事。
2. 这些经验不杂乱。不“杂乱”的是教条,“杂乱”的才是经验。
3. 你敢说你理解质量的精髓?
4. 我用Code Review的说法更多。

Google搜索结果:
约有 20,700 项符合"code inspection"的查询结果
约有 124,000 项符合"code review"的查询结果

哪个术语更通用,一目了然。

5. CSDN上有很多这样的板砖。文人相轻。
6. 山外有山,我相信一定有高手。真正的高手看到后辈,不会说“你还差得很远”
7. 本来就是一种知识分享,为什么一定要把别人分享出来的东西说的一钱不值?

2004-05-20 14:09:00 | [匿名用户:mvm]
#顺便解释一下CI 编辑
CI = Code Inspection.

请注意,CI与代码规范是两码事。
这么说吧:当您邀请别人做CI时,作者有义务首先确保它的代码已经符合代码规范。否则,CI会被取消,直到您已经首先确保这一点为止。这就好象,一个人拿了一段代码去做CI,但这段代码竟然还没有被编译过一样。

这么做的原因只有一个:已经成文的规范,不会有人对你说第二遍。而且,这浪费别人的时间。(请注意:这些应该被定义在CI的流程中)。

我感到遗憾的原因是:您已经有了如此多的经验(这些经验都不错,只是太杂乱),却仍没有理解质量的精髓,让人遗憾。
2004-05-20 13:57:00 | [匿名用户:罗亭]
#呵呵,没办法,我只能说: 编辑
很遗憾。
2004-05-20 13:46:00 | [匿名用户:罗亭]
#回复: 如何用正确的方法来写出质量好的软件的75条体会 编辑
btw, "放弃75条,回到家中,制定流程(如果没有),按流程工作,然后审查是否遵守了流程"——这75条恰恰就是流程,是流程里面的肉,而不只是一个骨架。

随便举几个例子:
“9. 你遇到过有人说“我以为…”么?”——如果遇到,这就是spec review的流程出问题了。
“12. 你们的工作量是先由每个人自己估算的么?”——自下而上,还是自上而下,经验法还是专家法还是三分法,这就是plan的流程。
“18. 你们对缺陷的轻重缓急有事先的约定么?”——这是缺陷管理的流程。
“40. 其他部门知道你们项目组在干什么么?”——cross team communication的流程
“44. 你做决定、做变化时,告诉大家原因了么?”——变更管理流程
“57. 你们的程序员是写完代码就扔过墙的么?”——关于Test Release Document的流程

Btw,“63. 有可以作为宣传亮点的Cool Feature么?”看似和质量无关。不过按照我的经验,cool feature的作用是“一俊遮百丑”,有亮点就可以掩盖一些问题。这样,对于客户来说,会感觉产品从质量角度来说还是acceptable的。或者说,cool feature或者说亮点可以作为质量问题的一个事后弥补措施。你想想,很多人经常说“微软的系统不安全,不过很好用”,其实这就是一例。
2004-05-20 11:46:00 | [匿名用户:mvm]
#回复: 如何用正确的方法来写出质量好的软件的75条体会 编辑
CI是什么?CI=代码审查?“I" stands for what? 我印象中,code review倒是有的。

难道这75条里面没有code review么?
请看第35条:“你们会隔一段时间就停下来夯实代码么?”。所谓的“夯实代码”,就是指阶段性的code review以及在此基础上的code consolidation。
再请看第60条:“你们有统一的代码书写规范么?”。Code书写规范就是code review的一部分工作。能说没有code review么?


“上述75条应该全部抹去,因为它们杂乱无章却没有主题”——那是你没有看出主题来。这75条的主题是这样的:
1-5: 工具
6-10:沟通
11-15:计划和进度表
16-20:缺陷管理
21-25:士气
26-30:配置管理
31-35:风险控制
36-40:又是沟通
41-45:还是沟通
46-50:测试
51-55: 又是测试
56-60:编码,developer
61-65:规划,envision
66-70:设计
71-75:人力资源

“它没有说明质量的核心就是流程!”——说这话的人,对软件质量的认识还停留在一个比较低的水平。看一下上面1-75各条的主题就可以发现,决定质量的因素太多了,绝非简简单单的一句“流程”就能概括的。

同样,简单化并不代表认识的水平高。“如果你想做一个好的软件,你只需要遵循以下2条简单原则即可”——流程和审查,谁都知道。但是怎么做才能保证流程有效呢?怎么做才能保证审查有效呢?CMM告诉了我们流程和checkpoint,但没有告诉我们怎么做,所以大家还是都不知道怎么做软件流程。

魔鬼就在细节中,这75条全部都是关于细节。

“75条本身并不知道它想要说明什么,而是即兴发挥”——75条不是即兴发挥,而是有条理的在总结。从上面归纳的1-75条的主题就可以看出,总结这75条的时候是遵循着一种思路的。我们要善于接受75条这种表达方式。就好像著名的祖尔(Joel)法则12条一样,并非大而全,而是一些best practice的总结。

“尽量不要用Virtual Heads”是不是和质量有关?当然有。Virtual heads意味着resource is not secure,shared resource会降低resource的工作效率,容易增加出错的机会,会让一心二用的人没有太多时间去review spec、review design。所以说,virtual heads绝对是对质量有害的。软件开发中的人不能简单的按照labor、按照人月来算。一个dedicated的人,要强过两个只能投入50%时间和精力的人。

况且,谁都不是傻瓜,谁都不会认为有了75条就可以不要任何其他的软件工程手段。RUP之类的流程、各种code review、spec review,都是非常必要的手段;瀑布模型、螺旋模型、V模型、X模型等,仍然是软件工程的基础。这个世界上没有silver bullet:RUP不是silver bullet,CMM不是silver bullet,XP不是,Test-Driven不是,当然75条也不是。

最后,我想说的是我们每个人都要show respect。在看懂别人的意思之前,千万不要轻易的轻蔑的说“你不懂”。
2004-05-20 11:38:00 | [匿名用户:mvm]
#回复: 如何用正确的方法来写出质量好的软件的75条体会 编辑
我个人觉得楼上的误解了,mvm提出此75条作为经验总结,便绝非强调按此75条行事即可万事大吉。对我们每个人来说,如果能从中提取到三五条与自己实践相关的经验加以改进或应用,那么可能就会起到非常不错的效果。

你提出的源自德国生产流程的两条经验也很不错,但同样也不能说明只要遵循这两条就可以了。那美国、日本、欧洲其它国家的企业数百年来也积累了属于他们的很棒的经验呀。他们看了你的评论后可能会很不服气呢。

个人看法,仅供参考:)
2004-05-20 11:35:00 | [匿名用户:musicland]
#竟然没有包括 CI (代码审查?) 编辑
不可以原谅的错误,即使一个项目遵循了上述所有75条,如果没有做(竟然没有做)CI,这个项目会……!

而且,竟然也没有包括文档的审查?文档的规范?竟然也没有包括设计的规范,没有指出做事(任何事,比如包括你去端一杯水)的流程?

我认为,上述75条应该全部抹去,因为它们杂乱无章却没有主题,一个质量好的软件与什么 "有可以作为宣传亮点的Cool Feature么?" 我想是应该完全没有关系的。

如果你想做一个好的软件,你只需要遵循以下2条简单原则即可
1、你为什么要这么做?你的依据是什么? ----指流程
如:你为什么要写这函数?你为什么要改这文档?

2、你做的对吗?质量好吗?
如:性能高吗?完全满足需求与规范吗? ---指审查

以上2条完全适应于所有的人员,包括设计,编码,测试人员,所有的人均要遵循上述原则。
它们可以用一句话来解释:做事要有流程,做完后有人检查,OK。

如果按照以上2条进行,我保证(100%保证),你的软件的质量绝对是好的,因为这种保证来自于德国数百年的生产流程( 不信我,但你一定要相信德国货)。

我反对上述的75条是因为75条本身并不知道它想要说明什么,而是即兴发挥。以致第75条: 尽量不要用Virtual Heads 与上下文不符而没有检查。它没有说明质量的核心就是流程!也就是说,你完全做到了上述的75条,你的项目的质量也可能是不好的。

因此,放弃75条,回到家中,制定流程(如果没有),按流程工作,然后审查是否遵守了流程。

很多人可能会觉得我的回答比较可笑或不可以理解,我只能感到遗憾。
2004-05-20 10:31:00 | [匿名用户:罗亭]
#回复: 如何用正确的方法来写出质量好的软件的75条体会 编辑
呵呵,8错,谢谢:)
2004-05-20 08:43:00 | [匿名用户:jiangyu]
#回复: 如何用正确的方法来写出质量好的软件的75条体会 编辑
MSF 三个字母就够啦 ;)
2004-05-20 00:42:00 | [匿名用户:rIPPER]
#回复: 如何用正确的方法来写出质量好的软件的75条体会 编辑
blogcn上的真棒...-_-
2004-05-19 23:33:00 | [匿名用户:mmkk]
#回复: 如何用正确的方法来写出质量好的软件的75条体会 编辑
可以用这 75 条写本书,肯定畅销!
2004-05-19 23:26:00 | [匿名用户:moslem]
#回复: 如何用正确的方法来写出质量好的软件的75条体会 编辑
呵呵,blogcn上面写的很精彩:P
2004-05-19 22:38:00 | [匿名用户:hBifTs]
#回复: 如何用正确的方法来写出质量好的软件的75条体会 编辑
不错不错
2004-05-19 22:14:00 | [匿名用户:小峰]
#回复: 如何用正确的方法来写出质量好的软件的75条体会 编辑
这。。正是我想要的。
2004-05-19 21:06:00 | [匿名用户:snoopy]
#回复: 如何用正确的方法来写出质量好的软件的75条体会 编辑
不说不知道,看了blogcn上你写的,我觉得那里的更好:)
2004-05-19 19:23:00 | [匿名用户:ccBoy]
#回复: 如何用正确的方法来写出质量好的软件的75条体会 编辑
不错,分享就挺好,但别说在什么什么的几年经验总结:)
2004-05-19 19:15:00 | [匿名用户:ccBoy]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode.MVC引擎 0.5.1.8