敏捷開發以用戶的需求進化為核心,采用叠代、循序漸進的方法進行軟件開發。在敏捷開發中,軟件項目在構建初期被切分成多個子項目,各個子項目的成果都經過測試,具備可視、可集成和可運行使用的特征。換言之,就是把壹個大項目分為多個相互聯系,但也可獨立運行的小項目,並分別完成,在此過程中軟件壹直處於可使用狀態。
價值觀
敏捷建模(Agile Modeling,AM)的價值觀包括了XP(Extreme Programming:極限編程)的四個價值觀:溝通、簡單、反饋、勇氣,此外,還擴展了第五個價值觀:謙遜。
互聯網是個神奇的大網,軟件框架也是壹種模式,如果妳真的想做,可以來這裏,這個手技的開始數字是壹八七中間的是三兒零最後的是壹四二五零,按照順序組合起來就可以找到,我想說的是,除非妳想做或者了解這方面的內容,如果只是湊熱鬧的話,就不要來了。
敏捷開發是針對傳統的瀑布開發模式的弊端而產生的壹種新的開發模式,目標是提高開發效率和響應能力。除了原則和實踐,模式也是很重要的,多研究模式及其應用可以使妳更深層次的理解敏捷開發。
溝通
建模不但能夠促進妳團隊內部的開發人員之間溝通、還能夠促進妳的團隊和妳的project stakeholder之間的溝通。
簡單
畫壹兩張圖表來代替幾十甚至幾百行的代碼,通過這種方法,建模成為簡化軟件和軟件(開發)過程的關鍵。這壹點對開發人員而言非常重要-它簡單,容易發現出新的想法,隨著妳(對軟件)的理解的加深,也能夠很容易的改進。
反饋
Kent Beck在Extreme Programming Explained中有句話講得非常好:“過度自信是編程的職業病,反饋則是其處方。”通過圖表來交流妳的想法,妳可以快速獲得反饋,並能夠按照建議行事。
謙遜
最優秀的開發人員都擁有謙遜的美德,他們總能認識到自己並不是無所不知的。事實上,無論是開發人員還是客戶,甚至所有的 project stakeholder,都有他們自己的專業領域,都能夠為項目做出貢獻。壹個有效的做法是假設參與項目的每壹個人都有相同的價值,都應該被尊重。
原則
敏捷建模(AM)定義了壹系列的核心原則和輔助原則,它們為軟件開發項目中的建模實踐奠定了基石。其中壹些原則是從XP中借鑒而來,在Extreme Programming Explained中有它們的詳細描述。而XP中的壹些原則又是源於眾所周知的軟件工程學。復用的思想隨處可見!基本上,本文中對這些原則的闡述主要側重於它們是如何影響著建模工作;這樣,對於這些借鑒於XP的原則,我們可以從另壹個角度來看待。
核心原則
◆主張簡單
當從事開發工作時,妳應當主張最簡單的解決方案就是最好的解決方案。不要過分構建
敏捷開發
(overbuild)妳的軟件。用AM的說法就是,如果妳現在並不需要這項額外功能,那就不要在模型中增加它。要有這樣的勇氣:妳現在不必要對這個系統進行過分的建模(over-model),只要基於現有的需求進行建模,日後需求有變更時,再來重構這個系統。盡可能的保持模型的簡單。
◆擁抱變化
需求時刻在變,人們對於需求的理解也時刻在變。項目進行中,Project stakeholder可能變化,會有新人加入,也會有舊人離開。Project stakeholder的觀點也可能變化,妳努力的目標和成功標準也有可能發生變化。這就意味著隨著項目的進行,項目環境也在不停的變化,因此妳的開發方法必須要能夠反映這種現實。
◆妳的第二個目標是可持續性
即便妳的團隊已經把壹個能夠運轉的系統交付給用戶,妳的項目也還可能是失敗的--實現項目投資者的需求,其中就包括妳的系統應該要有足夠的魯棒性(robust ),能夠適應日後的擴展。就像Alistair Cockburn常說的,當妳在進行軟件開發的競賽時,妳的第二個目標就是準備下壹場比賽。可持續性可能指的是系統的下壹個主要發布版,或是妳正在構建的系統的運轉和支持。要做到這壹點,妳不僅僅要構建高質量的軟件,還要創建足夠的文檔和支持材料,保證下壹場比賽能有效的進行。妳要考慮很多的因素,包括妳現有的團隊是不是還能夠參加下壹場的比賽,下壹場比賽的環境,下壹場比賽對妳的組織的重要程度。簡單的說,妳在開發的時候,妳要能想象到未來。
◆遞增的變化
和建模相關的壹個重要概念是妳不用在壹開始就準備好壹切。實際上,妳就算想這麽做也不太可能。而且,妳不用在模型中包容所有的細節,妳只要足夠的細節就夠了。沒有必要試圖在壹開始就建立壹個囊括壹切的模型,妳只要開發壹個小的模型,或是概要模型,打下壹個基礎,然後慢慢的改進模型,或是在不在需要的時候丟棄這個模型。這就是遞增的思想。
◆令投資最大化
妳的項目投資者為了開發出滿足自己需要的軟件,需要投入時間、金錢、設備等各種資源。投資者應該可以選取最好的方式投資,也可以要求妳的團隊不浪費資源。並且,他們還有最後的發言權,決定要投入多少的資源。如果是這些資源是妳自己的,妳希望妳的資源被誤用嗎。
◆有目的的建模
對於自己的產出,例如模型、源代碼、文檔,很多開發人員不是擔心它們是否夠詳細,就是擔心它們是否太過詳細,或擔心它們是否足夠正確。妳不應該毫無意義的建模,應該先問問,為什麽要建立這個產出,為誰建立它。和建模有關,也許妳應該更多的了解軟件的某個方面,也許為了保證項目的順利進行,妳需要和高級經理交流妳的方法,也許妳需要創建描述系統的文檔,使其他人能夠操作、維護、改進系統。如果妳連為什麽建模,為誰建模都不清楚,妳又何必繼續煩惱下去呢?首先,妳要確定建模的目的以及模型的受眾,在此基礎上,再保證模型足夠正確和足夠詳細。壹旦壹個模型實現了目標,妳就可以結束工作,把精力轉移到其它的工作上去,例如編寫代碼以檢驗模型的運作。該項原則也可適用於改變現有模型:如果妳要做壹些改變,也許是壹個熟知的模式,妳應該有做出變化的正確理由(可能是為了支持壹項新的需求,或是為了重構以保證簡潔)。關於該項原則的壹個重要暗示是妳應該要了解妳的受眾,即便受眾是妳自己也壹樣。例如,如果妳是為維護人員建立模型,他們到底需要些什麽?是厚達500頁的詳細文檔才夠呢,還是10頁的工作總覽就夠了?妳不清楚?去和他們談談,找出妳想要的。
◆多種模型
開發軟件需要使用多種模型,因為每種模型只能描述軟件的單個方面,“要開發現今的商業應
敏捷開發
用,我們該需要什麽樣的模型?”考慮到現今的軟件的復雜性,妳的建模工具箱應該要包容大量有用的技術(關於產出的清單,可以參閱AM的建模工件)。有壹點很重要,妳沒有必要為壹個系統開發所有的模型,而應該針對系統的具體情況,挑選壹部分的模型。不同的系統使用不同部分的模型。比如,和家裏的修理工作壹樣,每種工作不是要求妳用遍工具箱裏的每壹個工具,而是壹次使用某壹件工具。又比如,妳可能會比較喜歡某些工具,同樣,妳可會偏愛某壹種模型。有多少的建模工件可供使用呢,如果妳想要了解這方面的更多細節,我在Be Realistic About the UML中列出了UML的相關部分,如果妳希望做進壹步的了解,可以參閱白皮書The Object Primer -- An Introduction to Techniques for Agile Modeling。
成功
隨機應變
要達到敏捷的成功—交付支撐業務的最佳軟件—軟件專家也可以引用這些規則。
自主權
專註於工作,交付正確的軟件,而不是被他人的憤怒情緒所影響。
分享經驗
構建完美軟件開發流程,並沒有統壹的模式。但是在這個領域,敏捷技術,加上持續的應用和改進,都能夠達到敏捷的成功。