摘要:極限編程是敏捷的和基于實(shí)踐的軟件開發(fā)方法學(xué)。本文將極限編程引入計(jì)算機(jī)專業(yè)本科畢業(yè)設(shè)計(jì)中,并探討了在畢業(yè)設(shè)計(jì)中引入極限編程的意義,以及如何應(yīng)用極限編程有效地進(jìn)行畢業(yè)設(shè)計(jì)。
關(guān)鍵詞:極限編程;結(jié)對(duì)編程;畢業(yè)設(shè)計(jì)
中圖分類號(hào):G642.0 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1672-5913(2007)13-0025-03
The Application of the eXtreme Programming
in the Computer students’ Undergraduate Design
LIU Zhu-song, LI Zhen-kun, WANG Wen-yan
(Faculty of Computer,Guangdong University of Technology,Guangzhou Guangdong 510090,China)
Abstract:eXtreme Programming is a software development methodology that is agile and based on practice. This paper introduces eXtreme Programming in the Computer students’ Undergraduate Design. We also explored the significance of the introduction of the eXtreme Programming, and how to design effectivegraduation design with eXtreme Programming.
Key words:eXtreme Programming; Pair Programming; Graduation Design
1引言
極限編程[1](eXtreme Programming)是大師級(jí)人物Kent Beck于1998年首先倡導(dǎo)的,它是一種經(jīng)歷過實(shí)踐考驗(yàn)的輕量級(jí)軟件開發(fā)方法學(xué)。它以有效的實(shí)踐規(guī)則將整個(gè)團(tuán)隊(duì)緊密聯(lián)系起來(lái),通過充分的反饋使團(tuán)隊(duì)能隨時(shí)知道自己目前的狀況和恰當(dāng)?shù)卣{(diào)節(jié)實(shí)踐規(guī)則以適應(yīng)自己的特殊情況,以簡(jiǎn)單性、交流、反饋和勇氣為基本宗旨。極限編程強(qiáng)調(diào)我們將系統(tǒng)細(xì)分為可以在較短周期內(nèi)解決的一個(gè)個(gè)子模塊,并且強(qiáng)調(diào)測(cè)試、代碼質(zhì)量和及早發(fā)現(xiàn)問題。通常,通過一個(gè)個(gè)短小的迭代周期,我們就可以獲得一個(gè)個(gè)階段性的進(jìn)展,并且可以及時(shí)形成一個(gè)版本供用戶參考,以便及時(shí)對(duì)用戶可能的需求變更作出響應(yīng)。計(jì)算機(jī)專業(yè)本科畢業(yè)設(shè)計(jì)主要是考查及訓(xùn)練學(xué)生的綜合應(yīng)用能力,它是對(duì)學(xué)生四年所學(xué)知識(shí)的一次綜合考驗(yàn),它要求學(xué)生對(duì)各種軟、硬件知識(shí)進(jìn)行綜合應(yīng)用。但是,對(duì)于一直在學(xué)校學(xué)習(xí),很少有實(shí)踐機(jī)會(huì)的學(xué)生,如果要求每人交一幅作品,則會(huì)使一些技能相對(duì)薄弱的學(xué)生無(wú)法綜合運(yùn)用軟硬件知識(shí)而敷衍了事。為促進(jìn)學(xué)生學(xué)習(xí)的興趣,加強(qiáng)學(xué)生綜合應(yīng)用各方面知識(shí)的能力,增強(qiáng)學(xué)生之間的相互交流、相互學(xué)習(xí),提高畢業(yè)設(shè)計(jì)的整體效果。在畢業(yè)設(shè)計(jì)這一環(huán)節(jié)中,我們可以將極限編程應(yīng)用到計(jì)算機(jī)專業(yè)本科畢業(yè)設(shè)計(jì)中,這有助于學(xué)生形成團(tuán)隊(duì)合作的精神,盡快掌握計(jì)算機(jī)中類如迭代開發(fā),小組開發(fā)的方法。
2引入極限編程的意義
極限編程的核心是結(jié)對(duì)編程[2]。結(jié)對(duì)編程的通俗含義指的是兩個(gè)程序員并排坐在一臺(tái)電腦前,面對(duì)同一個(gè)顯示器,使用同一個(gè)鍵盤,同一個(gè)鼠標(biāo)一起工作。他們一起分析,一起設(shè)計(jì),一起寫測(cè)試?yán)樱黄鹁幋a,一起單元測(cè)試,一起整合測(cè)試,一起寫文檔等?;旧纤械拈_發(fā)環(huán)節(jié)都一齊肩并肩地,平等地,互補(bǔ)地進(jìn)行開發(fā)工作。顧命思義,它的核心精髓就在于小組內(nèi)(通常為2人)成員緊密合作,時(shí)刻交流。采用極限編程進(jìn)行合作的學(xué)生能更有效地交流,相互學(xué)習(xí)和傳遞經(jīng)驗(yàn);能提供更好的設(shè)計(jì)質(zhì)量和代碼質(zhì)量;能訓(xùn)練更強(qiáng)的問題解決能力。同時(shí),采取結(jié)對(duì)編程的學(xué)生更容易樹立信心,從工作中獲取更多的滿足感。下面從四個(gè)方面論述在計(jì)算機(jī)本科畢業(yè)設(shè)計(jì)中引入極限編程的意義[3]。
2.1極限編程有利于培養(yǎng)學(xué)生的合作精神與綜合能力
合作通常指為了共同的目的一起工作或共同完成某項(xiàng)任務(wù)。它是互相認(rèn)同、互相接納、目標(biāo)一致,情感態(tài)度與誠(chéng)信的結(jié)合,是一種價(jià)值的體現(xiàn),而且只有在愉快的合作中才能更好地完成共同任務(wù)。在傳統(tǒng)獨(dú)自為政的畢業(yè)設(shè)計(jì)中,不同的學(xué)生具有不同的知識(shí)水準(zhǔn),有不同的設(shè)計(jì)目標(biāo),因此很難進(jìn)行合作,而采用結(jié)對(duì)編程方式進(jìn)行的畢業(yè)設(shè)計(jì)確能從根本上解決此類問題。這是因?yàn)椴捎媒Y(jié)對(duì)編程方式進(jìn)行的畢業(yè)論文完成的程度及好壞往往取決于小組內(nèi)的學(xué)生密切合作的程度。為了達(dá)到共同的目標(biāo),小組內(nèi)的成員必需緊密合作,加強(qiáng)溝通,并且時(shí)刻了解對(duì)方目前的進(jìn)展。結(jié)對(duì)編程的內(nèi)在含義決定了學(xué)生必需進(jìn)行合作,從而無(wú)形中培養(yǎng)了學(xué)生的合作精神。正是由于學(xué)生存在不同的知識(shí)水平的差異,因此,在結(jié)對(duì)編程中雙方容易學(xué)習(xí)到別人的優(yōu)點(diǎn),意識(shí)到自己的缺點(diǎn)并加以改正,從而在結(jié)對(duì)編程中達(dá)到提高綜合素質(zhì)和能力的目的。
2.2極限編程有利于全體學(xué)生主動(dòng)參與,鍛煉了學(xué)生的動(dòng)手能力
傳統(tǒng)的采用小組合作方式進(jìn)行的畢業(yè)設(shè)計(jì),有相當(dāng)多的學(xué)生總是因?yàn)閼岩勺约耗芰Σ粔颍幱谝环N旁觀者的位置。而技術(shù)能力比較強(qiáng)的學(xué)生又總會(huì)感覺憑他們一人或者幾個(gè)人的能力就能解決所有畢業(yè)設(shè)計(jì)的問題。因此,一個(gè)本應(yīng)該由全體成員同心協(xié)力,群策群力完成的課題,就變成了少數(shù)幾個(gè)人用于個(gè)人表演的舞臺(tái)。而極限編程則能有利地解決這個(gè)問題。在結(jié)對(duì)編程的方式中,雙方處于一個(gè)對(duì)等的位置,每個(gè)人都是畢業(yè)設(shè)計(jì)課題的主角。因此,應(yīng)用能力差的學(xué)生也有動(dòng)手的機(jī)會(huì),完全擺脫了過去那種旁觀,旁聽的位置,并能從與對(duì)方的合作中學(xué)到許多自己不知道和了解的內(nèi)容,從而鍛煉了動(dòng)手能力,并最終導(dǎo)致雙方積極主動(dòng)地參與畢業(yè)設(shè)計(jì)。
2.3極限編程有利于促進(jìn)學(xué)生人際交往
溝通問題是一個(gè)畢業(yè)設(shè)計(jì)成功與否的最重要因素之一。一個(gè)畢業(yè)設(shè)計(jì)項(xiàng)目可能并沒有什么正式的軟件過程,但是只要團(tuán)隊(duì)成員能夠進(jìn)行有效的溝通,項(xiàng)目成功的可能性就很大,但是如果項(xiàng)目中缺乏有效的溝通渠道,再優(yōu)秀,再嚴(yán)謹(jǐn)?shù)能浖^程也沒有用。從長(zhǎng)期來(lái)看,內(nèi)部能夠進(jìn)行有效溝通的組織能夠得到很好的發(fā)展,但是反過來(lái),內(nèi)部溝通不暢的組織將會(huì)出現(xiàn)很多的問題。結(jié)對(duì)編程是一種非常有效的改善溝通的方法,一對(duì)編程人員是協(xié)作過程中最基本的溝通單元,而結(jié)對(duì)編程的中心思想就是組內(nèi)成員以及組與組之間的成員相互協(xié)作,相互溝通。這種以小組為單位共進(jìn)退的方式取代了過去以個(gè)人為中心的競(jìng)爭(zhēng)。有利于成績(jī)差,動(dòng)手能力差的學(xué)生樹立自尊和自信,同時(shí)也有利于成績(jī)好,動(dòng)手能力強(qiáng)的學(xué)生樹立助人為樂的自豪感。通過相互之間具體的合作,從而順利地建立起兩者之間良好的人際關(guān)系。
2.4極限編程有利于提高工作效率,樹立成就感
在極限編程的過程中,提倡簡(jiǎn)單設(shè)計(jì)的實(shí)踐。在開發(fā)過程中要求過多的設(shè)計(jì)文檔會(huì)使學(xué)生浪費(fèi)太多的時(shí)間在上面,而且設(shè)計(jì)文檔沒有不修改的,可能在項(xiàng)目結(jié)束的時(shí)候,設(shè)計(jì)文檔早已面目全非了。
在傳統(tǒng)的畢業(yè)設(shè)計(jì)中,學(xué)生往往是按照瀑布式模型進(jìn)行開發(fā),測(cè)試會(huì)全部放在編碼完成之后,其中包括單體測(cè)試,集成測(cè)試,功能測(cè)試以及驗(yàn)收測(cè)試等等,而且大多數(shù)的測(cè)試是通過手工來(lái)完成的。所以依據(jù)經(jīng)驗(yàn)來(lái)說(shuō),如果編碼使用了20%的時(shí)間,測(cè)試至少要用掉40%以上的時(shí)間。而且在測(cè)試的過程中,還有好多問題需要修改,這也是導(dǎo)致測(cè)試耗費(fèi)了大量時(shí)間的原因。而在極限編程中,測(cè)試是通過編寫測(cè)試代碼來(lái)自動(dòng)化完成的。特別是在一些面向?qū)ο蟮木幊汰h(huán)境中,我們可以使用一些工具軟件來(lái)快速、有效地進(jìn)行單元測(cè)試。而且編寫這些單元測(cè)試代碼甚至可以是在正式編碼之前。每一次修改了程序之后,都要運(yùn)行測(cè)試代碼來(lái)看程序是否有問題。而且對(duì)于程序的集成,極限編程提倡的是持續(xù)集成,也就是不斷地將編寫好的通過了單元測(cè)試的代碼模塊集成到編寫完畢的系統(tǒng)中,在那里可以直接進(jìn)行集成測(cè)試,從而保證代碼不會(huì)影響到整個(gè)系統(tǒng)。這樣方便學(xué)生及時(shí)地發(fā)現(xiàn)并修改出現(xiàn)的錯(cuò)誤。而自動(dòng)化測(cè)試工具保證了學(xué)生的工作效率,避免了過多重復(fù)的工作,從而能極大地樹立成就感。
3如何有效地在畢業(yè)設(shè)計(jì)中應(yīng)用極限編程
3.1合理設(shè)計(jì)結(jié)對(duì)[4]
團(tuán)隊(duì)進(jìn)行結(jié)對(duì)設(shè)計(jì)時(shí)的目標(biāo)主要是為了改進(jìn)溝通質(zhì)量。不同的團(tuán)隊(duì)有著不同的溝通問題,只有找到這個(gè)溝通問題,才能夠?qū)ΠY下藥。良好的結(jié)對(duì)設(shè)計(jì),可以減少人員因素對(duì)項(xiàng)目的影響。
設(shè)計(jì)結(jié)對(duì)的含義是某一模塊的設(shè)計(jì)由雙人完成,這里的設(shè)計(jì)并不是大規(guī)模的軟件設(shè)計(jì),而是某個(gè)特性在編碼之前的設(shè)計(jì),這種設(shè)計(jì)的特點(diǎn)是持續(xù)的時(shí)間很短,但是對(duì)于整個(gè)代碼的質(zhì)量而言非常重要,因?yàn)槲覀冃枰WC設(shè)計(jì)符合架構(gòu)的原則,以及設(shè)計(jì)的靈活性,一致性等等,還需要保證設(shè)計(jì)的性能和速度。而某個(gè)特性在設(shè)計(jì)完成并進(jìn)入編碼之后,這部分特性就已經(jīng)確定下來(lái)了。因此這種小規(guī)模的設(shè)計(jì)往往是軟件開發(fā)中比較重要的細(xì)微點(diǎn)。在設(shè)計(jì)上配置雙人,能夠有效地提高代碼質(zhì)量。這種結(jié)對(duì)的思路是把成本花在關(guān)鍵的部件上,但是小規(guī)模設(shè)計(jì)結(jié)對(duì)的具體表現(xiàn)往往是兩個(gè)人對(duì)某個(gè)問題的某種看法,并不能以代碼或是模型的形式來(lái)體現(xiàn),對(duì)非編碼者一方的約束比較小,而代碼實(shí)現(xiàn)很可能和設(shè)計(jì)有所出入,這樣,非實(shí)現(xiàn)者也難以獲得這方面的知識(shí)。這種方式如果單獨(dú)使用,容易演變成一種形式,效果并不是很好。因此,我們需要其他結(jié)對(duì)方式的配合。
結(jié)對(duì)設(shè)計(jì)時(shí)一般而言應(yīng)該遵循以下幾點(diǎn)。
(1) 以模塊為單位,即是一組人負(fù)責(zé)一個(gè)模塊的設(shè)計(jì)、編碼。
(2) 盡量將性格融合的,技術(shù)互補(bǔ)的結(jié)對(duì)。并且在不同階段,有針對(duì)性的組合,可以起到很好的作用。比如,一個(gè)嚴(yán)謹(jǐn),謹(jǐn)慎的人,配上一個(gè)喜歡創(chuàng)新的人。
(3) 不區(qū)分兩者的地位,兩者處于一個(gè)平等的地位。
(4) 工作時(shí),兩人必須使用一臺(tái)電腦,并確保兩人有足夠多的時(shí)間一起工作。
(5) 將畢業(yè)設(shè)計(jì)中的難點(diǎn),分配給搭配默契并且經(jīng)驗(yàn)豐富的組去負(fù)責(zé)。
(6) 在設(shè)計(jì)、編碼、測(cè)試前雙方先達(dá)成共同意見,任務(wù)出錯(cuò)或不能完成,應(yīng)由雙方共同負(fù)責(zé),不能相互指責(zé)。兩人意見不同時(shí),由上司幫助解決。
(7) 編碼前務(wù)必先進(jìn)行測(cè)試。
(8) 每次測(cè)試必需采用其他的結(jié)對(duì)人員,而不是負(fù)責(zé)編碼的結(jié)對(duì)人員,并給出完整的測(cè)試文檔。
3.2合理分配任務(wù)
采用極限編程進(jìn)行畢業(yè)設(shè)計(jì)時(shí),通常由指導(dǎo)老師或者是項(xiàng)目組中技術(shù)和管理能力比較強(qiáng)的學(xué)生對(duì)任務(wù)進(jìn)行分解。分解時(shí)必需考慮整個(gè)項(xiàng)目的復(fù)雜度和時(shí)間周期,盡量將任務(wù)復(fù)雜,周期長(zhǎng)的任務(wù)分配給能力強(qiáng)的結(jié)對(duì)小組,而將任務(wù)簡(jiǎn)單,周期短的分配給能力較弱的結(jié)對(duì)小組。避免由于學(xué)生本身能力的局限而導(dǎo)致任務(wù)無(wú)法進(jìn)行。
對(duì)于劃分好的任務(wù),要仔細(xì)地分析它的難點(diǎn)和工作量,這些東西都是任務(wù)分配必須的約束條件。 一定要結(jié)合技術(shù)含量、相關(guān)知識(shí)的學(xué)習(xí)難度來(lái)深入考慮,切不可以表面數(shù)據(jù)(代碼行/頁(yè)數(shù)/功能點(diǎn)數(shù))來(lái)評(píng)估。任務(wù)分割完畢之后,就可以開始任務(wù)分配。
任務(wù)分配的總則是減少對(duì)交流的依賴。分配過程中,盡量把高耦合的任務(wù)分給同一個(gè)成員,避免把過多過瑣碎的無(wú)關(guān)任務(wù)分給同一個(gè)成員。此外,分配任務(wù)時(shí),還應(yīng)當(dāng)把任務(wù)相應(yīng)的知識(shí)/技術(shù)要點(diǎn)列表,連同其他任務(wù)資料一起提交給成員,以便成員能夠提前做好準(zhǔn)備,做到胸有成竹,以避免不必要的技術(shù)風(fēng)險(xiǎn)。如果工作量實(shí)在太大,或是畢業(yè)設(shè)計(jì)要求時(shí)間太緊,不得不把高耦合任務(wù)甚至同一任務(wù)分給多個(gè)成員負(fù)責(zé),這時(shí)候就要特別注意成員間工作相關(guān)知識(shí)的同步、信息的交流的問題。選擇幾個(gè)沒有結(jié)怨的人,讓這幾個(gè)人坐在一起工作,就能使他們方便地交流。
參考文獻(xiàn):
[1] Kent Beck. Extreme Programming Explained:Embrace Change Pearson[J]. 2003.
[2] Laurie Williams, Robert Kessler. Pair Programming Illuminated Addison Wesley[M].Pearson.
[3] 呂君可.合作學(xué)習(xí)在計(jì)算機(jī)畢業(yè)設(shè)計(jì)中的應(yīng)用[J]. 麗水學(xué)院學(xué)報(bào),2005,(4) .
[4] 林星.活用 XP:實(shí)戰(zhàn)結(jié)對(duì)[Z]. 2003,(9). www.ibm.com/developerworks/cn .
收稿日期:2007-03-20
作者簡(jiǎn)介:劉竹松(1979-),男,湖南邵陽(yáng)人,助教,碩士研究生,主要研究方向?yàn)橛?jì)算機(jī)網(wǎng)絡(luò)與分布式系統(tǒng)。
李振坤(1949-),男,廣東廣州人,教授,廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院副院長(zhǎng)、計(jì)算機(jī)工程研發(fā)中心主任,主要研究方向?yàn)橛?jì)算機(jī)網(wǎng)絡(luò)與分布式系統(tǒng)。