版本

  有,經(jīng)理通知大家:咱們要開始做新版本4.1了。其后,像往常一樣,我們陸續(xù)接到一批批需求文檔,開始預估工作量。然而這一次,事情一開始有些不同:這些需求文檔寫得異常混亂,常常不知所云。我們如何能夠根據(jù)一份看不懂的需求文檔來預估工作量呢?我們隨后聯(lián)系法國的系統(tǒng)架構師(他們處境安全,跟我們合作融洽)要求澄清,他們也很不好意思,有時還確實能夠做出澄清,但大多數(shù)時候要么含含糊糊地來一句“我們也在研究”,要么說“根據(jù)我的經(jīng)驗,這條需求應該與你們模塊關系不大”云云。大家這么半猜半蒙,在磕磕絆絆中前行,心中滿是不詳?shù)念A感。

  4.1版本很倉促地做出來了。又有,經(jīng)理通知大家:4.1版本過于保守,連公司自己都覺得銷路不會好,決定立刻開始4.2版本計劃。于是一切都重新來過,而這一次,情況更糟:大多數(shù)需求文檔都是匆匆寫,語焉不詳。一些需求文檔只有一個標題,正文人家根本沒來得及寫,而經(jīng)理要求我們根據(jù)這樣的需求文檔來預估工作量。如果你認為這樣很夸張的話,那我只能批評你想象力有限?個別文檔只有一個編號,收納到某一領域的寫作計劃之中,連標題都沒有,而我們仍然要據(jù)此預估工作量!這樣,日復一日,我上報一些連我自己也不相信的數(shù)字給經(jīng)理,而他則努力裝出相信的樣子。

  軟件工程應該怎樣做?我本來以為CMM、TL 9000等是王道,經(jīng)歷這一風波我才深切地體會到,再好的流程與制度也經(jīng)不住扯淡啊。人和重要。

  4.2版本更倉促地做出來了。又又有,經(jīng)理通知大家:4.2版本過于激進,工期又短,從設計到實現(xiàn)毛病多多,公司也不看好,決定立刻開始5.0版本計劃。這一次倒是沒有太荒唐的事情發(fā)生。5.0版本實際上沒有什么全新的特性,而是將4.1、4.2這兩個版本的特性做一折中,從這個意義上講,叫它4.1.5版本更合適,當然這個話不能對客戶說。這樣,幾個月以來第一次,大家終于能夠做點兒靠譜的事情。然后,出事了。

  風起

  第一波的事故,我是直接責任人之一:因為我的失誤,我負責的FM模塊沒有通過編譯。

  我還記得前幾個版本交付時和H一起工作的情景。她會敦促我們盡量提前完成開發(fā)和測試工作,提交代碼,打上標簽,撰寫交付文檔。她會親自檢查我們的交付文檔,連一個細節(jié)也不放過。比如有一次,她發(fā)現(xiàn)我無意中開啟了Microsoft Word的中文自動糾錯功能,把“…”(在版本配置中具有特殊含義)自動替換成了半個中文省略號“…”,讓我臉上無光。大大小小的問題被她連續(xù)抓住幾次之后,我開始小心謹慎,此后幾個版本都順利過關。印象深的還是編譯時的一次次待命。由于時差的關系,法國同事依據(jù)標簽提出代碼開始編譯的時間是在北京的晚上,每一次,H都會帶領我們幾個少數(shù)技術骨干在辦公室待到夜里,直到我們團隊負責的所有模塊都成功編譯之后才離開。這可真是一件苦差事,而且在我當時看來毫無必要?我們的模塊從來都是一次編譯成功,錯誤(如果有的話)從來都屬于其他團隊。有一次,法國同事連續(xù)犯錯,導致編譯遲遲不能開始。當時我還保留著自校園帶出來的早睡的習慣,時間一長,上下眼皮開始打架。H跑到我的座位,談人生,談理想,談八卦,反正是不讓我睡著。一直堅持到凌晨兩點,編譯開始之后照例一次成功,H才領著饑腸轆轆的我們離開辦公室,請我們到樓下的小店吃宵夜。喝著溫暖的豆?jié){,我在心中嘀咕:“真是事兒媽啊。”

  這一次,“事兒媽”不在了,新任經(jīng)理給予我們“完全的信任”,從頭至尾都放開手?這同一件事情我們都連續(xù)做了好幾遍了,還能出什么錯呢?

  還真出事了。前幾次,我們至少能夠提前一周左右的時間完成全部工作,這搶下的一周時間足夠我們反復測試、排查問題,并為應對突發(fā)事件留下時間?盡管突發(fā)事件從未發(fā)生。而這一次,大家經(jīng)過連續(xù)幾次折騰之后疲憊不堪,工作效率低下,更何況這次的工期本來偏緊,還被前面幾個環(huán)節(jié)擠占不少。我們FM小組勉強提前幾天完成工作,CM小組卻陷入苦戰(zhàn),加班加點,緊趕慢趕才在后完成。FM模塊依賴于CM模塊,這樣一來,我們也受到連累,不得不換上CM小組新的標簽,重新測試FM模塊、打標簽、修改交付文檔。等到我餓著肚子敲完后一個字符,又仔仔細細檢查了幾遍,已是周五晚上7~8點鐘的光景。我長吁一口氣,站起身來,搖搖晃晃地離開了辦公室。

  等到我周一早晨回到辦公室,這才發(fā)現(xiàn)自己犯下低級錯誤:我忘記將修改后的交付文檔保存在指定目錄了!這樣一來,法國同事?lián)跃幾g的乃是先前保存的老版本的交付文檔,F(xiàn)M模塊編譯失敗!我趕緊寄出道歉信,連同新的交付文檔。然而,晚上的編譯仍然沒有成功。根據(jù)法國同事提供的編譯錯誤日志,我很快發(fā)現(xiàn)問題:FM模塊與其他依賴模塊之間使用了不一致的標簽。說起來還是怪我們兩邊當時掉以輕心,只是口頭約定了一下,也不知怎么聽岔了,關鍵時刻害人。又是一番折騰,F(xiàn)M模塊在第三次編譯中順利通過,我心中一塊石頭才算是落了地。