这是人月神话:软体专案管理之道(20周年纪念版)的第十一章:失败为成功之母(Plan to Throw One Away),简体版译作未雨绸缪,开场白有这一句常听的谚语‘There is nothing in this world constant but inconstancy.’,中译为‘这世界唯一不变的就是这世界一直都在变’,还有‘It is common sense to take a method and try it. If it fails, admit it frankly and try another. But above all, try something.’,译作‘你得以平常心看待失败,试试这个,如果行不通,就老老实实接受行不通的事实,再试试那个。总之,要成功,就得去试一试。’
在先导试验工厂与扩大规模这节,我想学工厂经营的人都很清楚,先导试验工厂(pilot plant),以及扩大规模(scaling up),在我们这一行里,是讲试产然后在量产,不过概念是一样的,但是这个观念用在软体专案里头,好像搞软体的不懂这一套,所以作者在这一节建议,‘无论如何,把必然的一次失败纳入正式计划之中(plan to throw one away;you will,anyhow)’,也就是这篇的主题!
第二节唯一不变的就是变,再套句谚语以不变应万变,我想以这一句话这可以概括这一节了!
第三节使系统利于改变,这里提到一些技术,呼叫程序(calling sequence)、表格驱动技术(table-driven)(就是把程式执行时所用到的参数或设定值存放在一个表格档案中,而不是写死在程式里,当有需要改变时,就只要更改表格的内容即可,不必修改程式)、高阶语言跟自我说明技术(self-documenting),还有版本的使用,这些都市目前软体界常使用的技术,应该没有多说明的必要。
第四节,使组织利于改变,一看到这一节标题,ㄚ琪就直觉难啊,果真文中也提到这样的制度很难,但是文中提到IBM建立了一个双梯式(dual ladder)的晋升结构,这倒是ㄚ琪从未见过的,不过Google一下还是可以找到,这应该属于人资的领域,难怪ㄚ琪较少看过。
第五节进两步,退一步,这一节讨论到软体的变动不会因软体已经交付给顾客之后就终止,这一个阶段我们叫做软体维护(program maintenance),ㄚ琪对这种维护的经验很多,有些人甚至会说为什么不一次做好,我想不能一次做好的原因很多,除了课本上所题到的原因外,另一个原因是我们还要赚维护费啊,一次做好不仅费很多时间,而且之后你就别再想赚维护费了,你说是不,所以这是一种经营的策略,当然也是比较邪恶的,不过也是没法度的事,但是为何会取这个标题名称,课本是这样解释的,‘软体维护所遭遇到的一个重要问题,就是因修正错误而导致其他错误的可能性相当高(约20~50%),所以才叫进两步,退一步,或许可能有人会像ㄚ琪不太明了。
所以要解决这样的错误,‘理论上,每修正一个错误之后,都应该将之前所有的测试案例(test case)统统拿来测一遍…要做到像这样完整的回归测试(regression test),付出的成本是相当高的’,有鉴如此ㄚ琪其实偶尔会偷懒做这样的回归测试,因为有时真的觉得太无聊了!
最后一节,进一步,退一步,这应该是软体人深刻的体验,ㄚ琪也这样觉得,总之万事万物会趋于紊乱(entropy),历史上多的是改朝换代,修改软体最后不见得有用,最后唯一能做的就是重新设计,这样周而复始,我的结论是ㄚ琪一直可以有工作做!哈ㄚ