第5章 失敗的過程也是過程
“虛有其表耳。” ——《明皇實錄》
1. 做過程不是做工程
軟件工程這個概念被提出的時候大概是在上個世紀60 年代末。它作為成熟的概念的標志是軟件工程的瀑布模型的提出。瀑布模型將軟件開發的過程分成需求、分析、設計、開發和測試等 5 個主要階段,其主要環節關系表現為如下的這樣一種形態:
計劃
定 可行性研究
義
需求分析
系統設計
程序設計
實
現 編碼與模塊測試
組合與系統測試
維 運行&維護
護
在瀑布模型之后,很多人開始研究過程模型的問題。很多從實際工程中提煉出來的過程模型都是值得稱道的,例如 RAD(快速應用開發)模型、螺旋模型和現在常被提及的 RUP 模型。
模型就是“樣子”。人家拿出一個東西來說:這是模型。其言下之意就是要你按照這個樣子來做。然而正如下在這張圖所展示的:
按照模型的這個“樣子”,做完過程的每一個階段,并不等于做工程。或者說,工程并不是這樣就可以做成功的。
換而言之,無論是用 RAD 模型還是 RUP 模型來做工程,即使是亦步亦趨,也做不好工程。
如果工程可以那樣做成的話,只需要有瀑布模型就足夠了。因此做過程并不是做工程的精義。
也不是目的。
2. 做過場
為什么會存在這樣的問題呢?
四川有句地方話叫“做過場”,也有說成“走過場”
的。“過場”是舞臺術語,意思是角色從舞臺一端出場,
再走到另一端進場的一個過程。過場角色一般沒有唱腔或
道白,即便是有,也是沒有什么實質內容的。
前面那張圖就是一個過場。盡管那是一張用來描述
“溝通問題”的經典圖例,然而你應該注意到,每一個角
色都把自己的環節當成一個“過場”。如同演戲一樣,從
A 做到 Z,就一切都完成了。當然,按照 RUP 的思想,
是要從 A 到 Z 一遍又一遍地做下去的。然而,如果每一
遍(或者用 RUP 的那個術語“迭代”)都只是“過場”的話,
項目將是一場無休止的演出而已。
最終呢?觀眾受不了了,就交錢走人;演員受不了了,
就下臺散伙。戲目和項目的結局,竟如此地相似。
3. 實現,才是目的
很多人把問題的本質給忘掉了。從最開始,從我們編程開始,我們的目的就是實現一個東西。無論這個東西是小到一個稱手的工具,還是一個大到千萬的工程,我們的目標,都是要“實現”它。
工程只是一種實現的途徑。最初做開發的前輩們,不
用什么工程或者過程,也一樣編出了程序,也一樣解決了
問題,也一樣實現了目的。而現如今,我們講工程了,講
過程了,講方法了,卻什么都再也做不出來了。
不奇怪么?
工程被當成了借口,掩蓋了我們做事的真正目的:“實
現”。因此,我們在一個項目中常常聽到說“工程要這樣
做”,或者“工程要那樣做”,而絕少聽到“項目要求這樣
做”或者“客戶的本意是那樣的”。
這樣的結果是:我們做完了工程(的每一個過程),卻
沒有完成項目(的每一個“實現目標”)。
為工程而工程的人,都迷失在項目中了。就象開發人
員迷失在一個技術的細節上一樣。專注于 RUP 或者 RAD
之間的區別的人,可以把每一個過程的流程圖都畫出來,
卻也被這每一個流程給捆綁得死死的,再也沒有掙扎一下
的力氣。
4. 過程不是死模型
試著跳出大師們的身影,再仔細地看一下那些所謂的
“經典”過程,不過是在瀑布模型上的一再變形。瀑布模
型描述了開發的主要環節,于是一群人把這些環節擰來扭
去或者反復迭加,就成了 RAD、螺旋、RUP,以及未知
的、還沒有被扭出來或者堆疊出來的 X、Y、Z。
2002 年前后,我在 CSDN 論壇中看到一個漂洋過海
東渡扶桑的取經人,貼出了一個被稱為“日本 IT 工業發
展史的活字典”牛人指點的,足以令人震聾發饋的“V 字
型模型”。
這個模型是這樣:
要求定義 ------> 運用測試(驗收測試)
\ /
系統設計 ------> 系統測試
\ /
機能設計 ------> 結合測試(集成測試)
\ /
詳細設計 ------> 單體測試(單元測試)
\ /
CODING
我看后就很不以為然。
為什么呢?你看,你把 V 模型拉直了,還不就是瀑
布模型嗎?
要求定義
\
系統設計
\
機能設計
\
詳細設計
\
CODING
\
測試
如果僅僅是這樣看問題,那還只是知其表理。
《韓非子外儲說左上》記載了“買櫝還珠”的故事:
“楚人有賣其珠于鄭者,為木蘭之柜,熏以桂椒,綴以珠
玉,飾以玫瑰,輯以羽翠。鄭人買其櫝而還其珠。”
鄭人就只看到了事物的表面,而忽略了實質的東西。
如果我們只是把 V 模型當成折彎了的瀑布,那便是犯了
相同的錯誤。
因此,我們應該去思考由瀑布模型到 V 模型這種變
化的真實意圖。
V 模型在每一個環節中都強調了測試(并提供了測試
的依據),同時又在每一個環節都對實現者和測試者的分
離。由于測試者相對于實現者是一種監督、考察和評審的
關系,因此它相當于在不斷地做回顧和確認。
這有什么意義呢?你把它放在一個工程外包的背景
里去考慮就明白了。由于日本近年來老齡化嚴重,因此勞
動力短缺導致的勞工輸入和項目外包,直接影了它的組織
管理模式。無論是在本國雇傭外來勞工,還是將項目直接
外包給國外的開發團隊,項目成果的階段性考察都是他們
的第一要務,這直接決定了何時、如何,以及由誰來進入
下一個環節。
因此 V 模型變得比其它模型更為實用。模型的左端
是外包給的團隊或者公司,而右端則是日本軟件企業中有
豐富經驗的工程人員。這樣既節省人力,又可以保障工程
質量。事實上,即使左端外包方是由多個團隊同時承接,
右邊的工程人員也不需要更多的投入。
相對于瀑布模型,V 模型有改變了什么嗎?是的。源
于實際的需要,它把測試(和評審)階段抽取出來,于是就
成了 V 模型。
那么,如果需要,為什么不能把瀑布模型變成 W 模
型,或者 M 模型呢?為什么就一定要跟隨那個以迭代為
基礎的 RUP 模型呢?
更進一步想,如果瀑布可以變成 V、W 和 M,為什
么它不能更關注于其中某個具體的環節(例如實現和設計
環節)?如果在這些環節上引入 RUP 的思想,哈哈,你看
看,是不是出現了勛章模型和煙斗模型?
然而你要知道,過程模型是在既有工程中總結出來
的。也就是說,在某個模型有了名字之前就它已經存在了,
就已經被一些團隊或者公司創生并使用了。
那么,為什么我們不是創生那些新的工程方法和軟件
過程理論的團隊或者公司呢?
5. “刻鵠類鶩”與“畫虎類狗”
東漢時期,伏波將軍馬援在南征交趾期間寫過一封著
名的家書,是教導兩個“喜譏議而通輕俠客”的侄兒的,
希望他們學習敦厚謹慎的龍伯高,不要仿效豪俠仗義的杜季良。
龍伯高時任越騎司馬,杜季良時任山都長,都是馬援
所“愛之重之”的人。然而馬援告誡兩個侄兒說:“效伯
高不得,猶為謹敕之士,所謂刻鵠不成尚類鶩者也。效季
良不得,陷為天下輕薄子,所謂畫虎不成反類狗者也。”
于是,伯高、季良因馬援家書而名留史冊,“刻鵠類
鶩”和“畫虎類犬”就此成為典故。這意思便是說,雕刻
天鵝不成,總還可以像只鴨子(鶩);若畫虎不成反而像條
狗,那就事與愿違,貽人笑柄了。
后來的后來,近代作家朱湘就引用了這個典故,寫了
一篇《畫虎》并收入《中書集》。《畫虎》中說“一班膽小
如鼠的老前輩便是這樣警勸后生:學老杜罷,千萬不要學
李太白。因為老杜學不成,你至少還有個架子;學不成李
的時候,你簡直一無所有。這學的風氣一盛,李杜便從此
不再出現于中國詩壇之上了。所有的只是一些杜的架子,
或一些李的架子。”
《畫虎》這篇文章真的是好,真是建議大家讀讀。其
中畫師與畫匠之論,精妙深徹,痛指骨質。而后論及日本,
“國家中的畫匠”幾個字便打發了。
大師的眼光果然獨到。
然而朱老先生反駁馬援所說的“刻鵠強于畫虎”,卻
實在顯得牽強。他說“鶩真強似狗嗎?試問它們兩個當中,
是誰怕誰?”,又從“聰明”、“警醒”兩個角度來說明狗強于鶩。我就覺得奇怪了,這與刻鵠之“刻”、畫虎之“畫”
有什么關系呢?
馬援說刻成鴨子比畫成狗好,其真實的意思是說學龍
伯高不成,可得“謹敕”;學杜季良不成,則會流于“輕
薄”。馬援比較的是二者在骨子里所得所失的東西,而不
是架子上的象與不象。
同樣,以得失而論,在瀑布模型與 RUP 模型之間,
學習前者而不成,可思過程的本質;學習后者而不成,可
得文字的架子。——用 RUP 用不好的人,總會說自己終
歸還有一堆文檔模板可以抄,便是這個緣故。
過程理論中,如果懂得了所謂的模型原本都演化自那
個簡單的瀑布,那么文檔是按 XP 寫還是按 RUP 寫,也
就可以應時、應需,因地置宜,擇善而從了。——本質的東西若能理解得透,架子還不是隨手搬來就可以用的嗎?
越是簡單的東西,往往越是接近于本質。
RUP 中,真正精髓的東西,既不是那個 R(Rational),那是人家的招牌;也不是那個 U(Unified),那是人家的廣告。而是那個 P(Process),那才是實實在在的東西。你要明白,如果瀑布模型理論是 Rational 提出的,他們一樣會把它叫 RUP。
朱湘說:“畫不成的老虎,真像狗;刻不成的鴻鵠,真像鶩嗎?不然,不然。成功了便是虎同鵠,不成功時便都是怪物。”
馬援說:“學龍伯高,即使達不到他的水平,總還能成為一個謹慎的人;而學杜季良如果學不到家,便會淪為輕薄浪子。”
你到底是選擇架子?還是骨子?
6. 工程不是做的,是組織的
我們總是在說“做工程”,好象工程就是面包饅頭一樣,有個模子,拿來照著一堆面按上一按,放在籠屜上蒸上一蒸,就可以“做”出來了。
經歷過工程的人都知道,我們沒有那個模子,而工程中的人員也不是那一堆面。
所以我們當然不能“做”工程,而是要“組織”工程。項目經理的工作,就是要去組織這個工程中的各個角色,使得分工明確,步調一致,共同地完成這個項目。
周愛民(Aimingoo) 2013-08-24 22:29:45