敏捷掃盲之XP(Extreme Programming)篇

背景

常常被很多朋友問到關(guān)于XP的問題泌神,如什么是XP力穗,什么又是工程實(shí)踐,跟敏捷啥關(guān)系等等這樣的問題局义。相信這些看似簡單的問題喜爷,有很多人抱有同樣的疑問冗疮。

本文旨在幫助工程師了解XP的知識(shí)點(diǎn),更深入的話題請參考擴(kuò)展閱讀檩帐,對某一話題的辯論請移步至相應(yīng)辯論區(qū)的文章术幔,本文只做基本解釋,不做更深入探討湃密。如果有陳述謬誤诅挑,請?jiān)谠u論區(qū)注明,非常感謝泛源。

什么是XP拔妥?

XP是Extreme Programming的縮寫,中文譯為極限編程俩由,是Kent Beck[1]等人在上世紀(jì)九十年代發(fā)明的一種軟件工程方法毒嫡。極限編程是一種強(qiáng)調(diào)團(tuán)隊(duì)工作的工作方式,它是多種敏捷方式的一種幻梯。與Scrum不同的是兜畸,Scrum是一種工作方式的框架,從組織到團(tuán)隊(duì)的設(shè)計(jì)碘梢,而XP關(guān)注的是具體的工程技術(shù)實(shí)踐咬摇。XP旨在通過工程實(shí)踐的合理搭配使用,使開發(fā)者們能夠自信地響應(yīng)客戶需求煞躬。強(qiáng)調(diào)反饋環(huán)機(jī)制肛鹏,客戶與研發(fā)團(tuán)隊(duì)之間的反饋環(huán),測試與開發(fā)的反饋環(huán)恩沛,具體代碼實(shí)現(xiàn)跟單元測試之間的反饋環(huán)在扰,結(jié)對之間的反饋環(huán)。極限編程認(rèn)為在軟件研發(fā)過程中雷客,變化是無所不在的芒珠,人們不應(yīng)回避變化,而應(yīng)該適應(yīng)變化搅裙,通過對反饋的檢視皱卓,去適應(yīng)變化。

在XP中部逮,常見的工程實(shí)踐有:

測試驅(qū)動(dòng)開發(fā) (TDD: Test-Driven Development)

也有人稱之為單元測試先行娜汁。這是一種編程方式,在傳統(tǒng)的瀑布軟件開發(fā)中兄朋,人們習(xí)慣把單元測試當(dāng)做測試的一部分掐禁,認(rèn)為編程就是指產(chǎn)品代碼的實(shí)現(xiàn),只有在產(chǎn)品代碼實(shí)現(xiàn)之后才能編寫單元測試去驗(yàn)證代碼的實(shí)現(xiàn),在編程的過程中穆桂,人們更關(guān)注實(shí)現(xiàn)的部分宫盔,即所謂的HOW,單元測試是后置的享完。但是,在TDD中有额,單元測試被認(rèn)為是描述單元需求(大部分是函數(shù)的需求)一種手段般又,測試用例成為一種自動(dòng)化的單元測試代碼,首先通過單元測試確定要實(shí)現(xiàn)什么巍佑,即所謂WAHT的部分茴迁,再實(shí)現(xiàn)產(chǎn)品代碼,即HOW的部分萤衰,產(chǎn)品代碼的編寫始終以需求來驅(qū)動(dòng)堕义。

測試驅(qū)動(dòng)開發(fā)的原理是:

  • 沒有單元測試,不實(shí)現(xiàn)任何功能代碼脆栋;
  • 只編寫僅能代表一種失敗情況的測試代碼倦卖;
  • 只編寫恰好能通過單元測試的產(chǎn)品代碼。

驗(yàn)收測試驅(qū)動(dòng)開發(fā)(ATDD)

ATDD是Acceptance Test-Driven Development的縮寫椿争。很多的工程師把它理解為自動(dòng)化測試驅(qū)動(dòng)開發(fā)(Automatic Test Driven Development)怕膛,因?yàn)樵诤芏喙驹趶?qiáng)調(diào)測試的自動(dòng)化,其實(shí)這兩者之間并沒有太大的聯(lián)系秦踪。ATDD強(qiáng)調(diào)的也是需求的澄清褐捻,通過舉例的手段對用戶故事需求進(jìn)行澄清,再接著讓這些例子變成一個(gè)個(gè)的測試用例椅邓,在功能需求被實(shí)現(xiàn)后柠逞,用這些測試用例去驗(yàn)證功能實(shí)現(xiàn)是否滿足需求,而這需求的澄清和測試用例的實(shí)現(xiàn)是前置在具體的開發(fā)實(shí)現(xiàn)之前的景馁。因?yàn)槭峭ㄟ^舉例的形式來描述功能的需求說明板壮,也稱之為SbE(Specification by Example,中文譯為實(shí)例化需求)裁僧,其同樣要求測試前置个束。可以比較著TDD的概念來理解聊疲,TDD是對函數(shù)級(jí)別的需求說明茬底,再驅(qū)動(dòng)實(shí)現(xiàn),而ATDD是對用戶故事的級(jí)別的需求說明获洲,分析阱表,再驅(qū)動(dòng)實(shí)現(xiàn),他們都要求測試前置,即關(guān)注WHAT最爬。


而測試自動(dòng)化是一種縮短反饋周期涉馁,實(shí)現(xiàn)回歸測試(Regression Test)的手段。結(jié)合著持續(xù)集成系統(tǒng)爱致,可以實(shí)現(xiàn)一鍵自動(dòng)化的集成與部署烤送。

結(jié)對編程

結(jié)對編程(Pair Programming),即兩個(gè)人一起編寫代碼糠悯,共享顯示器及鍵盤帮坚,一位同事?lián)蔚氖莕avigator的角色,另一位是driver的角色互艾。結(jié)對編程的前提是代碼集體所有制(Collective Code Ownership)试和,即代碼為團(tuán)隊(duì)所共有,團(tuán)隊(duì)為代碼的質(zhì)量共同承擔(dān)責(zé)任纫普。一般人理解結(jié)對編程是兩個(gè)人干一件事阅悍,是對人力資源的浪費(fèi),實(shí)則不然昨稼。因?yàn)椋?/p>

  • 結(jié)對編程可以及時(shí)的完成結(jié)對代碼審查节视,減少代碼的缺陷率
  • 結(jié)對編程可以幫助人員的能力提升
  • 結(jié)對編程可以幫助攻關(guān)
  • 結(jié)對編程可以提高編程工作的專注度

想了解更多結(jié)對編程的內(nèi)容,可以參考之前的文章:關(guān)于結(jié)對開發(fā)的那些事兒

持續(xù)集成 (Continuous Integration)

持續(xù)集成在XP的實(shí)踐中占據(jù)著非常重要的位置悦昵。首先要了解什么是集成肴茄,然后再討論持續(xù)的概念。集成無非就是收集但指、打包和驗(yàn)證的過程寡痰,這就是集成的概念。軟件的代碼由不同的人編寫棋凳,需要將所有的代碼從不同的位置收集到一處拦坠,然后進(jìn)行編譯,這就是一般SCM的概念(即軟件配置管理)剩岳,將編譯出來的二進(jìn)制文件部署到驗(yàn)證環(huán)境中贞滨,進(jìn)行軟件的驗(yàn)證,這就是一般傳統(tǒng)理解的測試[2]的概念拍棕。 為了讓產(chǎn)品可以持續(xù)地交付到客戶那里晓铆,從客戶處獲得客戶的反饋,就有必要讓產(chǎn)品可以持續(xù)地集成绰播,加快集成的頻率骄噪,縮短集成的周期,這就是持續(xù)的概念蠢箩。為了讓集成能夠持續(xù)地運(yùn)轉(zhuǎn)链蕊,我們就有了持續(xù)集成系統(tǒng)事甜,如Jekins幫助我們管理一個(gè)個(gè)持續(xù)集成的任務(wù),Git或subversion做軟件的配置管理滔韵,用自動(dòng)化的編譯工具對代碼進(jìn)行打包(因不同的開發(fā)語言而不同)逻谦,自動(dòng)化的單元測試,自動(dòng)化的驗(yàn)收測試陪蜻。提供一個(gè)清晰快速的反饋機(jī)制等等邦马。進(jìn)而可以演化為通過持續(xù)集成系統(tǒng)可以對整個(gè)開發(fā)工作進(jìn)行可視化,精益方法運(yùn)用到持續(xù)集成的工作中囱皿,指導(dǎo)項(xiàng)目的管理等等勇婴。進(jìn)而延伸到持續(xù)部署、持續(xù)交付嘱腥。

如果XP的各個(gè)工程實(shí)踐是珍珠的話,那么串起這些珍珠項(xiàng)鏈的繩子就是持續(xù)集成拘悦。

如何學(xué)習(xí)和實(shí)踐XP

除了了解這些基本概念外齿兔,需要了解這些實(shí)踐背后的本質(zhì):反饋環(huán) —— 通過獲得反饋,持續(xù)改進(jìn)的方式來適應(yīng)變化的能力础米。還有就是不斷實(shí)踐分苇,這不像學(xué)習(xí)別的東西,聽個(gè)概念就可以跟人辯駁屁桑,XP是一門實(shí)踐性非常強(qiáng)的方法医寿,與Scrum和Kanban有著非常大的不同,Scrum是組織框架設(shè)計(jì)和角色定義蘑斧,Kanban適用于團(tuán)隊(duì)局部優(yōu)化靖秩,也適用于組織層面工作流的梳理,而XP卻是實(shí)打?qū)嵉丶夹g(shù)實(shí)踐竖瘾。小到可以從單個(gè)工程師編寫代碼養(yǎng)成良好地單元測試的習(xí)慣沟突,再到兩個(gè)人結(jié)對開發(fā),進(jìn)行可以做團(tuán)隊(duì)的持續(xù)集成捕传,大到整個(gè)產(chǎn)品級(jí)別或系統(tǒng)級(jí)別的持續(xù)集成和交付惠拭。不積跬步無以至千里;不積小流庸论,無以成江海职辅。

結(jié)尾

最后希望本文能夠?qū)π枰私釾P的同學(xué)有所幫助,也希望有更多的朋友能夠一道學(xué)習(xí)聂示,我們不只是要成為了一名把活干完的工程師域携,而是成為一名如何把活干好的工程師,不是成為了一名只想著構(gòu)造的工程師催什,而是在構(gòu)造之前會(huì)思考需要構(gòu)造什么的工程師涵亏,我們是要制造產(chǎn)品宰睡,而不是次品,我們不是碼農(nóng)气筋,而是匠人拆内。

閱讀原文 >
轉(zhuǎn)載請注明原文出處,謝謝

– EOF –


  1. Kent Beck是敏捷宣言最早的十七位簽署者之一 ?

  2. 這里指狹義理解的測試概念宠默,測試的概念可以往驗(yàn)證麸恍、探索等各個(gè)方向延伸討論,這里不做展開搀矫。 ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末抹沪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瓤球,更是在濱河造成了極大的恐慌融欧,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卦羡,死亡現(xiàn)場離奇詭異噪馏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)绿饵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門欠肾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拟赊,你說我怎么就攤上這事刺桃。” “怎么了吸祟?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵瑟慈,是天一觀的道長。 經(jīng)常有香客問我欢搜,道長封豪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任炒瘟,我火速辦了婚禮吹埠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疮装。我一直安慰自己缘琅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布廓推。 她就那樣靜靜地躺著刷袍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪樊展。 梳的紋絲不亂的頭發(fā)上呻纹,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天堆生,我揣著相機(jī)與錄音,去河邊找鬼雷酪。 笑死淑仆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的哥力。 我是一名探鬼主播蔗怠,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吩跋!你這毒婦竟也來了寞射?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤锌钮,失蹤者是張志新(化名)和其女友劉穎桥温,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梁丘,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡策治,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了兰吟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡茂翔,死狀恐怖混蔼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情珊燎,我是刑警寧澤惭嚣,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站悔政,受9級(jí)特大地震影響晚吞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谋国,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一槽地、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芦瘾,春花似錦捌蚊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至祷愉,卻和暖如春窗宦,著一層夾襖步出監(jiān)牢的瞬間赦颇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工赴涵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留媒怯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓句占,卻偏偏與公主長得像沪摄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子纱烘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 傳統(tǒng)軟件工程方法的文檔輛過重??于是出現(xiàn)了 ?? 敏捷開發(fā) ?? “輕量級(jí)”方法的軟件開發(fā)方法??XP是敏捷開發(fā)的...
    Crumvey閱讀 1,335評論 0 2
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,071評論 25 707
  • 這兩天姨媽駕到,家里暖氣片滴水哺壶、水管滴水屋吨,找中介,找物業(yè)山宾,找熱力至扰,找?guī)煾怠鞣N瑣碎又耗精力耗情緒的事情都積攢到一...
    鄭薇閱讀 700評論 0 0
  • 今天心理特別悶特別不舒服壓抑,我知道我得了輕度抑郁资锰。準(zhǔn)時(shí)下班做了推拿敢课,然后去了南長街吃了一碗鄉(xiāng)下小餛飩,然后依然去...
    遇見繁花閱讀 310評論 0 0
  • 那天 雨中 邂逅一只打傘的魚 于落葉飄零中裊裊娉婷 追逐著飛絮令漫天微茫 又在柳樹下輕輕依偎 仿佛 世...
    彼岸月見閱讀 324評論 5 2