最近更新: 2006-08-22

軟體工程三大陣營, RUP, CMMI, Agile Method

日前我參加了 2006 IBM 開發者大會,有幸聽聞尖端軟體工程團隊成員介紹最新的軟體開發趨勢「議程:大師看未來-軟體開發趨勢展望」。原本安排由 Dr. Ivar Jacobson (UML 創始人之一) 主講,可惜因颱風作梗,改由陳博士 (從 Rational 時代就跟隨 Dr. Jacobson 的團隊成員) 主講。這樣也好,陳博士以中文講說,省去了現場翻譯的語言隔閡。

陳博士提到了現階段軟體工程中,有三大主流陣營,即 RUP (Rational Unified Process)、CMMI、Agile Method (See also: 敏捷編程 (Agile programming) 與輕量級開發介紹文件@developerWorks) 。這三者的訴求與著重面並不相同,我以往也未將這三者放在一起。要將這三者並列,真要有點本領了。 Dr. Jacobson 就是有此本領者。 Dr. Jacobson 融通 RUP, CMMI, Agile Method 三者之長,提出了新的軟體工程概念,稱為「 Essential UP」,這稍後再說吧。

Agile Method Camp

我個人是傾向 Agile Method/eXtreme Programming 的,因為它導入過程最簡單,導入成本低,並不需要購置各式軟體,例如 Agile Method 強調最有用的規劃和討論工具,是傳統的筆和紙,並不要求額外建置什麼樣的軟、硬體環境。然而 Agile Method 的入門門檻也最高。此為何故?蓋因 Agile Method 對工具的依賴程度最低,主要是 programmer 觀念上的改變,卻也因此形成了它的高門檻。「觀念」、「Know-How」是最難培養與訓練的。 Agile Method 的領會過程,是「頓悟」的 (忘了在哪裡看到這麼一句話「你不能要求一個初學者了解 MVC 架構好在哪裡,你只能告訴他要這麼寫程式。等經驗累積之後,有一天,他就能突然體會 MVC 架構的好處。」)。 若無豐富經驗之累積及正確觀念之輔佐,不能體會其要義。若要在專案小組中導入 Agile Method ,必須要有資深 programmer 引導才能成事。是以其特徵之一為 pair programming (二人一組,結對作業)。

RUP Camp

那 RUP 呢?對我而言, It is too fat 。陳博士在議程中也這麼說 Today's process is large and fix size. 不論你要進行的專案是大是小,你要準備的工具都是一樣多。不論你是蓋一整棟房子,還是做一把椅子,在 RUP 中,陳博士形容「你都要帶一整套百科全書」。 RUP 對工具的依賴度很高, IBM Rational 提供了一整套搭配工具,如果不使用這些工具,幾乎推不動 RUP 。雖然缺乏彈性,但入門門檻就降低不少了,只要把這些工具丟給 programmer ,就算是不懂 OOP, MVC 等等觀念的 programming team ,也能很快導入 RUP 。只要會用工具,不懂觀念也可以導入 RUP 。

CMMI Camp

最後說說 CMMI 。雖然我個人曾在一家通過 CMMI level-2 的軟體公司待過,但遺憾的是,我不了解 CMMI 的導入過程及意向。我只能說 CMMI 著重軟體製造過程,而不著重程式開發概念,你用 OOP 也好,用 SA/SD 也罷,都可以導入 CMMI 。

CMMI 理論上看來不錯,跟 RUP, Agile Method 也不衝突,可以相輔。但我實際所見,卻不是那麼一回事。也許在臺灣, CMMI 已經淪為和 ISO 同等級之物,只剩下表面文章而已。舉個例子來說,在我先前服務的軟體公司中,有人專門負責編寫測試案例 (Test Case) ,這很正常。但是該公司是用 M$ Word 編寫測試案例,這種事放在 Agile programming team 中,可以當笑話來看。如果 compiler 可以編譯寫在 M$ Word .doc 的 code ,我用 M$ Word 來編寫測試案例又何妨?偏偏事實並非如此。這表示我必須至少寫兩份測試案例的內容,一份寫在 source code ,另一份寫在 .doc 。然後測試結果再用剪貼的方式貼在 .doc 中。只因為文件格式不一樣,所以同一件事,我要做兩份工,這可錯了。想想 Agile Method 的特徵,其中之一是「source code is document」。就是要讓 programmer 做同一件事時,不要寫多份文件。所以 test code 要用可讀性高的敘述表示 (舉例來說 Assert.areEqual(100, pos.x); 和 perror((pos.x == 100) ? "Successed: pos.x is equal 100." : "Failed: pos.x is not equal 100."); 這兩句敘述的意義相同,但可讀性以前者為佳)。非程式敘述的說明,則以註解方式同樣寫在 test code 中。最後利用報表工具,去調用 test code ,擷取測試結果,將測試案例和結果以設定的輸出格式,產生報表文件。就像用 XML 去搭配 XSLT+CSS 一樣,一份內容(XML),用不同的輸出格式,讓工具幫你產生報表(XSLT+CSS),而不是自己另外編排。

前述是將 CMMI 結合到 Agile programming team 中。但我所看到的 CMMI 實作方式,只是讓 programmer 重覆編寫不同格式文件。軟體開發成本不降反昇。最讓我垢病的是,在導入 CMMI 的過程中,既無工具相輔 (如 RUP),也無觀念引導 (如 Agile Method) ,使 CMMI 淪為報表文件的製造工作。徒見其弊,不見其利。

相關文章
樂多舊網址: http://blog.roodo.com/rocksaying/archives/2051417.html

樂多舊回應
kenming.wang@gmail.com(Kenming Wang) (#comment-3117933)
Thu, 21 Sep 2006 02:11:03 +0800
Hi, CMMI 並不是與 RUP/Agile 等同來比較的。
CMMI 只有制訂主要目標(Process Area)與子目標(Generic/Specific Goal)。而完成目標的具體實務,卻是可以參考如 RUP/Agile 的流程框架與其 Guideline、最佳實務等。

若有興趣該議題,請參考:
http://www.hsdc.com.tw/modules/newbb/viewtopic.php?topic_id=109&forum=5

本星期六(09/23)的研討會即是討論這些相關議題的。

另,其實 RUP 與 Agile 的比較,實在不能僅從表面來看,應該要思考兩者之間的精髓與核心,再從其本質思考兩者的手法。一般會以為 RUP 是 Heavy-weigh, Agile 是 light-weigh,這經常是從表面去看兩者的不同,也因如此,國內軟體業的流程為何如此幼稚與窠臼,這都是沒有用心於所謂開發流程本質的思考。
未留名 (#comment-3118188)
Thu, 21 Sep 2006 04:16:37 +0800
我要澄清一下,把 CMMI, RUP, Agile 稱為三大 Camp 的人,是 Dr. Ivar Jacobson 。這是出自他在 2006 IBM 開發者大會的講稿。他這樣說,是因為這三種方法的著重面不同,且確實有不同族群的偏好差異,而不是強調這三種方法是「對立陣營」。 CSDN 出版的雜誌「程序員」2006年9月刊,有那篇講稿的中譯內容,請參考。

Kenming Wang 的觀點和我一致。以 CMMI 為例,如果只實行 CMMI ,而未導入 RUP 或 Agile 的實務手法,那麼結果是什麼?我實際看到的就只是表面文章的作業,這也是我在「台灣資訊軟體業缺乏資深programmer」一文中感嘆國內的軟體業是黑手階級之故。
thinker@branda.to(Thinker) (#comment-3801508)
Tue, 02 Jan 2007 21:54:02 +0800
未留名 (#comment-3824101)
Mon, 08 Jan 2007 17:56:47 +0800
呵呵,歡迎引用。
台灣的軟體業並不因為太像黑手,所以才做不出好東西。反而是太不像黑手,所以做不出高品質的工程。或許,我們的教育應該多一點黑手,少一點讀書人的高傲。

Thinker 的見解不錯,就算是傳統製造業,也有高低之分。以鐘錶製造為例,也有瑞士的手工製造反而能創造高價值的情形。這高低之分,就在經驗傳承了。由於缺乏經驗傳承,所以我們的軟體業只能算是三流的黑手階級,而不是一流的黑手階級。
未留名 (#comment-11094341)
Sat, 30 Jun 2007 10:14:24 +0800
yers, 台灣軟體幼稚的原因還有教育的問題,一窩蜂學歷導向升學主義,除了課本之外相關專業期刊完全不碰,台灣人的文化還不自省永遠是發展不出什麼好的產業,不光是軟體"慘"業
未留名 (#comment-11109249)
Mon, 02 Jul 2007 15:32:22 +0800
我們的軟體業只能算是三流的黑手階級
主要的原因就是大家長久認為軟體沒有賺錢,都到硬體去做了,但是硬體又是做代工or 系統整合 所以軟體跟本就沒有任何設計or 發展,抄改 source code ,這樣永遠是發展不出來什麼 的

台灣很多工程師認為軟體-Coding, 所以永遠停在 CMMI-Level 1

不過話說回來,如果台灣的資訊技術能力還是不能提升,一昧盲目的昧洋認證欲使人家相信有能力接大型瑼案的能力的話,充其量也是湊熱鬧爾已做虛工
未留名 (#comment-11131135)
Wed, 04 Jul 2007 16:10:45 +0800
很遺憾,現在台灣官方 (經濟部、資策會等) 就是相信 CMMI 那一套。我並不是說 CMMI 沒用,只是在缺乏穩固基礎的條件下, CMMI 認證只是表面文章。

「穩固基礎」是指什麼? 就是夠多的 senior programmer 、正確的程式設計觀念等等基本功夫。舉例來說,如果有一間軟體公司幾乎所有程序員都有7年以上的資深實務經驗,那不論是 CMMI, CMMV 還是 CMMX 認證 (喔,當然沒有 CMMV, CMMX ,我只是在玩文數字遊戲),他們推起來都一定順暢無比。因為他們的觀念及實務作法早就到位了,就差套個標準流程的形式而已。

我唸 MBA 的時候,有個教授不但接好幾個國科會的案子,自己還接 ISO 認證的顧問案。這位教授就說,所謂 ISO 不過就是在貼標籤,讓事物皆有定位,工作者按步就班。它只是保證一件產品或一項工作是按照「一個明文記載的固定形式作業」後完成的。那教授又說,可是要完成一個步驟的方法很多,可以用很笨的方法,也可以用很聰明的方法。最容易輔導的公司,就是那種在推動 ISO 流程時,自己想到把工作方式換成聰明方法的公司。最難搞的就是那種管理者只會呆呆看著規範,一天到晚精神喊話要員工努力加油克服挑戰的公司。

話說回來,政府官方如此熱衷於 ISO, CMMI 這類認證,主要還是跟國科會這類研究贊助單位有關。推 CMMI ,比較容易接到案子拿到經費。推 Agile-method?那種「缺乏實證」的東西才不會撥經費給你。
未留名 (#comment-11131941)
Wed, 04 Jul 2007 17:50:38 +0800
沒錯,但是台灣的公司真的能在這個小小市場賺大錢? for example , 有的系統相當複雜需要的domain know-how 很深,不是只有CMMI., PSP, TSP, agile-process 就能夠okay , 人家推這些 disciplines 之前科技資訊能力早就很穩固了,這些只是要將抽象的programming activities 予以量化,更為形式化且按步就班做事情,所以IT/Software 的能力還是根本之因-一窩蜂升學主義,甚至有的教授還看不起programming的工作,印度能夠賺IT錢的根本原因是programming 及software design 比台灣好多了, 再加上一推認證CMMI的公司, 所以美國人相信能力,台灣? 一堆研究所畢業的資工系 or EE 系的學生連C programming 都搞不清楚,你說台灣軟體怎麼會好? 更不論 UML , design pattern, OOA/D, ... 還有一點台灣的"工程師" 有一種偏激概念,認為design and programming 才是高尚的, testing , QA 是低級的boring, 寫device driver 是要硬底子,application development , MMI/GUI, 是膚淺的,..難怪台灣的 software testing 及 SQA/CM 都做不好,其實這些的根本就是 "文化"的問題, 文化不好
什麼產業都是"慘"業

最後套一句你說的 "我們的軟體業只能算是三流的黑手階級"
原因還是 專業實務訓練不足,才會導致無法系統化的做事再加上市場及文化,台灣軟體要起的來真是遙遙無期,一堆認證CMMI 其背後的用意還不是與一窩蜂作代工的電子廠一樣,撈錢罷了....

不過有代工做,對台灣而也很不錯了
未留名 (#comment-11150303)
Thu, 05 Jul 2007 15:08:58 +0800
還有建議台灣的工程師有空可以看看 Dr. Dobb's Journal , c/c++ users journal,
c++ report , software development magazine and so on 這些it 的期刊,不要一昧的只會看 IEEE transcation or ACM 等較學術的期刊而鄙視實做技術的journal,看看人家工程師的程度,見賢思齊不要一天到晚只想當主管搞權謀吃相難看

Sorry and thank 版主
未留名 (#comment-13860069)
Fri, 03 Aug 2007 10:02:53 +0800
To hhhh:
我想台灣的 engineer 不會無聊到要去 K ACM , IEEE transaction 的 paper.沒錯,這類 SCI 的 journal 的確很學術,but , 我個人認為學術是將技術抽象化,數學化.雖與業界的實踐作法不同,旦追求技術的精神還是一樣.像 802.11x 這類的技術,是由 IEEE 主導而來,相信早期這方面學術研究貢獻也是不小.
另外像,當初 Booch 大師所提的方法論也是初見於學術會議的論文上啊.
未留名 (#comment-14426143)
Sun, 09 Sep 2007 08:48:14 +0800
對,台灣的工程師只會想撈股票,做官,什麼程度
wu_kon@yahoo.com.tw(Wukon) (#comment-16676959)
Wed, 18 Jun 2008 01:47:14 +0800
CMMI的實質內容如果你們真的懂,就不會只是一張文憑了。
CMMI 是收集過去開發大型專案的經驗累積整理成規範,針對公司裡的流程進行改善,達成某些規範意味著你可以避免很多的錯誤,讓公司得到更多的利益。
我想問...軟體開發最重要的Resource是什麼?



對吧!? 你們還有其他答案嗎?
開發大型專案需要的人可多了吧? 你沒有文件,沒有計畫,沒有正規的流程來做事,沒有一套完整的制度...你怎麼管理一大群想混吃的工程師?怎麼應付想吃定你的客戶?
沒錯,能力很重要,但是如果缺乏管理,你的人再厲害,一個人或者少數人的Team,你能寫出什麼樣的程式?
CMMI針對的不只是軟體開發的流程而已,而是整個組織的架構。
上SEI網站查一下吧...http://www.sei.cmu.edu/
規定永遠是死的,看你怎麼用它
但是作事沒有一點原則的話,勢必是要多做許多白工的...
未留名 (#comment-16731431)
Tue, 24 Jun 2008 12:31:52 +0800
Wukon:「對吧!? 你們還有其他答案嗎?」

看來 Wukon 是第一次來看我的部落格,也剛好只看到這篇文章就急著跳出來為 CMMI 辯護。如果 Wukon 看到我的其他文章,就會知道他說的我都提過了。

有一件事,是 Wokun知道,而我也知道的。那就是 CMMI 只有規範流程,但沒有告訴你該怎麼做。

我再次強調一點,我從未說 CMMI 不好,請勿斷章取義。我在這篇文章中是說「CMMI 理論上看來不錯,跟 RUP, Agile Method 也不衝突,可以相輔。但我實際所見,卻不是那麼一回事。」

我沒說 CMMI 這個制度不好。但是那些 CMMI 的執行者有很大的問題,他們用了不適當的方式去執行 CMMI 。

我詬病的不是 CMMI 的理論,而是實際執行 CMMI 的方式。簡單舉個例子來說,例如專案經理如何要求開發人員編寫設計文件?是像我在本文中舉的例子一樣,用 Word 編寫呢?還是用 JavaDoc, PhpDocumentor 這類工具自動從源碼中收集設計資訊呢?

這讓我想到昨天在報上看到的新聞,說有一個國軍部隊,為了響應政府節能減碳的政策,結果每天限制供水三小時,使得廁所沒水沖,環境臭氣沖天。「節能減碳」這個政策是好的,但顯然執行者的實行方法不適當。

Wokun,你自己也寫了「規定永遠是死的,看你怎麼用它」,那麼不妨說說你們是如何執行的。
johnny.wu@atosorigin.com(E.John Wu) (#comment-20587821)
Tue, 30 Mar 2010 15:53:05 +0800
應用CMMI原本可以降低開發成本
但是看到有些實作者在推CMMI是用手工製作文件堆出來的
把PG搞得人仰馬翻,這樣搞CMMI真能降低成本嗎?
如果上CMMI反而增加開發成本....那是Model不對,還是人不對?!
未留名 (#comment-20606389)
Mon, 05 Apr 2010 04:53:11 +0800
「看到有些實作者在推CMMI是用手工製作文件堆出來的」...

Wu 兄,你己經說出答案了。問題在「執行方法」。