小時候我對一位老先生吃飯很感興趣:他總是先把一大盒的米飯吃光了,然后再幸福地品嘗一小盒菜。父母告訴我這是中國的傳統美德,叫“先苦后甜”。從此我銘記在心,按此道理去學習和工作。可如今在飯店里,人們總是先把菜吃完了,后才吃點米飯。天哪,生活真是太復雜了,我究竟該“先吃飯” 還是“先吃菜”?
(3)開發一個大的軟件項目,應該將進度表分為若干個里程碑。一個里程碑之內的多個任務可以同步進行。程序員極容易沉迷于技術,要么樂不思蜀,要么焦頭爛額。里程碑象心靈的燈塔,使忙碌的人群不混亂,不迷失方向。
(4)進度表中必須留有緩沖時間,并將緩沖時間用到不確定的事情上。因為人們對即將要做的事情知之甚少,所以要留一些時間以防不測。Microsoft公司的一些開發小組甚至制定了“50% 緩沖規則”[Cusumano 1996]。對許多項目經理而言,容忍進度表中存在緩沖時間,不啻為觀念上的一個飛躍。
(5)如果發現項目應交付的期限非常不合理,要跟領導或跟客戶據理力爭,請求放寬期限、調整進度。當客戶的需求發生變化時,要對進度表作出相應的修正。不要覺得修改進度表很困難很麻煩,不修改才會產生真真的麻煩。很多人認為戒煙很困難,但馬克·吐溫曾說:“戒煙很容易,我一年戒幾十次。”
2、 零缺陷質量管理的觀念
“零缺陷”質量管理的觀念來源于一些國際上的硬件生產廠商。盡管軟件的開發與硬件生產有極大的差別,但我們仍可以從“零缺陷”質量管理中得到啟迪。“零缺陷”質量管理至少有兩個核心內容:一是高目標,二是可執行的規范。
2.1 高目標
人在做一件事情時,由于存在很多不確定的因素,一般不可能 地達到目標。假設平常人做事能完成目標的80%。如果某個人的目標是100分,那么他終成績可達80分。如果某個人的目標只是60分,那么他終成績只有48分。我們在考場上身經百戰,很清楚那些只想混及格的學生通常都不會及格,那些想得高分的學生也常為自己的失誤而捶胸頓足。
做一個項目通常需要多個人的協作。假設項目的總質量(高為1)是十個開發人員的工作質量之積。如果每個人的質量目標是0.95,那么十個人的累積質量不會超過0.19。如果每個人的質量目標是0.9分,那么十個人的累積質量不會超過0.03。只有每個人都做到1,項目總質量才會是1。
如果沒有高目標,人的墮落很快。如果沒有“零缺陷”的質量目標,也許缺陷會成堆。
2.2 可執行的規范
實現100分顯然比實現80分要付出更多的努力。“零缺陷”質量目標不是隨心所欲提出來的,做得到才有意義。實現高目標需要一套可執行的規范來保證。
50年代末,掀起了“浮夸風”。為了實現畝產數萬斤推廣各種方法,害得鬧饑荒。想不到有數千年種糧經驗的幾億中國農民這么整齊地栽倒了。
好規范必須是本企業有能力執行的。一個普通企業照搬企業的規范未必行得通。軟件工程的規范很容易從書籍中找到,但有了這些規范并不表明能把軟件做好。國內很多軟件公司根本沒有條件去執行業界推薦的軟件工程規范。社會主義初級階段的“草”與發達資本主義的“苗”的確有不同的培育方式。
軟件是如此的靈活,如果沒有規范來制約,容易因無序的喜好而導致混沌;但規范如果太嚴密了,會扼殺程序員生機勃勃的創造力。制定軟件規范是進退兩難的事。程序員必須深入了解軟件多方面的質量因素,把那些能提高軟件質量因素的各種規范植入腦中,才能在各個實踐環節自然而然地把高質量設計到軟件中。