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