第1章 極限編程定義
- 極限編程(Extreme Programming, XP)和社會(huì)性的變革相關(guān)。過(guò)去適用的一些習(xí)慣和模式在今天可能會(huì)妨礙我們做得最好,XP要求我們放棄這些習(xí)慣和模式凭需,放棄那些妨礙生產(chǎn)率但保護(hù)我們自己的防御行為。雖然這可能會(huì)使我們感覺(jué)到自己失去了掩蔽。P1
- XP要求我們承擔(dān)自己有能力做什么烦秩,然后去做這些能力所及的事情。同事允許并希望其他人也這樣做郎仆。放棄我們不成熟的自負(fù)——“我比其他人都懂很多只祠,我需要的就是讓我獨(dú)立行事,成為最棒的”丸升。P1
- XP是一種軟件開(kāi)發(fā)的風(fēng)格铆农,專(zhuān)注于編程技術(shù)、清晰溝通還有團(tuán)隊(duì)協(xié)作的精彩實(shí)踐狡耻,這些將幫助我們完成以前幾乎不可想象的事情墩剖。XP包括:P2
- 一種軟件開(kāi)發(fā)的哲學(xué),基于溝通夷狰、反饋岭皂、簡(jiǎn)約、勇氣和尊重的價(jià)值觀沼头。
- 一整套被證明在軟件開(kāi)發(fā)中有用的實(shí)踐爷绘。這些實(shí)踐相輔相成的书劝,相互增強(qiáng)。我們將它們作為以上價(jià)值觀的表達(dá)形式土至。
- 一系列用來(lái)將以上價(jià)值觀投入實(shí)踐的购对、輔助的原則和職能技術(shù)。當(dāng)缺乏對(duì)應(yīng)你的獨(dú)特難題的現(xiàn)成實(shí)踐時(shí)陶因,它會(huì)起作用骡苞。
- 一個(gè)共享這些價(jià)值觀和實(shí)踐的社區(qū)。
- XP是一條可以使得一起開(kāi)發(fā)軟件的人們共同進(jìn)步直至卓越的途徑楷扬。它和其他方法的區(qū)別有:P2
- 開(kāi)發(fā)周期短解幽,提供及早的、具體的烘苹、持續(xù)的反饋躲株。
- 增量計(jì)劃方法。迅速地提出一個(gè)總體計(jì)劃镣衡,并在項(xiàng)目生命周期中不斷演化霜定。
- 能夠靈活安排功能的實(shí)現(xiàn),以對(duì)變化的業(yè)務(wù)需求做出反應(yīng)捆探。
- 使用有程序員然爆、客戶(hù)和測(cè)試人員編寫(xiě)的自動(dòng)測(cè)試來(lái)監(jiān)控開(kāi)發(fā)進(jìn)度,支持系統(tǒng)的演化黍图,并盡早發(fā)現(xiàn)缺陷曾雕。
- 通過(guò)口頭溝通、測(cè)試和源代碼溝通系統(tǒng)結(jié)構(gòu)和意圖助被。
- 演化的設(shè)計(jì)過(guò)程貫穿整個(gè)系統(tǒng)生命周期剖张。
- 依賴(lài)于能力普通但能積極參與的程序員之間的緊密協(xié)作。
- 各種實(shí)踐兼顧項(xiàng)目成員的短期直覺(jué)以及項(xiàng)目的長(zhǎng)期利益揩环。
- XP可以表述為:P3
- 在XP中你只需要做能夠?yàn)榭蛻?hù)創(chuàng)造價(jià)值的事情搔弄,帶著很多包袱是不可能快速前進(jìn)的。
- XP是一種方法論丰滑,它建立于解決軟件開(kāi)發(fā)方法中的約束之上顾犹。XP在所有這些領(lǐng)域都有潛在的作用,但并不是直接解決這些領(lǐng)域中的問(wèn)題褒墨。方法論常常解釋為“一組用來(lái)確保成功的規(guī)則”炫刷。
- XP對(duì)任何規(guī)模的團(tuán)隊(duì)都起作用。
- XP適合模糊或者快速變化的需求郁妈。
- “不設(shè)防才是真正的安全”的觀念浑玛。隱瞞一些事情來(lái)保持安全的就習(xí)慣并不能真正起作用。隱瞞20%工作量不能保護(hù)我噩咪,當(dāng)項(xiàng)目失敗的時(shí)候顾彰,沒(méi)有盡全力的事實(shí)并不會(huì)真的讓我感覺(jué)好一點(diǎn)极阅,也無(wú)法消除不能讓項(xiàng)目運(yùn)作所帶來(lái)的失敗感。如果我盡了全力寫(xiě)程序而人們不喜歡涨享,我任然可以自我感覺(jué)很好筋搏,因?yàn)槲冶M力了。P4
- XP團(tuán)隊(duì)竭盡全力去取勝而且用于承擔(dān)后果灰伟。如果自尊沒(méi)有跟項(xiàng)目聯(lián)系起來(lái)拆又,在任何情況下我們都會(huì)盡全力做到最好。在XP中我們不為失敗做準(zhǔn)備栏账。在人際關(guān)系上保持一點(diǎn)距離、通過(guò)偷懶或加班來(lái)隱瞞工作量栈源、拖延反饋導(dǎo)致又一次責(zé)任擴(kuò)散挡爵,所有這些行為在XP團(tuán)隊(duì)中都沒(méi)有存在的空間。P4
- XP如何解決開(kāi)發(fā)過(guò)程中的風(fēng)險(xiǎn)甚垦。P5
- 進(jìn)度延遲——XP提倡短發(fā)布周期茶鹃。這樣,任何延遲的范圍都是有限的艰亮。XP使用客戶(hù)要求的功能的每周迭代來(lái)行成關(guān)于進(jìn)度的詳細(xì)反饋闭翩。提倡優(yōu)先實(shí)現(xiàn)高優(yōu)先級(jí)的功能,這樣可以保證在發(fā)布版本中錯(cuò)過(guò)的功能的價(jià)值比較低迄埃。
- 項(xiàng)目取消——XP中的最小發(fā)布必須是滿足最大商業(yè)意義的部分疗韵。這樣,在部署之前出錯(cuò)的可能就會(huì)較少侄非,同時(shí)也保證了軟件的價(jià)值最大蕉汪。
- 系統(tǒng)惡化——XP中并創(chuàng)建并維護(hù)一整套自動(dòng)化測(cè)試,以確保質(zhì)量基線逞怨。
- 缺陷率——XP中既包括了程序員書(shū)寫(xiě)的每個(gè)函數(shù)的測(cè)試者疤,也包括了客戶(hù)書(shū)寫(xiě)的對(duì)每個(gè)程序特性的測(cè)試。
- 業(yè)務(wù)誤解——XP提倡業(yè)務(wù)人員成為團(tuán)隊(duì)成員叠赦,因此客戶(hù)和團(tuán)隊(duì)的知識(shí)都能反映在軟件中驹马。
- 業(yè)務(wù)變更——XP縮短了發(fā)布周期,客戶(hù)可以隨意用新的功能替代沒(méi)有完成的功能除秀。
- 錯(cuò)誤特性太多——XP堅(jiān)持只解決最高優(yōu)先級(jí)的任務(wù)糯累。
- 人員流動(dòng)——XP要求程序員估算自己工作所需時(shí)間并完成工作。XP鼓勵(lì)團(tuán)隊(duì)中的相互溝通鳞仙,來(lái)減少孤獨(dú)感寇蚊,因?yàn)檫@常常是工作不滿的主要原因。鼓勵(lì)相信成員逐漸承擔(dān)越來(lái)越多的責(zé)任棍好,新成員之間互相版主仗岸,同時(shí)老成員也為新成員提供幫助允耿。
- 什么是XP。P7
- XP是放棄舊的扒怖、低效的技術(shù)和習(xí)慣而采用新的有效的技術(shù)和習(xí)慣较锡。
- XP是因?yàn)槟憬裉斓慕弑M全力而充分欣賞自己。
- XP是努力在明天做得更好盗痒。
- XP是要求你按照對(duì)團(tuán)隊(duì)共同目標(biāo)作出的貢獻(xiàn)來(lái)評(píng)價(jià)自己蚂蕴。
- XP是讓你的一些人性需求在軟件開(kāi)發(fā)中得到滿足。
第一部分 探索極限編程
第2章 學(xué)習(xí)開(kāi)車(chē)
- XP的范式(paradigm):保持清醒俯邓、適應(yīng)骡楼、變化。P10
- 軟件中的所有東西都在變稽鞭。需求在變鸟整,設(shè)計(jì)在變,業(yè)務(wù)在變朦蕴、技術(shù)在變篮条,團(tuán)隊(duì)在變,團(tuán)隊(duì)成員在變吩抓。問(wèn)題不在于變化涉茧,因?yàn)樽兓偸且l(fā)生;問(wèn)題在于我們沒(méi)有應(yīng)對(duì)變化的能力疹娶。P10
- XP讓你通過(guò)不斷的伴栓、小的糾正來(lái)適應(yīng),通過(guò)短周期的部署軟件來(lái)朝著目標(biāo)前進(jìn)蚓胸,這樣你就不會(huì)過(guò)很長(zhǎng)時(shí)間才發(fā)現(xiàn)自己走錯(cuò)了方向挣饥。P11
第3章 價(jià)值觀、原則和實(shí)踐
- 價(jià)值觀讓實(shí)踐有的放矢沛膳,實(shí)踐使價(jià)值觀變得具體可見(jiàn)扔枫。在價(jià)值觀與實(shí)踐之間架起橋梁的是原則。原則是生活中具體領(lǐng)域的指導(dǎo)方針锹安。P13
第4章 價(jià)值觀
- 對(duì)于軟件開(kāi)發(fā)“剛剛?cè)腴T(mén)”的人而言短荐,最大的問(wèn)題在于:他們專(zhuān)注于個(gè)體的行為。實(shí)際上相對(duì)于個(gè)體行為作為團(tuán)隊(duì)的一份子而言叹哭,個(gè)體行為并不那么重要忍宋。P16
- 人們對(duì)編碼風(fēng)格充滿熱情。毫無(wú)疑問(wèn)編碼風(fēng)格有好壞之分风罩,但最重要的問(wèn)題是一個(gè)團(tuán)隊(duì)要選擇共同的風(fēng)格工作糠排。特殊的編碼風(fēng)格往往揭示了這樣的價(jià)值觀:不惜任何代價(jià)的個(gè)體自由。這些是不能幫助團(tuán)隊(duì)取得成功的超升。P16
- XP中包含了5個(gè)指導(dǎo)開(kāi)發(fā)的價(jià)值觀:溝通入宦、簡(jiǎn)單哺徊、反饋、勇氣和尊重乾闰。P20
- 溝通:在團(tuán)隊(duì)軟件開(kāi)發(fā)中最要緊的是溝通落追。每當(dāng)開(kāi)發(fā)中出現(xiàn)問(wèn)題的時(shí)候,通常已經(jīng)有人指導(dǎo)了解決方法涯肩,但有權(quán)作出改變的人卻不知道轿钠。
- 簡(jiǎn)單:簡(jiǎn)單是XP價(jià)值觀中智力色彩最強(qiáng)烈的。構(gòu)造一個(gè)優(yōu)雅地解決今天問(wèn)題同事又足夠簡(jiǎn)單的系統(tǒng)是很難的病苗。昨天的簡(jiǎn)單解決方案在今天看來(lái)可能任然不錯(cuò)疗垛,但也可能過(guò)于簡(jiǎn)單了,或者太復(fù)雜了铅乡。當(dāng)你需要作出改變继谚,以重新獲得簡(jiǎn)單性時(shí),你必須找到一條從你當(dāng)前位置到目的地的路徑阵幸。
- 反饋:沒(méi)有哪個(gè)固定方向是長(zhǎng)久有效的,不論我們?cè)僬務(wù)撥浖_(kāi)發(fā)細(xì)節(jié)芽世、系統(tǒng)需求還是系統(tǒng)架構(gòu)挚赊。超越經(jīng)驗(yàn)而確定出來(lái)的方向,它的半衰期尤其短济瓢。變化是不可能避免的荠割,變化產(chǎn)生了對(duì)反饋的需要。
- 勇氣:勇氣是面對(duì)恐懼的有效行動(dòng)旺矾。有時(shí)勇氣表現(xiàn)為對(duì)某種行動(dòng)的偏愛(ài)蔑鹦。如果你知道問(wèn)題是什么,那你就去做吧箕宙。有時(shí)勇氣表現(xiàn)為耐心嚎朽。如果你知道有問(wèn)題存在但不知道問(wèn)題是什么,則需要勇氣來(lái)等待真正問(wèn)題的明顯出現(xiàn)柬帕。
- 尊重:前面提到的4個(gè)價(jià)值觀指向處于他們背后更深刻的另一個(gè)價(jià)值觀:尊重。如果團(tuán)隊(duì)成員不關(guān)心彼此,也不理會(huì)別人所做的事情廓八,XP是無(wú)用的星掰。要同時(shí)提高軟件開(kāi)發(fā)的人性和生產(chǎn)率,每個(gè)人對(duì)團(tuán)隊(duì)的貢獻(xiàn)都應(yīng)該得到尊重凤跑。
第5章 原則
- 談話是首選的溝通方式爆安,文字溝通本質(zhì)上更為浪費(fèi),文字溝通是單向的交流方式仔引。談話可以支持澄清事實(shí)扔仓、立即反饋、頭腦風(fēng)暴找筝,以及其他文檔無(wú)法做到的事情谤民。
- 人性化。成為一名優(yōu)秀的開(kāi)發(fā)者需要什么疫铜。P23
- 基本安全:沒(méi)有饑餓、身體傷害和對(duì)所愛(ài)的人的威脅住练。害怕失去工作會(huì)導(dǎo)致這個(gè)需求受到威脅。
- 成就感:為社會(huì)做貢獻(xiàn)的機(jī)會(huì)和能力弹谁。
- 歸屬感:參與團(tuán)隊(duì)并從中得到認(rèn)可、責(zé)任和為共同目標(biāo)做貢獻(xiàn)的機(jī)會(huì)咳胃。
- 成長(zhǎng):拓展自己的能力和前途的機(jī)會(huì)鳖粟。
- 親切感:與團(tuán)隊(duì)其他成員之間的高度理解和被理解的能力。
- 經(jīng)濟(jì)學(xué)拙绊。P24
必須有人為所有的這些買(mǎi)單。不考慮經(jīng)濟(jì)學(xué)的軟件開(kāi)發(fā)會(huì)有導(dǎo)致空洞單存的“技術(shù)性成功”的危險(xiǎn)泳秀。要確定你正在做的東西有商業(yè)價(jià)值标沪,符合商業(yè)目標(biāo)和商業(yè)需求。 - 互惠互利嗜傅。P25
每項(xiàng)活動(dòng)都應(yīng)使所有與其相關(guān)的活動(dòng)獲益金句。互惠互利是XP中最重要的原則吕嘀,也是最難堅(jiān)持的原則违寞。任何一個(gè)問(wèn)題總是有讓某人付出代價(jià)而其他人獲益的解決方案。 - XP通過(guò)互惠互利的方式來(lái)解決“與未來(lái)交流”的問(wèn)題偶房。P25
- 今天我撰寫(xiě)了能幫助我更好地設(shè)計(jì)和實(shí)現(xiàn)的自動(dòng)化測(cè)試趁曼,這些測(cè)試同樣可以保留給以后的程序員使用。這項(xiàng)實(shí)踐讓現(xiàn)在的我獲益棕洋,也讓以后的維護(hù)者獲益挡闰。
- 我非常謹(jǐn)慎地重構(gòu)以消除那些偶然導(dǎo)致的復(fù)雜性,這既給我?guī)?lái)了滿足感和更少的缺陷,也讓后來(lái)者能更容易地理解他們碰到的代碼摄悯。
- 我會(huì)從清楚且一致的隱喻集中選擇名稱(chēng)赞季,這些名稱(chēng)能加速我的開(kāi)發(fā),也使得留給新程序員的代碼更清晰奢驯。
- 自相似性申钩。P26
試著講一個(gè)解決方案的結(jié)構(gòu)復(fù)制到一個(gè)新環(huán)境中,即使他們的粒度不同瘪阁。 - 改進(jìn)撒遣。P27
軟件開(kāi)發(fā)的卓越是通過(guò)改進(jìn)達(dá)到的。這個(gè)循環(huán)就是:做到你今天能做的最好罗洗,為了明天能做得更好所必須的理解而努力愉舔。這步意味著需要等到完美才開(kāi)始做。
把價(jià)值觀轉(zhuǎn)化為實(shí)踐時(shí)伙菜,改進(jìn)原則表示為實(shí)踐就是:馬上開(kāi)始行動(dòng)轩缤,隨著時(shí)間的推移逐步精化結(jié)果。 - 多樣性贩绕。P28
如果一個(gè)團(tuán)隊(duì)的成員很相似火的,那么這個(gè)團(tuán)隊(duì)雖然舒適但效率不高。團(tuán)隊(duì)需要將不同的技能淑倾、態(tài)度以及看待問(wèn)題和缺陷的視角整合在一起馏鹤,來(lái)考慮解決問(wèn)題和實(shí)現(xiàn)解決方案的不同方法。也就是說(shuō)娇哆,團(tuán)隊(duì)需要多樣性湃累。 - 反省。P28
好的團(tuán)隊(duì)并不只是進(jìn)行他們的工作碍讨,他們會(huì)思考如何工作和為什么工作治力。他們會(huì)分析為什么成功或失敗。他們不會(huì)試圖掩藏他們的錯(cuò)誤勃黍,而是暴露它們并從中學(xué)習(xí)宵统。誰(shuí)都不可能突然間變優(yōu)秀。 - 流覆获。P29
軟件開(kāi)發(fā)的流是指通過(guò)同時(shí)參與所有的開(kāi)發(fā)活動(dòng)來(lái)交付有價(jià)值軟件的穩(wěn)定流马澈。XP的實(shí)踐傾向于活動(dòng)的連續(xù)流,而不是離散的階段弄息。
軟件開(kāi)發(fā)長(zhǎng)久以來(lái)用大塊的程序進(jìn)行交付痊班。“宇宙大爆炸”集成反映了這種趨勢(shì)疑枯。許多團(tuán)隊(duì)?wèi)?yīng)對(duì)壓力的傾向是辩块,減少部署和集成的頻率,從而使程序塊更大——這會(huì)讓問(wèn)題變得更糟。反饋減少使問(wèn)題更糟糕废亭,導(dǎo)致更大的程序塊国章。被延遲的事情越多,程序塊就越大豆村,風(fēng)險(xiǎn)也越大液兽。相反,流的原則建議通過(guò)頻繁地部署較小的增量來(lái)改善這種情況掌动。 - 機(jī)遇四啰。P30
要學(xué)會(huì)把問(wèn)題看作改變的機(jī)遇。這不是說(shuō)在軟件開(kāi)發(fā)中沒(méi)有問(wèn)題粗恢。但是柑晒,“幸存”(survival)的態(tài)度會(huì)導(dǎo)致僅僅解決足夠的問(wèn)題而蒙混過(guò)關(guān)。要達(dá)到優(yōu)秀眷射,就必須把問(wèn)題轉(zhuǎn)化為學(xué)習(xí)和改進(jìn)的機(jī)遇匙赞,而不僅僅是幸存。極限的一部分意思就是有意識(shí)地選擇將每個(gè)問(wèn)題轉(zhuǎn)化為機(jī)遇:個(gè)人成長(zhǎng)的機(jī)遇妖碉、關(guān)系升華的機(jī)遇涌庭、軟件改進(jìn)的機(jī)遇。 - 冗余欧宜。P31
軟件開(kāi)發(fā)中關(guān)鍵的困難問(wèn)題應(yīng)該用幾種不同的方法解決坐榆。甚至如果一種方案最終失敗了,其他的方案還可以阻止災(zāi)難的發(fā)生冗茸。冗余的成本不僅僅是與沒(méi)有災(zāi)難發(fā)生的情況相比所多出來(lái)的那一部分花費(fèi)席镀。 - 失敗。P31
失敗不是浪費(fèi)嗎夏漱?不是愉昆,如果它能夠產(chǎn)生知識(shí)的話。知識(shí)是有價(jià)值的麻蹋,這種價(jià)值有時(shí)候是很難獲得的。失敗也許是不可避免的浪費(fèi)焊切。如果你知道實(shí)現(xiàn)故事的最佳方法扮授,你只需用那種方法實(shí)現(xiàn)它就可以了。如果你不知道专肪,找到它最經(jīng)濟(jì)的辦法是什么呢刹勃?當(dāng)你不知道要怎么做的時(shí)候,冒一點(diǎn)風(fēng)險(xiǎn)失敗可能是通向成功的最短最穩(wěn)妥的道路嚎尤。 - 質(zhì)量荔仁。P32
通過(guò)犧牲質(zhì)量來(lái)控制的手段是沒(méi)有效率的。質(zhì)量不是一個(gè)控制變量。項(xiàng)目不會(huì)因?yàn)榻邮艿唾|(zhì)量而加快進(jìn)度乏梁,也不會(huì)因?yàn)橐蟾哔|(zhì)量而使進(jìn)度減慢次洼。要求高質(zhì)量通常導(dǎo)致更快的交付,而降低質(zhì)量標(biāo)準(zhǔn)通常會(huì)導(dǎo)致更晚的不可預(yù)見(jiàn)的交付遇骑。 - 嬰兒步卖毁。P33
人們總是試圖大步地進(jìn)行大的轉(zhuǎn)變。畢竟有一段很長(zhǎng)的路要走落萎,而且要在很短時(shí)間內(nèi)抵達(dá)亥啦。但突然間發(fā)生重大改變是危險(xiǎn)的。被要求改變的是人练链,而改變是令人不安的翔脱,人們適應(yīng)變化的速度畢竟是有限的。嬰兒步并不是說(shuō)多慢或者停止變化媒鼓。在適當(dāng)?shù)臈l件下届吁,人們和團(tuán)隊(duì)可以非常快地邁出很多的小步隶糕,以至于看起來(lái)就像是在跳躍前進(jìn)瓷产。 - 接受責(zé)任。P34
責(zé)任不能被指定枚驻,只能被接受濒旦。如果有人試圖給你責(zé)任,只有你自己能夠決定是否負(fù)這個(gè)責(zé)任再登。責(zé)任和權(quán)利需要并行尔邓。兩者錯(cuò)位會(huì)扭曲團(tuán)隊(duì)的溝通。當(dāng)一個(gè)過(guò)程專(zhuān)家告訴我該怎樣工作锉矢,卻不承擔(dān)這些工作及其后果的時(shí)候梯嗽,權(quán)利和責(zé)任就錯(cuò)位了。我倆都無(wú)法從一個(gè)理智的角度出發(fā)來(lái)看到或使用那些幫助我們改進(jìn)的反饋沽损。另外灯节,錯(cuò)位還要付出情緒方面的成本。
第6章 實(shí)踐
- 實(shí)踐本身是空洞的绵估。除非以?xún)r(jià)值觀作為目的炎疆,否則實(shí)踐會(huì)變得生搬硬套。P35
第7章 基本實(shí)踐
- 坐在一起国裳。P37
在大到足夠容納整個(gè)團(tuán)隊(duì)的開(kāi)放空間中進(jìn)行開(kāi)放形入。為了滿足隱私和“自己的”空間的需求,可以在附件設(shè)置一些私人空間缝左,或者對(duì)工作時(shí)間做出限制亿遂,這樣團(tuán)隊(duì)成員對(duì)隱私的需要可以在其他地方得到滿足浓若。 - 完整團(tuán)隊(duì)。P39
將擁有項(xiàng)目成功所必須的各種技能和視角的人都包含進(jìn)團(tuán)隊(duì)蛇数。其實(shí)這就是過(guò)去早就有了的交叉功能團(tuán)隊(duì)(cross-functional team)的想法挪钓。但這個(gè)實(shí)踐的名字反映了它的目的:一種團(tuán)隊(duì)的整體感,成功所需要的所有資源準(zhǔn)備苞慢。一個(gè)健康的項(xiàng)目需要熱烈的交互诵原,這些交互應(yīng)該主要是按團(tuán)隊(duì)來(lái)進(jìn)行組織,而不是以不同的功能組為單位進(jìn)行挽放。 - 信息工作空間绍赛。P40
讓你的工作空間與你的工作相關(guān)。一個(gè)對(duì)項(xiàng)目感興趣的觀察者應(yīng)該能夠走進(jìn)團(tuán)隊(duì)并在15秒之內(nèi)對(duì)項(xiàng)目如何運(yùn)轉(zhuǎn)有個(gè)大致的概念辑畦。他也應(yīng)該能夠通過(guò)近距離的觀察而獲得更多的真正或潛在問(wèn)題的相關(guān)信息吗蚌。 - 充滿活力地工作。P41
只要你可以在有效率的時(shí)間段高效地工作就足夠了纯出。 - 結(jié)對(duì)編程蚯妇。P42
所有產(chǎn)品程序的編寫(xiě)都由坐在一臺(tái)機(jī)器前的兩個(gè)人完成。結(jié)對(duì)程序員:- 使彼此都專(zhuān)注于任務(wù)暂筝。
- 一起頭腦風(fēng)暴箩言,討論系統(tǒng)的精化。
- 理清想法焕襟。
- 當(dāng)搭檔陷入困境時(shí)要主動(dòng)陨收,這樣才能減少挫折。
- 使彼此都對(duì)團(tuán)隊(duì)的實(shí)踐負(fù)責(zé)鸵赖。
- 結(jié)對(duì)與個(gè)人空間务漩。P43
不同的人和文化對(duì)舒服的身體空間的大小要求是不同的。在結(jié)對(duì)時(shí)尊重個(gè)體區(qū)別是重要的它褪。 - 故事饵骨。P45
使用客戶(hù)可見(jiàn)的功能單元進(jìn)行計(jì)劃。軟件開(kāi)發(fā)已經(jīng)被“需求”這個(gè)詞誤導(dǎo)了茫打,“需求”在詞典中被定義為“必須或強(qiáng)制的東西”居触。這個(gè)詞帶有一種絕對(duì)和永久的含義,這抑制了“擁抱變化”老赤。 - 周循環(huán)饼煞。P46
一次計(jì)劃一周的工作。在每周開(kāi)始的時(shí)候開(kāi)會(huì)诗越。在這個(gè)會(huì)議中:- 回顧迄今為止的進(jìn)展,包括上周的實(shí)際進(jìn)展與期望進(jìn)展的吻合進(jìn)度息堂。
- 讓客戶(hù)挑選在這周內(nèi)要實(shí)現(xiàn)的故事嚷狞。
- 把故事分解成任務(wù)块促。團(tuán)隊(duì)成員簽字接受這些任務(wù)并估算它們的工作量。
- 季度循環(huán)床未。P48
一次計(jì)劃一個(gè)季度的工作竭翠。每個(gè)季度根據(jù)更大的目標(biāo)對(duì)團(tuán)隊(duì)、項(xiàng)目薇搁、進(jìn)度和安排做一次反省斋扰。在季度計(jì)劃中:- 確定瓶頸,尤其是那些在團(tuán)隊(duì)控制之外的啃洋。
- 開(kāi)始修補(bǔ)措施传货。
- 計(jì)劃季度的主題。
- 挑選對(duì)應(yīng)那些主題的整個(gè)季度的故事宏娄。
- 集中在宏觀想法上问裕,考慮項(xiàng)目和組織的關(guān)系。
- 松弛孵坚。P49
在任何計(jì)劃中粮宛,都包含了一些假如落后了就可以取消的小任務(wù)。你總可以在后來(lái)增加更多的故事卖宠、并且交付比承諾更多的故事巍杈。在不信任和不兌現(xiàn)承諾的氣氛中,實(shí)現(xiàn)你的許諾是很重要的扛伍,已實(shí)現(xiàn)的許諾對(duì)重建信任關(guān)系是大有幫助的筷畦。 - 10分鐘構(gòu)建。P50
在10分鐘之內(nèi)自動(dòng)地構(gòu)建整個(gè)系統(tǒng)和運(yùn)行所有的測(cè)試蜒秤。超過(guò)10分鐘的構(gòu)建汁咏,人們一般很少愿意使用它,因此會(huì)導(dǎo)致反饋機(jī)會(huì)的喪失作媚。更短的構(gòu)建則不能給你時(shí)間去喝咖啡攘滩。 - 持續(xù)集成。P51
不超過(guò)兩個(gè)小時(shí)就對(duì)改變的地方進(jìn)行一次集成和測(cè)試纸泡。團(tuán)隊(duì)編程并不是分而治之漂问,而是分、治以及集成女揭。集成步驟是不可預(yù)知的蚤假,但很容易就會(huì)花費(fèi)比原始編程更多的時(shí)間。你等待越長(zhǎng)的時(shí)間才集成吧兔,花費(fèi)就越多磷仰,越不可預(yù)知。 - 測(cè)試優(yōu)先編程境蔼。P52
在改變?nèi)魏未a之前先編寫(xiě)一個(gè)自動(dòng)化測(cè)試灶平。測(cè)試優(yōu)先編寫(xiě)能馬上解決很多問(wèn)題:- 范圍蔓延 ——很容易就會(huì)使程序失去控制并引入一些“以防萬(wàn)一”的代碼伺通。
- 耦合與內(nèi)聚——如果測(cè)試編寫(xiě)起來(lái)很困難,這是個(gè)信號(hào)逢享,說(shuō)明在設(shè)計(jì)上有問(wèn)題罐监,而不是測(cè)試的問(wèn)題。低耦合瞒爬、高內(nèi)聚的代碼是很容易測(cè)試的弓柱。
- 信任——如果一段代碼不能運(yùn)行,那么它的作者是很難得到別人信任的侧但。
- 節(jié)奏——編程的時(shí)候很容易就會(huì)幾個(gè)小時(shí)都不知道自己再干什么矢空。如果使用測(cè)試優(yōu)先編程的方法,下一步要做的工作就會(huì)很清楚俊犯。
- 增量設(shè)計(jì)妇多。P53
每天都考慮你的系統(tǒng)設(shè)計(jì),力求使得系統(tǒng)設(shè)計(jì)適應(yīng)當(dāng)天的系統(tǒng)需求燕侠。如果你對(duì)系統(tǒng)最佳設(shè)計(jì)的理解發(fā)生了飛躍性的進(jìn)步者祖,則需要進(jìn)行逐步而持久的工作,讓設(shè)計(jì)和你對(duì)系統(tǒng)的理解新保持一致绢彤。
第8章 啟程
- 改變從意識(shí)開(kāi)始七问。改變所需要的意識(shí)來(lái)自于感覺(jué)、直覺(jué)茫舶、事實(shí)或局外人的反饋械巡。感覺(jué)雖然有價(jià)值,但需要和事實(shí)或可信任的觀點(diǎn)相互校驗(yàn)饶氏。
第9章 擴(kuò)展實(shí)踐
- 真實(shí)客戶(hù)參與讥耗。P61
將那些生活或業(yè)務(wù)受到待開(kāi)發(fā)系統(tǒng)影響的人納入到團(tuán)隊(duì)中來(lái)。有遠(yuǎn)見(jiàn)的客戶(hù)可以參與季度計(jì)劃和周計(jì)劃疹启。拿出開(kāi)發(fā)資金的一部分給他們古程,讓他們提出想要的功能。如果這些客戶(hù)可以比市場(chǎng)上其他人提前6個(gè)月看到一些問(wèn)題喊崖,那么做出他們想要的系統(tǒng)會(huì)使你領(lǐng)先于你的競(jìng)爭(zhēng)對(duì)手挣磨。 - 增量部署。P62
找到你能馬上處理的一小片功能或少量的數(shù)據(jù)集荤懂,并部署它茁裙。 - 團(tuán)隊(duì)連續(xù)性。P63
將高效的團(tuán)隊(duì)凝聚在一起节仿。在大組織中有一種趨勢(shì)晤锥,那就是將人抽象成物品:即插即用的編程單位。軟件中價(jià)值的創(chuàng)造不僅取決于開(kāi)發(fā)人員所知道的和所做的事情廊宪,也取決于他們之間的關(guān)系以及它們共同完成的事情矾瘾。忽視關(guān)系和信任的價(jià)值眉踱,而僅僅是簡(jiǎn)化調(diào)度問(wèn)題,這在經(jīng)濟(jì)上將是失敗的霜威。 - 收縮團(tuán)隊(duì)。P64
隨著團(tuán)隊(duì)能力的增強(qiáng)册烈,保持工作量不變戈泼,同時(shí)逐漸減少團(tuán)隊(duì)的規(guī)模。這樣可以從團(tuán)隊(duì)中抽出人來(lái)組成更多的團(tuán)隊(duì)赏僧。如果一個(gè)團(tuán)隊(duì)人數(shù)太少大猛,就將它與其他的小團(tuán)隊(duì)合并。 - 根源分析淀零。P65
下面是XP中一個(gè)響應(yīng)缺陷的過(guò)程:- 編寫(xiě)系統(tǒng)級(jí)自動(dòng)測(cè)試挽绩,用以演示缺陷及原本想要的行為。
- 編寫(xiě)范圍盡可能小但同樣能在現(xiàn)這個(gè)缺陷的單元測(cè)試驾中。
- 修改系統(tǒng)以通過(guò)單元測(cè)試唉堪。這也應(yīng)該使系統(tǒng)測(cè)試通過(guò)。如果不能肩民,返回到步驟2.
- 一旦缺陷排除了唠亚,找出產(chǎn)生這個(gè)缺陷的原因,也找出沒(méi)有發(fā)現(xiàn)它的原因持痰。采取必要的措施來(lái)防止這類(lèi)缺陷將來(lái)再次出現(xiàn)灶搜。
- 共享代碼。P66
團(tuán)隊(duì)里的任何人可以在任何時(shí)候改善系統(tǒng)的任何部分工窍。如果系統(tǒng)出錯(cuò)了割卖,并且修正它沒(méi)有超出我正在做的事情的范圍,那么我應(yīng)該挺省出來(lái)修正它患雏。 - 代碼和測(cè)試鹏溯。P67
項(xiàng)目中需要維護(hù)的永久制品只有代碼和測(cè)試,其他的文檔都可以從代碼和測(cè)試中生成纵苛。 - 單一代碼庫(kù)剿涮。P68
保持一個(gè)代碼流。你可以在一個(gè)臨時(shí)分支上開(kāi)發(fā)攻人,但永遠(yuǎn)不要讓它的生存期超過(guò)幾小時(shí)取试。多代碼流是軟件開(kāi)發(fā)中巨大的浪費(fèi)源。
不要讓你的源代碼有更多的版本怀吻。與其增加新的代碼庫(kù)瞬浓,不如修正那些潛在地妨礙你使用單一代碼庫(kù)的設(shè)計(jì)問(wèn)題。 - 每日部署蓬坡。P69
每天晚上都需要將新代碼融合到產(chǎn)品中猿棉。因?yàn)槌绦騿T桌面上和產(chǎn)品之間的任何差距都有風(fēng)險(xiǎn)磅叛。沒(méi)有與已部署的軟件同步的程序員是冒著風(fēng)險(xiǎn)的,冒著在沒(méi)有精確反饋信息的情況下做決策的風(fēng)險(xiǎn)萨赁。 - 協(xié)商范圍的合同弊琴。P70
簽訂具有固定的時(shí)間、成本和質(zhì)量的軟件開(kāi)發(fā)合同杖爽,但是要求就系統(tǒng)的精確邊界進(jìn)行不斷的協(xié)商敲董。通過(guò)簽署一系列的短期合同而不是一個(gè)長(zhǎng)長(zhǎng)的合同,可減少風(fēng)險(xiǎn)慰安。 - 依用付費(fèi)腋寨。P70
對(duì)于依用付費(fèi)的系統(tǒng),你可以在系統(tǒng)每次被使用時(shí)收費(fèi)』溃現(xiàn)金是最終的回饋萄窜。資金不僅是具體的,而且你可以小費(fèi)它撒桨。將軟件開(kāi)發(fā)同資金流直接聯(lián)系起來(lái)能夠?yàn)橄到y(tǒng)的改進(jìn)提供精確而及時(shí)的信息查刻。
第10章 完整XP團(tuán)隊(duì)
- 測(cè)試員。P74
XP團(tuán)隊(duì)中的測(cè)試員幫助客戶(hù)在實(shí)施前選擇和編寫(xiě)系統(tǒng)級(jí)的自動(dòng)化測(cè)試元莫,并為程序員知道相關(guān)的測(cè)試技術(shù)赖阻。在開(kāi)發(fā)早期,測(cè)試員的角色轉(zhuǎn)變?yōu)轷獯溃诠δ軟](méi)有實(shí)現(xiàn)之前幫助定義和說(shuō)明可接受的系統(tǒng)功能的組成部分火欧。
在周循環(huán)中,降臨至選定故事頭上的第一件事就是它們將被變成系統(tǒng)級(jí)的自動(dòng)化測(cè)試茎截。 - 交互設(shè)計(jì)師苇侵。P75
XP團(tuán)隊(duì)中的交互設(shè)計(jì)師要選擇系統(tǒng)的整體隱喻,編寫(xiě)故事和評(píng)估已部署系統(tǒng)的使用情況來(lái)為新故事尋找機(jī)會(huì)企锌。團(tuán)隊(duì)要有限處理最終用戶(hù)所關(guān)心的榆浓。交互設(shè)計(jì)的工具能版主團(tuán)隊(duì)分析和搞清楚用戶(hù)領(lǐng)域,雖然這不能取代同真實(shí)人物的交談撕攒。 - 架構(gòu)師陡鹃。P76
XP團(tuán)隊(duì)中的架構(gòu)師要查找并進(jìn)行大規(guī)模的重構(gòu)、編寫(xiě)系統(tǒng)級(jí)的架構(gòu)壓力測(cè)試抖坪,并實(shí)現(xiàn)故事萍鲸。在項(xiàng)目的整個(gè)周期,架構(gòu)師逐步地應(yīng)用他們的專(zhuān)業(yè)知識(shí)到項(xiàng)目中擦俐,他們指導(dǎo)者項(xiàng)目架構(gòu)的進(jìn)化脊阴。小系統(tǒng)的架構(gòu)應(yīng)該與大系統(tǒng)的架構(gòu)不一樣。對(duì)于小系統(tǒng),架構(gòu)師要確保系統(tǒng)有適當(dāng)小的架構(gòu)嘿期。隨著系統(tǒng)的增長(zhǎng)品擎,架構(gòu)師要確保架構(gòu)的跟進(jìn)。 - 項(xiàng)目經(jīng)理备徐。P77
XP團(tuán)隊(duì)中的項(xiàng)目經(jīng)理負(fù)責(zé)促進(jìn)團(tuán)隊(duì)內(nèi)的溝通萄传,協(xié)調(diào)同客戶(hù)、供應(yīng)商組織其他角色的溝通蜜猾。項(xiàng)目經(jīng)理充當(dāng)項(xiàng)目歷史的記錄者盲再,提醒團(tuán)隊(duì)已經(jīng)取得多少進(jìn)展。項(xiàng)目經(jīng)理需要有創(chuàng)造力瓣铣,來(lái)包裝項(xiàng)目信息陳述給主管和同行。需要頻繁地變更信息來(lái)保持準(zhǔn)確性贷揽,項(xiàng)目經(jīng)理的挑戰(zhàn)在于有效地和別人溝通這些變更棠笑。 - 產(chǎn)品經(jīng)理。P78
在XP中禽绪,產(chǎn)品經(jīng)理要編寫(xiě)故事蓖救、挑選每季度循環(huán)的主題和故事、挑選周循環(huán)的故事印屁、在實(shí)現(xiàn)工作涉及故事沒(méi)有設(shè)計(jì)的領(lǐng)域時(shí)回答疑問(wèn)循捺。產(chǎn)品經(jīng)理不只是在項(xiàng)目開(kāi)始階段挑選一些故事然后就可以休息了。他們要隨時(shí)關(guān)注在每個(gè)時(shí)刻什么可以發(fā)生了雄人,而不是提前預(yù)測(cè)什么將發(fā)生从橘。 - 主管人員。P79
主管人員要給XP團(tuán)隊(duì)提供勇氣础钠、自信和責(zé)任感恰力。XP團(tuán)隊(duì)的力量以及朝著共同目標(biāo)的共同前進(jìn)都有可能是缺點(diǎn)。如果團(tuán)隊(duì)目標(biāo)不能和公司目標(biāo)保持一致怎么辦旗吁?如果因?yàn)閴毫统晒Φ呐d奮使目標(biāo)偏移了怎么辦踩萎?主管人員負(fù)責(zé)或監(jiān)督XP團(tuán)隊(duì)的工作之一就是清晰地表達(dá)并維持更大范圍的目標(biāo)。 - 技術(shù)文獻(xiàn)書(shū)寫(xiě)員很钓。P80
XP團(tuán)隊(duì)的技術(shù)出版物的作用是要提供關(guān)于系統(tǒng)特性的早期反饋香府,以及同用戶(hù)建立更親密的關(guān)系。 - 用戶(hù)码倦。P82
XP團(tuán)隊(duì)中的用戶(hù)幫助編寫(xiě)和挑選故事并在開(kāi)發(fā)中做出領(lǐng)域相關(guān)決策企孩。 - 程序員。P82
XP團(tuán)隊(duì)中的程序員評(píng)估故事和任務(wù)叹洲,將故事細(xì)分成任務(wù)柠硕、編寫(xiě)測(cè)試、編寫(xiě)實(shí)現(xiàn)功能、自動(dòng)化枯燥的開(kāi)發(fā)過(guò)程蝗柔、逐步地改進(jìn)系統(tǒng)的設(shè)計(jì)闻葵。 - 人力資源。P83
對(duì)XP團(tuán)隊(duì)成員的個(gè)人考評(píng)和應(yīng)用XP之前沒(méi)有什么差別癣丧。在XP中槽畔,有價(jià)值的雇員是這樣的:- 行為受人尊敬。
- 與他人相處良好胁编。
- 主動(dòng)承擔(dān)任務(wù)厢钧。
- 言而有信。
- 角色嬉橙。P84
成熟XP團(tuán)隊(duì)的角色不是固定和嚴(yán)格的早直。我們的目標(biāo)是讓每個(gè)人為團(tuán)隊(duì)的成功做出最大的努力。首先市框,固定的角色可以幫助培養(yǎng)新習(xí)慣霞扬,比如讓技術(shù)人員做技術(shù)決策,業(yè)務(wù)人員做業(yè)務(wù)決策枫振。但是喻圃,在團(tuán)隊(duì)成員間建立了相互尊重的新關(guān)系以后,固定角色妨礙了每個(gè)人做出最大貢獻(xiàn)的目標(biāo)粪滤。
第11章 約束理論
- 一種考慮整個(gè)系統(tǒng)吞吐量的方法是約束理論斧拍。約束理論認(rèn)為任何系統(tǒng)在某一時(shí)間只存在一個(gè)約束(偶爾也會(huì)存在兩個(gè))。要提高系統(tǒng)的整體吞吐率杖小,那么必須首先找出那個(gè)約束肆汹,并確保它能夠全速工作,然后再尋找某些辦法予权,或者增加約束的容量县踢,來(lái)分流一部分工作到其他非約束部分,或者完全消除約束伟件。P85
第12章 計(jì)劃:管理范圍
- 計(jì)劃可以使目標(biāo)和方向清楚明確硼啤。XP中的計(jì)劃開(kāi)始于把當(dāng)前的目的、假設(shè)和事實(shí)公布與眾斧账。利用當(dāng)前明確的信息谴返,你們可以就什么是范圍之內(nèi)的、什么是范圍之外的咧织,以及下一步該做什么達(dá)成共識(shí)嗓袱。P90
- 任何時(shí)間尺度的計(jì)劃都有這樣四個(gè)步驟:P92
- 列出可能需要完成的工作部件。
- 估算這些部件习绢。
- 為計(jì)劃周期設(shè)定一個(gè)預(yù)算渠抹。
- 就預(yù)算內(nèi)需要完成的工作達(dá)成共識(shí)蝙昙。談判時(shí),不要改變這些估算或者預(yù)算梧却。
第13章 盡早測(cè)試奇颠、經(jīng)常測(cè)試、自動(dòng)測(cè)試
- 軟件開(kāi)發(fā)的另一個(gè)目標(biāo)是減少缺陷的出現(xiàn)到一個(gè)可以適度增長(zhǎng)團(tuán)隊(duì)信任的水平放航。用于減少缺陷的投資烈拒,跟對(duì)團(tuán)隊(duì)工作的投資一樣有意義。P97
第14章 設(shè)計(jì):時(shí)間的價(jià)值
- 概括來(lái)說(shuō)广鳍,向XP風(fēng)格設(shè)計(jì)的轉(zhuǎn)換是設(shè)計(jì)決策時(shí)期的轉(zhuǎn)換荆几。推遲設(shè)計(jì),到可以根據(jù)經(jīng)驗(yàn)進(jìn)行及可以馬上使用設(shè)計(jì)的時(shí)候赊时。這就允許團(tuán)隊(duì):
- 更早部署軟件吨铸。
- 毫無(wú)疑問(wèn)地做決策。
- 避免忍受糟糕的決策祖秒。
- 當(dāng)起始設(shè)計(jì)假設(shè)被取代時(shí)焊傅,維持開(kāi)發(fā)的速度。
- XP團(tuán)隊(duì)更喜歡盡可能簡(jiǎn)單的解決方案狈涮。設(shè)計(jì)簡(jiǎn)單性的四個(gè)標(biāo)準(zhǔn):
- 適合于希望得到它的人們。設(shè)計(jì)如何華麗優(yōu)美并不重要鸭栖,入股哦需要使用它工作的人不明白它歌馍,它對(duì)他們來(lái)說(shuō)就不簡(jiǎn)單。
- 易交流晕鹊。需要交流的所有思想都表現(xiàn)在系統(tǒng)中松却。就像單詞表里的單詞,系統(tǒng)的每個(gè)元素都需要跟未來(lái)的讀者溝通溅话。
- 提取了共因子晓锻。邏輯或結(jié)構(gòu)的重復(fù)使得代碼難以理解和修改。
- 最小化飞几。在以上三點(diǎn)限制下砚哆,系統(tǒng)應(yīng)該具有盡可能少的元素。元素越少就意味著需要的測(cè)試屑墨、歸檔和交流地越少躁锁。
第15章 增大XP規(guī)模
- 項(xiàng)目中的人數(shù)并不是軟件開(kāi)發(fā)規(guī)模的唯一衡量標(biāo)準(zhǔn)。軟件發(fā)展可以在很多維上擴(kuò)大規(guī)模:
- 人數(shù)
- 投資
- 整個(gè)組織的大小
- 時(shí)間
- 問(wèn)題的復(fù)雜性
- 解決方案的復(fù)雜性
- 故障的后果
- 當(dāng)面對(duì)一個(gè)大問(wèn)題時(shí)卵史,我用三個(gè)步驟工作:
- 將問(wèn)題轉(zhuǎn)化為小問(wèn)題战转。
- 應(yīng)用簡(jiǎn)單的解決方案。
- 如果還有問(wèn)題則應(yīng)用復(fù)雜的解決方案以躯。
- 人數(shù)槐秧。P111
如果僅僅用小的團(tuán)隊(duì)不起作用,那就把大的編程問(wèn)題轉(zhuǎn)化為一些小的問(wèn)題,每個(gè)問(wèn)題可以由小團(tuán)隊(duì)來(lái)解決刁标。首先颠通,有一個(gè)小團(tuán)隊(duì)解決問(wèn)題的一小部分,然后我們沿著它的自然分割線劃分系統(tǒng)命雀,讓幾個(gè)團(tuán)隊(duì)開(kāi)始在其中工作蒜哀。分割系統(tǒng)的同時(shí)可能會(huì)引入風(fēng)險(xiǎn),使得集成時(shí)可能合不起來(lái)吏砂,所以要頻繁地集成以協(xié)調(diào)各團(tuán)隊(duì)之間不同的假設(shè)撵儿。這是一個(gè)“治而分之”的策略,而不是“分而治之”的策略狐血。
“治而分之”的目標(biāo)是能夠把每個(gè)團(tuán)隊(duì)當(dāng)做單獨(dú)的團(tuán)隊(duì)管理淀歇,以限制協(xié)調(diào)的成本。盡管如此匈织,整個(gè)系統(tǒng)仍然需要頻繁的集成浪默。 - 投資。P112
將其看做消費(fèi)的公司可以把XP看做對(duì)一個(gè)已部署項(xiàng)目的維護(hù)缀匕。把大部分軟件開(kāi)發(fā)看做資本投資的公司可以使用季度或年度的周期針對(duì)特定題的批準(zhǔn)執(zhí)行大量的開(kāi)發(fā)纳决,即使項(xiàng)目的精度范圍沒(méi)有預(yù)先詳細(xì)說(shuō)明。
如果你要以XP的風(fēng)格開(kāi)始一次大規(guī)模的軟件開(kāi)發(fā)乡小,盡早子啊財(cái)政上找個(gè)同盟幫助你操縱這些問(wèn)題阔加。 - 組織的大小。P112
在XP團(tuán)隊(duì)中满钟,項(xiàng)目經(jīng)理每周五回來(lái)詢(xún)問(wèn)每個(gè)隊(duì)員這個(gè)星期做了什么胜榔。他以季度計(jì)劃的形式記錄這些信息。在季度評(píng)審時(shí)湃番,就會(huì)看到團(tuán)隊(duì)計(jì)劃包含了組織中最精確的評(píng)估夭织。 - 時(shí)間。P113
在時(shí)間上擴(kuò)大規(guī)模的最簡(jiǎn)單的情形是讓團(tuán)隊(duì)再整個(gè)項(xiàng)目的過(guò)程中維護(hù)項(xiàng)目的連貫性吠撮。從而使自動(dòng)化測(cè)試和增量設(shè)計(jì)可以用來(lái)保持系統(tǒng)進(jìn)一步成長(zhǎng)的活力和能力尊惰。 - 問(wèn)題的復(fù)雜性。P114
XP非常適合需要專(zhuān)家緊密協(xié)作的項(xiàng)目泥兰。這些項(xiàng)目初期的一個(gè)挑戰(zhàn)是择浊,讓每個(gè)人都協(xié)調(diào)工作,同時(shí)相互學(xué)習(xí)取長(zhǎng)補(bǔ)短逾条。 - 解決方案的復(fù)雜性琢岩。P115
XP處理額外復(fù)雜性的策略總是一樣的:分解復(fù)雜性,同時(shí)持續(xù)交付师脂。讓你所在的角落明朗化担孔。如果你在一個(gè)區(qū)域修正一個(gè)缺陷江锨,把你所負(fù)責(zé)的地方整理好。一個(gè)異議就是這個(gè)“額外的”整理工作要花太長(zhǎng)時(shí)間糕篇,而且團(tuán)隊(duì)很可能在修正缺陷的中斷上浪費(fèi)時(shí)間啄育。因此,整理能幫助減少工作的開(kāi)支拌消√敉悖可見(jiàn)的計(jì)劃使每個(gè)人都容易明白時(shí)間消耗在哪里,因此更容易接受針對(duì)做好工作的必要的評(píng)估墩崩。 - 故障的后果氓英。P115
XP的流原則建議審計(jì)不應(yīng)該是在項(xiàng)目結(jié)束時(shí)的一個(gè)階段,而應(yīng)該較早并且經(jīng)常地審計(jì)鹦筹。
第16章 訪談
- 腦子里有一個(gè)尺度铝阐。對(duì)于適合用XP的項(xiàng)目渐尿,我們會(huì)用XP中所有的方法贸诚。理想的XP項(xiàng)目是由一個(gè)充滿熱情的團(tuán)隊(duì)用Java語(yǔ)言進(jìn)行不熟悉領(lǐng)域的開(kāi)發(fā)。如果我們要擴(kuò)展遺留的C++代碼央碟,我們必須要將XP的方法嵌入到更加瀑布化的項(xiàng)目中遍蟋。我們要事先做更多的需求分析和設(shè)計(jì)工作吹害,并且在給客戶(hù)部署之前要有正式的測(cè)試階段。P119
- 遺留項(xiàng)目無(wú)法使用“簡(jiǎn)單設(shè)計(jì)”的實(shí)踐虚青,因?yàn)閺囊婚_(kāi)始設(shè)計(jì)可能就不是簡(jiǎn)單的它呀。而由于設(shè)計(jì)的復(fù)雜性,導(dǎo)致沒(méi)辦法寫(xiě)充足的測(cè)試挟憔,這樣就會(huì)存在太多的Bug。此外烟号,由于在C++中缺乏重構(gòu)工具绊谭,重構(gòu)很難進(jìn)行。就是這些導(dǎo)致項(xiàng)目開(kāi)始和結(jié)束兩頭的瀑布階段汪拥。
- 一定要采用XP過(guò)程达传,同時(shí)根據(jù)特性進(jìn)行計(jì)劃,要記得計(jì)劃中的條目都應(yīng)該是用戶(hù)所關(guān)心的特性迫筑,還要保證每個(gè)季度都宣布一次計(jì)劃宪赶,而且對(duì)計(jì)劃的迭代要更加頻繁,在實(shí)際開(kāi)發(fā)中脯燃,我們甚至兩個(gè)星期就迭代一次搂妻,同時(shí)不要忘記保證迭代的絕對(duì)穩(wěn)定呢。最后辕棚,記得要讓開(kāi)發(fā)團(tuán)隊(duì)工作在一個(gè)開(kāi)放的空間里欲主,并分配以為客戶(hù)和開(kāi)發(fā)團(tuán)隊(duì)坐在一起邓厕。就算你不得不把XP嵌入到瀑布風(fēng)格的開(kāi)發(fā)中,你仍然可以獲益很多扁瓢。
第二部分 XP哲學(xué)
- XP過(guò)程就是應(yīng)用在軟件上的精益制造详恼。P123
第17章 XP誕生的故事
第18章 泰勒主義和軟件
- 在工程組織里把QA作為一個(gè)單獨(dú)的部門(mén)也傳遞了這樣的信息:工程學(xué)和質(zhì)量是分離和并行的。這樣帶來(lái)的結(jié)果是引几,在組織里把質(zhì)量從工程中分離出來(lái)使得質(zhì)量部門(mén)的工作更像是懲罰性的昧互,而不是建設(shè)性的。P131
- 我不是說(shuō)質(zhì)量伟桅、架構(gòu)或框架對(duì)軟件開(kāi)發(fā)是不重要的。恰恰相反贿讹,它們太重要了渐逃,因此我們才不會(huì)采用泰勒主義的社會(huì)結(jié)構(gòu)茄菊,后者阻止溝通和反饋的流程,而這些對(duì)于在變化的環(huán)境中開(kāi)發(fā)可運(yùn)行的赊堪、靈活的面殖、低成本的軟件是至關(guān)重要的。P131
第19章 豐田生產(chǎn)制度
- 豐田生產(chǎn)制度(Toyota Production System哭廉,TPS)脊僚,最大的浪費(fèi)就是生產(chǎn)過(guò)剩的浪費(fèi)。P133
- 在軟件開(kāi)發(fā)中生產(chǎn)過(guò)剩的浪費(fèi)隨處可見(jiàn):很快就荒廢了的臃腫的需求文檔遵绰;從未用過(guò)的精心構(gòu)思的架構(gòu)辽幌;完成開(kāi)發(fā)好幾個(gè)月也沒(méi)有在產(chǎn)品環(huán)境中集成、測(cè)試和執(zhí)行的代碼椿访;以及直到無(wú)關(guān)輕重或是會(huì)引起誤解時(shí)才被人閱讀的文檔乌企,這些生產(chǎn)要素對(duì)軟件開(kāi)發(fā)是非常重要的,我們必須立即獲取它們的使用價(jià)值成玫,以便得到我們要消除浪費(fèi)的反饋信息加酵。P134
第20章 應(yīng)用XP
- 找一個(gè)經(jīng)理主管人員在組織里發(fā)起對(duì)XP的支持,會(huì)讓你在過(guò)度到這種新的工作風(fēng)格時(shí)與公司的溝通更和諧哭当。開(kāi)始組織變化之路仍然要從你自己做起猪腕,這是你可以控制的一個(gè)變化。首先鍛煉你的技能钦勘,然后將它們投入使用陋葡。模范帶頭開(kāi)始是一種有力的領(lǐng)導(dǎo)形式。P137
- 期望別人做你自己不想做的事情是無(wú)禮和低效的彻采。讓別人冒你不想冒的險(xiǎn)脖岛,將破壞隊(duì)員間的關(guān)系和團(tuán)隊(duì)凝聚力朵栖。權(quán)利和責(zé)任的錯(cuò)位會(huì)導(dǎo)致不信任,你也將以此失去學(xué)習(xí)柴梆、反饋和自我提高的機(jī)會(huì)陨溅。P137
- 學(xué)習(xí)技能并付諸應(yīng)用的策略在很多粒度上都會(huì)起作用:P137
- 你學(xué)會(huì)測(cè)試先編程,然后和你的團(tuán)隊(duì)共享這種方法和經(jīng)驗(yàn)绍在。
- 你的團(tuán)隊(duì)要學(xué)會(huì)逐個(gè)故事評(píng)估和開(kāi)發(fā)门扇,然后邀請(qǐng)內(nèi)部客戶(hù)挑選故事。
- 你的組織要學(xué)會(huì)按計(jì)劃部署可靠的軟件偿渡,然后邀請(qǐng)外部客戶(hù)參與做計(jì)劃臼寄。
- 首先改變自己,然后把改變的成果貢獻(xiàn)給其他人溜宽。這兩個(gè)步驟都能創(chuàng)造價(jià)值吉拳。我改變,是因?yàn)槲野l(fā)現(xiàn)了改進(jìn)的方法适揉。而當(dāng)我向客戶(hù)提供新技能時(shí)留攒,我已經(jīng)經(jīng)歷了它們帶來(lái)的好處。P137
- 如果你知道怎么改進(jìn)嫉嘀,那就去改進(jìn)炼邀,你做出改變并觀察效果,然后對(duì)這些變化融會(huì)貫通剪侮,使之成為固定的習(xí)慣拭宁,最后你到了穩(wěn)定狀態(tài)從而可以吸收更多反饋并確定下一步行動(dòng)。P137
- 推動(dòng)快速轉(zhuǎn)變的條件如下:P138
- 校準(zhǔn)價(jià)值觀瓣俯。團(tuán)隊(duì)和組織愿意以XP的價(jià)值觀指導(dǎo)工作杰标。
- 痛苦。團(tuán)隊(duì)最近經(jīng)歷了一次失敗彩匕,比如開(kāi)發(fā)中止或部署失敗腔剂,這些痛苦而清晰的記憶使人們更加愿意嘗試劇烈的變化。
- 選擇教練推掸。P139
“教練”這個(gè)詞意味著在成為團(tuán)隊(duì)一份子和堅(jiān)持自己獨(dú)立觀點(diǎn)之間的一個(gè)平衡桶蝎。開(kāi)始階段驻仅,教練負(fù)責(zé)發(fā)現(xiàn)改進(jìn)的機(jī)會(huì)并引導(dǎo)實(shí)驗(yàn)解決它們谅畅,教練要有經(jīng)驗(yàn)和洞察力,才不會(huì)陷入日復(fù)一日的團(tuán)隊(duì)工作中噪服。
第21章 純度
第22章 離岸開(kāi)發(fā)
- XP的價(jià)值觀就像適合于坐在一起的團(tuán)隊(duì)一樣適用于多點(diǎn)開(kāi)發(fā)毡泻。更強(qiáng)烈地用戶(hù)反饋,因?yàn)榫嚯x產(chǎn)生了自然隔離粘优。P144
第23章 永恒的編程之道
- XP依賴(lài)于有能力的程序員的成長(zhǎng):能夠快速地評(píng)估仇味、實(shí)現(xiàn)和部署可靠的軟件呻顽。P149
第24章 XP和社區(qū)
- 社區(qū)的支持是軟件開(kāi)發(fā)中一筆巨大的資產(chǎn)。的確如此丹墨,不管這里談及的社區(qū)是團(tuán)隊(duì)自身廊遍,還是當(dāng)?shù)鼐哂邢嗤繕?biāo)的軟件開(kāi)發(fā)者,或是全球性的社區(qū)贩挣,它們都具有極高的價(jià)值喉前。社區(qū)提供了一個(gè)可靠的地方以吐露問(wèn)題和共享經(jīng)驗(yàn)。社區(qū)是個(gè)好地方王财,既可以找到志同道合的聽(tīng)眾卵迂,也可以聆聽(tīng)別人。P150
第25章 結(jié)語(yǔ)
- XP的關(guān)鍵是誠(chéng)實(shí)绒净,與我真正的價(jià)值觀相協(xié)調(diào)见咒。一旦把誠(chéng)實(shí)作為自己的目標(biāo),我發(fā)現(xiàn)挂疆,我實(shí)際上持有的價(jià)值觀不是我想讓世界思考我所堅(jiān)持的改览。P152