天天看點

淺談極限程式設計(更新中)

1.什麼是極限程式設計

①極限程式設計外文名叫做:ExtremePrograming, 簡稱XP,由KentBeck在1996年提出的,是一種軟體工程方法學,是靈活開發中可能是最富有成效的幾種方法學之一。(PS:靈活開發是以使用者的需求進化為核心,采用疊代,循序漸進的方法進行軟體開發。)極限程式設計和傳統方法學的本質不同于在于他更強調可适應性,及面對困難的随機應變能力。當然,極限程式設計也有自身的缺點,并不是所有的軟體開發過程都能采用極限程式設計。本文主要講述極限程式設計的優點。

2.為什麼會出現極限程式設計。

在傳統的軟體工程過程中,方法文檔量過于“沉重”繁瑣,是以,人們必然要尋找相對而言輕量級的方法論。但在當時靈活方法論還并未出現,人們對輕量級的方法論的觀念僅存在于”主觀臆斷“的階段,認為一個完善的軟體必然需要絕對完善的前期準備工作。思想是對的,但是實際的開發過程并不很令人滿意。基于這一點,1993年到1999年用一種極限程式設計的思想誕生于Kent團隊的一個項目中。随後2001年2月11号到13号,一個劃時代聯盟,靈活聯盟成立。在軟體工程界最有影響力的非營利性組織之一。

3.極限程式設計包含什麼内容。

①價值觀

溝通(Communication)

軟體工程開發過程基本都是一個團隊工作,極限程式設計非常強調團隊之間進行采用合适的方式進行面對面的交流,比如有一塊白闆,或者其他能表達想法的繪畫工具。

簡單(Simplicity)

軟體開發人員有時會”眼高手低“,在做需求工程時沒有做到位,在coding的過程中想要為系統設定過于多的功能,造成非常複雜的局面,以至于導緻後期軟體傳遞時客戶的反感,維護費用的高昂,甚至項目報廢的局面。是以設計的時候不要天馬行空,僅僅設計滿足你的需求的功能即可。

回報(FeedBack)

通過不斷的回報,你的團隊可以知道并修複軟體存在的問題,不斷地調整你們團隊最終的産品。

勇氣(Courage)

這裡說的勇氣是團隊中每一個成員,在軟體開發的過程中會遇到各種各樣的問題,我們應該有勇氣去根據自己的判斷去解決面臨的問題,比如我們要有勇氣提出管理層的不足,我們要有勇氣去停止我們覺得是是錯誤的開發等。不能僅僅作為一個”碼農“,而是一個有判斷力的程式員。

尊重(Respect)

團隊成員之間需要互相尊重,互相了解,才能在項目開發過程中更好更高效的解決項目問題

實踐

XP的核心是下面列出的一組互相關聯的團建開發實踐,每個實踐本身都可以單獨的實行,但是在真正的開發過程中發現,這些實踐中間具有互相促進的效果,是以最好放在一起進行。

面對面(Sit Together)

”溝通“是極限程式設計的五個價值觀之一,是以大多數人同意面對面交流是最好的交流方式之一,進行無障礙的交流。

團隊意識(Whole Team)

具有産品所需角色的跨職能人員組成一個團隊,每個人都在一個團隊中扮演自己角色,既然是為了完成共同的目标,是以團隊意識是十分重要的。

資訊工作場所(Informative Workplace)

我們團隊所做的每一步都要對團隊相關方做到透明,設立資訊輻射牆更新實時資訊。

精力充沛的工作(Energized Word)

精力充沛的工作意味着你能夠在工作的時候完全投入進去,相對對應的,你不應該過度工作你自己,也不應該讓别人過度工作你,保證自己良好健康的身體精神狀态,積極樂觀的生活态度。

結伴工作(Pair Programming)

之前我對此還很不了解,一個工作,一個在旁邊看,這樣的結伴是不是優點不太公平,但實際上這樣的搭配工作能夠大大提高工作效率,并且大大減少後期DeBug的過程。

測試驅動開發(Test-Driven Development)

以測試作為開發過程的中心, 它要求在編寫任何産品代碼之前, 首先編寫用于定義産品代碼行為的測試, 而編寫的産品代碼又要以使測試通過為目标。測試驅動開發作為極限 程式設計思想的一種主要實踐, 可以有效地讓程式開發人員開發出更高品質的、經過完整測試的程式。

每周周期(Weekly Cycle)

極限程式設計中,團隊在一周的第一天開會以反映迄今為止的進展,客戶選擇他們希望在那一周傳遞的層次,團隊決定他們将如何處理這些程序。到本周結束,團隊的目标就是實作客戶所選擇的軟體階段的測試工作。

季度周期(Quarterly Cycle)

季度周期目的是在整個項目的背景下保持每周周期的詳細工作。客戶根據特定季度内所需的功能為團隊制定總體計劃,這開闊了團隊的視野,還幫助客戶與其他可能需要了解功能何時可用的利益相關者合作。

懈怠(Slack)

”懈怠“的意思是,在團隊每周的開發工作中加入一些簡單,低級的工作量,也就是說能”緩口氣“。如果團隊更重要的任務時間耽誤了,那麼就必須将這些低級任務跳過,轉入重要的工作中去。

十分鐘建造(Ten-Minute Build)

十分鐘構件的目标就是在十分鐘内自動建構整個系統并運作所有測試。XP的創始人提出了一個十分鐘的時間架構,如果有一個團隊有比這個實踐更長的建構,那麼它就不太可能被頻繁的運作,進而引入了更長的錯誤間隔時間。通過這種鑒别方法,貫徹到整個開發過程中,就可以為開發任務節省很多寶貴的時間。

持續內建(Continuous Integration)

持續內建就是當代碼更改或者添加到更大的代碼庫中,立即對其進行測試,如果出了問題,那麼問題可以很快鎖定到新的代碼塊中,使得測試任務更加高效,通過這種持續內建的手段可以更快更準确的發現并修改Bug。

增量設計(Incremental Design)

增量設計就是在做一個項目之前預先做一點工作,以此來大概了解整個項目的基本情況,然後在傳遞特定功能時深入了解項目的各個細節。就好像我們學一門新課,上課之前先做好預習工作,對下節課需要學的内容做一個展望,那麼我們在聽課的時候就能更直接的學習到我們想學的内容,減少了鑽牛角尖的可能,節省了很多時間。

4.個人學習心得。

總的來說,經曆過過上學期《軟體工程導論》的學習,對軟體工程這個概念我也有了更深入的了解。之前以為的軟體工程就是有個人有想法,然後這個人就開發了自己的軟體。現在看來,我當時的想法也是很天真。通過撰寫這篇部落格,我學習了”極限程式設計“這種軟體開發的方法,增加了我對軟體過程每個環節的細節的了解,客戶需求是什麼,公司環境是什麼,個人素質有哪些等等。希望在這學期的《軟體開發與創新》和《軟體工程Ⅰ》這些課中學習到更多的軟體開發的流程細節,提高自己軟體開發的素質。

繼續閱讀