| 作者 |
内容 |
| smilemac |
作坊离工厂究竟有多远(续二)
(三)
smilemac
前文说到了“过度工程”,那么什么是过度工程呢?如果你的项目从现在开始编码一个星期内就可以完成,那么需不需要风险预警呢?一般是不需要的,因为项目周期越短,建立风险预警制度的代价就越高,这里的代价是指该项活动在这个项目周期中所占的时间比例。当警报出现时,已经半个星期过去了,但对于很多教条主义者来说,风险预警是必须的。而对于我来说,这就是过度过程,在一个项目中,做了这个项目完全不需要的工作。
再比如,使用RUP,每当我看到有人诚惶诚恐地按照RUP的步骤一个图一个图地画下来,我总觉得很可笑,他可能不知道,当他刚画完实体图的时候,其他工程师已经完全领会他的设计了,我不知道如果我用汉语表达完我的意思后,是否还需要再用英语表达一遍,对于很多经验丰富的程序员来说,有了实体图,最多再加一个状态转换图已经足够开始编程了。而且,使用图形和文档表达出的类的接口设计和关系是否比直接用程序表达出的更容易读,我看未必。XP的创始者说:为什么要写文档呢?代码就是最好的文档。从一定程度上,我非常赞同这样的观点。现代软件工程发展的趋势之一,便是越来越承认现实,承认人类的有限理性。
项目的主要目标是什么,是按时按质按预算地完成软件产品,所有的活动都应该围绕这个目标进行。所以,如果你以前已经做过很多类似的项目,你知道在这样的时间、资源约束下,要想完成目标必须采用什么样的开发过程,那么你是不是还需要引经据典地写报告证明你的想法,等待另一个并不比你经验更丰富的人花上一个星期来为你做评审,本来一个小时就可以做出的决定因为流程教条主义者的约束,连写报告你需要花上两个星期。还有评审活动,做评审的往往是一些不在你项目组织中的所谓技术权威,他们也许在技术上是权威,但对你的项目却一无所知,如何评审?走过场而已,但却为以后的责任推诿留下后门。一个活动是否应该保留或应该如何进行,要完全以是否有利于项目目标为准则。但遗憾的是,别看国内项目大多整体缺乏工程规划,但这种局部活动的过度工程却比比皆是。
那么过度工程有害吗?有害!软件工程书上讲了很多如何控制风险的工程化方法,却没有讲如何保持程序员的创造热情和工作激情。软件开发讲千讲万,离不开程序员的创造性活动,你可听说过哪个优秀的软件不是靠一些程序员主动加班加点的超常劳动作出来的?一个团队中,最重要的永远都是程序员的热情,这也是一切工程化方法需要注意的,也是所有项目管理艺术的主题之一。
因此,软件工程的实践程度对于项目来说够用即可。那么多少算够用呢?这要考虑项目可以承受多大的失败风险。也就是说对风险的控制做到什么样的程度。对于你的项目,你是准备跑还是走?如果跑,打算跑得多快?我认为,所有的软件开发,所有的项目管理,与其谨小慎微战战兢兢地向前挪动,远不如在可控的奔跑中把握平衡,那样会更容易一些。
大多数的软件工程方法,都是为了提前知道哪些以前担心发生的事情真的发生了,但天下没有免费的午餐,任何东西都有代价,为了这个“提前知道”,我们需要付出的是可能的过度工程以及其带来的副作用。因此风险控制也不能无限制,需要权衡。
还有很多工程方法,比如说文档是为了交流,但是如果一个项目组中只有你和测试工程师,还需要使用“BUG报告->修改意见->评审->反测报告”的方法确认吗?遗憾的是,这样的例子在国内的一些软件公司,甚至是外企,在真实地发生着。
而很多程序员认为软件工程太虚也恰恰是因为这个。软件工程书上讲了很多方法,但没有让你每个环节不分重点地执行啊!你可以把它当做教科书,可以把它当做技术词典,但就是不能把它当做操作手册!现在的RUP应用就有这种趋势,为RUP而RUP,为“规范”而“规范”。什么都全了,唯一没有的却是目标。
所以,作坊离工厂到底有多远,不要以为你已经是工厂了,很有可能你已经走过头了。
(待续)
|
| 02/06/08 23:13 |
酷帖! 臭帖! 回复 |
| 酷帖评价: 臭帖评价: |
| 返回页首 |
|
| killcamel |
好!代码是唯一可信任的文档
代码是唯一可信任的文档。见过太多的文档和代码不能相符。每次代码的修正都在文档上登录几乎是不可能任务。[代码就是最好的文档。]在那本很古老的“微软的秘密”中就提出了。
那些RUP教条主义者应该去看看那本“I Sing the Body
Electronic”(电脑的旋律),看看Encarta的原始开发小组是如何开发项目的,这是作者在该小组生活1年记录下的资料。
软件工程为了尽可能通用,需要对足够多的情况作准备,从各种经验中总结出来的。这是针对几乎所有项目的,不是对于一个具体项目的。对具体项目有不同的侧重点,但事实上对自己的项目有足够了解的合格的项目经理是很少的,正是大家承认了这一点,才要求严格按照规范,因为所谓的项目经理没有能力了解自己的项目在哪里是薄弱处,哪里出问题的可能比较大,就只有按操作手册来了全部预防了。当然这时不存在如何合理分配资源,时间的问题,只是从统计概念上成功的可能性比较大而已。对公司来说成功概率提高的理由已经足够引入规范了。
[不如在可控的奔跑中把握平衡]当然好,但除了像老兄之类有充分经验的人,让那些纸上谈兵的规范专家来用不了两步就会摔断脖子了,对他们来说,除了过度工程,也是没有办法。最简单的例子是,让我们去开飞机,决不会有人胆敢违背操作手册,但对老经验的试飞员来说,乐趣就在挑战手册外的极限。但问题在于我们不敢去开飞机,但敢于宣称自己能管理好项目开发,虽然不知道某条规范被引入的原因,针对的情况,却知道在任何情况下都必须遵守的
规范专家却大有人在。 |
| 02/06/09 01:13 |
酷帖! 臭帖! 回复 |
| 酷帖评价: 臭帖评价: |
| 返回页首 |
|
| holly_lee |
呵呵,
都是有其原因和理由的
最关键的一点, 现在软件工程, 特别是 PSP, TSP, CMM
这些过程与衡量模型, 其出发点是这样的:
1. 我们需要一个可以预测的软件开发结果,
这样才能保证让我们的客户满意 (嗯, 正常)
2. 如果我们整个开发过程都是可预测的,
或者说可控制的, 那么我们的结果也是可预测的,
可控制的 (也没错)
3. 假设我们的软件过程是 1->2->3,.....这样的,
那么, 如果我们控制住了 1, 那么 2 就可预测了,
同理有 3,4,.... 这样预测也可以归结到控制 (有点问题了
:)
4. 怎么控制目前的开发活动呢?
按照工业化大生产的历史经验,
定量考核是大家最熟悉的方式. OK.
我们需要为整个软件开发过程制定一系列量化的指标,
以便与考核大家的工作做得如何. (我就不评论了...嘿嘿
:-)
于是我们就不难发现, PSP/TSP/CMM
之类本质上不是一个开发性的东西,
而是给管理人员使用的管理过程.
因为它们的前提是有充分的管理才能得到好产品.
|
| 02/06/09 10:27 |
酷帖! 臭帖! 回复 |
| 酷帖评价: 臭帖评价: |
| 返回页首 |
|
| holly_lee |
或者说,
现在大家谈论的软件工程其实并不是软件工程
应该叫做 "面向软件开发行业的管理工程"
其实是个非常简单的推理过程:
没有足够多的经验教训不可能真正明白软件工程对软件开发有什么帮助,
纸上谈兵我们就不提了.
有几个做项目经理等等的有这样的经验教训?
所以, ...
本来软件工程是个很实实在在的东西,
可惜随着人们企图一步跨入工业化软件大生产的美好愿望,
渐渐地变成了现在这个样子.
看了看 CMU 软件工程研究所的那帮人的资料,
没有一个是有深厚的开发背景的,所以,
软件工程就算了吧, 管理工程或许还差不多.
因为我没有系统学过管理不敢乱说, 我只有 "常识".
顺便说一句, 我也不是软件工程科班出身, 我只有"常识" |
| 02/06/09 10:40 |
酷帖! 臭帖! 回复 |
| 酷帖评价: 臭帖评价: |
| 返回页首 |
|
| charles_hhb |
应该是Unit
TestCase是唯一肯信任的文挡,如果有Unit test case的话
dfdf |
| 02/06/09 10:42 |
酷帖! 臭帖! 回复 |
| 酷帖评价: 臭帖评价: |
| 返回页首 |
|
| killcamel |
同意。Dilbert的经理认为好的经理可以管理任何事务
"面向软件开发行业的管理工程" ,
没有足够多的经验教训不可能真正明白软件工程对软件开发有什么帮助
本来软件工程是个很实实在在的东西,
可惜随着人们企图一步跨入工业化软件大生产的美好愿望,
渐渐地变成了现在这个样子.
说的真好。
顺便说一句,我甚至不是计算机科班出身。
|
| 02/06/09 12:43 |
酷帖! 臭帖! 回复 |
| 酷帖评价: 臭帖评价: |
| 返回页首 |
|
| holly_lee |
呵呵,
我也不是
|
| 02/06/09 13:06 |
酷帖! 臭帖! 回复 |
| 酷帖评价: 臭帖评价: |
| 返回页首 |
|
| killcamel |
chaoes,混沌,非线性科学
已经打破了拉普拉斯决定论
至于考评数据的7.8和7.9会有什么实质上的区别意义,也只有专家们才知道了。 |
| 02/06/09 13:12 |
酷帖! 臭帖! 回复 |
| 酷帖评价: 臭帖评价: |
|