蠢人的黄金
???w的???}之所以持?m存在,部分是由於某些常??的不良???T?T惑所致。在1840年代晚期到1850年代早期,美??加州?d起淘金?幔?很多一心挖金?V的人都被蠢人的?S金──?S?F?V(iron pyrite)──欺?_?^。?S?F?V容易??落、?|脆不?裕?而且?]有?r值。有????的?V工知道真的?S金是柔?g而可塑的,而且在?毫χ?下?^不?嗔选N迨?多年?恚????w?_?l人?T常常在自己那蠢人?S金的?T惑之下屈服。他??因循於有缺陷的做事方式,因?橐勒樟??T比?^容易,但是?@不?^是蠢人的?S金,他??做出?淼能??w容易??落、?|脆不?裕?而且?]有?r值。
搬?石?K
??我??回到比加州淘金?岣?久?h的以前,假定您是在古代埃及,正在建造金字塔。您的任?帐前徇?o?档木奘??K,?氖?公里外的河??搬到金字塔的工地,如?D2-1所示。您有二十位工人,要在一百天之?韧瓿伞?
1
?D2-1您可以把???w?0府?成一?K巨石?硭伎肌D?可以一天推?右稽c,每天都比昨天更接近目?耍?您也可以做某些使移?铀俣燃涌斓氖虑椋?用比?^少的?r?g走完同?拥穆烦獭?
您被允?S使用任何您喜?g的方法搬?石?K到目的地。您必????石?K每天平均移?右话俟?尺,或者是想?k法??石?K移?铀?需的?r?g?s短。
有些小????立刻?_始推石?K(?r?g?o迫嘛),??著用?U力推?铀?。?Ω缎〉氖??K?@?N方法或?S有效,但是?Ω短稍谏衬?中的巨石,?@?N方法就算推得?樱?也?^?Σ???快。如果每天前?M十公尺,?@??用?M全力的速度也?S令人?M意,但事??是每天落後九十公尺的?M度。「有?M步」?K不代表「有足?虻倪M步」。
??明的?F??不??直接跳下去用?U力推?泳奘?。除非是很小的石?K,他??知道凡事在?邮肿鲋?前必??花?r?g做好????。分析?^他??的任?罩?後,他??可能???Q定先砍?卓??渥龀??L??,如?D2-2所示。他??的????也?S要花一?商斓??r?g,但有很大的可能性他????加速巨石的移?印?
?D2-2 ??是移?泳奘?或??造???X???w,??明的?F????在行?又?前做好????,??往後的工作既快速又有效率。
2
?f一旁???]有?淠驹觞N?k??F??得花上?滋斓陌仙嫒ズ拥纳嫌握??た捎玫哪静模窟@?滋斓耐顿Y是值得的,特?e是用?U力而只能做到???|的要求的一小部分?r。
??明的?F??在搬?巨石?r,????想到?m平道路。他????想建好平坦的道路,而不要在沙地上推?泳奘?。?@是??好主意,特?e是有不只一?K巨石要搬??r。
更??明的?F??也?S一?_始?r?裼??L??木?c平坦路的方法,不久後就?l?F?L??木的?盗坑邢蓿?以致每隔一分??就得停下???⒆钺崦婺歉??L??木搬到最前方,但如果有多???l?L??木,而且??一小部分的人?B?把?L??木往前搬,就可以避免巨石走走停停,而比?^容易?S持?恿Α?
?F???S後可能?l?F,推?泳奘?的人?凳芟揿毒奘?的??度,於是?u作了一副?R具,??一部分的人在前方推,其他的人在後面推,如?D2-3所示,?@?N一?砭陀斜容^多的人可以加入,每??人的的????就比?^?p,?@?硬坏?速度?^快,也比?^容易?S持?w力。
?D2-3??明的?F??不???で蟾?有效率的工作方式
石?K?c???w
3
移?泳奘?和???w有什?N?P?B呢?移?泳奘?是??程式的比喻。如果您在100天之?纫?完成???w?0福?您是每天做百分之一的程式?a,??是?O法????程式的速度加快呢?撰??程式?a的工作比搬?石?K要抽象得多,而且在?0傅某跗冢??M度是很?y?y定的。???w?0负芘? 「最後一分??症候群」,也就是?F??在一?_始?r?]?X察到?r?g的急迫性,初期浪?M了太多?r?g,直到最後才以?^不??身的??狂?B度拼命?s工。把您的???w?0赶胂癯砂徇巨石,很明?@您不可能期望最後才?s工的?0妇谷豢梢猿晒ΑC恳惶欤??0附?理都必??自??:「我??今天的工作是否把???w推?M了一天的?M度?如果?]有,我??是否把剩?N工作所需的?r?g?p少了一天?」
另外??有一?c是移?泳奘?和???w相似的,就是不??您做?^多少????,有一天您??得?_始用力推石?^,也就是?f,您必????程式。除非是很小的?0福???程式??是有多得?挡磺宓募???工作,多到很容易被您低估。
??了再改的?_?l方式
?c???涑浞衷匍_始?庸は喾吹氖???了再改的?_?l方式,也就是不把重心放在?????L??木和?m平道路,而直接?_始??程式,?@是???w界比?^常??的???}。有75%的???w?_?l?F???_始做?0傅姆绞绞侵苯影炎约鹤蚕蚓奘?,企?D用?U力推?铀?。像?@?又苯??邮???程式,而不先做好???w的????和?O??,我???Q之?椤???了再改」的?_?l方式(code-and-fix development)。?F?????@?N做的原因,有?r候是因?殚_?l人?T太心急,想早日?庸ぃ?有?r候是主管或??客急於看到具?w的?M度。
??了再改的?_?l方式,就像??用?U力推?泳奘?一?樱?它的???}是?_始的?r候快,但不代表最後能早日完成,反而是懂得?用?^好的?_?l方式的?F??,能???⒄??w的生?a力提升到更高的?哟危?最後???0赣行?率地做完。他??先做好奠基的工作,把?L??木?|在巨石之下,把道路整治???常????浜??⒋蠹业牧α??F?Y起?怼O喾吹兀???了再改的?F???m然?_始得早,但?@?拥男U?质呛茈y持久的,通常很快就??造成千百??瑕疵。有些研究?l?F40%到80%的?0割A算都被用在修改同一?0冈缙谘u造的瑕疵。
???D2-4可以看出?恚???了再改式的?F??,其生?a力???S著?r?g而消?g。?0????_始?r,只有一?c?c(或是?]有)的努力是投?Y在????和程序管理方面,少量的努力是?o效的工作,但大部分是投入在??程式。?S著?0傅??r程推?M,修改瑕疵所?椎谋壤?逐步增加。到了?0缚旖Y束的?r候,?F???^大部分的?r?g是花在修改自己早期所?u造的瑕疵。
4
?D2-4??了再改的?0溉绻?幸?的??,待修的瑕疵?K不多,生?a力降低但仍可?S持住。而倒楣的?0杆?有的努力都被?o效的工作、?聿患暗囊???和程序管理所消?m殆?M(摘自:《???w?0盖笊?手?浴否R康尼著,1988年)。
如?D2-4所示,??了再改的?0钢校?幸?的因?殍Υ蒙伲?仍然可以勉???⑦M度向前推?M而到?_?K?c,而倒楣的?0??t所有的努力都?m?M在?????c程序管理,以及修改先前的瑕疵,完全?o法把程式的?M度推前一步了。
?@??悲?K的景象?^?Σ徽F??。有?醉?研究指出,???w?_?l?0钢校?有25%的?0缸钺岜蝗∠?了。在?@些?0副蝗∠?的?r候,它??全部都超出?A算,而且陷入抓?x、?y??、除?x的?o?F??圈中,所有的努力都是?o效的工作。?@些?0副蝗∠?的理由是,品?|的低下已被?J?槭??o??可救,不如放??。 字串6
?S刺的是,?@些失?〉??0缸钺??s做了?c成功的?0敢??佣嗟囊???和程序管理。失?〉??0溉匀坏米鲨Υ米粉?,?砉芾硭?有被?l?F的?e?x。期限?⒅??r,他??必??更小心地?u估自己的???w,?S著期限?毫Φ脑黾樱?他??每?L重新?u估,有?r候甚至每天重新?u估。他??花?r?g在??住各方?Ρ??0傅钠谕?,?O法??大家相信本?0改??蛉缙谕瓿伞K???必????施程式品?|???剩?在加入一段新程式以前,?_保不致??害到整?????w。由於?@些工作都太?t了些,所以真正的效益是有限的。和失?〉??0副容^起?恚?有效率的?M??所?裼玫倪M行方式是截然不同的──事??上,?0溉绻?一?_始就走?Φ脑?,以上所述的失???0改┢谒?做的事情,可能根本不需要。
如同?D2-5所揭示的,最??明的?M??──能用最少的成本、最短的?r?g,做出最可靠的???w──花在??程式的?Y源,其???卓??A算的比例?K不甚高。最不??明的?M??,把所有的?A算都花在??程式,和改掉自己所??的程式中的?e?x。他??的??成本是偏高的,因?樗????]有?榧???工作效率而奠立基?A(?P於?@一?c,在 第七章5 中有更????的?f明)。
??了再改的?_?l方式之所以?^?m被人?用,是因?樗?有?牲c很吸引人。第一,它能???F??很快地表?F出?0赣羞M展的?E象──他??第一天就能把巨石推?M十公尺,而有效率的?F????在砍?溲u造?L??木,???涞缆泛米?日後的移?禹??常?巨石根本?]有任何移?印H绻?主管和??客不?蚵?明,不明白成功的???w?_?l本身的???B性──而大部分的老???_是如此,?@?r候??了再改的?_?l方式看起?碚媸遣诲e,因???0???很快?_始有?M度。??了再改的?_?l方式吸引人的第二??原因是,它不需要任何????。在???w?I,???w工程方面的平均????支出是很低的,因此把??了再改的?_?l方式??作第一???x?袷欠浅F毡榈摹UЭ粗?下它是多?N?T人,但它是蠢人的?S金,而有????的???w?_?l人?T知道,它是?]有?r值的。 字串6
?D2-5?M步的???w?_?l方式在初期要投入比?^多的努力,而避免掉?0羔崞诖罅慷?不必要的工作。
勿?裼???了再改的?_?l方式
?0敢婚_始?M行就可看得??某些?Y果,?@一?c非常?T人,?@就是?槭颤N不?嘤蓄?客和管理者掉?M??了再改的陷阱?e。?0傅睦?害?P?S人若是想左右?_?l方式,大都??在?0????_始的?r候。如?D2-6所示,??了再改的?_?l方式的?_在初期?@?F出比?^好的?M度,但是????的?0????r看不??有形的?M度。
????客或主管想看程式?绦械????r,????的?0??]?k法示???o他??看。最能?f服??客和老?????裼眠M步的???w?_?l方式的?r?C,是??了再改的?0讣??⒔Y束的?r候,?D2-6清楚?@示每??人都深陷痛苦之中。6
?D2-6如果??客和老?????猿忠?看程式?绦械????r,就很?y?f服他???????裼眠M步的???w?_?l方式。
???{品?|
您或?S以?榧热婚_?l?T可以花少一?c的?r?g在?y??和?a品?u估,那?N?r?g表就可以?s?p了。?A向??了再改的人???f,那是??然的。但是???w?I的?????s?@示,正好相反。企?D以品?|交?Q成本的?F??,最後反而得付出更大的成本和更?L的?r?g。
如?D2-7所示,在???w推出之前清除95%瑕疵的?0福?是最有生?a力的,他??花在修改程式的???r?g最少。要想在推出前清除超?^95%的瑕疵,就得花?~外的?r?g,?砀纳破焚|。推出前瑕疵修正率低於95%者,其??????早一?c清除?a品的瑕疵,??比?^有效率。大?s有75%的???w?0福?其推出前瑕疵修正率低於95%。??於?@些?0福??榱粟s?r?g而?奚?品?|是另一?N蠢人的?S金。很不幸的,在充?M???B的???w?_?l中,?@?N?F象已不是新??了。IBM在二十年前就?l?F,?0感〗M若是把重心放在?s短?r程表而非??造高品?|,???砭???有更大的?C???l生成本超出和?r?g延?`。???{品?|、??意追求低的瑕疵率,?@?拥??0钙???是花最少?r?g、而有最高生?a力的。
?D2-7在曲??的???c,就是既有低瑕疵率、又能花最少的?r?g的?0浮4蟛糠值??0钙???可以?裼迷缛招拚?瑕疵的方式?砜s短?r程表(?Y料?碓矗?Jones, 《Applied Software Measurement: Assuring Productivity and Quality, 》2nd ed., 1997)。
7
有些蠢人的?S金是?y子?? 字串3
新的科技和方法??常??伴?S著?F??的「???Q功效」,也就是所?^的「?y子??」(silver bullets),因?樗???本意是要一?e消?绲蜕??a力的?F象。?凳?年?恚????w?I???v?^多次的「?y子??」:1960年代的??上即?r交易的程式(on-line programming)、1970年代的第三代程式?Z言(third-generation language)、1980年代?用人工智慧科技?u造的???X?o助???w工程(CASE tools, Computer-Added Software Engineering),1990年代流行的物件??向程式?Z言(object-oriented programming),都曾?????Q保?C能大幅提高???w的生?a力。
假定搬?巨石的?F??一?_始?r使用的是不??一切的?U力。?滋熘?後?F???I??人就?l?F照?@?N??慢的?M度,是?o法在期限前完成的。很幸?地,他???f有一?N奇妙的?游铮?名叫大象,?w重超?^成人的?砂俦叮?而且力大?o?F。於是?F???I??人?????M狩?C???h征,捉一?^大象???兔ν七@巨石。三??星期的跋山涉水,狩?C??好不容易?е?捕?@的大象回?砹恕K????B忙把?R具套牢在?@奇妙的巨?F身上,???浜帽拮佣酱???。所有的人都屏息以待,看大象如何快速地移?泳奘?,也?S能比期限提早完成呢!他????大眼睛仔??看,的?_,大象拉?泳奘?的速朗O比人??快多了,可以?f是前所未有,但是慢著,??,突然地,?P起後腿蹬?鸟R具又踩死????人,然後溜之大吉,?拇嗽僖??]有人看到??,如?D2-8的情景。?F??感到失望:「也?S我??在利用大象之前,????多花?c?r?g?W??如何?{?S??。」他??又浪?M了20%的?r?g期待大象,失去了?晌唤M?T,而?]有向目?饲斑M一分一毫。???蔚卣f,?@就是「?y子??」症候群。 字串5
?D2-8?y子??的??新??常??人大失所望
大象的比喻,比您所想像的??要接近事??。?_伯特.葛拉斯(Robert L. Glass)在《失控的???w》(Software Runaways)一??中比?^十六??有???}的?0浮F渲芯陀兴????0钙谕??用?y子??的??新,?慝@得??效大幅提升,?Y果他??的企?D全都失?×恕?
有一?N比?^特?e的「?y子??」,那是?榱苏??w?M??的程序改良而想出?淼摹S行┙M???裼靡恍┝餍杏制?亮的管理名?~,????施?M??改良──整?w品?|管理(TQM,Total Quality Management)、QFD、???w成熟度模型、零缺?c、六????和、持?m地改?M(Continuous Improvement)、?y??程序控制(Statistical Process Control)。只要?用得??,?@些都是很有?r值的好方法,也就是?f,要?W㈧????|?用娑?非徒具形式。有些?M??每十二??月就????新??樱?好似????企?I管理潮流?g?Z就可以把品?|?c生?a力改善四倍一?樱??@??的?M??有??特?e的地?z等著他??,就是低生?a力。在?啄甑牧餍行g?Z管理(MBB,Management By Buzzword)之後,?T工大都??管理?A?拥慕M??改良??颖С殖爸S的?B度,使得?_?l方式更?y逃????了再改的陷阱。8
正?_的??新必????用在合?m的?0福??K搭配合?m的????,?λ?的期望也必??切合???H,作?殚L期策略的??,?@?幼鼍???有非常好的效果。但是??新?K不是??魔?g,也不是容易的事。?y子??也是一?N蠢人的?S金,因?樗?有著一步登天的?e?`?B度,??常?槎唐谀??硕??裼茫??]有合?m的????,也?]有任何?L?U管理。就像?S?F?V一?樱?有????的管理者和???w?_?l人?T????懂得不被它愚弄。
???w?K不??
??有一?N蠢人的?S金,就是?`以?檐??w是??的,????很容易。原本硬?w被?Q作是「硬」?w,是因?樗?不容易改??,???w的「??」,是指它容易改??。而事??上,???X???_始被?l展出???r,???w的?_很容易改??。但是???w系?y已???M展到非常?}?s,把???w的「??」字??成容易改??的?^念,已??完全?^?r了。
有?醉?研究?l?F,需求的改??──企?D利用???w「容易改??」的特性──是造成?0赋杀境?支和?r程延?`的最普遍因素。?@也是?0副蝗∠?的主要原因之一,有些情?r下,需求的改????把?0傅姆?定性大幅破?模?以致?0父?本?o法完成。
??我???e?????蔚睦?子?碚f明???w?K不像人??想像的那?N「??」。假?O您的任?帐窃O??一??能印五?N?蟊淼南到y,但最後需求??成十?N?蟊怼D?必??考?]的??性──「??」的程度──有下面?醉?:
最多十?N?蟊??幔???不??又再增加?
???淼??蟊砗妥畛踉O??的五?N?蟊聿町?有多大?
9
每一?N?蟊矶家?列印出???幔?
所有的?蟊矶际且宦梢怨潭ǖ捻?序印出?幔?
????允?S使用者???蟊砟茏鍪颤N程度的修改?
使用者可否定?x自己的?蟊恚?
?蟊???需要翻?g成另一?N?Z言?幔?
不?????w在?O???r多?N小心、多?N高明,????有一部分是不能改??的。如果只看?蟊淼南到y,?????w修改?r,以下的????地方可能????成固定(硬)的:
定?x不只十?N?蟊怼?
10
定?x?c原始五?N?蟊聿煌?的新?蟊怼?
列印其中一部分的?蟊怼?
照使用者定?x的??序印表。
字串6
允?S使用者修改?蟊怼?
允?S使用者定?x自己的新?蟊怼?
???蟊矸??g成另一?N拉丁?Z系的?Z言。
???蟊矸??g成另一?N非拉丁字母的?Z言,也?S是?挠业阶蟮摹?
11
非常有趣,我在完全不知道?蟊淼????|?热荨⒂檬颤N系?y列印、?Y料如何?a生,?H知道「五?N?蟊碜?成十?N」,就可以??出?@?N一大堆「???w之??,??何如」的???},而且都是很一般性的???}。
?_?l人?T????把???w做得愈??愈好,?@?N?f法??起?砗懿诲e,但是???w的完全??性就意味著要用?o限多?N???担??@是要付出代?r的。如果使用者只是要五?N固定的?????蟊恚?固定把它??全部印出,每次一律以固定的??序、不??的?Z言,?_?l人?T??在不必要把系?y?O??到允?S使用者自定?蟊淼???性程度,?@?拥母???性???w成本可能是???使潭ㄊ降?100倍到1000倍,而使用者真正需要的只是基本功能的那一部分。使用者(包括??客和管理者)有??任?f助???w?_?l人?T精?_的定?x出本系?y的??性程度。
???w??性的成本是?A存的?溆每睿?限制???w的??性,可以??省下?@?P?X,但是??性若是不?颍?通常???е氯蔗峄ㄙM多到不成比例的成本。?@是一?????w工程上很困?y的判?啵喝绾魏饬恳阎?的?F?r需求和可能的未?硇枨螅?然後?Q定本???w究竟????有多「??」。
?拇廊说狞S金中?@得的教??
???Y以上的探??,我??可以得出以下???c非常明白的???w方面的事??:
???w?0傅某晒εc否,不是看早期的程式?M度而定。
即使您的???w不是那?N攸?P重大,您也不能?榱私档统杀净蚩s短?r程而允?S?a品瑕疵。??於大部分的???w而言,重?c????放在?p少瑕疵,?@?映杀竞??r?g就??自然跟著下降。
12
?y子?????0傅慕】涤泻艽蟮???害,?m然???w?I的?l展?v程似乎不?嘈??Q新技?g??有多?M步。
??有其表的程序改善??邮橇硪环N特?e具有??害性的?y子??,因?樗?悄悄地侵?g了???碚嬲?想改善?M??的企?D心。
?m然???w有????字,它事??上?K不??,除非您在一?_始就?樗??A先?O??好足?虻???性,而?@是很昂?F的。
???w?I已有五十年的?l展?v程,其中的??????我???W??到以上的事??,而我在後面的章?????????f明,最??明的人和?M????把?@些教??????在心。在失?〉慕M???e,人??不?啾淮廊说狞S金愚弄,反而看不??事??真相。?W著抗拒──?K且持?m地抗拒──蠢人?S金的?T惑,是???w?I必???W??的首要功?n之一,?@是建立真正???I的???w工程的第一步。 字串3
搬?石?K
??我??回到比加州淘金?岣?久?h的以前,假定您是在古代埃及,正在建造金字塔。您的任?帐前徇?o?档木奘??K,?氖?公里外的河??搬到金字塔的工地,如?D2-1所示。您有二十位工人,要在一百天之?韧瓿伞?
1
?D2-1您可以把???w?0府?成一?K巨石?硭伎肌D?可以一天推?右稽c,每天都比昨天更接近目?耍?您也可以做某些使移?铀俣燃涌斓氖虑椋?用比?^少的?r?g走完同?拥穆烦獭?
您被允?S使用任何您喜?g的方法搬?石?K到目的地。您必????石?K每天平均移?右话俟?尺,或者是想?k法??石?K移?铀?需的?r?g?s短。
字串9
有些小????立刻?_始推石?K(?r?g?o迫嘛),??著用?U力推?铀?。?Ω缎〉氖??K?@?N方法或?S有效,但是?Ω短稍谏衬?中的巨石,?@?N方法就算推得?樱?也?^?Σ???快。如果每天前?M十公尺,?@??用?M全力的速度也?S令人?M意,但事??是每天落後九十公尺的?M度。「有?M步」?K不代表「有足?虻倪M步」。
??明的?F??不??直接跳下去用?U力推?泳奘?。除非是很小的石?K,他??知道凡事在?邮肿鲋?前必??花?r?g做好????。分析?^他??的任?罩?後,他??可能???Q定先砍?卓??渥龀??L??,如?D2-2所示。他??的????也?S要花一?商斓??r?g,但有很大的可能性他????加速巨石的移?印?
?D2-2 ??是移?泳奘?或??造???X???w,??明的?F????在行?又?前做好????,??往後的工作既快速又有效率。
2
?f一旁???]有?淠驹觞N?k??F??得花上?滋斓陌仙嫒ズ拥纳嫌握??た捎玫哪静模窟@?滋斓耐顿Y是值得的,特?e是用?U力而只能做到???|的要求的一小部分?r。
??明的?F??在搬?巨石?r,????想到?m平道路。他????想建好平坦的道路,而不要在沙地上推?泳奘?。?@是??好主意,特?e是有不只一?K巨石要搬??r。
字串8
更??明的?F??也?S一?_始?r?裼??L??木?c平坦路的方法,不久後就?l?F?L??木的?盗坑邢蓿?以致每隔一分??就得停下???⒆钺崦婺歉??L??木搬到最前方,但如果有多???l?L??木,而且??一小部分的人?B?把?L??木往前搬,就可以避免巨石走走停停,而比?^容易?S持?恿Α?
?F???S後可能?l?F,推?泳奘?的人?凳芟揿毒奘?的??度,於是?u作了一副?R具,??一部分的人在前方推,其他的人在後面推,如?D2-3所示,?@?N一?砭陀斜容^多的人可以加入,每??人的的????就比?^?p,?@?硬坏?速度?^快,也比?^容易?S持?w力。
?D2-3??明的?F??不???で蟾?有效率的工作方式
石?K?c???w
3
移?泳奘?和???w有什?N?P?B呢?移?泳奘?是??程式的比喻。如果您在100天之?纫?完成???w?0福?您是每天做百分之一的程式?a,??是?O法????程式的速度加快呢?撰??程式?a的工作比搬?石?K要抽象得多,而且在?0傅某跗冢??M度是很?y?y定的。???w?0负芘? 「最後一分??症候群」,也就是?F??在一?_始?r?]?X察到?r?g的急迫性,初期浪?M了太多?r?g,直到最後才以?^不??身的??狂?B度拼命?s工。把您的???w?0赶胂癯砂徇巨石,很明?@您不可能期望最後才?s工的?0妇谷豢梢猿晒ΑC恳惶欤??0附?理都必??自??:「我??今天的工作是否把???w推?M了一天的?M度?如果?]有,我??是否把剩?N工作所需的?r?g?p少了一天?」
字串1
另外??有一?c是移?泳奘?和???w相似的,就是不??您做?^多少????,有一天您??得?_始用力推石?^,也就是?f,您必????程式。除非是很小的?0福???程式??是有多得?挡磺宓募???工作,多到很容易被您低估。
??了再改的?_?l方式
?c???涑浞衷匍_始?庸は喾吹氖???了再改的?_?l方式,也就是不把重心放在?????L??木和?m平道路,而直接?_始??程式,?@是???w界比?^常??的???}。有75%的???w?_?l?F???_始做?0傅姆绞绞侵苯影炎约鹤蚕蚓奘?,企?D用?U力推?铀?。像?@?又苯??邮???程式,而不先做好???w的????和?O??,我???Q之?椤???了再改」的?_?l方式(code-and-fix development)。?F?????@?N做的原因,有?r候是因?殚_?l人?T太心急,想早日?庸ぃ?有?r候是主管或??客急於看到具?w的?M度。
??了再改的?_?l方式,就像??用?U力推?泳奘?一?樱?它的???}是?_始的?r候快,但不代表最後能早日完成,反而是懂得?用?^好的?_?l方式的?F??,能???⒄??w的生?a力提升到更高的?哟危?最後???0赣行?率地做完。他??先做好奠基的工作,把?L??木?|在巨石之下,把道路整治???常????浜??⒋蠹业牧α??F?Y起?怼O喾吹兀???了再改的?F???m然?_始得早,但?@?拥男U?质呛茈y持久的,通常很快就??造成千百??瑕疵。有些研究?l?F40%到80%的?0割A算都被用在修改同一?0冈缙谘u造的瑕疵。
字串7
???D2-4可以看出?恚???了再改式的?F??,其生?a力???S著?r?g而消?g。?0????_始?r,只有一?c?c(或是?]有)的努力是投?Y在????和程序管理方面,少量的努力是?o效的工作,但大部分是投入在??程式。?S著?0傅??r程推?M,修改瑕疵所?椎谋壤?逐步增加。到了?0缚旖Y束的?r候,?F???^大部分的?r?g是花在修改自己早期所?u造的瑕疵。
4
?D2-4??了再改的?0溉绻?幸?的??,待修的瑕疵?K不多,生?a力降低但仍可?S持住。而倒楣的?0杆?有的努力都被?o效的工作、?聿患暗囊???和程序管理所消?m殆?M(摘自:《???w?0盖笊?手?浴否R康尼著,1988年)。
如?D2-4所示,??了再改的?0钢校?幸?的因?殍Υ蒙伲?仍然可以勉???⑦M度向前推?M而到?_?K?c,而倒楣的?0??t所有的努力都?m?M在?????c程序管理,以及修改先前的瑕疵,完全?o法把程式的?M度推前一步了。
?@??悲?K的景象?^?Σ徽F??。有?醉?研究指出,???w?_?l?0钢校?有25%的?0缸钺岜蝗∠?了。在?@些?0副蝗∠?的?r候,它??全部都超出?A算,而且陷入抓?x、?y??、除?x的?o?F??圈中,所有的努力都是?o效的工作。?@些?0副蝗∠?的理由是,品?|的低下已被?J?槭??o??可救,不如放??。 字串6
?S刺的是,?@些失?〉??0缸钺??s做了?c成功的?0敢??佣嗟囊???和程序管理。失?〉??0溉匀坏米鲨Υ米粉?,?砉芾硭?有被?l?F的?e?x。期限?⒅??r,他??必??更小心地?u估自己的???w,?S著期限?毫Φ脑黾樱?他??每?L重新?u估,有?r候甚至每天重新?u估。他??花?r?g在??住各方?Ρ??0傅钠谕?,?O法??大家相信本?0改??蛉缙谕瓿伞K???必????施程式品?|???剩?在加入一段新程式以前,?_保不致??害到整?????w。由於?@些工作都太?t了些,所以真正的效益是有限的。和失?〉??0副容^起?恚?有效率的?M??所?裼玫倪M行方式是截然不同的──事??上,?0溉绻?一?_始就走?Φ脑?,以上所述的失???0改┢谒?做的事情,可能根本不需要。
如同?D2-5所揭示的,最??明的?M??──能用最少的成本、最短的?r?g,做出最可靠的???w──花在??程式的?Y源,其???卓??A算的比例?K不甚高。最不??明的?M??,把所有的?A算都花在??程式,和改掉自己所??的程式中的?e?x。他??的??成本是偏高的,因?樗????]有?榧???工作效率而奠立基?A(?P於?@一?c,在 第七章5 中有更????的?f明)。
??了再改的?_?l方式之所以?^?m被人?用,是因?樗?有?牲c很吸引人。第一,它能???F??很快地表?F出?0赣羞M展的?E象──他??第一天就能把巨石推?M十公尺,而有效率的?F????在砍?溲u造?L??木,???涞缆泛米?日後的移?禹??常?巨石根本?]有任何移?印H绻?主管和??客不?蚵?明,不明白成功的???w?_?l本身的???B性──而大部分的老???_是如此,?@?r候??了再改的?_?l方式看起?碚媸遣诲e,因???0???很快?_始有?M度。??了再改的?_?l方式吸引人的第二??原因是,它不需要任何????。在???w?I,???w工程方面的平均????支出是很低的,因此把??了再改的?_?l方式??作第一???x?袷欠浅F毡榈摹UЭ粗?下它是多?N?T人,但它是蠢人的?S金,而有????的???w?_?l人?T知道,它是?]有?r值的。 字串6
?D2-5?M步的???w?_?l方式在初期要投入比?^多的努力,而避免掉?0羔崞诖罅慷?不必要的工作。
勿?裼???了再改的?_?l方式
?0敢婚_始?M行就可看得??某些?Y果,?@一?c非常?T人,?@就是?槭颤N不?嘤蓄?客和管理者掉?M??了再改的陷阱?e。?0傅睦?害?P?S人若是想左右?_?l方式,大都??在?0????_始的?r候。如?D2-6所示,??了再改的?_?l方式的?_在初期?@?F出比?^好的?M度,但是????的?0????r看不??有形的?M度。
????客或主管想看程式?绦械????r,????的?0??]?k法示???o他??看。最能?f服??客和老?????裼眠M步的???w?_?l方式的?r?C,是??了再改的?0讣??⒔Y束的?r候,?D2-6清楚?@示每??人都深陷痛苦之中。6
?D2-6如果??客和老?????猿忠?看程式?绦械????r,就很?y?f服他???????裼眠M步的???w?_?l方式。
???{品?|
您或?S以?榧热婚_?l?T可以花少一?c的?r?g在?y??和?a品?u估,那?N?r?g表就可以?s?p了。?A向??了再改的人???f,那是??然的。但是???w?I的?????s?@示,正好相反。企?D以品?|交?Q成本的?F??,最後反而得付出更大的成本和更?L的?r?g。
字串6
如?D2-7所示,在???w推出之前清除95%瑕疵的?0福?是最有生?a力的,他??花在修改程式的???r?g最少。要想在推出前清除超?^95%的瑕疵,就得花?~外的?r?g,?砀纳破焚|。推出前瑕疵修正率低於95%者,其??????早一?c清除?a品的瑕疵,??比?^有效率。大?s有75%的???w?0福?其推出前瑕疵修正率低於95%。??於?@些?0福??榱粟s?r?g而?奚?品?|是另一?N蠢人的?S金。很不幸的,在充?M???B的???w?_?l中,?@?N?F象已不是新??了。IBM在二十年前就?l?F,?0感〗M若是把重心放在?s短?r程表而非??造高品?|,???砭???有更大的?C???l生成本超出和?r?g延?`。???{品?|、??意追求低的瑕疵率,?@?拥??0钙???是花最少?r?g、而有最高生?a力的。
?D2-7在曲??的???c,就是既有低瑕疵率、又能花最少的?r?g的?0浮4蟛糠值??0钙???可以?裼迷缛招拚?瑕疵的方式?砜s短?r程表(?Y料?碓矗?Jones, 《Applied Software Measurement: Assuring Productivity and Quality, 》2nd ed., 1997)。
7
有些蠢人的?S金是?y子?? 字串3
新的科技和方法??常??伴?S著?F??的「???Q功效」,也就是所?^的「?y子??」(silver bullets),因?樗???本意是要一?e消?绲蜕??a力的?F象。?凳?年?恚????w?I???v?^多次的「?y子??」:1960年代的??上即?r交易的程式(on-line programming)、1970年代的第三代程式?Z言(third-generation language)、1980年代?用人工智慧科技?u造的???X?o助???w工程(CASE tools, Computer-Added Software Engineering),1990年代流行的物件??向程式?Z言(object-oriented programming),都曾?????Q保?C能大幅提高???w的生?a力。
假定搬?巨石的?F??一?_始?r使用的是不??一切的?U力。?滋熘?後?F???I??人就?l?F照?@?N??慢的?M度,是?o法在期限前完成的。很幸?地,他???f有一?N奇妙的?游铮?名叫大象,?w重超?^成人的?砂俦叮?而且力大?o?F。於是?F???I??人?????M狩?C???h征,捉一?^大象???兔ν七@巨石。三??星期的跋山涉水,狩?C??好不容易?е?捕?@的大象回?砹恕K????B忙把?R具套牢在?@奇妙的巨?F身上,???浜帽拮佣酱???。所有的人都屏息以待,看大象如何快速地移?泳奘?,也?S能比期限提早完成呢!他????大眼睛仔??看,的?_,大象拉?泳奘?的速朗O比人??快多了,可以?f是前所未有,但是慢著,??,突然地,?P起後腿蹬?鸟R具又踩死????人,然後溜之大吉,?拇嗽僖??]有人看到??,如?D2-8的情景。?F??感到失望:「也?S我??在利用大象之前,????多花?c?r?g?W??如何?{?S??。」他??又浪?M了20%的?r?g期待大象,失去了?晌唤M?T,而?]有向目?饲斑M一分一毫。???蔚卣f,?@就是「?y子??」症候群。 字串5
?D2-8?y子??的??新??常??人大失所望
大象的比喻,比您所想像的??要接近事??。?_伯特.葛拉斯(Robert L. Glass)在《失控的???w》(Software Runaways)一??中比?^十六??有???}的?0浮F渲芯陀兴????0钙谕??用?y子??的??新,?慝@得??效大幅提升,?Y果他??的企?D全都失?×恕?
有一?N比?^特?e的「?y子??」,那是?榱苏??w?M??的程序改良而想出?淼摹S行┙M???裼靡恍┝餍杏制?亮的管理名?~,????施?M??改良──整?w品?|管理(TQM,Total Quality Management)、QFD、???w成熟度模型、零缺?c、六????和、持?m地改?M(Continuous Improvement)、?y??程序控制(Statistical Process Control)。只要?用得??,?@些都是很有?r值的好方法,也就是?f,要?W㈧????|?用娑?非徒具形式。有些?M??每十二??月就????新??樱?好似????企?I管理潮流?g?Z就可以把品?|?c生?a力改善四倍一?樱??@??的?M??有??特?e的地?z等著他??,就是低生?a力。在?啄甑牧餍行g?Z管理(MBB,Management By Buzzword)之後,?T工大都??管理?A?拥慕M??改良??颖С殖爸S的?B度,使得?_?l方式更?y逃????了再改的陷阱。8
字串8
正?_的??新必????用在合?m的?0福??K搭配合?m的????,?λ?的期望也必??切合???H,作?殚L期策略的??,?@?幼鼍???有非常好的效果。但是??新?K不是??魔?g,也不是容易的事。?y子??也是一?N蠢人的?S金,因?樗?有著一步登天的?e?`?B度,??常?槎唐谀??硕??裼茫??]有合?m的????,也?]有任何?L?U管理。就像?S?F?V一?樱?有????的管理者和???w?_?l人?T????懂得不被它愚弄。
???w?K不??
??有一?N蠢人的?S金,就是?`以?檐??w是??的,????很容易。原本硬?w被?Q作是「硬」?w,是因?樗?不容易改??,???w的「??」,是指它容易改??。而事??上,???X???_始被?l展出???r,???w的?_很容易改??。但是???w系?y已???M展到非常?}?s,把???w的「??」字??成容易改??的?^念,已??完全?^?r了。
有?醉?研究?l?F,需求的改??──企?D利用???w「容易改??」的特性──是造成?0赋杀境?支和?r程延?`的最普遍因素。?@也是?0副蝗∠?的主要原因之一,有些情?r下,需求的改????把?0傅姆?定性大幅破?模?以致?0父?本?o法完成。
??我???e?????蔚睦?子?碚f明???w?K不像人??想像的那?N「??」。假?O您的任?帐窃O??一??能印五?N?蟊淼南到y,但最後需求??成十?N?蟊怼D?必??考?]的??性──「??」的程度──有下面?醉?:
字串3
最多十?N?蟊??幔???不??又再增加?
???淼??蟊砗妥畛踉O??的五?N?蟊聿町?有多大?
9
每一?N?蟊矶家?列印出???幔?
所有的?蟊矶际且宦梢怨潭ǖ捻?序印出?幔?
????允?S使用者???蟊砟茏鍪颤N程度的修改?
使用者可否定?x自己的?蟊恚?
?蟊???需要翻?g成另一?N?Z言?幔?
不?????w在?O???r多?N小心、多?N高明,????有一部分是不能改??的。如果只看?蟊淼南到y,?????w修改?r,以下的????地方可能????成固定(硬)的:
定?x不只十?N?蟊怼?
10
定?x?c原始五?N?蟊聿煌?的新?蟊怼?
列印其中一部分的?蟊怼?
照使用者定?x的??序印表。
字串6
允?S使用者修改?蟊怼?
允?S使用者定?x自己的新?蟊怼?
???蟊矸??g成另一?N拉丁?Z系的?Z言。
???蟊矸??g成另一?N非拉丁字母的?Z言,也?S是?挠业阶蟮摹?
11
非常有趣,我在完全不知道?蟊淼????|?热荨⒂檬颤N系?y列印、?Y料如何?a生,?H知道「五?N?蟊碜?成十?N」,就可以??出?@?N一大堆「???w之??,??何如」的???},而且都是很一般性的???}。
?_?l人?T????把???w做得愈??愈好,?@?N?f法??起?砗懿诲e,但是???w的完全??性就意味著要用?o限多?N???担??@是要付出代?r的。如果使用者只是要五?N固定的?????蟊恚?固定把它??全部印出,每次一律以固定的??序、不??的?Z言,?_?l人?T??在不必要把系?y?O??到允?S使用者自定?蟊淼???性程度,?@?拥母???性???w成本可能是???使潭ㄊ降?100倍到1000倍,而使用者真正需要的只是基本功能的那一部分。使用者(包括??客和管理者)有??任?f助???w?_?l人?T精?_的定?x出本系?y的??性程度。
???w??性的成本是?A存的?溆每睿?限制???w的??性,可以??省下?@?P?X,但是??性若是不?颍?通常???е氯蔗峄ㄙM多到不成比例的成本。?@是一?????w工程上很困?y的判?啵喝绾魏饬恳阎?的?F?r需求和可能的未?硇枨螅?然後?Q定本???w究竟????有多「??」。
字串5
?拇廊说狞S金中?@得的教??
???Y以上的探??,我??可以得出以下???c非常明白的???w方面的事??:
???w?0傅某晒εc否,不是看早期的程式?M度而定。
即使您的???w不是那?N攸?P重大,您也不能?榱私档统杀净蚩s短?r程而允?S?a品瑕疵。??於大部分的???w而言,重?c????放在?p少瑕疵,?@?映杀竞??r?g就??自然跟著下降。
12
?y子?????0傅慕】涤泻艽蟮???害,?m然???w?I的?l展?v程似乎不?嘈??Q新技?g??有多?M步。
??有其表的程序改善??邮橇硪环N特?e具有??害性的?y子??,因?樗?悄悄地侵?g了???碚嬲?想改善?M??的企?D心。
?m然???w有????字,它事??上?K不??,除非您在一?_始就?樗??A先?O??好足?虻???性,而?@是很昂?F的。
???w?I已有五十年的?l展?v程,其中的??????我???W??到以上的事??,而我在後面的章?????????f明,最??明的人和?M????把?@些教??????在心。在失?〉慕M???e,人??不?啾淮廊说狞S金愚弄,反而看不??事??真相。?W著抗拒──?K且持?m地抗拒──蠢人?S金的?T惑,是???w?I必???W??的首要功?n之一,?@是建立真正???I的???w工程的第一步。 字串3
Tags:
责任编辑:您的评论
·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为
精彩推荐
最新资讯


您的位置: