【文章內(nèi)容簡(jiǎn)介】
員用共通的模型和語(yǔ)言進(jìn)行交流 — ―One Team, one language‖。 ? Metaphor可以幫助減少“知識(shí)泄露”和“支解知識(shí)”。 ? Metaphor是設(shè)計(jì)過(guò)程的航標(biāo) —— 真正靈活有效的設(shè)計(jì)是針對(duì)商業(yè)原則的設(shè)計(jì),而不是針對(duì)商業(yè)原則表現(xiàn)形式的設(shè)計(jì),更不是脫離商業(yè)需求目的的學(xué)術(shù)設(shè)計(jì)。 ? 隨著開發(fā)的繼續(xù), Team會(huì)找到更好的 Metaphor。這是知識(shí)細(xì)化、深化的結(jié)果,是“持續(xù)學(xué)習(xí)” (Continuous learning)的過(guò)程;是對(duì)商業(yè)模型和設(shè)計(jì)模型的持續(xù)重構(gòu)。 ? Copyright 2022 Chinaxp. All rights reserved 40 計(jì)劃項(xiàng)目 增加 /改變 需求 產(chǎn)生和評(píng)估 User Story 發(fā)布計(jì)劃 迭代計(jì)劃 1 迭代計(jì)劃 2 迭代計(jì)劃 n ………… 實(shí)施迭代 1 實(shí)施迭代 2 實(shí)施迭代 n ………… 1..N個(gè)發(fā)布 探索階段 計(jì)劃階段 調(diào)整階段 調(diào)整開發(fā) 速度 / 內(nèi)容 ? Copyright 2022 Chinaxp. All rights reserved 41 測(cè)試驅(qū)動(dòng)開發(fā) 失敗 通過(guò) 時(shí)間 單元測(cè)試 100% 通過(guò) 設(shè)計(jì) 先 寫 單元測(cè)試 重構(gòu) 運(yùn)行 單元測(cè)試 編程 發(fā)現(xiàn) BUG 集成 先 寫 功能測(cè)試 User Story 運(yùn)行 功能測(cè)試 (在第二天的課程將詳細(xì)闡述) ? Copyright 2022 Chinaxp. All rights reserved 42 重構(gòu) ? 減少重復(fù)設(shè)計(jì),優(yōu)化設(shè)計(jì)結(jié)構(gòu),提高技術(shù)上的重用性和可擴(kuò)展性。 ? 在 Metaphor指引下的重構(gòu),是為商業(yè)模型服務(wù)的。不要把重構(gòu)變成不斷的盲目精簡(jiǎn)代碼。 ? 重構(gòu)和編程前的計(jì)劃型設(shè)計(jì) (Planned Design)結(jié)合,使 XP的簡(jiǎn)單設(shè)計(jì)可行有效。 ? XP提倡毫不留情的重構(gòu) (Refactor mercilessly)。 ? 任何人可以重構(gòu)任何代碼,前提是重構(gòu)后的代碼一定要通過(guò) 100%測(cè)試單元測(cè)試后才能被 Checkin。 ? 可以根據(jù)需要,將一個(gè)迭代的全部目標(biāo)定為重構(gòu)。 ? 不要太在意什么是最簡(jiǎn)單的設(shè)計(jì) —— 愿意在最后重構(gòu),比知道如何做簡(jiǎn)單的設(shè)計(jì)重要得多。 (在第三天的課程將詳細(xì)闡述) ? Copyright 2022 Chinaxp. All rights reserved 43 需求 分析 設(shè)計(jì) 編碼 測(cè)試 集成 使用和維護(hù) Planned Design XP Design 變化導(dǎo)致的成本增加 軟件研發(fā) 異動(dòng)曲線 簡(jiǎn)單設(shè)計(jì) XP中的演進(jìn)設(shè)計(jì)( Evolutionarydesign) ? 如果沒有它和眾多慣例規(guī)則之間的耦合, XP的演化設(shè)計(jì)就蛻化成CODEFIX。 ? XP的演化設(shè)計(jì)是在 Upfront design和 Refactoring之間找到新的平衡。 ? Copyright 2022 Chinaxp. All rights reserved 44 簡(jiǎn)單設(shè)計(jì) 簡(jiǎn)單可行,不要增加現(xiàn)階段不需要的復(fù)雜功能。 簡(jiǎn)單設(shè)計(jì) —— Do the simplest thing that could possibly work; You aren‘t going to need it(YAGNI)。 ? 標(biāo)準(zhǔn) (依重要性 ):通過(guò)所有測(cè)試,可讀性高的代碼,避免重復(fù),最少數(shù)量的類別或方法。 ? System Metaphor給設(shè)計(jì)提供了指引,加強(qiáng) Team對(duì)設(shè)計(jì)的理解; ? 第一個(gè)迭代搭建了基本的系統(tǒng)框架。 ? 以后的迭代過(guò)程,是在反饋和編程的基礎(chǔ)上做交互式設(shè)計(jì),減少了設(shè)計(jì)的投機(jī)性。 ? 迭代過(guò)程中的 CRC卡幫助 Team交流設(shè)計(jì)思想,簡(jiǎn)化了設(shè)計(jì)文檔。 ? 重構(gòu)對(duì)設(shè)計(jì)進(jìn)行優(yōu)化。 ? Copyright 2022 Chinaxp. All rights reserved 45 編程規(guī)范 ? 規(guī)定了程序的風(fēng)格,包括注釋如何寫,變量命名的規(guī)范,代碼的格式等等。 ? Teamwork 的前提之一,其它眾多慣例和規(guī)則 (如 Pair Programming, Collective Code Ownership等 )的前提之一。 ? Copyright 2022 Chinaxp. All rights reserved 46 集體擁有代碼 ? ―我們”的代碼,而不是“我”的代碼。 ? 任何人可以改動(dòng)任何一段代碼,但改動(dòng)后的代碼必須通過(guò)所有相關(guān)的測(cè)試。 ? 簡(jiǎn)單設(shè)計(jì),編程規(guī)范和 Pair Programming,使閱讀和修改 Team內(nèi)其他人的代碼變得實(shí)際可行。 ? Copyright 2022 Chinaxp. All rights reserved 47 Pair Programming 兩個(gè)程序員使用同一臺(tái)電腦共同開發(fā)。 XP的必須組成部分, XP中最有爭(zhēng)議的規(guī)則之一 。 (在第二天的課程將詳細(xì)闡述) ? Copyright 2022 Chinaxp. All rights reserved 48 持續(xù)集成 ? 測(cè)試先行是持續(xù)集成的一個(gè)重要前提。 ? 持續(xù)集成指不斷地把完成的功能模塊整合在一起。目的在于不斷獲得客戶反饋以及盡早發(fā)現(xiàn) BUG。 ? 隨時(shí)整合,越頻繁越好;集成及測(cè)試過(guò)程的自動(dòng)化程度越高越好。 ? 每次只有一個(gè) PAIR在整合,而且必須運(yùn)行功能測(cè)試。 失敗 通過(guò) 時(shí)間 功 能 測(cè) 試 ? Copyright 2022 Chinaxp. All rights reserved 49 頻繁地小規(guī)模發(fā)布軟件 ? 發(fā)布過(guò)程應(yīng)該盡可能地自動(dòng)化、規(guī)范化。 ? 不斷地發(fā)布可用的系統(tǒng)可以告訴客戶你在做正確的事情。 ? 客戶使用發(fā)布的系統(tǒng),可以保證頻繁地反饋和交流。 ? 保證客戶有足夠的依據(jù)調(diào)控開發(fā)過(guò)程 (增加、刪除或改變 User Story)。 ? 降低開發(fā)風(fēng)險(xiǎn)。 ? 隨著開發(fā)的推進(jìn),發(fā)布越來(lái)越頻繁。 ? 所有的發(fā)布都要經(jīng)過(guò)功能測(cè)試。 ? Copyright 2022 Chinaxp. All rights reserved 50 平穩(wěn)的工作效率 平穩(wěn)的工作效率指 Team和個(gè)人在很長(zhǎng)的時(shí)期內(nèi)保持一定的開發(fā)效率。 ? 保證了項(xiàng)目速度和計(jì)劃過(guò)程的有效性和準(zhǔn)確性; ? 保證了程序員可以持續(xù)地完成任務(wù), Team可以持續(xù)地向客戶交付可運(yùn)行的系統(tǒng) (見敏捷開發(fā)宣言 ); ? 加班多導(dǎo)致開發(fā)效率和質(zhì)量下降,簡(jiǎn)潔增加了開發(fā)成本; ? Pair Programming已經(jīng)加大了工作強(qiáng)度,并且和其它 XP的規(guī)則一起提高了工作效率,使少加班和維持平穩(wěn)的工作效率可能而且可行。 ? 提倡平穩(wěn)的工作效率,體現(xiàn)了 XP以人為本的價(jià)值觀。 ? Copyright 2022 Chinaxp. All rights reserved XP過(guò)程 52 Team ? Product Manager/Project manager ? Coach ? Team lead ? Developers ? Tracker ? QA ? (OnSite) Customers ? Copyright 2022 Chinaxp. All rights reserved 53 環(huán)境 ? 既有無(wú)隔墻隔板的工作場(chǎng)地,也又單獨(dú)的工作間; ? 一個(gè)足夠?qū)挸ǖ牡胤焦┐蠹议_會(huì); ? 足夠大的白板; ? 足夠長(zhǎng)的電腦桌,可以讓兩個(gè)人并排坐在同一臺(tái)電腦前面; ? 每一個(gè)人都能很容易地看到其他人并和他們交流。 ? 一些白紙或者卡片。 更理想的條件: ? POP ? 電視機(jī) ? Video Game ? 落地玻璃窗 ? Copyright 2022 Chinaxp. All rights reserved 54 開發(fā) 迭代計(jì)劃 CRC卡設(shè)計(jì) 承擔(dān) Task 分解 Task Pair進(jìn)行 測(cè)試驅(qū)動(dòng)的開發(fā) 持續(xù)集成和發(fā)布 迭代結(jié)束 發(fā)布 計(jì)劃 產(chǎn)生 Story 評(píng)估 Story 開始提煉 Metaphor 多個(gè)迭代 多期 計(jì)劃 ? Copyright 2022 Chinaxp. All rights reserved 總結(jié) 56 EXTREME的來(lái)由 ? if the code review is good, we?ll review code all the time (pair programming). ? if testing is good, everybody will test all the time (unit testing ) even the customer (functional test). ? if design is good, we39。ll make it part of everybody39。s daily business (refactoring). ? if simplicity is good, we39。ll always leave the system with the simplest design that supports its current functionalities (simple design). ? if architecture is important, everybody will work defining and refining the architecture all the time (metaphor). ? if integration testing is important, then we39。ll integrate and test several times a day (continuous integration). ? if short iterations are good, we39。ll make the iterations really really short seconds and minutes and hours, not weeks and mo