敏捷編程介紹John Paul Mueller, CIO
2007-03-28
每個管理者都經歷過夢魘般的編程項目。這類項目耗費了兩倍于預期的時間,超出了大量的成本預算——可遠遠還不止這些。當你將偏愛的應用展示給用戶,可他們并不喜歡,即便你的公司非常需要這個應用來達到某種目標,例如提高生產能力。
幸運的是,你不再需要理會這類由舊的迭代軟件開發過程所產生的問題;你可以使用敏捷編程來克服這些問題。
什么是使用敏捷編程的商業原因?
什么使敏捷編程與眾不同?
使用敏捷編程,我就不需要做大量額外的工作了?
除了在迭代中工作,敏捷編程還有什么不同?Won't Working Like this Change Our Corporate Culture?
When Should I Avoid Using Agile Programming Techniques?
Is There Just One Kind of Agile Programming?
什么是使用敏捷編程的商業原因?
商業需要一種方式來降低開發成本、改進軟件可靠性、減少開發時間、確保應用程序能夠真正為用戶服務,而不是違背用戶。
做到這四點,無論對誰,都是一個過高的要求,但是,在眾多應用程序編程方案中,敏捷編程技術能夠做到這些。
敏捷在商業上行得通,是因為你能夠通過減少開發者在設計和建造應用程序過程中的錯誤來降低開發成本。此外,敏捷編程技術還能夠清除所有開發成本中最昂貴的一個——失敗的應用程序。
然而,甚至一個應用程序已經出廠并且安裝在服務器上,可靠性開銷仍然可能耗盡其所有的潛在收入。
大多數公司努力達成的5/9的可靠性,也只是發生在良好設計的應用程序中——為用戶提供服務的時間多于“當機”的時間。而敏捷則通過減少每個模塊潛在的開發錯誤數量和提供用于快速定位錯誤的持續測試來完成這個任務。
許多公司都指望能夠從為開發項目所做的投資中得到快速回報。然而,大部分項目因為公司需要等待開發者完成整個應用程序而受苦多年。
與等待整個應用程序不同的是,敏捷編程技術可以幫助你當天就使用至少部分應用程序,這意味著你在很大程度上更快地從這個應用程序中受益。總之,你可以免費得到部分應用程序,因為你所節約的開支可以用于剩余應用程序的開發。
應用程序與用戶一同工作或許看上去不像這樣至關重要,但是它足以區別一個省錢(或賺錢)的應用程序和一個費錢(或賠錢)的應用程序。
一個大型服裝廠的項目說明了這點。開發者假定獲得訂單時用戶會依靠鼠標在顯示屏上選擇產品。然而,在這個服裝廠新應用程序被安裝上生產服務器后,公司意識到一個相當大的工作效率損耗,而不是期望的增益。造成的結果是:員工們僅僅使用鍵盤。因為將手從鍵盤移到鼠標來操作這個應用程序,每單將耗費他們寶貴的幾分鐘。
敏捷編程通過讓用戶早期就介入到開發進程中來避免這種情況。如果這個服裝廠采用的是這種方法,那么應用程序的第一次迭代就將幫助公司意識到這個期望增益的問題,而不是公司繼續花費大量的時間和金錢在程序返工上。
什么使敏捷編程與眾不同?
敏捷編程把一個應用開發項目分解成多個小的組件化的片段。每個片段在很短的時間內,一步一個腳印地添加到應用程序中并表現出官能性的一個完整部分。你可以部署這部分應用程序并且期望人們依據它來完成某種程度的工作,即便從長遠來看,這個應用程序不能做你打算讓它做的所有事情。
每個片段是一個持續1到4周的迭代過程。因此,當應用程序中一個特定的片段表現棘手的時候,你將立即獲知。這會使你設法立刻解決這個問題,而不是在一大堆bug上編譯完所有其他的官能性或者遭遇“這不是用戶想要的”之后。
每次迭代過程就像一個有它自己權利的小型項目。作為一個敏捷項目管理者,你還是需要像平常一樣監管計劃、需求、設計、編碼、測試和各階段文檔,但這只是為了某個特定的應用特征(而不是全部應用程序)。
打個比方,如果你正在創建一個特殊種類的字處理程序,其中一個迭代或許就是它的拼寫檢查程序。這個拼寫檢查程序要添加到字處理程序中,但它影響的只是整個程序的一個方面。在開發者創建這個用于處理拼寫的迭代之前,在這個功能沒有完成的情況下, 用戶照樣可以使用這個字處理程序,他們只是不能夠對所寫內容進行拼寫檢查。
使用敏捷編程,我就不需要做大量額外的工作了? 一些人猜想敏捷編程技術需要實現大量額外的工作。然而,事實上,由于在每個組件上周轉時間的減短和軟件投入使用的加快,它降低了工作量并且使收回投資在相當大的程度上加快。 事實上,由于開發者能夠對這種軟件做出快速的反應,管理者經常使用敏捷編程技術來拯救那些有麻煩的項目。例如,敏捷編程的創始人Kent Beck在1986年使用敏捷編程技術拯救了Chrysler Comprehensive Compensation (C3)項目。除了在迭代中工作,敏捷編程還有什么不同? 敏捷編程方法的基礎是交流。這種方法強調以書面形式的論點進行面對面地交流。換句話說,與其一大群人工作在他們各自不同的工程塊上,還不如大家坐在一起,就這些工程塊形成一個團結的整體。
不像別的編程方法,敏捷編程信賴項目組里那些差異非常大的工作在被稱作 “臨時拘留所”里的成員。一個項目組包括項目經理、設計師、開發人員、測試人員、客戶、文檔撰寫者和參與這次迭代的一些其他人。因為項目塊小到每個人都能理解,并且所有這些項目塊的負責人都同心協力,所以用盡量少的時間、很小或者不修改就完成項目,通常是可能的。
然而,敏捷編程中最值得考慮的是開發過程涉及每個人。客戶(用戶)從一開始就和項目有密切關系,這意味著開發組在“用戶將如何與應用程序相互影響以及完成一個特別的任務所需要的步驟”上會做較少的錯誤假設。這個過程與許多公司常見的“寫個規范,然后把它扔到墻邊,對它置之不理,直到你在程序演示中被嘲笑”方式有很大不同。
(未完待續)英文原文:ABC: An Introduction to Agile Programming譯者:第一次嘗試翻譯“長篇”,還未全部完成,先發出來,期待各位的指正!翻譯是件苦差事,算是體會了。如果各位在翻譯方面,有什么指導性的建議,也歡迎提出,多謝各位!