敏捷編程介紹
John Paul Mueller, CIO
2007-03-28

    每個管理者都經(jīng)歷過夢魘般的編程項目。這類項目耗費了兩倍于預期的時間,超出了大量的成本預算——可遠遠還不止這些。當你將偏愛的應用展示給用戶,可他們并不喜歡,即便你的公司非常需要這個應用來達到某種目標,例如提高生產(chǎn)能力。
    幸運的是,你不再需要理會這類由舊的迭代軟件開發(fā)過程所產(chǎn)生的問題;你可以使用敏捷編程來克服這些問題。

什么是使用敏捷編程的商業(yè)原因?
什么使敏捷編程與眾不同?
使用敏捷編程,我就不需要做大量額外的工作了?
除了在迭代中工作,敏捷編程還有什么不同?
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?


什么是使用敏捷編程的商業(yè)原因?
    商業(yè)需要一種方式來降低開發(fā)成本、改進軟件可靠性、減少開發(fā)時間、確保應用程序能夠真正為用戶服務,而不是違背用戶。
    做到這四點,無論對誰,都是一個過高的要求,但是,在眾多應用程序編程方案中,敏捷編程技術(shù)能夠做到這些。
    敏捷在商業(yè)上行得通,是因為你能夠通過減少開發(fā)者在設計和建造應用程序過程中的錯誤來降低開發(fā)成本。此外,敏捷編程技術(shù)還能夠清除所有開發(fā)成本中最昂貴的一個——失敗的應用程序。

    然而,甚至一個應用程序已經(jīng)出廠并且安裝在服務器上,可靠性開銷仍然可能耗盡其所有的潛在收入。
    大多數(shù)公司努力達成的5/9的可靠性,也只是發(fā)生在良好設計的應用程序中——為用戶提供服務的時間多于“當機”的時間。而敏捷則通過減少每個模塊潛在的開發(fā)錯誤數(shù)量和提供用于快速定位錯誤的持續(xù)測試來完成這個任務。
    許多公司都指望能夠從為開發(fā)項目所做的投資中得到快速回報。然而,大部分項目因為公司需要等待開發(fā)者完成整個應用程序而受苦多年。
    與等待整個應用程序不同的是,敏捷編程技術(shù)可以幫助你當天就使用至少部分應用程序,這意味著你在很大程度上更快地從這個應用程序中受益。總之,你可以免費得到部分應用程序,因為你所節(jié)約的開支可以用于剩余應用程序的開發(fā)。
    應用程序與用戶一同工作或許看上去不像這樣至關重要,但是它足以區(qū)別一個省錢(或賺錢)的應用程序和一個費錢(或賠錢)的應用程序。
    一個大型服裝廠的項目說明了這點。開發(fā)者假定獲得訂單時用戶會依靠鼠標在顯示屏上選擇產(chǎn)品。然而,在這個服裝廠新應用程序被安裝上生產(chǎn)服務器后,公司意識到一個相當大的工作效率損耗,而不是期望的增益。造成的結(jié)果是:員工們僅僅使用鍵盤。因為將手從鍵盤移到鼠標來操作這個應用程序,每單將耗費他們寶貴的幾分鐘。

    敏捷編程通過讓用戶早期就介入到開發(fā)進程中來避免這種情況。如果這個服裝廠采用的是這種方法,那么應用程序的第一次迭代就將幫助公司意識到這個期望增益的問題,而不是公司繼續(xù)花費大量的時間和金錢在程序返工上。


什么使敏捷編程與眾不同?
    敏捷編程把一個應用開發(fā)項目分解成多個小的組件化的片段。每個片段在很短的時間內(nèi),一步一個腳印地添加到應用程序中并表現(xiàn)出官能性的一個完整部分。你可以部署這部分應用程序并且期望人們依據(jù)它來完成某種程度的工作,即便從長遠來看,這個應用程序不能做你打算讓它做的所有事情。
    每個片段是一個持續(xù)1到4周的迭代過程。因此,當應用程序中一個特定的片段表現(xiàn)棘手的時候,你將立即獲知。這會使你設法立刻解決這個問題,而不是在一大堆bug上編譯完所有其他的官能性或者遭遇“這不是用戶想要的”之后。
    每次迭代過程就像一個有它自己權(quán)利的小型項目。作為一個敏捷項目管理者,你還是需要像平常一樣監(jiān)管計劃、需求、設計、編碼、測試和各階段文檔,但這只是為了某個特定的應用特征(而不是全部應用程序)。
    打個比方,如果你正在創(chuàng)建一個特殊種類的字處理程序,其中一個迭代或許就是它的拼寫檢查程序。這個拼寫檢查程序要添加到字處理程序中,但它影響的只是整個程序的一個方面。在開發(fā)者創(chuàng)建這個用于處理拼寫的迭代之前,在這個功能沒有完成的情況下, 用戶照樣可以使用這個字處理程序,他們只是不能夠?qū)λ鶎憙?nèi)容進行拼寫檢查。

使用敏捷編程,我就不需要做大量額外的工作了?
    一些人猜想敏捷編程技術(shù)需要實現(xiàn)大量額外的工作。然而,事實上,由于在每個組件上周轉(zhuǎn)時間的減短和軟件投入使用的加快,它降低了工作量并且使收回投資在相當大的程度上加快。
    事實上,由于開發(fā)者能夠?qū)@種軟件做出快速的反應,管理者經(jīng)常使用敏捷編程技術(shù)來拯救那些有麻煩的項目。例如,敏捷編程的創(chuàng)始人Kent Beck在1986年使用敏捷編程技術(shù)拯救了Chrysler Comprehensive Compensation (C3)項目。

除了在迭代中工作,敏捷編程還有什么不同?
    敏捷編程方法的基礎是交流。這種方法強調(diào)以書面形式的論點進行面對面地交流。換句話說,與其一大群人工作在他們各自不同的工程塊上,還不如大家坐在一起,就這些工程塊形成一個團結(jié)的整體。
    不像別的編程方法,敏捷編程信賴項目組里那些差異非常大的工作在被稱作 “臨時拘留所”里的成員。一個項目組包括項目經(jīng)理、設計師、開發(fā)人員、測試人員、客戶、文檔撰寫者和參與這次迭代的一些其他人。因為項目塊小到每個人都能理解,并且所有這些項目塊的負責人都同心協(xié)力,所以用盡量少的時間、很小或者不修改就完成項目,通常是可能的。
    然而,敏捷編程中最值得考慮的是開發(fā)過程涉及每個人。客戶(用戶)從一開始就和項目有密切關系,這意味著開發(fā)組在“用戶將如何與應用程序相互影響以及完成一個特別的任務所需要的步驟”上會做較少的錯誤假設。這個過程與許多公司常見的“寫個規(guī)范,然后把它扔到墻邊,對它置之不理,直到你在程序演示中被嘲笑”方式有很大不同。


(未完待續(xù))


英文原文ABC: An Introduction to Agile Programming

譯者:第一次嘗試翻譯“長篇”,還未全部完成,先發(fā)出來,期待各位的指正!翻譯是件苦差事,算是體會了。如果各位在翻譯方面,有什么指導性的建議,也歡迎提出,多謝各位!


歡迎大家訪問我的個人網(wǎng)站 萌萌的IT人