胡 霞
[摘要]在軟件開發(fā)過程中,敏捷開發(fā)思想是現(xiàn)階段最新的軟件開發(fā)思想,它可以讓軟件開發(fā)團(tuán)隊(duì)具有快速工作和響應(yīng)變化能力的價(jià)值觀和原則。因此,就這一先進(jìn)思想在實(shí)際項(xiàng)目開發(fā)的應(yīng)用提出一些觀點(diǎn)。
[關(guān)鍵詞]敏捷軟件開發(fā)方法極限編程項(xiàng)目開發(fā)實(shí)踐
中圖分類號(hào):TJ8文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1671-7597(2009)1220066-01v
一、引言
敏捷軟件開發(fā)思想是近幾年在軟件領(lǐng)域興起的新思潮,使用該思想設(shè)計(jì)出來的軟件靈活、高效、高質(zhì),將其與傳統(tǒng)的開發(fā)原則結(jié)合起來,能有效地提高軟件開發(fā)的效率,是越來越多的軟件開發(fā)者所追捧的一種開發(fā)思想。將該思想引入到小型項(xiàng)目開發(fā)過程中,解決傳統(tǒng)方法在適應(yīng)需求變化方面的不足,能有效控制需求變更和客戶對(duì)開發(fā)過程的透明性帶來的風(fēng)險(xiǎn),以求在較短的時(shí)間內(nèi)獲得較為滿意的效果。
二、敏捷軟件開發(fā)思想
(一)簡(jiǎn)介
敏捷軟件開發(fā)是以Robert C.Martin為代表的軟件行業(yè)的領(lǐng)軍人物提出的軟件開發(fā)思想。在2001年初,由于看到許多公司的軟件團(tuán)隊(duì)陷入了不斷增長(zhǎng)的過程的泥潭,一批業(yè)界專家聚集在一起概括出了一些可以讓軟件開發(fā)團(tuán)隊(duì)具有快速工作和響應(yīng)變化能力的價(jià)值觀和原則。他們稱自己為敏捷聯(lián)盟,在隨后的幾個(gè)月中,他們創(chuàng)建出了一份敏捷聯(lián)盟宣言(The Manifesto of the Agile Alliance)。
人和交互重于 過程和工具
可以工作的軟件 重于 面面俱到的文檔
客戶合作 重于 合同談判
隨時(shí)應(yīng)對(duì)變化 重于 遵循計(jì)劃
敏捷聯(lián)盟以他們親身實(shí)踐及幫助他人的實(shí)踐提示更好的軟件開發(fā)的方法。該方法強(qiáng)調(diào)了以人為核心、通過迭代、循序漸進(jìn)地進(jìn)行軟件開發(fā),它更加靈活,更能夠適應(yīng)不斷變化的需求,提高了軟件開發(fā)的質(zhì)量,大大提高了軟件開發(fā)的效率,同時(shí)也縮短了軟件產(chǎn)品開發(fā)的周期。
(二)極限編程模型
敏捷軟件開發(fā)的模型有XP(極限編程,eXtreme Programming)、FDD(特性驅(qū)動(dòng)開發(fā),Feature-Driven Development)、Scrum、ASP(自適應(yīng)軟件開發(fā)Adaptive Software Development)、DSDM(動(dòng)態(tài)系統(tǒng)開發(fā)方法,Dynamic System Development Method)、AUP(敏捷統(tǒng)一過程,Agile Unified Process)、Crystal等。本課程中主要通過研究極限編程模型,來學(xué)習(xí)敏捷軟件開發(fā)思想。
XP是一種靈巧的軟件開發(fā)方法。它的基礎(chǔ)和價(jià)值觀是交流、樸素、反饋和勇氣;即,任何一個(gè)軟件項(xiàng)目都可以從四個(gè)方面入手:加強(qiáng)交流;從簡(jiǎn)單做起;尋求反饋;勇于實(shí)事求是。XP將復(fù)雜的開發(fā)過程分解為一個(gè)個(gè)相對(duì)比較簡(jiǎn)單的小周期;通過團(tuán)隊(duì)人員之間、團(tuán)隊(duì)與客戶之間反復(fù)的交流及其它一系列的方法,開發(fā)人員和客戶在整個(gè)過程中均可以非常清楚開發(fā)進(jìn)度、變化、待解決的問題和潛在的困難等,并根據(jù)實(shí)際情況及時(shí)地調(diào)整開發(fā)過程,縮短軟件開發(fā)的周期,提高軟件開發(fā)的效率和質(zhì)量。
三、敏捷軟件開發(fā)在項(xiàng)目開發(fā)中實(shí)踐
按照敏捷開發(fā)提出的設(shè)計(jì)要求,在項(xiàng)目開發(fā)中,結(jié)合具體的開發(fā)項(xiàng)目、企業(yè)文化和團(tuán)隊(duì)實(shí)際情況合理地利用敏捷開發(fā)方法,真正幫助解決項(xiàng)目開發(fā)中可能出現(xiàn)的危機(jī)和潛在的困難,以生產(chǎn)出高品質(zhì)的軟件產(chǎn)品。以下幾個(gè)方面是本人在項(xiàng)目開發(fā)具體的實(shí)施過程的一點(diǎn)心得:
(一)以人為本,組建完整團(tuán)隊(duì)
敏捷軟件開發(fā)思想認(rèn)為,“原則、模式和實(shí)踐都是重要的,但是使它們發(fā)揮作用的是人”“過程和技術(shù)對(duì)于項(xiàng)目的結(jié)果只有次要的影響。首要影響的是人。”由此可見,具有較強(qiáng)的團(tuán)隊(duì)合作力量,凝聚在一起的團(tuán)隊(duì)具有最強(qiáng)大的軟件開發(fā)實(shí)力。傳統(tǒng)的軟件開發(fā)模型要求將用戶需求精確化、完全化,形成最終的需求分析報(bào)告,并要求在軟件開發(fā)過程中不允許再發(fā)生變化。而傳統(tǒng)的軟件開發(fā)模式下,客戶與軟件開發(fā)人員并不能經(jīng)常性地交流,往往開發(fā)人員完成的需求分析并不是真正用戶所需要的,或者是用戶的需求一旦發(fā)生新的變化,很容易引發(fā)軟件危機(jī),項(xiàng)目以失敗告終或是軟件殘缺不全。而在敏捷軟件開發(fā)中更加注重團(tuán)隊(duì)合作,這里所指的團(tuán)隊(duì)并不僅僅指一支團(tuán)結(jié)的軟件開發(fā)團(tuán)隊(duì),更重要的是把客戶加入到開發(fā)團(tuán)隊(duì)中來。客戶與開發(fā)者緊密地工作在一起,進(jìn)行有效的溝通與及時(shí)的反饋,以便于彼此知曉對(duì)方所面臨的問題,客戶與開發(fā)人員工作距離越近,需求越精確化,因?yàn)闇贤ú粔蚨霈F(xiàn)問題的可能性就越小。
(二)讓軟件代替文檔
在軟件開發(fā)中,沒有文檔的軟件是一種災(zāi)難,然而過多地文檔比過少的文檔更糟,在很多項(xiàng)目開發(fā)過程中,大部分都是為了文檔而文檔,而每次同步大量的文檔需要花費(fèi)大量的時(shí)間,而不同步的文檔反而容易造成團(tuán)隊(duì)成員重大的誤導(dǎo),反而導(dǎo)致了進(jìn)度拖延。因此,我們要求軟件開發(fā)過程中的文檔盡可能的簡(jiǎn)短,給我的開發(fā)文檔,沒有太多東西,但是你想要的全有,而且特細(xì)致。而代碼是最真實(shí)的表達(dá)者,在軟件開發(fā)過程中,我們盡量地使用可以工作的軟件來代替文檔說明,并通過人與人之間的直接交流,從而完成對(duì)整個(gè)系統(tǒng)時(shí)常變化的脈絡(luò)的把握。因此在開發(fā)初期我們可以選用一些原型設(shè)計(jì)工具(例Axure Rp),完成對(duì)系統(tǒng)的結(jié)構(gòu)設(shè)計(jì),能夠較快地獲取最初的用戶故事,并根據(jù)這些用戶故事構(gòu)建項(xiàng)目基礎(chǔ)結(jié)構(gòu),并根據(jù)結(jié)構(gòu),確定第一個(gè)版本發(fā)布計(jì)劃,并完成首次版本的開發(fā)與設(shè)計(jì),“越早交付上線就能夠越早地為企業(yè)提供價(jià)值,也就能越早地體現(xiàn)出該軟件及其開發(fā)的工程價(jià)值與社會(huì)價(jià)值”。
(三)短周期迭代交互
敏捷軟件開發(fā)中要求項(xiàng)目每?jī)芍芫瓦M(jìn)行一次迭代,每次迭代都是一次較小的交付,該交付可能成為確認(rèn),也可能被舍棄。這樣可以將可能出現(xiàn)的問題避免了擴(kuò)散,有效地避免傳統(tǒng)開發(fā)過程中出現(xiàn)的返工現(xiàn)象。開發(fā)者將迭代的結(jié)果向客戶演示,根據(jù)客戶的反饋結(jié)果確定迭代的取舍。每次的迭代都必須要求用戶參加,并得到客戶的許可方可進(jìn)行。在迭代的交流過程中,使用素材卡來獲取記錄新的用戶故事,并及時(shí)與用戶交流溝通,確認(rèn)新的變化與需求,并形成新的迭代計(jì)劃,從而很好的擁抱不斷變化的需求。
(四)持續(xù)地進(jìn)行代碼的重構(gòu)
雖然我們?cè)O(shè)計(jì)的代碼有些已經(jīng)能夠按照要求在工作,它并沒有出錯(cuò),但我們卻建議去修理它,為了是使我們的軟件模塊更加易于閱讀和修改。我們可以根據(jù)軟件設(shè)計(jì)的原則來消除我們軟件設(shè)計(jì)的臭味,以防我們?cè)O(shè)計(jì)的軟件出現(xiàn)僵化性、脆弱性、牢固性、粘滯性、不必要的復(fù)雜性、不必要的重復(fù)、晦澀性等軟件氣味,防止我們的軟件腐化。大部分開發(fā)人員在完成項(xiàng)目實(shí)踐過程中,習(xí)慣于不停地復(fù)制、粘貼代碼,這樣很容易造成了代碼的冗余,并且不利于軟件模塊的修改。如果我們及時(shí)地按照軟件設(shè)計(jì)的原則來進(jìn)行代碼的重構(gòu),可以大大節(jié)省了今后代碼更新所需要的時(shí)間,同時(shí)也提高了軟件開發(fā)的工作效率,因此在此過程中,我們鼓勵(lì)軟件開發(fā)人
員大膽地運(yùn)用軟件工程的相關(guān)知識(shí),依據(jù)軟件設(shè)計(jì)原則來進(jìn)行代碼的重構(gòu),同時(shí)也不會(huì)害怕經(jīng)常變化的需求。
四、敏捷軟件開發(fā)實(shí)踐中遇到的困難
敏捷開發(fā)思想的出現(xiàn),在軟件行業(yè)引起了一輪研究熱潮,由于越來越多的人對(duì)它的追捧,往往會(huì)背道而馳,走入敏捷開發(fā)思想的誤區(qū),主要表現(xiàn)在以下幾個(gè)方面:
(一)難以實(shí)現(xiàn)的結(jié)對(duì)編程
俗話說:“三個(gè)臭皮匠勝過一個(gè)諸葛亮!”在敏捷開發(fā)過程中提倡的結(jié)對(duì)編程,也就是說代碼都是由結(jié)對(duì)的程序員共同完成的,結(jié)對(duì)人員中,一個(gè)控制鍵盤并輸入代碼,另一個(gè)觀察著輸入的代碼,尋找代碼中的錯(cuò)誤和可以改進(jìn)的地方,兩個(gè)人頻繁互換角色,這樣可以達(dá)到事半功倍的效果。在整個(gè)項(xiàng)目組中,結(jié)對(duì)編程的關(guān)系可以經(jīng)常變換,不過前提是該項(xiàng)目被劃分成一個(gè)個(gè)最小的功能模塊,這樣的方式極大地促進(jìn)知識(shí)在團(tuán)隊(duì)中的傳播,同時(shí)也能夠更加促進(jìn)了項(xiàng)目各功能模塊之間銜接,可以大大地減少缺陷率。組員之間通過這樣的結(jié)對(duì)編程可以相互交換思想,加快知識(shí)的傳播。在企業(yè)中,往往出現(xiàn)的是一個(gè)蘿卜一個(gè)坑,很難做到二個(gè)開發(fā)人員結(jié)對(duì)完成代碼的編寫。
(二)敏捷軟件開發(fā)工具的缺乏
與傳統(tǒng)的軟件開發(fā)相比,敏捷開發(fā)往往缺少開發(fā)工具和集成環(huán)境支持的軟件開發(fā)方法,這使得敏捷開發(fā)推廣比較困難。期待著能夠早日出現(xiàn)更成熟、便捷、人性化、可視化的開發(fā)工具、集成環(huán)境,以及在此類開發(fā)工具、集成環(huán)境支持下進(jìn)行敏捷軟件開發(fā)的成功典型案例庫(kù)。
五、結(jié)束語(yǔ)
敏捷設(shè)計(jì)就是一個(gè)過程,不是一個(gè)事件。它是一個(gè)持續(xù)的應(yīng)用原則、模式以及實(shí)踐來改進(jìn)軟件的結(jié)構(gòu)和可讀性的過程。本人也是初涉敏捷軟件開發(fā)思想,對(duì)其中的精華可能理解還不夠深入,以上僅是一些在課程中應(yīng)用的一點(diǎn)思考。如果能夠?qū)⒚艚菰O(shè)計(jì)的一些思想使用到軟件開發(fā)過程中,將會(huì)事半功倍的效果,這種軟件開發(fā)思想反映了軟件開發(fā)中較先進(jìn)的理論軟件開發(fā)價(jià)值觀和原則。
參考文獻(xiàn):
[1](美)Robert C.Martin著,鄧輝譯,敏捷軟件開發(fā)(原則、模式與實(shí)踐),清華大學(xué)出版社(北京),2003年9月.
[2](美)Martin Fowler著,侯捷、熊節(jié)譯,重構(gòu)-改善有代碼的設(shè)計(jì),中國(guó)電力出版社(北京),2003年8月.
[3](美)Grady Booch著,賈愛霞譯,面向?qū)ο蟮姆治雠c設(shè)計(jì),機(jī)械工業(yè)出版社(北京),2003年1月.
作者簡(jiǎn)介:
胡霞,女,31歲,江蘇大豐人,蘇州工業(yè)職業(yè)技術(shù)學(xué)院工程師,主要研究方向:軟件開發(fā)。