分析:XP能否進行大規模軟體發展


發佈時間:2001-07-04 15:51:56 來源:日經BP



  在大型軟體發展項目中不能夠使用「XP」嗎?--將最近有關XP的報導整理一下,首先就會產生這麼一個疑問。

  這堜珨〞XP與微軟的Windows XPOffice XP沒有任何關係。這堛XP指的是eXtreme Programming這一新型軟體發展方法。把這種方法簡稱為XP純屬筆者的喜好。

  XP是一種新型軟體發展方法,其目的是在極短的時間內開發出運行良好,而且包含有對使用者而言最有價值的功能軟體。詳情參見書籍《XP eXtreme Programming入門》(Pearson Education)Web站點“eXtreme Programming FAQ”(objectclub.esm.co.jp/eXtremeProgramming/)等。

  XP本質上是「開發小組」導向的開發方法。說到開發小組,少則應該有23人,多則可達到15人左右。對於需要50人、100人或者更多技術精英的開發專案,XP就不能使用了。因此,(至少幾個月前)大型電腦製造商和大型系統集成商就異口同聲地表示:「XP畢竟是小型專案導向的開發方法。作為以大型專案為核心業務的大公司,將不會採用這種方法」。

  不過,大型企業的「XP=開發小組的方法=(以大專案為核心的)公司無關」的邏輯真的能成立嗎?雖然也明白「這樣想也難怪」,但總是覺得這種說法有些不合適。

  如果採用「漸進式方法」,XP就可以應用於大規模開發

  所謂的大規模軟體發展專案通常指,1)開發人員多;2)作為開發物件的專案規模大。大型開發商說的大專案通常都滿足上述1)2)兩個條件。也就是說投入數百人的開發力量一氣構築起擁有數百萬個開發步驟的軟體。

  按這個標準看,XP如前所述不能滿足1)要求的條件。但能否滿足2)的要求呢?

  XP的倡導者Kent Beck斷言:「XP可以用於大規模的系統開發」。不過,XP的大規模開發方法與普通的大規模開發專案大不相同。XP不是一氣開發出所有的應用,而是採用「漸進式」。

  所謂的漸進不是從一開始就明確決定應用的具體標準,而是首先做出一個小型的框架,然後在大膽的改進中不斷促進其「成長」。Beck將這種開發方法比作園藝。

  「在園藝中,植物要逐年一點點地培育下去。這與軟體的開發也基本相同。一年年地追加功能是再自然不過的事情了。豈能一下子實現所有的功能、一直用下去!即使勉為其難開發出了這樣的軟體,最後往往也變成了一堆垃圾、被扔到一邊無法使用。而XP不僅不排斥變化,而且還歡迎變化,並希望有更多的變化。曾經有過這樣的情況:3個人經過 6年時間的開發,結果形成了可以稱之為大規模系統的軟體。XP的一個重要的思想就是持續性」。

  顯然,那種預先完全確定好系統的功能然後再分為第1次開發、第2次開發等的階段性實現的做法與XP的「漸進式的」方法完全是背道而馳的。

  實際上,早在Beck之前就有人表達過類似的看法。此人就是日本物件導向研究開發的先驅--SRA的青木淳。他在《物件導向系統分析設計入門》書中說:「大凡軟體發展均應限定於小規模(較少的功能要求和較短的開發期限),須循序漸進,且忌急於求成」。不得不提到的是,Beck和青木都是使用Smalltalk這一種物件導向語言的著名高手。

  難道要把反軟體「本質」的開發進行到底嗎?

  之所以說XP採取的是漸進的方法,按純屬軟體工程外行的筆者的理解,是因為 XP採用了盡可能忠實於軟體本質的開發方法」。說到軟體的本質,這是一個非常含糊的概念,但諸如可塑性太大(簡單地說就是彈性十足)以及極易受到人這一因素的影響等原因造就了所謂的軟體「特徵」(可能還有其他各種各樣的因素,或許也有筆者理解不對之處,還望讀者諸公多多指教)

  不論是要素的定義還是設計,想預先做出全面的規劃,都是不可能的事情。青木在上述的著作中就列舉出了物件導向軟體發展中的3大「前提」:1)使用者要求的功能永遠不可琢磨;2)開發人員設計的功能永遠不能確定;3)軟體發展永遠不會完成。

  總言之, XP採取漸進的方法就是「因為軟體本來就應該按照其固有的特點來開發」。當然,必須結合當時的情況開發出滿足使用者需求的系統。在不違反軟體本質的前提下,如何才能展開令開發人員和使用者都感到愉快的軟體發展--從這個角度來看XP,就會明白XP這種開發方法其實是建立在深思熟慮的基礎上的

  相反,那些動用大量的開發人員同時進行開發的大專案,猛一看好像效率很高,其實這種方法大大違反了軟體的「本質」。或許正是這一原因導致了前面所提到的(XP與大型專案無關的說法),有不合適的感覺。
  當然,筆者絕對沒有凡是軟體發展一定要用XP的意思。因為XP本身還有不少含糊之處,還存在有這樣那樣的問題。不做任何考查就導入XP是相當危險的。但是如果您的工作與軟體發展有某種關係的話,以XP為「題材」仔細考慮一下,XP的方法是不是真的合適,進一步再琢磨一下到底軟體發展應該怎麼進行,我想肯定不會有什麼壞處的。