熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Javascript >> 正文

XP讓Java項目獲得更大成功

2013-11-23 17:54:56  來源: Javascript 

  使用 Java 語言所進行的面向對象編程變得空前普及它使軟件開發發生了某種程度上的變革但最近的研究表明有半數的軟件開發項目滯後而三分之一的項目則超出預算問題不在於技術而是開發軟件所使用的方法所謂的輕量型靈活方式與如Java這樣的面向對象語言的威力和靈活性結合起來提供了一種很有意思的解決方案最常見的靈活方式稱為極端編程(Extreme Programming)或者 XP但許多人並不真正了解它對 Java 項目使用 XP 可以大大增加成功的機會本文提供了XP的概述並解釋了它為什麼很重要——不是傳言也沒有騙局
  在過去的十年中CEO們在產生穩步增加的收入方面面臨巨大的壓力他們通過在許多方面采取一系列舉措來解決這一問題例如縮小公司規模外包再工程企業資源規劃 (ERP) 等等這些對低效率的解決措施讓 S&P 中的許多企業在 年代末能夠連續幾年保持兩位數的收入增長但這種方式也帶來了一些負面影響
  在 Gary Hamel 所著的 Leading the Revolution(請參閱參考資料)一書中他聲稱已有一些跡象證明傳統企業模式的優勢已不那麼明顯我們必須找到一些替代方法來為收入的持續增長提供動力他建議唯一能讓公司繼續增長的辦法是進行一次徹底的創新我們認為在軟件開發領域中尤其需要這樣
  企業問題
  如果使用標准軟件開發方法那麼即使在 Java 平台上進行開發也要做好失望的准備如圖 所示最近的研究表明有一半項目將滯後而三分之一的項目將超過預算這一推測比 年由美國總審計局的研究結果好不了多少
   
  圖 軟件項目成功和失敗過去和現在
  如果我們希望這些數字有顯著提高則需要徹底創新的方法來開發軟件有兩個主要因素影響現有的方法
  
  · 懼怕失敗
  
  · 對軟件本質的誤解
  
  沒有人打算失敗具有諷刺意味的是為使失敗最小化而創建的方法是失敗的對軟件的誤解是問題的根源恐懼實際上只是一種症狀現有的方法是由那些有良好願望但忘記了軟件中的的那些聰明人所創建的他們假定開發軟件就象造橋因此他們從各種設計規范中借鑒了一些適用於物體(例如橋梁)的最優方法結果是基於 Big Design Upfront (BDUF) 思想的反映遲鈍的開發方法軟件不堪一擊人們無法使用它們
  一種解決方案靈活方法
  最近發生了一些轉變從所謂的重量型方法轉向了輕量型靈活方法例如Crystal方法適應性軟件開發和(當前最流行的)XP所有這些過程都有這樣一個事實即需要人們共同來開發軟件成功的軟件過程必須將人們的長處最大化將他們的缺點最小化因為優點和缺點毋庸質疑都存在在我們看來XP 最出色的地方在於它能夠解決所有影響參加人員的互補力量
  
  XP 提供了十年來最大的一次機會給軟件開發過程帶來徹底變革就象 Peopleware 作家 Tom DeMarco 所說XP 是當今我們所處領域中最重要的一項運動預計它對於目前一代的重要性就象SEI及其能力成熟度模型對上一代的重要性一樣
  
  XP 規定了一組核心價值和方法可以讓軟件開發人員發揮他們的專長編寫代碼XP 消除了大多數重量型過程的不必要產物通過減慢開發速度耗費開發人員的精力(例如干特圖狀態報告以及多卷需求文檔)從目標偏離我們認識到一個稱為極端編程的東西可能很難作為正式的開發過程推薦給管理層但如果您的公司從事軟件行業您應該幫助管理層繞過其名稱認識到XP可以提供的競爭優勢
  
  Kent Beck 在他所著的 Extreme Programming Explained: Embrace Change 一書中概括了 XP 的核心價值(請參閱參考資料)我們對它們進行了總結
  
  · 交流 項目的問題往往可以追溯到某人在某個時刻沒有和其他人一起商量某些重要問題上使用 XP不交流是不可能的事
  · 簡單 XP 建議您總是盡可能圍繞過程和編寫代碼做最簡單的事情按照 Beck 的說法XP 就是打賭它打賭今天最好做些簡單的事而不是做更復雜但可能永遠也不會用到的事
  · 反饋 更早和經常來自客戶團隊和實際最終用戶的具體反饋意見為您提供更多的機會來調整您的力量反饋可以讓您把握住正確的方向少走彎路
  · 勇氣 勇氣存在於其它三個價值的環境中它們相互支持需要勇氣來相信一路上具體反饋比預先知道每樣事物來得更好需要勇氣來在可能暴露您的無知時與團隊中其他人交流需要勇氣來使系統盡可能簡單將明天的決定推到明天做而如果沒有簡單的系統沒有不斷的交流來擴展知識沒有掌握方向所依賴的反饋勇氣也就失去了依靠
  XP 的方法將這些價值轉換成開發人員每天應做的事情這裡沒什麼新鮮內容多年以來行業認識到 XP 方法是最優方法實際上XP 中的極端來自兩方面
  · XP采取經過證明的業界最優方法並將其發揮到極致
  · XP將這些方法以某種方式進行結合使它們產生的結果大於各部分的總和
  這是怎樣的情景呢?代碼復查是個好的做法因此始終通過成對地編寫代碼來做到測試也是個好的做法因此總是通過在編寫代碼之前編寫測試來做到文檔很少與代碼保持一致因此只做那些最需要的事余下的部分則取決於明確編寫的代碼和測試XP 不保證人們總做正確的事但它允許人們這樣做它將這些極端方法以一種相互支持的方式結合起來顯著提高了速度和有效性
  XP 的十二種方法
  XP 的十二種方法(如圖 所示)將其定義為規則讓我們仔細研究每一個方法來對執行 XP表示什麼有個更全面的理解
  
  圖 XP 的十二種方法
  規劃策略
  
  有些人會指責 XP 是一種美其名曰的剽竊只是一群牛仔在沒有任何規則的情況下將一個系統拼湊在一起XP 是為數不多的幾種承認您在開始時不可能事事通曉的方法之一無論是用戶還是開發人員都是隨著項目的進展過程才逐步了解事物的只有鼓勵和信奉這種更改的方法才是有效方法狀態限定方法忽視更改而 XP 則留心更改它傾聽所用的方法就是規劃策略一個由 Kent Beck 創造的概念
  
  這一方法背後的主要思想是迅速地制定粗略計劃然後隨著事物的不斷清晰來逐步完善規劃策略的產物包括一堆索引卡每一張都包含一個客戶素材這些素材驅動項目的迭代以及對下一兩個發行版的粗略計劃如 Kent Beck 和 Martin Fowler 在他們的 Planning Extreme Programming 中描述的那樣(請參閱參考資料)讓這種形式的計劃得以發揮作用的關鍵因素是讓用戶做企業決策讓開發小組做技術決策如果沒有這一前提整個過程就會土崩瓦解
  
  開發小組要決定
  
  · 估計開發一個素材要花多長時間
  
  · 使用各種技術選項所花費的成本
  
  · 團隊組織
  
  · 每個素材的風險
  
  · 迭代中素材開發的順序(先開發風險最大的那一個可以減輕風險)
  
  客戶需要決定
  
  · 范圍(一個發行版的素材和每一次迭代的素材)
  
  · 發行日期
  
  · 優先級(根據企業價值先開發哪些特性)
  
  規劃經常發生這樣在客戶或開發人員學習新事物的同時就為他們調整計劃提供了頻繁機會
  
  成對編程
  
  使用 XP成對的開發人員編寫所有產品代碼這種方式聽上去好象缺乏效率Martin Fowler 說當人們說成對編程降低生產力時我回答那是因為大多數耗費時間的編程部分是靠輸入來完成的實際上成對編程無論在經濟還是其它方面都提供了許多好處
  
  · 所有設計決策都牽涉到至少兩個人
  
  · 至少有兩個人熟悉系統的每一部分
  
  · 幾乎不可能出現兩個人同時疏忽測試或其它任務
  
  · 改變各對的組合可以在團隊范圍內傳播知識
  
  · 代碼總是由至少一人復查
  
  研究還顯示成對的編程實際上比單獨編程更有效(有關詳細信息請參閱參考資料中 Alistair Cockburn 和 Laurie Williams 所著的 The Costs and Benefits of Pair Programming)
  
  測試
  
  在 XP 中有兩種測試
  
  · 單元測試
  
  · 驗收測試
  
  開發人員在他們編寫代碼的同時編寫單元測試客戶在他們定義了素材後編寫驗收測試單元測試及時告訴開發人員系統在某一點上是否工作驗收測試告訴團隊系統是否執行用戶希望它執行的操作
  
  假設團隊使用的是如 Java 這樣的面向對象語言開發人員在為一些方法編寫代碼之前為每種有可能失敗的方法編寫單元測試然後他們編寫足夠的代碼使之能通過測試有時人們會發現這有點奇怪答案很簡單編寫測試首先為您提供
  
  · 一組可能最完整的測試
  
  · 可能能工作的最簡單的代碼
  
  · 代碼意圖的明確景象
  
  開發人員只有在通過所有單元測試後才可以將代碼檢入到源代碼資源庫中單元測試使開發人員有信心相信他們的代碼能夠工作這為其他開發人員留下線索可以幫助他們理解最早的開發人員的意圖(實際上這是我們看到過的最好的文檔)單元測試還給了開發人員勇氣重新劃分代碼因為測試失敗可以立刻告訴開發人員存在錯誤應該將單元測試自動化並提供明確的通過/失敗結果xUnit 框架(請參閱參考資料)做到的遠不止這些因此大多數 XP 小組都使用它們
From:http://tw.wingwit.com/Article/program/Java/Javascript/201311/25345.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.