大道至簡——軟件工程實踐者的思想 第5章 失敗的過程也是過程

>>>  讀書—連接古今充實信仰  >>> 簡體     傳統

  第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

[新一篇] 大道至簡——軟件工程實踐者的思想 第4章 流于形式的溝通

[舊一篇] 大道至簡——軟件工程實踐者的思想 第6章 從編程到工程
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表