[摘 要] 本文首先提出了傳統(tǒng)開發(fā)方法面臨的問題,然后介紹了極限編程的優(yōu)勢和局限性,最后給出極限編程的適用范圍。
[關(guān)鍵詞] 極限編程;敏捷開發(fā)
[中圖分類號] TP311.52 [文獻標(biāo)識碼] A
由Kent Beck提出的Extreme Programming(XP)規(guī)定了一組核心的價值觀和方法,它消除了重量型軟件過程的不必要產(chǎn)物,從而減輕了開發(fā)人員的負擔(dān)。極限編程是一種輕量、高效、低風(fēng)險、柔性、可預(yù)測、科學(xué)且充滿樂趣的軟件開發(fā)方式。極限編程承諾降低項目風(fēng)險,改善對業(yè)務(wù)變化的反應(yīng)能力,在系統(tǒng)的整個生命周期內(nèi)提高生產(chǎn)力。在很大程度上解決了傳統(tǒng)軟件開發(fā)面臨的問題。
1 傳統(tǒng)軟件開發(fā)面臨的問題
自從在軟件行業(yè)引入工程的概念后,軟件工程的研究成為軟件行業(yè)的重要內(nèi)容。傳統(tǒng)的軟件工程方法強調(diào)詳細的規(guī)劃和設(shè)計,使用大量的文檔資料來保證軟件產(chǎn)品的質(zhì)量,在很大程度上解決了“軟件危機”中出現(xiàn)的問題。但隨著軟件行業(yè)的不斷發(fā)展,越來越多采用傳統(tǒng)軟件開發(fā)方法的項目依然存在各種不同問題,集中表現(xiàn)在以下三個方面:
1.1 無法應(yīng)對需求的不斷變化
在軟件工程中,需求分析是軟件開發(fā)的首要環(huán)節(jié),也是軟件開發(fā)的一個重要階段,它直接決定著下一階段的項目設(shè)計和規(guī)劃的質(zhì)量,可以說是決定整個項目成敗的關(guān)鍵。但在實踐中,由于需求分析人員經(jīng)驗、技能和水平的差異,以及客戶自身知識和水平的限制,常常無法準(zhǔn)確把握客戶所有的需求。隨著開發(fā)過程的進行,客戶軟件知識逐步增加,軟件部署環(huán)境也會不斷發(fā)生變化,客戶會不斷提出新的需求,滿足客戶新的需求會導(dǎo)致項目整體規(guī)劃和設(shè)計的變化,造成已有人員、資金、時間等資源的浪費,影響項目正常進度的實施。另外傳統(tǒng)開發(fā)方法多數(shù)采用一次性詳細規(guī)劃和設(shè)計,在開發(fā)中后期修改較為困難,嚴(yán)重時會導(dǎo)致整個項目從頭再來。因此,傳統(tǒng)開發(fā)方法難以應(yīng)對客戶不斷變化的需求。
1.2 軟件產(chǎn)品質(zhì)量低下
雖然在傳統(tǒng)軟件開發(fā)過程中有嚴(yán)格的單元測試、集成測試、系統(tǒng)測試等多個測試環(huán)節(jié),但隨著系統(tǒng)規(guī)模的不斷擴大,系統(tǒng)的復(fù)雜性不斷增加,各個測試環(huán)節(jié)并不能發(fā)現(xiàn)全部的問題。加上軟件部署環(huán)境下的硬件、軟件、網(wǎng)絡(luò)等多方面因素的影響,軟件產(chǎn)品在交付后總會出現(xiàn)這樣那樣的問題,造成客戶對項目的滿意度降低。出現(xiàn)這種現(xiàn)象的根本原因在于項目開發(fā)機制和開發(fā)方法的影響。
1.3 項目風(fēng)險較大
傳統(tǒng)軟件開發(fā)多采用結(jié)構(gòu)化模塊式設(shè)計,由項目經(jīng)理將各功能模塊分發(fā)給不同人員實現(xiàn),然后再進行集成。這就造成系統(tǒng)某個功能模塊由某個項目組成員實際控制,其他人都不熟悉。這樣如果負責(zé)系統(tǒng)關(guān)鍵模塊的人員流失,就會給項目開發(fā)帶來很大的風(fēng)險,影響項目的進度和產(chǎn)品質(zhì)量。另一方面,項目組為了滿足客戶不斷提出的部分新需求,被迫修改項目規(guī)劃和設(shè)計,造成項目資源的浪費,常常會造成項目經(jīng)費不足、項目進度無法實現(xiàn)等問題,無法如約履行與客戶的合同。即使為如期交付軟件系統(tǒng)而趕進度完成了項目,也會降低產(chǎn)品的質(zhì)量,從而給項目帶來極大的風(fēng)險。
2 極限編程的優(yōu)勢
極限編程作為一種新型的敏捷開發(fā)方法,以產(chǎn)品質(zhì)量為核心,綜合采用了軟件開發(fā)中的各種實踐手段和方法,可以很好地解決上述傳統(tǒng)軟件開發(fā)方法所遇到的問題。
2.1 適應(yīng)快速變化的項目需求
極限編程采用逐步規(guī)劃,進化式設(shè)計的方式進行項目規(guī)劃設(shè)計。項目組首先根據(jù)已知因素制定整體計劃,然后根據(jù)項目環(huán)境和客戶需求變化不斷修改規(guī)劃。進化式設(shè)計只考慮當(dāng)前有用的功能和設(shè)計,不考慮將來可能的需求,而將可能需求放在必要時予以實現(xiàn),從而使設(shè)計較好的適應(yīng)最新項目進展,最大限度滿足客戶需求。這樣可以提高軟件產(chǎn)品質(zhì)量和客戶滿意度,并能避免可能的開發(fā)資源浪費。
極限編程采取現(xiàn)場客戶的工作方式,即客戶在項目開發(fā)全過程和項目組一起現(xiàn)場工作,隨時和項目組成員交流,對項目進行即時有效的反饋。這種現(xiàn)場客戶的工作方式,可以讓項目組及時發(fā)現(xiàn)項目目標(biāo)與客戶需求之間的差距,及時征求客戶意見,得到客戶反饋,盡早發(fā)現(xiàn)問題解決問題,從而避免項目返工和修改造成的資金、時間等資源的浪費。
2.2 保證較高的產(chǎn)品質(zhì)量
質(zhì)量是極限編程的核心,為了保證軟件產(chǎn)品的質(zhì)量,極限編程采用測試先行、持續(xù)集成等措施,并在設(shè)計中采用簡單性原則。測試先行是在編寫程序代碼之前編寫測試代碼。傳統(tǒng)開發(fā)方法中測試代碼通常在程序代碼后編寫,這樣測試代碼會受程序員個人先入為主的影響。測試先行的方法避免了程序員先入為主的主觀影響,使測試更客觀更全面。持續(xù)集成是項目開發(fā)過程中系統(tǒng)各模塊在開發(fā)過程經(jīng)常性進行集成,通常每天進行一次或多次集成。持續(xù)集成可以及早發(fā)現(xiàn)集成中出現(xiàn)的問題,將問題解決在萌芽階段,這樣就避免了常見的大規(guī)模集成中出現(xiàn)大量問題的現(xiàn)象,防止在后期項目集成時風(fēng)險過高。簡單性原則即在項目規(guī)劃、設(shè)計和實現(xiàn)時盡可能保持簡單。在滿足客戶需求的前提下的簡單可以保證系統(tǒng)的可靠性。從系統(tǒng)工程的角度而言越簡單的系統(tǒng)可靠性越高,越復(fù)雜的系統(tǒng)則越脆弱。極限編程中的簡單性原則,不但可以保證系統(tǒng)的可靠性,而且還可以避免不必要的功能的開發(fā),節(jié)約項目資源,保證項目實施進度。測試先行、持續(xù)集成、簡單性原則等措施和極限編程的其他措施一起保證了軟件產(chǎn)品的較高質(zhì)量。
2.3 降低項目風(fēng)險
傳統(tǒng)項目開發(fā)中常常存在人員流失和預(yù)定進度無法實現(xiàn)等風(fēng)險。極限編程采用代碼集體擁有和頻繁發(fā)布的開發(fā)機制。代碼集體擁有即項目組所有成員都可以對系統(tǒng)代碼的任何部分進行修改。這樣系統(tǒng)代碼由項目組集體擁有,避免了部分代碼由某個人單獨控制的現(xiàn)象,即使部分項目組成員流失,也不會對項目開發(fā)造成重大影響。頻繁發(fā)布是項目組經(jīng)常進行功能性的發(fā)布,向客戶展示項目組的階段性成果,一方面有利于確認客戶需求,避免開發(fā)中走彎路;另一方面有利于進一步的規(guī)劃和設(shè)計,可以不斷精確控制項目時間進度,按指定日期完成項目。頻繁發(fā)布還有利于提高項目組成員的成就感和開發(fā)信心。
3 極限編程的局限
極限編程作為一種優(yōu)秀的敏捷開發(fā)方法,有其不可替代的優(yōu)勢,但同時因其獨特的開發(fā)機制和措施,極限編程也有其自身局限性,主要有以下幾個方面。
3.1 團隊規(guī)模有限
極限編程不特別依賴正式文檔,重視口頭交流。因為口頭交流相對文檔交流更直接、效率更高。但如果團體規(guī)模過大,團隊成員之間全面的相互口頭交流將會變得比較困難。同時極限編程實現(xiàn)代碼集體擁有,項目組成員可以任意修改所有代碼,如果項目組成員過多,這種修改將會變得難以預(yù)料、無法控制,因此團隊規(guī)模必須得到控制。在實踐中采用極限編程進行開發(fā)的團隊規(guī)模通常在10人以下。
3.2 文化認同有一定難度
極限編程采用結(jié)對編程的工作方法。結(jié)對編程即兩個人在一臺電腦前協(xié)同工作,一起進行項目設(shè)計、測試和開發(fā)。這對部分個性鮮明的程序人員來說可能是無法接受的,同時項目領(lǐng)導(dǎo)也可能會對兩個人共同工作的效率和效果不信任。極限編程為了保持項目組成員的工作熱情和工作效率,提倡每周工作40小時,這一點對于一些急欲完成項目的項目領(lǐng)導(dǎo)來說是無法接受的。因此要實施極限開發(fā)的項目必須要求項目團隊領(lǐng)導(dǎo)和團隊成員認同和接受極限編程的文化。
3.3 對項目組成員要求較高
實施傳統(tǒng)開發(fā)方法的項目組通常分工較細,項目組成員分別負責(zé)設(shè)計、開發(fā)、測試等不同工作。但實施極限編程的項目組成員要完成設(shè)計、測試和開發(fā)等多種工作。因此要求項目組成員具有較強的綜合素質(zhì)和多方面的工作能力。這一點對于項目團隊的組建具有較高的難度。
4 極限編程的適用范圍
極限編程以其優(yōu)秀的特性受到了眾多程序人員和項目組的青睞。根據(jù)極限編程的特性及其應(yīng)用情況,極限編程在以下情況下應(yīng)用較為合適。
4.1 需求變化大的項目
極限編程可以適應(yīng)快速變化的項目需求,因此在需求變化較大或需求不夠明確的項目中適宜采用極限編程開發(fā)方法。
4.2 開發(fā)風(fēng)險高的項目
極限編程采用代碼集體擁有、頻繁發(fā)布等措施,在降低項目開發(fā)風(fēng)險方面具有較好的效果。如果項目開發(fā)風(fēng)險較高,采用極限編程開發(fā)方法可以極大限度地降低項目的開發(fā)風(fēng)險,保障項目的順利完成。
4.3 人員精干的團隊
極限編程開發(fā)方法對項目團隊要求較高,要求團隊人員具有設(shè)計、開發(fā)、測試等多種能力。對于人員精干的團隊來說,團隊規(guī)模較小且團隊成員具有較強的工作能力,因此適合采用極限編程進行項目開發(fā)。
參考文獻:
[1]馮山,陳世平等.XP—適合中小型軟件系統(tǒng)的敏捷方法[J].西南石油學(xué)院學(xué)報,2003,12.
[2]卜鷗.多層次極限編程及應(yīng)用范圍擴展[J].重慶師范學(xué)院學(xué)報(自然科學(xué)版),2003,6.
[3]鐘琪,何俊梅,張為群.基于極限編程的統(tǒng)一過程探討[J].西南師范大學(xué)學(xué)報(自然科學(xué)版),2004,4.
[4]芮雄健,王忠民.基于敏捷軟件開發(fā)方法的基金管理信息系統(tǒng)開發(fā)[J].計算機應(yīng)用,2004,11.
[5]張戰(zhàn)波.空管軟件開發(fā)過程的極限編程實踐[J].中國民航學(xué)院學(xué)報,2004,10.
[6]杜榮華,龔德俊等.極限編程在大型項目開發(fā)中的應(yīng)用[J].交通與計算機,2004,6.
[7]熊斌貝,陳海.結(jié)對編程成本與收益之探[J].計算機與現(xiàn)代化,2004,11.
[8]黃敏.用極限編程解決軟件開發(fā)項目中的常見問題[J].電子科技,2004,3.
[9]李航.敏捷型軟件開發(fā)方法與極限編程概述[J].計算機工程與設(shè)計,2003,10.
[10]鄧靖穎,黃穗.敏捷開發(fā):極限編程在管理信息系統(tǒng)開發(fā)中的實踐探討[J].計算機工程,2004,12.
[11]Radmila Juric.Extreme Programm-
ing and its Development Practices[M].22\"' Int. Conf. lnformation Technology lnterfaces /TI 2000(June):13-16,2000.
[12]Barry Boehm.The Agile Methods Fr-
ay[J].Tom DeMarco, computer,2002,June.
[13]James E.Tomayko,Carnegie Mellon.Teaching Extreme Programming Remotely[M].Proceedings of the 18th Conference on Software Engineering Education Training (CSEET’05).
[14]Grel Hedin, Lars Bendix, Bo ris Magnusson.Introducing Software Engineering by means of Extreme Programming[C],Processings of the 25th International Conference on Software Engineering(ICSE’03).