摘要:作為一種重要的敏捷軟件開發方法,極限編程提供了一個周密嚴謹的軟件開發流程。該文給出了XP軟件開發方法的由來及主要特征,并通過軟件項目實例指出XP是解決科研軟件開發中諸多問題的很好的方法。
關鍵詞:敏捷;極限編程;軟件工程;軟件開發
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2009)27-7670-02
XP Software Developing Method and its Practice in Software Development
LIAO Rui-hua1, WEN Hai-ying2, HU Ying1
(1.Department of Information Science and Engineering, Hunan First Normal University, Changsha 410205, China; 2.Department ofComputer, Hunan University ofScience and Engineering, Yongzhou 425000, China)
Abstract: As one of the most important method of agile, extreme programming gives us a cautious and precise software developing process. In this article, a analysis of the XP software develop method is given. After the analysis, A scientific software developing case is given as a analyzed example to show that XP is indeed a practicable method for scientific software development.
Key words: agile; extreme programming; software engineering; software development
與傳統的重量級軟件開發方法相比,敏捷軟件開發方法(Agile Software Development Approaches)提倡擁抱變化[1],并且采用一系列強有力的措施來保持軟件質量。采用敏捷軟件開發方法可以達到一種介于傳統軟件開發方法和無過程開發之間的平衡,并且可以使開發者以步驟簡單的開發過程得到較滿意的軟件產品,因而非常適合作為科研軟件開發和管理方法。作為一種重要的敏捷軟件開發方法,極限編程提供了一個周密嚴謹的軟件開發流程,是解決科研軟件開發中諸多問題的很好的方法。
1 極限編程(XP)方法簡介
極限編程(XP)是于1998年由Smalltalk社群中的大師級人物Kent Beck首先倡導的。作為敏捷方法中最著名的一種方法,XP由一系列簡單卻互相依賴的實踐組成。這些實踐結合在一起形成了一個勝于部分結合的整體。它是一種輕量級的、靈活的方法。XP規定的核心價值和方法準則強調溝通和反饋,鼓勵軟件開發人員充分發揮他們的個人創造力。
XP方法的核心價值觀為“交流”、“勇氣”、“簡單”和“反饋”[2]。XP方法要求的14項規則為:客戶全程參與(On-Site Customer)、用戶事例(User Stories)、短周期發布(Short Cycles)、結對編程(Pair Programming)、測試驅動開發(Test-Driven Development)、集體擁有代碼(Collective Ownership)、持續集成(Continuous Integration)、平穩的工作效率(Sustainable Pace)、項目計劃(The Planning Game)、簡單設計(Simple Design)、重構(Refactoring)、隱喻(Metaphor)、編程規范(Code Standards)和開放的工作環境(Open Workspace)。
2 XP軟件方法在某軍用傳感器綜合信息處理軟件項目開發中的應用
圖1為軍用傳感器綜合信息處理軟件系統示意圖。
2.1 項目概述
軍用多傳感器綜合信息處理軟件的系統示意圖如圖1所示,此系統要完成的主要任務包括:
1)對各傳感器的原始數據信息進行處理,提煉出各傳感器原始數據中包含的信息,并以適當的方式進行顯示(各傳感器到相應處理模塊的傳輸方式相同)。
2)保存各傳感器的原始數據(各傳感器的存儲介質相同)。
3)將必要的數據信息發送到傳感器數據信息融合模塊(各處理模塊到傳感器融合模塊數據傳輸方式相同),由傳感器信息融合模塊對各傳感器數據進行信息融合。
4)四級顯示控制模塊控制融合后傳感器信息顯示方式及傳感器信息的融合方式。
5)二級顯示控制模塊提供對響應傳感器的控制功能。
2.2 項目開發過程中XP準則的實踐情況
在整個軟件項目的開發過程中,我們力圖嚴格按照XP的實踐原則完成整個軟件產品的開發。但是,由于客觀情況的限制,在某些規則的執行上,我們還是根據實際情況作了一些修改。我們從2的14項規則中選取了12項規則,各項規則實踐情況如下。
1)客戶全程參與(On-Site Customer)
此軟件項目的完成主體是由一個研究單位的若干協作部門來完成的,因而對于有些模塊,研究單位本身既是開發者,同時又是用戶;對于整個系統來說,客戶就是最終使用此傳感器綜合信息處理系統的單位。按照文獻[Ken Beck]的定義:XP團隊的用戶是決定系統各模塊開發優先級(既重要程度)的人或者團體。在軟件開發中我們將各軟件模塊的使用者定義為內部客戶;將整個系統的使用者定義為系統客戶。如圖1所示,我們按照數據流的流向,將整個軟件系統劃分為四個級別。每一級別實際上都可以看作是其前一級軟件模塊的內部用戶,因而2、3、4級的軟件模塊開發人員需要和1、2、3級軟件模塊開發人員編寫User Story。
2)用戶事例(User Stories)
準備好開發環境以后,由用戶和開發者共同把需求分解為User Story,在分解User Story的過程中,重點分析每個User Story的商業優先級(對于內部用戶來說,用開發優先級代替商業優先級),估計每個User Story的理想開發時間和開發風險。
3)短周期發布(Short Cycles)
由于我們將整個比較復雜的軟件系統分為四個軟件層次,因而我們也將軟件的短周期發布分為內部軟件模塊發布和軟件系統整體兩種形式。對于內部軟件模塊,我們要求其發布周期為2天,對于整體軟件系統,我們要求其發布周期為2周,這樣做不至于因為準備整個軟件系統發布的時間較長而耽誤緊張的開發時間。
4)結對編程(Pair Programming)
采用結對編程的編程模式可以達到兩個程序開發人員優勢互補、互相激勵以及提高代碼質量的目的。在開發過程中,我們將結對編程的原則修改為,軟件系統架構及全局功能由結對編程來完成,而大部分數據處理算法的關鍵代碼仍然由個人來完成。
5)測試驅動開發(Test-Driven Development)
在本項目的開發過程中,采用的測試驅動的軟件開發方式如圖2所示。
6)集體擁有代碼(Collective Ownership)
對于本項目來說,關鍵代碼的測試代碼公開。
7)持續集成(Continuous Integration)
在本項目的開發過程中,整個系統的持續集成是建立在各軟件模塊持續集成的基礎上的,每個軟件模塊的開發小組在完成一個軟件功能單元以后,馬上將其集成到其已經完成的軟件模塊。然后,由客戶(內部客戶或者外部客戶)對其進行驗收,并及時向開發小組反饋。以一級軟件模塊和二級軟件模塊之間進行持續集成為例,其示意圖如圖3所示。
8)平穩的工作效率(Sustainable Pace)
雖然整個項目開發時間比較緊張,但是我們始終堅持工作效率第一的原則,除了最后一段時間的沖刺階段,在整個開發過程中基本上沒有晚上加班的現象。
9)簡單設計(Simple Design)
在進行設計的時候,我們將傳感器綜合信息處理系統的所有軟件模塊分為軟件框架部分(數據傳輸/顯示等)和核心算法部分兩類,采用簡單設計的原則來進行。
10)重構(Refactoring)
在開發過程中簡單設計中的不足之處需要通過重構來解決。我們有的開發小組甚至專門拿出一個迭代周期進行代碼重構。
11)隱喻(Metaphor)
在本項目的開發過程中,程序開發人員大都是相近專業,因此他們在軟件開發過程中,所使用的話語都是“行話”,因此我們選擇“原始的行話”作為“系統隱喻”。
12)編程規范(Code Standards)
本項目全部采用C/C++來實現,圖形顯示部分都是在Windows平臺采用Visual C++ 6.0 MFC類庫實現(C++),數據處理軟件模塊在VxWorks平臺(C語言)和Windows平臺(C++)都有,數據通信和控制命令的通信主要是以太網和串口。
3 總結
軟件開發的“敏捷”思想及XP方法為解決軟件開發過程中存在的諸多問題提供了一種非常實用的方法。但是,在軟件開發中采用“敏捷”思想以及XP方法對于項目管理者和項目開發人員卻是一種挑戰。XP的四項基本理念即交流、反饋、勇氣、簡單看似簡單,但在實際實行的過程中就會發現,無論是程序開發人員、項目管理人員、客戶和設計人員要達到這四項基本理念的要求都需要經過較長時間的鍛煉。這從我們開發的迭代速度就能看出來,第一個迭代周期中我們的程序員完成的工作量只有第三次迭代周期中他們完成工作量的一半。在本軟件項目的開發過程中,項目開發人員受益最大的就是采用測試驅動開發的策略、撰寫User Story和遵循簡單設計的原則。“敏捷”只提供了軟件開發的方法論,XP也只提供了軟件開發過程中可能會帶來收益的一些原則,更重要的是要結合實際情況在實踐中不斷的實踐這些方法和原則,并找出適合自己項目的軟件開發模式。
參考文獻:
[1] Highsmith J,Cockburn A.Agile software development: the business of innovation[J].Computer,2001,34(9):120-121.
[2] Beck K.Extreme Programming Explained: Embrace Change[M].Addison-Wesley,2000.
[3] Cockbum,Alistair.Agile Software Development[M].Boston:Addison-Wesley,2002.
[4] Wood W A,Kleb W L.Exploring XP for Scientific Research[J].IEEE Software,2003(5):31-36.
[5] 李航.敏捷型軟件開發方法與極限編程概述[J].計算機工程與設計,2003,24(10):116-121.