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