新聞資訊

新聞資訊 行業動態

軟件工程前沿開發技術--敏捷軟件開發

編輯:admin     時間:2019-04-04

經過近四十年的發展,軟件工程在支持軟件系統工程化開發方面取得了令人矚目的成績,提出了大量的理論、方法、技術和工具,但是近年來的研究和實踐表明軟件危機依然存在,軟件開發仍然存在成本高、質量得不到保證、進度和成本難以控制等方面的問題,許多 軟件項目被迫延期甚至取消。與此同時,隨著網絡技術(尤其是Internet 技術)的不斷發展, 部署在網絡基礎上的軟件系統的規模和復雜性越來越高,并表現出諸如持續性、自適應性、交互性、動態性、開放性、異構性等特點。因此,如何支持這類復雜系統的開發、緩解和消除現階段的軟件危機是當前軟件工程面臨的一項重要挑戰。為了迎接上述挑戰,近年來軟件 工程領域的一些學者提出了許多新的方法和技術,包括:敏捷軟件開發(Agile Software Development)、極限編程(Extreme Programming,XP)、測試驅動的開發(Test-Driven Development,TDD)、面向 Agent 的軟件開發(Agent-Oriented Development)、面向方面的 編程(Aspect-Oriented Programming,AOP)、模型驅動體系結構(Model-Driven Architecture, MDA)等等。與傳統的軟件工程方法相比較,這些方法和技術為軟件工程實踐提供了新的 思路,已在許多軟件工程實踐中取得了積極的效果。

1 敏捷軟件開發 軟件工程一直以來都面臨著一個共同的問題,即如何迅速、高效地開發軟件系統,適應用戶需求的快速變化,確保軟件系統的質量,控制軟件開發成本。傳統軟件開發方法強調軟件開發需遵循嚴格的過程模型以及以此為基礎的開發計劃,并且在軟件開發過程中需產生大量的規范化文檔,這一思想和方法很難應對快速、靈活和低成本軟件開發所帶來的一系列問題。自二十世紀九十年代以來,軟件工程領域涌現出了一批新的軟件開發方法。這些方法主張軟件開發只編寫少量文檔、以用戶為中心、主動適應需求變化。這些方法被稱為敏捷軟件 開發,其代表性的成果是極限編程。

1.1 敏捷思想 至今人們已提出了幾十種軟件開發方法,根據這些方法在對軟件開發所提出的要求和約束等方面的差異,現有的軟件開發方法大致可分為兩類:重型軟件開發方法和輕型軟件開發方法。重型軟件開發方法一般具有嚴格和詳盡的軟件開發過程,軟件開發需產生大量的文檔。輕型軟件開發方法則強調軟件開發過程的簡潔性和靈活性,軟件開發只需編寫少量的文檔。

敏捷軟件開發是一類輕型的軟件開發方法,它 提供了一組思想和策略來指導軟件系統的快速開發并響應用戶需求的變化。不同于已有的其它軟件開發方法,該方法對軟件開發具有 以下四個方面的基本認識:(1)較之于過程和工具,應更加重視人和交互的價值;( 2)較之于面面俱到的文檔,應更加重視可運行軟件的價值;( 3)較之于合同談判,應更加重視客戶 合作的價值;( 4)較之于遵循計劃,應更加重視響應用戶需求變化的價值[1][2]。

敏捷軟件開發方法認為人是軟件開發中最為重要的因素,軟件開發應堅持以人為本;優秀的軟件開發團隊離不開人員之間良好的溝通與合作,相比較而言團隊的合作與溝通能力比單純的編程能力更為重要,改善人員之間的交流與合作將有助于提升團隊的軟件開發水平;應根據軟件開發團隊的特點選擇合適的軟件開發過程;在軟件開發工具的選擇方面,敏捷 軟件開發主張從使用小工具開始,只有當小工具不能滿足要求時才考慮選擇和使用功能強大的 工具。

一直以來,人們將文檔視為是對軟件開發各個階段成果進行記錄、促進人員之間進行交流的重要媒介和工具,也是軟件開發和維護的主要依據。然而,編制過多的文檔不僅會耗費大量時間和精力,而且當用戶需求變化時難以實現文檔與代碼的同步,這勢必會影響軟件系 統的開發和維護。敏捷軟件開發方法提倡在軟件開發過程中只編寫少量短小精煉的文檔。

成功的軟件開發不應單純依賴于合同條款和工作說明,而應 將用戶和軟件開發團隊緊密地結合在一起,讓用戶積極參與軟件開發并提供持續不斷、頻繁的反饋信息。在軟件開發過程中,用戶需求總會發生變化,這是由于用戶需求難以一次性完全捕獲,開發人員和用戶對于需求的認識會不斷地調整。此外,用戶的業務本身也可能會動態地發生變化。在復雜軟件系統的開發過程中,響應用戶需求變化的能力常常決定著軟件項目的成敗。為了適應用戶需求的變化,敏捷軟件開發認為軟件開發計劃不應考慮的太遠,不要進行過于周密、詳細的計劃,只應覆蓋短期的工作任務,對于中長期的任務只需有一個粗略的規劃即可,要保留計劃 的充分靈活性,并根據需求的變化適時地調整計劃。

在上述思想的指導下,敏捷軟件開發提出了以下十二條原則來指導軟件系統的開發[1]。

(1) 盡早和持續地交付有價值的軟件,以使用戶滿意。 敏捷軟件開發最關心的是軟件系統的交付。諸多軟件工程實踐表明,初期交付軟件系統中包含的功能越少,最終交付軟件系統的質量就越高;軟件產品交付的越頻繁,最終軟件產品的質量就越高。盡早的交付可以讓軟件開發團隊盡快獲得成就感,提升軟件開發團隊的激情和效率,盡早從用戶處獲取對需求、過程、產品等反饋信息。持續性的交付可以讓軟件開發團隊保持勝利感和成就感,持續獲取用戶的反饋信息,及時調整項目實施的方向和優先級。 該原則主張迭代性的軟件開發,并強調每一次迭代都選擇對用戶最有價值的功能作為本次迭代的任務,迭代周期不宜太長。每次 迭代結束以后,就向用戶交付一個可運行的、實現 部分需求的軟件產品。

(2) 即使到了軟件開發后期,也歡迎用戶需求的變化。 需求不斷變化和調整是軟件工程化開發的一個重要特點。敏捷軟件開發方法的實踐者不應懼怕變化,而應適應用戶需求的變化,從而為用戶創造競爭優勢。為了支持用戶需求的變化,敏捷軟件開發所生成的軟件結構應具有足夠的靈活性,以便在需求變化時能以最小的代價迅速地做出調整。因此,敏捷軟件開發主張采用模式、迭代和重構等技術,以適應用戶需 求的變化,獲得軟件結構的靈活性。

(3) 不斷交付可運行的軟件系統,交付周期可以從幾周到幾個月。 敏捷軟件開發主張軟件開發團隊應經常性地向用戶交付可運行的軟件系統,而不是大量的文檔或者計劃。交付的周期要適宜,太長易使用戶失去耐性,軟件開發團隊也無法從用 戶處及時獲得反饋信息;過短會使用戶難以接受持續不斷的軟件產品版本。

(4) 在整個軟件項目開發期間,用戶和開發人員最好能每天一起工作。 為了使軟件開發過程保持“敏捷”性,開發人員應及時從用戶處獲得各種反饋信息,因 此需要用戶與軟件開發人員一起工作,以便在需要的時候及時給予反饋。

(5) 由積極主動的人來承擔項目開發,給他們提供所需環境和支持,信任他們的能力。 在影響軟件項目的諸多因素中,人是其中最為重要的因素。因此參與軟件項目的人應積 極主動,并要為它們參與軟件開發創造良好的環境和條件。

(6) 團隊內部最有效的信息傳遞方式是面對面的交談。 敏捷軟件開發主張軟件開發團隊人員之間采用面對面交談的方式來進行溝通,文檔不作 為人員之間交流的默認方式,只有在萬不得已的情況下,才去編寫文檔。

(7) 將可運行的軟件作為衡量軟件開發進度的首要衡量標準。 所謂可運行的軟件是指完成了用戶的部分或全部需求,并經過測試,可在目標環境下運行的軟件系統。不同于其它的軟件開發方法,敏捷軟件開發不是根據所處的軟件開發階段、已編寫的文檔數目或者已完成的代碼數量來衡量軟件開發進度,而是基于可運行的軟 件系統實現了多少軟件需求來衡量軟件開發進度。

(8) 可持續性的開發,出資方、開發方和用戶方應當保持長期、恒定的開發速度。 對于許多軟件項目而言,軟件開發是一個長期的過程。敏捷軟件開發主張軟件開發團隊根據自身的特點選擇合適、恒定的軟件開發速度。不應盲目追求高速,軟件開發速度過快可 能使軟件開發人員陷入疲憊狀態,可能會出現一些短期行為,以致于給軟件項目留下隱患。

(9) 關注優秀的技能和良好的設計會增強敏捷性。 敏捷的一個重要體現是響應變化的能力。良好的設計是提高軟件系統應變能力的關鍵。因此,軟件開發人員必須從一開始就努力做好設計,并在整個項目開發期間不斷審查和改進設計。所有的軟件開發人員都應致力于編寫高質量的代碼,不要為了追求短期目標而降低 工作質量,將改進的工作留到以后再做。

(10) 簡單化。 這里所說的簡單化是指軟件開發工作應著眼于當前欲解決的問題,不要把問題想的太復雜(如去預測將來可能出現的問題),并采用最為簡單的方法去解決它,不要試圖去構建 那些華而不實的系統。

(11) 最好的架構、需求和設計出自于自組織的團隊。 敏捷團隊應當是自組織的,以適應需求的變化。軟件開發任務不是從外部直接分配到團隊成員,而是交給軟件開發團隊,然后再由團隊自行決定任務應當怎樣完成。軟件項目開發不是劃分成若干部分然后交給相應的成員全權負責,所有成員對于軟件項目的所有部分 都有權參與。

(12) 軟件開發團隊應定期就如何提高工作效率的問題進行反思,并進行相應的調整。 敏捷軟件開發方法不是一成不變的,敏捷本身即含有適時調整的意思。隨著項目的推進,軟件開發團隊應不斷地對其組織方式、規則、關系等方面進行反思,并對這些方面進 行調整,以便不斷優化團隊結構、提高軟件開發效率。

3d专家预测组三组六方法