高 云
[摘要]極限編程的核心價值中的溝通對于軟件項(xiàng)目管理有著極其重要的意義。論述極限編程中的溝通方式,并探討作用。
[關(guān)鍵詞]極限編程軟件工程溝通
中圖分類號:TP3文獻(xiàn)標(biāo)識碼:A文章編號:187t-7597(2009)1020064-01
一、極限編程
隨著軟件行業(yè)的飛速發(fā)展,原有的軟件開發(fā)方法已不能完全適應(yīng)種類繁多的軟件項(xiàng)目。這些軟件開發(fā)方法需要繁雜的開發(fā)文檔,過于嚴(yán)格的項(xiàng)目流程,而這對于規(guī)模較小的項(xiàng)目來說卻成為沉重的負(fù)擔(dān)。規(guī)模較小的項(xiàng)目本身開發(fā)工作量并不多,這使項(xiàng)目開發(fā)人員不愿意多花精力來建立文檔和對項(xiàng)目進(jìn)行管理。項(xiàng)目進(jìn)行過程中,難以預(yù)計的需求變化對規(guī)模較小的項(xiàng)目更是常事,開發(fā)人員不得不多次調(diào)整項(xiàng)目需求以及已完成的項(xiàng)目內(nèi)容,這使項(xiàng)目的。開發(fā)人員常常有做事目標(biāo)不明確,事倍功半之感覺。這對于項(xiàng)目的開發(fā)進(jìn)程起了負(fù)面影響作用。
為了解決以上的項(xiàng)目管理問題,一批業(yè)界專家在2001年創(chuàng)立了敏捷聯(lián)盟,并提出了一些可以讓項(xiàng)目團(tuán)隊(duì)具有快速工作、響應(yīng)變化能力的價值觀和原則。敏捷開發(fā)過程的方法有很多種,其中最重要的是極限編程(Extreme Programming,簡稱XP)[1]。
(一)極限編程的概念
極限編程(Extreme Programming,xp)適用于輕量級開發(fā)。它以客戶的需求作為項(xiàng)目的最終目標(biāo),并保證項(xiàng)目團(tuán)隊(duì)中的所有活動均以此為基礎(chǔ)。
極限編程強(qiáng)調(diào)把需求細(xì)化,劃分為若干需求故事,這些需求故事的內(nèi)容簡單明了,工作量較少,開發(fā)周期短,開發(fā)人員可以明確給出完成所需的時間。在完成這些需求故事的同時,測試代碼也相應(yīng)完成,并用來對相應(yīng)的需求故事進(jìn)行測試,從而盡快發(fā)現(xiàn)問題。
極限編程的時間進(jìn)程為一個個迭代周期。每個迭代周期中,客戶會提出一批需求故事,開發(fā)人員接受這些需求故事并估算花費(fèi)時間,編寫其測試和代碼,將代碼通過測試,重構(gòu)系統(tǒng),記錄結(jié)果并完成版本控制。完成這些任務(wù)模塊并進(jìn)行測試和集成,這樣盡快生成相應(yīng)的項(xiàng)目版本以便客戶使用,幫助客戶更好地完成項(xiàng)目。
極限編程強(qiáng)調(diào)項(xiàng)目團(tuán)隊(duì)中所有人員之間的合作,關(guān)注彼此之間的溝通交流和反饋。項(xiàng)目的進(jìn)展在持續(xù)的溝通中向著最終目標(biāo)穩(wěn)步前進(jìn)。
(二)極限編程的十二種方法
1、規(guī)劃策略;2、結(jié)對編程;3、測試:4、重構(gòu);5、簡單設(shè)計;6、代碼集體所有權(quán);7、持續(xù)集成;8、現(xiàn)場客戶;9、小型發(fā)布;10、每周40小時工作制;11、編碼規(guī)范;12、系統(tǒng)隱喻。
(三)極限編程的核心價值
極限編程中有四個核心價值,即溝通、簡單、反饋和勇氣[2]。
極限編程在項(xiàng)目中體現(xiàn)了以人為本的精神,極力地幫助項(xiàng)目各方互相理解,通過種種方法激發(fā)人的潛力,幫助所有人減輕思想負(fù)擔(dān),高度關(guān)注項(xiàng)目本身的實(shí)現(xiàn)。
二、極限編程中的溝通
極限編程項(xiàng)目首先擁有一個小規(guī)模但擁有各種不同職能的成員的項(xiàng)目團(tuán)隊(duì),以項(xiàng)目完成為項(xiàng)目團(tuán)隊(duì)的共同目標(biāo)。作為極限編程的核心價值,第一個就是溝通,這說明溝通成功與否直接決定項(xiàng)目的順利完成。
(一)開發(fā)場所
為了保證項(xiàng)目團(tuán)隊(duì)充分掌握需求,保證所有人員對項(xiàng)目需求有充分的理解,開發(fā)場所必須是一個開放的場所,項(xiàng)目的所有參與者一起在這里工作,他們屬于同一個團(tuán)趴。開發(fā)場所的墻壁上應(yīng)張貼著與項(xiàng)目有關(guān)的圖表以及相關(guān)的文字內(nèi)容,幫助團(tuán)隊(duì)成員了解項(xiàng)目進(jìn)度。每個成員可以根據(jù)項(xiàng)目進(jìn)度制定工作計劃,并一起探討所遭遇問題的解決方案。所有與項(xiàng)目有關(guān)的意見和變化都在這個場所以第一時間傳達(dá)給所有參與者,所有人的交流都是面對面的。開發(fā)場所中應(yīng)該必備用于交流的工具,如紙張、卡片和白板等等。
(二)現(xiàn)場客戶
項(xiàng)目的順利完成離不開客戶的合作,只有開發(fā)出滿足客戶需求的軟件,項(xiàng)目才是成功的。項(xiàng)目的需求其實(shí)只有客戶自己真正了解,因此項(xiàng)目團(tuán)隊(duì)中應(yīng)包含一名可以經(jīng)常在開發(fā)場所與項(xiàng)目團(tuán)隊(duì)一起工作的客戶?,F(xiàn)場客戶提出需求故事,并將故事劃分出優(yōu)先級,然后根據(jù)開發(fā)人員給出故事的費(fèi)用從而做出決策。
現(xiàn)場客戶必須精通項(xiàng)目的業(yè)務(wù)流程,具有豐富的業(yè)務(wù)經(jīng)驗(yàn)。同時,他還必須具有項(xiàng)目的決策權(quán)限,能夠?qū)?xiàng)目的需求決定取舍。往往與項(xiàng)目有關(guān)的客戶人數(shù)不止一人,他們對項(xiàng)目的需求應(yīng)匯總到現(xiàn)場客戶這里,經(jīng)整理后再提交給開發(fā)團(tuán)隊(duì),使項(xiàng)目的需求不至于出現(xiàn)矛盾之處。
現(xiàn)場客戶對軟件開發(fā)的了解水平有高有低,有的現(xiàn)場客戶對技術(shù)不夠了解,或是不善于描述需求故事,從而屢屢修改需求故事而沒有考慮帶來的影響。對于這樣的現(xiàn)場客戶,可與其交流項(xiàng)目的架構(gòu)和開發(fā)技術(shù),告知其需求修改可能產(chǎn)生的損失,并通過需求故事的調(diào)整和工作流程的再造來解決問題。有的客戶希望掌控項(xiàng)目的技術(shù)細(xì)節(jié),這可能會對開發(fā)人員的技術(shù)決策帶來一定的影響。對于這樣的客戶,開發(fā)團(tuán)隊(duì)?wèi)?yīng)滿足其,解的愿望,在制定需求故事時應(yīng)全面考慮其意見。讓客戶在每日例會中充分了解項(xiàng)目的進(jìn)展和問題。強(qiáng)烈的參與意識將樹立客戶對項(xiàng)目的信心,在項(xiàng)目出現(xiàn)問題時也會積極需求解決方案,這對項(xiàng)目的順利進(jìn)展起到不可忽視的推動作用。
現(xiàn)場客戶不僅要和開發(fā)人員一起制定需求故事,還需要保證每個需求故事都有驗(yàn)收測試用例進(jìn)行驗(yàn)證。極限編程中的測試包括單元測試和驗(yàn)收測試?,F(xiàn)場客戶所負(fù)責(zé)的是驗(yàn)收測試?,F(xiàn)場客戶可以自己編寫測試用例,也可以由現(xiàn)場客戶所在單位的人員來編寫測試用例。當(dāng)然,現(xiàn)場客戶也可以直接讓項(xiàng)目團(tuán)隊(duì)的開發(fā)人員來編寫驗(yàn)收測試用例。驗(yàn)收測試的結(jié)果直接為現(xiàn)場客戶提供項(xiàng)目決策依據(jù)。
(三)需求故事卡片
舊有的軟件項(xiàng)目中用大量的文檔來記錄項(xiàng)目需求及進(jìn)展,保證項(xiàng)目順利進(jìn)行。有必要編寫好和維護(hù)好項(xiàng)目文檔,但時間的要求和需求的變化使其變得難以保證。開發(fā)人員需要在完成編碼任務(wù)的同時完成文檔的編寫和維護(hù),而規(guī)模不大的項(xiàng)目中的編碼工作量不大,開發(fā)人員不愿意去花費(fèi)過多的時間在文檔上面。
所謂需求故事是指項(xiàng)目的基本需要所分解成的小的、重耍的用戶故事。它由客戶提出,并被開發(fā)人員所接受,作為開發(fā)和測試的依據(jù)。客戶將一個個需求故事寫在一張張卡片上,內(nèi)容包括需求故事的名稱和需求故事的業(yè)務(wù)邏輯,然后將其按優(yōu)先級排列,交給開發(fā)人員去處理。當(dāng)需求發(fā)生變化時,客戶只需要重新制作需求故事卡片,并被開發(fā)人員認(rèn)可就可以了?,F(xiàn)有的需求故事卡片內(nèi)容就是當(dāng)前的項(xiàng)目需求,相比項(xiàng)目文檔的維護(hù)而言。這樣的工作量減少很多。
(四)每日例會
項(xiàng)目進(jìn)行離不開會議交流,開發(fā)人員在會議中匯報自己的工作并提出需要解決的問題,但會議往往會間隔一段時間后召開,間隔時間或長或短,開發(fā)人員不能及時溝通,如果采取個別交流的方式則無法讓全體開發(fā)人員了解。
開發(fā)人員應(yīng)該在完成自己任務(wù)的同時,了解其他開發(fā)人員所做的工作,并學(xué)習(xí)其他開發(fā)人員所使用的技術(shù)方法,以及幫助其他開發(fā)人員解決
工作中的難題,從而提高開發(fā)效率。每日例會滿足了這樣的需求。
每日例會的時間較短,所有開發(fā)人員報告昨天的工作成就、獲得的成果和今天的工作計劃,提出自己面對的困難。不能在例會上解決的問題將放到會后進(jìn)行個別討論。每日例會避免了開發(fā)人員各自為營、相互脫節(jié)的局面。在會上,所有的開發(fā)人員必須暢所欲言,誠實(shí)地匯報自己的工作現(xiàn)狀,同時不避諱自身的缺陷,將工作中的難題公開并向項(xiàng)目團(tuán)隊(duì)尋求盡快解決的方法,達(dá)到真正的有效溝通。實(shí)際上,遇到難題時,開發(fā)人員最好應(yīng)該立即尋求幫助,既然整個項(xiàng)目團(tuán)隊(duì)在一個開放的工作環(huán)境中工作,那么所有人都會立即了解他的問題并援助,大大節(jié)約了開發(fā)的時間。
(五)結(jié)對編程
以往的項(xiàng)目通常會把分解的各模塊任務(wù)下發(fā)給單個開發(fā)人員完成,這樣會出現(xiàn)以下問題:每個開發(fā)人員的技術(shù)水平不同,對項(xiàng)目的理解也會存在不同,這會導(dǎo)致開發(fā)模塊與需求的差異,盡管經(jīng)過修改可以達(dá)到目標(biāo),但走了彎路,花費(fèi)了時間和精力。如果遇到難題而沒有他人的幫助,單個開發(fā)人員往往會花費(fèi)更多的時間來解決。個人開發(fā)有可能會受自身的種種因素影響,如精力不夠集中、時間安排不合理等等,使得開發(fā)計劃受到影響。
結(jié)對編程使得參與編程的開發(fā)人員必須共同熟悉所開發(fā)的內(nèi)容,對所涉及的需求達(dá)成共識,共同完成設(shè)計決策。結(jié)對編程的工作方式使得開發(fā)人員更全面地了解項(xiàng)目需求,更快地達(dá)到目的,同時提高了個人的工作效率,加快了項(xiàng)目開發(fā)速度。同時,經(jīng)過結(jié)對編程人員之間的審查后的代碼相比單獨(dú)編程的代碼而言,具有較高的規(guī)范性和準(zhǔn)確程度。
因?yàn)轫?xiàng)目團(tuán)隊(duì)中的編程人員的結(jié)對極有可能發(fā)生變化,原有結(jié)對編程人員將共同完成的需求的理解以及技術(shù)方法傳播給項(xiàng)目團(tuán)隊(duì)中的其他人員,促使更多的開發(fā)人員了解項(xiàng)目需求,有利于開發(fā)人員之間的溝通。
(六)編碼標(biāo)準(zhǔn)
基于極限開發(fā)的共同擁有代碼和結(jié)對編程的方法,項(xiàng)目的代碼為項(xiàng)目團(tuán)隊(duì)中所有成員所擁有并可以進(jìn)行修改。因此,項(xiàng)目按照規(guī)范的編碼標(biāo)準(zhǔn)來開發(fā),提高了代碼的質(zhì)量,可以方便所有開發(fā)人員理解和修改項(xiàng)目代碼,這對于開發(fā)人員之間的溝通也是極為有利的。
三、結(jié)束語
有效溝通是影響軟件項(xiàng)目質(zhì)量乃至成敗的關(guān)鍵因素之一。極限編程方法中的所強(qiáng)調(diào)的溝通對項(xiàng)目管理具有積極的意義。無論是否采用極限編程方法-我們在軟件項(xiàng)目中都應(yīng)高度關(guān)注項(xiàng)目相關(guān)人員之間的有效溝通,在滿足客戶的需求之上提高軟件質(zhì)量,減少時間和消耗。