隨著軟體規模的不斷擴大、軟體涉及的領域越來越廣,客戶對軟體要求也越來複雜,這一點的最直接的體現就是軟體需求的變化越來越頻繁。敏捷式軟體開發 (Agile Software Development)正是為了應對這一問題而誕生的軟體工程學方法。它以適應性的過程代替傳統的預測型的過程代替傳統的預測性的過程,在很大程度上滿足了現代商業軟體業務複雜、需求多變、時間要求緊迫等特點。
敏捷式軟體開發 (Agile Software Development)的倡導“個體和協作勝於過程;可工作的軟體勝於完整的文檔;客戶協作勝於合約;響應變化勝於遵循計劃”的軟體開發方式,以人為核心,注重交流和協作,強調軟體可持續發展,實現頻繁交付對客戶最重要的價值。
敏捷軟體包含敏捷專案管理、敏捷需求管理和敏捷軟體方法三個部分。
一、敏捷專案管理
敏捷是一種態度而不是一個流程,是一種氛圍而不是方法。敏捷專案管理強調的是溝通:與客戶之間的溝通、項目成員之間的溝通。基於這一思路,敏捷專案管理更重視與“人”的作用,要求項目的組織形式具有以下特點:
1,很強的文化適應性。
2,最低限度的規則,鼓勵自我組織,並結合自律以遵守哪些規則。
3,很好的協作和溝通環境。
從以上三點可以看出,敏捷專案管理對人的限制很低,這與傳統軟體工程中把“人”做為生產流水線上的一個環節進行管理的方式截然不同!軟體業是科技密集型的產業,軟體產品的最終品質更多的取決與軟體開發人員的素質和態度,而不是軟體的開發過程和開發裝置,這也是軟體業與傳統行業差距最大的地方。敏捷專案管理的最終著眼點便是如何提高軟體開發人員的素質和如何激發軟體開發軟體的熱情,從而提高最終軟體的品質。
但是從另一方法,採用敏捷專案管理,也必然要求項目成員具有更高的專業技能和專業素養,以防止寬鬆的環境導致的消極怠工等現象。
二、敏捷需求管理
軟體開發的最終著眼點是如何滿足使用者的需求。這些需求通常是複雜的、模糊的,甚至是不確定的。敏捷需求管理採用增量交付的軟體開發流程,藉助其與客戶持續溝通的特點,不斷的校準軟體的開發防線,逼近使用者的最終需求,使最終開發出來的軟體滿足客戶的要求。
增量交付的軟體流程1所示。該流程最重要一點在於“增量交付”,軟體以模組化的方式進行開發,通常一個模組的開發週期是一至兩周。每個模組開發完成後,按照正規的發布流程發布,交付給客戶試用。在客戶使用過程中,瞭解客戶對當前完成功能的意見。然後與客戶溝通,一起制定下一輪開發的計劃。
該流程的最大好處在於客戶全程參與軟體的開發,把握軟體的目前的開發狀態,確保軟體實現的功能能夠滿足使用者的需求。
但是另一方面,增量的交付也對軟體開發技術提出了更高的要求:模組化的開發方式要求更徹底的解耦合;需求的變化要求軟體架構具有更高的靈活性;增量交付要求對發布過程的高度自動化等等。
三、敏捷軟體方法
對應於以人為本的敏捷專案管理和以增量交付的敏捷需求管理,敏捷式軟體開發 (Agile Software Development)提供很多具體的方法指導軟體的開發實踐,這些方法包括重構、結對程式設計、測試驅動、持續整合等,以下簡要介紹重構和結對程式設計。
1,重構。
重構即在不改變既有代碼的行為的前提下,改善代碼的設計。重構的目的是為了消除代碼重的“壞氣味”,從而達到放置代碼腐爛的目的。
常見的重構的手法有“重新命名”、“抽出新方法”、“封裝成員”、“將方法在繼承層次中移動”等。
重構通常以設計模式作為目標,以單元測試作為保證代碼正確性的手段。
2,結對程式設計
結對程式設計即兩個開發人員使用一台電腦進行開發,通常是一個人操作另一個人,另一個人輔助,一段時間後,兩人交換。這種看似降低了一半的開發效率開發方式具有以下優點:
第一,所有的決定都是有兩個人共同做出的,並且所有的代碼是在兩個人的配合下寫出的,這大大降低了Bug的產生幾率,從而縮短了調試所需要的時間。
第二,所有的代碼至少有兩個人瞭解,這降低了代碼對開發人員的依賴性,防止開發人員的離職對項目造成的影響。
敏捷式軟體開發 (Agile Software Development)為現代商用軟體量身打造。經過這幾年的發展,無論在項目的開發方式,還是在具體實踐方法上,都有形成了自己的特色,與傳統的開發方式分庭抗衡。