ExtremeProgramming_第1頁(yè)
ExtremeProgramming_第2頁(yè)
ExtremeProgramming_第3頁(yè)
ExtremeProgramming_第4頁(yè)
ExtremeProgramming_第5頁(yè)
已閱讀5頁(yè),還剩79頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、5 Copyright 2002 Chinaxp. All rights reserved我們?yōu)槭裁葱枰覀優(yōu)槭裁葱枰猉P項(xiàng)目為什么失?。宽?xiàng)目為什么失???軟件工程試圖解決這些問(wèn)題:軟件工程試圖解決這些問(wèn)題:1)對(duì)用戶需求理解得不清楚,甚至有錯(cuò)誤;2)用戶需求變化;3)軟件很難維護(hù)或擴(kuò)展;4)在項(xiàng)目后期階段發(fā)現(xiàn)很嚴(yán)重的設(shè)計(jì)缺陷;5)軟件質(zhì)量或性能不合格;6)Test - Build - Release過(guò)程的可操作性、可維護(hù)性很差;7)人員流動(dòng); 1)為了規(guī)范化開發(fā)過(guò)程,引進(jìn)傳統(tǒng)工程的概念(瀑布型);2)為了理解需求,提出原型法;3)為了提高設(shè)計(jì)開發(fā)的效率和擴(kuò)展性,提出重用和面向?qū)ο蟮人枷耄?)為

2、了讓開發(fā)過(guò)程更靈活,提出了開發(fā)框架的概念;5)為了降低風(fēng)險(xiǎn),提出了風(fēng)險(xiǎn)評(píng)估、成本控制和增量開發(fā)等思想;6我們?yōu)槭裁葱枰覀優(yōu)槭裁葱枰猉P軟件工程的應(yīng)用現(xiàn)狀:軟件工程的應(yīng)用現(xiàn)狀:“特色特色”問(wèn)題還是難以解決:?jiǎn)栴}還是難以解決:1)國(guó)內(nèi)因?yàn)橘Y源限制,軟件工程的實(shí)施流于形式;2)國(guó)內(nèi)軟件工程的研究及推廣工作,和實(shí)踐脫鉤;3)舊的軟件工程方法一直不能有效地支持變化。4)在北美,雖然軟件工程提高了項(xiàng)目成功率,但耗費(fèi)巨大資源;5)以前的軟件工程方法無(wú)法擺脫傳統(tǒng)工程方法的束縛。1)需求難以量化;2)軟件從開發(fā)到維護(hù)及擴(kuò)展,需求都有可能發(fā)生大變化;3)編程對(duì)設(shè)計(jì)的反饋非常重要;4)項(xiàng)目中的設(shè)計(jì)可能會(huì)經(jīng)常變化;

3、5)代碼的可讀性和可維護(hù)性; Copyright 2002 Chinaxp. All rights reserved7我們?yōu)槭裁葱枰覀優(yōu)槭裁葱枰猉P公司公司: 1) 培養(yǎng)團(tuán)隊(duì)合作精神,穩(wěn)定開發(fā)隊(duì)伍; 2) 提高開發(fā)人員的水平; 3) 提高項(xiàng)目成功率,降低開發(fā)成本。項(xiàng)目經(jīng)理項(xiàng)目經(jīng)理: 1) 更好地和用戶溝通,更清晰地理解用戶需求; 2) 更充分地使用資源,更科學(xué)地調(diào)配資源,更精確地掌握開發(fā)進(jìn)度。Team Lead和Architect: 1) 設(shè)計(jì)更加完善; 2) 更有效地更新知識(shí),得到其他成員更多的尊重。程序員程序員: 1) 學(xué)習(xí)系統(tǒng)設(shè)計(jì)和項(xiàng)目管理; 2) 提高學(xué)習(xí)和工作效率,受到重視,減少加

4、班時(shí)間。 Copyright 2002 Chinaxp. All rights reserved8 Fortune 500 公司中成功應(yīng)用XP的公司包括Ford,Daimler-Chrysler,F(xiàn)irst Union National Bank,IBM,HP等等。 2-10人的小規(guī)模開發(fā)隊(duì)伍(小規(guī)模開發(fā)隊(duì)伍 小規(guī)模項(xiàng)目)。 越來(lái)越多的公司開始使用敏捷開發(fā)過(guò)程,或者將其與RUP等開發(fā)過(guò)程結(jié)合使用。誰(shuí)在用誰(shuí)在用XP Copyright 2002 Chinaxp. All rights reserved9什么是什么是XPKent Beck 1996XP is a lightweight metho

5、dology for small to medium sized teams developing software in the face of vague or rapidly changing requirements. - Kent Beck.XP是勇氣,交流,反饋和簡(jiǎn)單。XP是軟件開發(fā)過(guò)程中的紀(jì)律,它規(guī)定你:必須在編程前些測(cè)試,必須兩個(gè)人一起編程,必須遵守編程規(guī)范。XP是把最好的實(shí)踐經(jīng)驗(yàn)提取出來(lái),形成了一個(gè)嶄新的開發(fā)方法。Extreme Programming Copyright 2002 Chinaxp. All rights reserved11軟件生命期軟件生命期 Copyri

6、ght 2002 Chinaxp. All rights reserved12analysisdesigncodetestSystem/informationengineering軟件工程中的第一個(gè)模型軟件工程中的第一個(gè)模型Waterfall模型模型Royce 1970 Copyright 2002 Chinaxp. All rights reserved13需求分析系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)單元測(cè)試系統(tǒng)集成系統(tǒng)測(cè)試使用維護(hù)需求變化維護(hù)開發(fā)有反饋的有反饋的Waterfall模型模型 Copyright 2002 Chinaxp. All rights reserved14需求分析系統(tǒng)設(shè)計(jì)詳細(xì)設(shè)計(jì)編碼單元測(cè)試

7、集成測(cè)試系統(tǒng)測(cè)試驗(yàn)收測(cè)試時(shí)間用戶的理解用戶的理解 = 程序員的理解程序員的理解詳細(xì)程度V 模型(另一種改良)模型(另一種改良) Copyright 2002 Chinaxp. All rights reserved15優(yōu)點(diǎn)優(yōu)點(diǎn)文檔驅(qū)動(dòng)的開發(fā)模型。改良后的模型很注重反饋和測(cè)試,其中V模型提出了測(cè)試驅(qū)動(dòng)開發(fā)的概念。在需求非常明確的前提下可以使用,也適用于有長(zhǎng)期專職開發(fā)人員的小型項(xiàng)目開發(fā)。不足:不足:嚴(yán)格限定了開發(fā)的各階段,缺乏迭代性。缺乏對(duì)變化的支持。 Copyright 2002 Chinaxp. All rights reserved16原型法原型法Brooks 1975設(shè)計(jì)實(shí)現(xiàn)測(cè)試維護(hù)需求設(shè)

8、計(jì)實(shí)現(xiàn)測(cè)試原型 Copyright 2002 Chinaxp. All rights reserved17設(shè)計(jì)實(shí)現(xiàn)初始原型初始概念修改原型直至被接受完成發(fā)布原型最終產(chǎn)品目的是和用戶一起開發(fā)并完善一個(gè)原型,從最清楚的需求部分開始。進(jìn)化原型法進(jìn)化原型法 Copyright 2002 Chinaxp. All rights reserved18快速原型法原型法Build 160 90 天商業(yè)模型數(shù)據(jù)模型處理模型應(yīng)用生成測(cè)試和改造商業(yè)模型數(shù)據(jù)模型處理模型應(yīng)用生成測(cè)試和改造商業(yè)模型數(shù)據(jù)模型處理模型應(yīng)用生成測(cè)試和改造Build 2Build 3(也稱為(也稱為 Throw-it-away)目的是理解需求,

9、從不清楚的需求部分開始。 Copyright 2002 Chinaxp. All rights reserved19優(yōu)點(diǎn):優(yōu)點(diǎn):需求驅(qū)動(dòng)的開發(fā)模型。幫助理解需求。增強(qiáng)和用戶的交流,增加用戶好感。不足:不足:缺乏結(jié)構(gòu)化的系統(tǒng)和嚴(yán)謹(jǐn)?shù)拈_發(fā)流程,很難作為一個(gè)項(xiàng)目進(jìn)行管理。 Copyright 2002 Chinaxp. All rights reserved20確定需求組件分析修訂需求基于重用系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)集成作為一種開發(fā)模式有很多局限,但“重用” 的思想越來(lái)越普及。面向重用的開發(fā)模式面向重用的開發(fā)模式 Copyright 2002 Chinaxp. All rights reserved21 Cop

10、yright 2002 Chinaxp. All rights reserved螺旋式開發(fā)模型螺旋式開發(fā)模型 Boehm 1988風(fēng)險(xiǎn)分析風(fēng)險(xiǎn)分析風(fēng)險(xiǎn)分析風(fēng)險(xiǎn)分析原型1原型2原型3可用的原型模擬,模型,基準(zhǔn)點(diǎn)可操作的概念需求分析需求鑒定產(chǎn)品設(shè)計(jì)設(shè)計(jì)鑒定集成和測(cè)試計(jì)劃開發(fā)計(jì)劃?rùn)z查檢查檢查檢查周期計(jì)劃需求計(jì)劃詳細(xì)設(shè)計(jì)編碼單元測(cè)試集成測(cè)試驗(yàn)收測(cè)試服務(wù)確認(rèn)分析風(fēng)險(xiǎn)評(píng)估替代方案確立目標(biāo)、范圍以及可選方案為下階段做計(jì)劃開發(fā)和鑒定22優(yōu)點(diǎn):優(yōu)點(diǎn): 風(fēng)險(xiǎn)驅(qū)動(dòng)的開發(fā)模型。 靈活??梢愿鶕?jù)風(fēng)險(xiǎn)的處理情況選擇需要的階段(Loop), 因而演變?yōu)閃aterfall、進(jìn)化原型等模型。 各階段都有評(píng)估和風(fēng)險(xiǎn)分析,可根據(jù)變

11、化調(diào)整項(xiàng)目實(shí)施過(guò)程。 適用于復(fù)雜的、風(fēng)險(xiǎn)大的項(xiàng)目。不足:不足: 需要非常專業(yè)的風(fēng)險(xiǎn)評(píng)估技術(shù)。 需要非常豐富的項(xiàng)目經(jīng)驗(yàn)。 Copyright 2002 Chinaxp. All rights reserved23迭代1迭代2迭代3分析設(shè)計(jì)編碼測(cè)試發(fā)布1分析設(shè)計(jì)編碼測(cè)試發(fā)布2分析設(shè)計(jì)編碼測(cè)試發(fā)布3迭代n分析設(shè)計(jì)編碼測(cè)試最終發(fā)布.增量型(例增量型(例RUP) Copyright 2002 Chinaxp. All rights reserved24優(yōu)點(diǎn):優(yōu)點(diǎn):開發(fā)過(guò)程分解為多個(gè)迭代過(guò)程,每個(gè)過(guò)程可以有自己的開發(fā)模型??梢钥焖偬峤豢捎玫南到y(tǒng),然后根據(jù)反饋實(shí)施下一個(gè)迭代。不足:不足:是一個(gè)開發(fā)框架,對(duì)每

12、個(gè)迭代的具體過(guò)程缺乏支持:1)如果迭代太少,很容易會(huì)蛻變?yōu)镃ode-Fix模式,迭代太多則往往因文檔驅(qū)動(dòng)而導(dǎo)致測(cè)試和集成的復(fù)雜度和費(fèi)用太大。2)因而無(wú)法克服以往開發(fā)模型的不足。經(jīng)常蛻變成Waterfall模型。 Copyright 2002 Chinaxp. All rights reserved25軟工革命軟工革命 Agile Process程序員進(jìn)行的是有創(chuàng)造性的腦力活動(dòng) 以人為本Open Source的啟示 更好的Code Review和測(cè)試對(duì)設(shè)計(jì)過(guò)程的重新思考 傳統(tǒng)設(shè)計(jì)的缺陷 編程中的設(shè)計(jì)和編程外的設(shè)計(jì)開發(fā)過(guò)程應(yīng)該更多地面向代碼而不是文檔 輕量級(jí)增量開發(fā)的趨勢(shì) 迭代越來(lái)越頻繁新方法有C

13、rystal,Scrum,XP等 XP結(jié)合“紀(jì)律性”和“適配性”,發(fā)展得最好 Copyright 2002 Chinaxp. All rights reserved26Principles of Agile Processes最高目標(biāo)是能持續(xù)地、及早地向客戶交付軟件;擁抱變化;頻繁地發(fā)布可運(yùn)行的軟件;客戶和開發(fā)人員在一起工作;以人為本;最重要的衡量開發(fā)過(guò)程的手段,是可工作的軟件;穩(wěn)定的開發(fā)速度;敏捷高效的設(shè)計(jì);簡(jiǎn)單有效;重視Teamwork;積極的調(diào)整。/principles.html Copyright 2002 Chinaxp. Al

14、l rights reserved27XP的增量過(guò)程的增量過(guò)程簡(jiǎn)單設(shè)計(jì)迭代計(jì)劃測(cè)試驅(qū)動(dòng)Pair開發(fā)持續(xù)集成重構(gòu)1.N個(gè)個(gè)Iteration發(fā)布計(jì)劃1.N個(gè)個(gè)Release小發(fā)布發(fā)布1.N個(gè)個(gè)Task Copyright 2002 Chinaxp. All rights reserved29哲學(xué)觀(哲學(xué)觀(Philosophy)交流交流(Communication)勇氣勇氣(Courage)簡(jiǎn)單簡(jiǎn)單(Simplicity)反饋反饋(Feedback) Copyright 2002 Chinaxp. All rights reserved30管理管理發(fā)布(Release):每一期開發(fā)結(jié)束時(shí)提交給用

15、戶的一個(gè)可運(yùn)行的系統(tǒng)。迭代(Iteration):一期開發(fā)過(guò)程中的一個(gè)開發(fā)周期。它有明確的目標(biāo),計(jì)劃和實(shí)現(xiàn)方式,它包含了需求分析、設(shè)計(jì)、編程、測(cè)試等完整的開發(fā)過(guò)程。一個(gè)迭代的長(zhǎng)度為1到3 周。在一期開發(fā)過(guò)程中,所有迭代的長(zhǎng)度是相同的,比如都是3周。小發(fā)布(Small Release):處于開發(fā)中的系統(tǒng),每集成一個(gè)新功能,都可以稱為一個(gè)小發(fā)布。理想開發(fā)時(shí)間:估計(jì)完成一項(xiàng)工作所需的持續(xù)工作時(shí)間,不考慮意外因素。 Copyright 2002 Chinaxp. All rights reserved31需求需求SPIKE:對(duì)不確定的需求和設(shè)計(jì)等,通過(guò)寫一些程序、進(jìn)行詳細(xì)設(shè)計(jì)或者演算等等方式做探測(cè)和嘗

16、試,以確定可行性。這些探測(cè)過(guò)程稱為SPIKE。User Story:是對(duì)用戶的一個(gè)需求的一段簡(jiǎn)潔清晰的描述,該段描述有三個(gè)屬性,即商業(yè)優(yōu)先級(jí)、開發(fā)時(shí)間和風(fēng)險(xiǎn)。從某個(gè)角度看,XP過(guò)程是面向User Story的。故事卡:用戶把User Story的內(nèi)容和屬性寫在一張卡片上,該卡片即故事卡。 例,MSDN中的例子Island Hopper News: (1) 客戶瀏覽分類廣告;(2) 客戶發(fā)布分類廣告;客戶瀏覽分類廣告1周周價(jià)值:高價(jià)值:高風(fēng)險(xiǎn):低風(fēng)險(xiǎn):低客戶發(fā)布分類廣告2周周價(jià)值:高價(jià)值:高風(fēng)險(xiǎn):低風(fēng)險(xiǎn):低 Copyright 2002 Chinaxp. All rights reserved3

17、2設(shè)計(jì)設(shè)計(jì)Class NameResponsibilitiesCollaborators1. CRC: Class Responsibility Collaboration。1989年, Kent Beck和Ward Cunningham提出的OO分析和設(shè)計(jì)方法,現(xiàn)在得到了廣泛應(yīng)用。Responsibility:Class的行為。Collaboration: Class之間的相互聯(lián)系和作用;Collaborator指和某行為(Responsibility)相關(guān)的Class??梢栽诳ㄕ婕由细割惷宇惷?;可以在卡背后加上屬性。AdSelectSingleAdBrowseAdDetails(as

18、px) Display an adAd Copyright 2002 Chinaxp. All rights reserved33設(shè)計(jì)設(shè)計(jì)2. Engineering Task:Team一起分析設(shè)計(jì)一個(gè)User Story,把該Story要完成的事情分解,就形成了一些任務(wù)(Engineering Tasks)。這些任務(wù)要足夠小,以至于每個(gè)程序員都非常清楚要做什么,并能估計(jì)出完成該任務(wù)所需要的理想開發(fā)天。每個(gè)程序員挑選了一個(gè)Task后,就成為該Task的Owner,并估計(jì)完成該Task所需的理想開發(fā)天數(shù)。Task的粒度由理想開發(fā)天限制,大于1天且小于3天。從某個(gè)角度看,程序員的工作安排是面向Ta

19、sk的。3. Task卡:Task的內(nèi)容、Owner和理想開發(fā)天都記錄在一張Task卡上。例: 上個(gè)例子中每個(gè)CRC卡可以做為一個(gè)單獨(dú)的任務(wù)被承擔(dān)和估計(jì)。 Copyright 2002 Chinaxp. All rights reserved35十二條慣例和規(guī)則十二條慣例和規(guī)則On-Site Customer (現(xiàn)場(chǎng)客戶)計(jì)劃項(xiàng)目 (Planning Game)頻繁地小規(guī)模發(fā)布軟件 (Small Releases)簡(jiǎn)單設(shè)計(jì) (Simple Design)測(cè)試驅(qū)動(dòng)開發(fā) (Test Driven Development)持續(xù)集成 (Continuous Integration)集體擁有代碼 (Co

20、llective Code Ownership)編程規(guī)范 (Coding Standards)重構(gòu) (Refactoring)System Metaphor (系統(tǒng)隱喻)Pair Programming (結(jié)對(duì)編程)平穩(wěn)的工作效率 (Sustainable Pace) Copyright 2002 Chinaxp. All rights reserved36On-Site Customer 客戶是Team成員,在開發(fā)現(xiàn)場(chǎng)和開發(fā)人員一起工作。 傳統(tǒng)的客戶任務(wù)一般是講解需求,運(yùn)行驗(yàn)收測(cè)試,接收發(fā)布的系統(tǒng)。XP新增加的任務(wù): (1) 寫User Story (2) 評(píng)估User Story的商業(yè)優(yōu)先

21、級(jí) (3) 為每個(gè)User Story定義驗(yàn)收測(cè)試 (4) 計(jì)劃開發(fā)內(nèi)容 (5) 調(diào)控開發(fā)過(guò)程Any More? Copyright 2002 Chinaxp. All rights reserved37On-Site Customer建立商業(yè)模型,把隱藏在客戶需求下的原則傳授給開發(fā)人員:建立商業(yè)模型,把隱藏在客戶需求下的原則傳授給開發(fā)人員:程序員理解的是表象,而不是本質(zhì);程序員分擔(dān)任務(wù)的過(guò)程支解了對(duì)他們商業(yè)模型的理解;某些開發(fā)外包或分階段開發(fā)(例如增量、迭代等)導(dǎo)致“知識(shí)泄露”。參加設(shè)計(jì)過(guò)程參加設(shè)計(jì)過(guò)程:和程序員一起找出Metaphor,導(dǎo)引設(shè)計(jì)方向:在Metaphor的幫助下,定義更有效更

22、實(shí)際的功能測(cè)試,給程序員的設(shè)計(jì)制定了規(guī)范;CRC卡鼓勵(lì)客戶更多地參加設(shè)計(jì)過(guò)程。 Copyright 2002 Chinaxp. All rights reserved38System Metaphor “The system metaphor is a story that everyone - customers, programmers, and managers - can tell about how the system works.” Kent Beck Team將Domain/Sub-Domain Model,Design/Sub-Design Model以及一些關(guān)鍵概念等等抽象

23、化為比喻。通過(guò)這些比喻,加強(qiáng)客戶和程序員之間的相互理解,消化積累知識(shí),指導(dǎo)設(shè)計(jì)開發(fā)的方向。例:Market 發(fā)布/瀏覽,價(jià)格洽談,生成和履行合同;String,Tree,Package,Chartroom,Spider,Robot ;電影后期制作 郵遞 電影院播放電影。 Copyright 2002 Chinaxp. All rights reserved39System MetaphorMetaphor的形成過(guò)程,是客戶建立并抽象商業(yè)模型和商業(yè)概念的過(guò)程,是程序員建立并抽象設(shè)計(jì)模型和設(shè)計(jì)概念的過(guò)程。Metaphor使客戶和程序員用共通的模型和語(yǔ)言進(jìn)行交流 “One Team, one lan

24、guage”。 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 2002 Chinaxp. All rights reserved40計(jì)劃項(xiàng)目計(jì)劃項(xiàng)目增加/改變需求產(chǎn)生和評(píng)估User Story發(fā)布計(jì)劃迭代計(jì)劃1迭代計(jì)劃2迭代計(jì)劃n實(shí)施迭代1實(shí)施迭代

25、2實(shí)施迭代n1.N個(gè)發(fā)布個(gè)發(fā)布探索階段探索階段計(jì)劃階段計(jì)劃階段調(diào)整階段調(diào)整階段調(diào)整開發(fā)速度 / 內(nèi)容 Copyright 2002 Chinaxp. All rights reserved41測(cè)試驅(qū)動(dòng)開發(fā)測(cè)試驅(qū)動(dòng)開發(fā)失敗通過(guò)時(shí)間單元測(cè)試 100% 通過(guò)設(shè)計(jì)先先寫寫單元測(cè)試單元測(cè)試重構(gòu)運(yùn)行運(yùn)行單元測(cè)試單元測(cè)試編程發(fā)現(xiàn)BUG集成先先寫寫功能測(cè)試功能測(cè)試User Story運(yùn)行運(yùn)行功能測(cè)試功能測(cè)試(在第二天的課程將詳細(xì)闡述)(在第二天的課程將詳細(xì)闡述) Copyright 2002 Chinaxp. All rights reserved42重構(gòu)重構(gòu)減少重復(fù)設(shè)計(jì),優(yōu)化設(shè)計(jì)結(jié)構(gòu),提高技術(shù)上的重用性和可

26、擴(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è)試后才能被Check-in。可以根據(jù)需要,將一個(gè)迭代的全部目標(biāo)定為重構(gòu)。不要太在意什么是最簡(jiǎn)單的設(shè)計(jì) 愿意在最后重構(gòu),比知道如何做簡(jiǎn)單的設(shè)計(jì)重要得多。(在第三天的課程將詳細(xì)闡述)(在第三天的課程將詳細(xì)闡述) Copyright 2002 Chinaxp. All rights r

27、eserved43需求 分析 設(shè)計(jì) 編碼 測(cè)試 集成 使用和維護(hù)PlannedDesignXP Design變化導(dǎo)致的成本增加軟件研發(fā)異動(dòng)曲線簡(jiǎn)單設(shè)計(jì)簡(jiǎn)單設(shè)計(jì)XP中的演進(jìn)設(shè)計(jì)(Evolutionary-design)如果沒(méi)有它和眾多慣例規(guī)則之間的耦合,XP的演化設(shè)計(jì)就蛻化成CODE-FIX。XP的演化設(shè)計(jì)是在Up-front design和Refactoring之間找到新的平衡。 Copyright 2002 Chinaxp. All rights reserved44簡(jiǎn)單設(shè)計(jì)簡(jiǎn)單設(shè)計(jì)簡(jiǎn)單可行,不要增加現(xiàn)階段不需要的復(fù)雜功能。 簡(jiǎn)單設(shè)計(jì)簡(jiǎn)單設(shè)計(jì) Do the simplest thing th

28、at could possibly work;You arent 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 2002 Chinaxp. All rights reserved45編程規(guī)范編程規(guī)范規(guī)定了程序的風(fēng)格,包括注釋如何寫,變量

29、命名的規(guī)范,代碼的格式等等。Teamwork 的前提之一,其它眾多慣例和規(guī)則(如Pair Programming, Collective Code Ownership等)的前提之一。 Copyright 2002 Chinaxp. All rights reserved46集體擁有代碼集體擁有代碼“我們”的代碼,而不是“我”的代碼。任何人可以改動(dòng)任何一段代碼,但改動(dòng)后的代碼必須通過(guò)所有相關(guān)的測(cè)試。簡(jiǎn)單設(shè)計(jì),編程規(guī)范和Pair Programming,使閱讀和修改Team內(nèi)其他人的代碼變得實(shí)際可行。 Copyright 2002 Chinaxp. All rights reserved47Pai

30、r Programming 兩個(gè)程序員使用同一臺(tái)電腦共同開發(fā)。XPXP的必須組成部分,的必須組成部分,XPXP中中最有爭(zhēng)議的規(guī)則之一最有爭(zhēng)議的規(guī)則之一。(在第二天的課程將詳細(xì)闡述)(在第二天的課程將詳細(xì)闡述) Copyright 2002 Chinaxp. All rights reserved48持續(xù)集成持續(xù)集成測(cè)試先行是持續(xù)集成的一個(gè)重要前提。持續(xù)集成指不斷地把完成的功能模塊整合在一起。目的在于不斷獲得客戶反饋以及盡早發(fā)現(xiàn)BUG。隨時(shí)整合,越頻繁越好;集成及測(cè)試過(guò)程的自動(dòng)化程度越高越好。每次只有一個(gè)PAIR在整合,而且必須運(yùn)行功能測(cè)試。失敗通過(guò)時(shí)間功 能 測(cè) 試 Copyright 200

31、2 Chinaxp. All rights reserved49頻繁地小規(guī)模發(fā)布軟件頻繁地小規(guī)模發(fā)布軟件發(fā)布過(guò)程應(yīng)該盡可能地自動(dòng)化、規(guī)范化。不斷地發(fā)布可用的系統(tǒng)可以告訴客戶你在做正確的事情??蛻羰褂冒l(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 2002 Chinaxp. All rights reserved50平穩(wěn)的工作效率平穩(wěn)的工作效率 平穩(wěn)的工作效率指Team和個(gè)人在很長(zhǎng)的時(shí)期內(nèi)保持一定的開發(fā)效率。保證了項(xiàng)目速度和計(jì)劃過(guò)程的有效

32、性和準(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 2002 Chinaxp. All rights reserved52Team Product Manager/Project manager Coach Team lead Developers Tracker QA (On-Site) C

33、ustomers Copyright 2002 Chinaxp. All rights reserved53環(huán)境環(huán)境既有無(wú)隔墻隔板的工作場(chǎng)地,也又單獨(dú)的工作間;一個(gè)足夠?qū)挸ǖ牡胤焦┐蠹议_會(huì);足夠大的白板;足夠長(zhǎng)的電腦桌,可以讓兩個(gè)人并排坐在同一臺(tái)電腦前面;每一個(gè)人都能很容易地看到其他人并和他們交流。一些白紙或者卡片。更理想的條件:POP電視機(jī)Video Game落地玻璃窗 Copyright 2002 Chinaxp. All rights reserved54開發(fā)開發(fā)迭代計(jì)劃CRC卡設(shè)計(jì)承擔(dān)Task分解TaskPair進(jìn)行測(cè)試驅(qū)動(dòng)的開發(fā)持續(xù)集成和發(fā)布迭代結(jié)束發(fā)布計(jì)劃產(chǎn)生Story評(píng)估Stor

34、y開始提煉Metaphor多個(gè)迭代多期計(jì)劃 Copyright 2002 Chinaxp. All rights reserved56EXTREME的來(lái)由if the code review is good, well 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, well make it part of e

35、verybodys daily business (refactoring).if simplicity is good, well 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 integratio

36、n testing is important, then well integrate and test several times a day (continuous integration).if short iterations are good, well make the iterations really really short- seconds and minutes and hours, not weeks and months and years (planning game). Copyright 2002 Chinaxp. All rights reserved57 慣

37、例和規(guī)則慣例和規(guī)則頻繁的反饋 測(cè)試驅(qū)動(dòng)開發(fā)計(jì)劃項(xiàng)目On-site Customer Pair Programming 共同理解交流 簡(jiǎn)單設(shè)計(jì)System Metaphor 集體擁有代碼編程規(guī)范持續(xù)的增量開發(fā)持續(xù)集成重構(gòu)頻繁地小發(fā)布以人為本穩(wěn)定的工作效率 Copyright 2002 Chinaxp. All rights reserved58交流交流交流開發(fā)討論設(shè)計(jì)PairProgrammingQA交談文檔卡片圖表代碼測(cè)試文件編程規(guī)范工作環(huán)境會(huì)議計(jì)劃會(huì)議StandupMeeting回顧發(fā)布計(jì)劃迭代計(jì)劃System Metaphor代碼集體所有Team其它價(jià)值觀勇氣簡(jiǎn)單反饋有交流過(guò)度的項(xiàng)目嗎?有

38、交流過(guò)度的項(xiàng)目嗎? Copyright 2002 Chinaxp. All rights reserved59反饋反饋反饋學(xué)習(xí)程序員之間回顧C(jī)oachPair文檔Spike其它價(jià)值觀勇氣簡(jiǎn)單交流開發(fā)集成測(cè)試PairProgramming單元測(cè)試持續(xù)集成驗(yàn)收測(cè)試迭代小規(guī)模發(fā)布產(chǎn)品計(jì)劃評(píng)估On-siteCustomers調(diào)控風(fēng)險(xiǎn)時(shí)間價(jià)值反饋就是抱怨?反饋就是抱怨? Copyright 2002 Chinaxp. All rights reserved60勇氣勇氣勇氣Team集體擁有代碼合作統(tǒng)一規(guī)范其它價(jià)值觀反饋簡(jiǎn)單交流態(tài)度自信品質(zhì)好勝驕傲迭代計(jì)劃開發(fā)Refactoring編程配置管理SimpleD

39、esign測(cè)試取舍 Copyright 2002 Chinaxp. All rights reserved61簡(jiǎn)單簡(jiǎn)單簡(jiǎn)單需求CRCOn-SiteCustomers項(xiàng)目計(jì)劃其它價(jià)值觀勇氣反饋交流質(zhì)量持續(xù)集成開發(fā)輕量極開發(fā)環(huán)境系統(tǒng)SimpleDesignRefactoring做最簡(jiǎn)單的事情讓系統(tǒng)運(yùn)行SystemMetaphor Copyright 2002 Chinaxp. All rights reserved62XP ON-SITEEverything is public!寬敞明亮舒適的工作場(chǎng)地。巨幅的表格掛在墻上,每個(gè)人都能馬上知道項(xiàng)目的進(jìn)展情況。所有的DESIGN都是公開展示的。巨幅的S

40、tory卡掛在墻上,客戶正在給程序員們解釋需求。一些程序員正在對(duì)墻上貼的TASK卡進(jìn)行討論。一些程序員正在用用CRC卡和客戶一起設(shè)計(jì)一個(gè)Story。不斷地見到有人在討論交流,沒(méi)有人是獨(dú)自躲在角落里靜悄悄地寫程序。 Copyright 2002 Chinaxp. All rights reserved63怎么開始怎么開始XP在項(xiàng)目開發(fā)中嘗試一些規(guī)則?裁減成“我的XP”?全面采用?我們的建議是:設(shè)計(jì)和項(xiàng)目管理經(jīng)驗(yàn)不足: 先在一些小的,或者風(fēng)險(xiǎn)低的,或者比較有把握的項(xiàng)目中運(yùn)用。跟蹤觀察,逐步熟悉。對(duì)公司管理過(guò)程中的相關(guān)部分進(jìn)行調(diào)整。再運(yùn)用到更復(fù)雜的項(xiàng)目中去。有比較豐富的經(jīng)驗(yàn): 全面使用,但是在開始幾

41、個(gè)月應(yīng)該嚴(yán)格遵循XP的規(guī)定,熟練之后再做調(diào)整。購(gòu)買我們的服務(wù)。 Copyright 2002 Chinaxp. All rights reserved66項(xiàng)目速度項(xiàng)目速度 (Project Velocity)Iteration(3周)計(jì)劃速度實(shí)際完成16626838104108588n假設(shè)有6個(gè)程序員。1、項(xiàng)目速度:一個(gè)迭代(Iteration)完成的理想開發(fā)周(Ideal week)。例:一個(gè)開發(fā)小組在一個(gè)迭代里能完成10個(gè)理想開發(fā)周的工作,那么項(xiàng)目開發(fā)速度就是10。這個(gè)10周的工作可能包括一個(gè)3周的User Story、兩個(gè)2周的User Story和三個(gè)1周的User Story。 2、

42、開發(fā)速度的設(shè)定依據(jù)“yesterdays weather”的原則。第一個(gè)迭代的速度可以按照“程序員數(shù) X 1”計(jì)算。 Copyright 2002 Chinaxp. All rights reserved67項(xiàng)目速度項(xiàng)目速度(Project Velocity)個(gè)人承擔(dān)任務(wù)時(shí),估計(jì)該任務(wù)的理想開發(fā)天。第一個(gè)迭代中,個(gè)人可以按照5個(gè)理想開發(fā)天的總數(shù)來(lái)承擔(dān)任務(wù)。例:1個(gè)2天的任務(wù),3個(gè)1天的任務(wù)。個(gè)人承擔(dān)的任務(wù)量按照“Yesterdays Weather”原則計(jì)算。Iteration(3周)承擔(dān)任務(wù)實(shí)際完成154246368487577n某程序員的開發(fā)速度 Copyright 2002 Chinax

43、p. All rights reserved68計(jì)劃項(xiàng)目計(jì)劃項(xiàng)目一、探索階段(一、探索階段(Exploration Phase)寫Story估計(jì)理想開發(fā)時(shí)間分拆Story合并StorySPIKEUP&UP&UPP評(píng)估商業(yè)價(jià)值評(píng)估開發(fā)風(fēng)險(xiǎn)PUP:程序員:程序員U:用戶:用戶 3 周周3天 分解1天 合并S/P宣讀解釋StoryU Copyright 2002 Chinaxp. All rights reserved70計(jì)劃項(xiàng)目計(jì)劃項(xiàng)目三、調(diào)整階段(三、調(diào)整階段(Steering Phase)Q:在某個(gè)迭代中一些User Story的實(shí)際開發(fā)時(shí)間和理想開發(fā)時(shí)間不同,在下一個(gè)迭代開始

44、前是否應(yīng)該重新評(píng)估每個(gè)User Story的理想開發(fā)時(shí)間?A:不是重新評(píng)估,而是調(diào)整開發(fā)速度(升高/降低)。同理,程序員在每此進(jìn)行Iteration Plan時(shí)會(huì)增加或者減少承擔(dān)的Task數(shù)目。Q:正在開發(fā)時(shí)如果增加一個(gè)User Story,評(píng)估時(shí)要注意什么?A:不要故意將理想開發(fā)時(shí)間評(píng)估低(因?yàn)檫@個(gè)迭代實(shí)際開發(fā)速度太高,下個(gè)迭代任務(wù)就會(huì)增多),否則會(huì)破壞計(jì)劃過(guò)程。Q:開發(fā)速度下降了怎么辦?A:Coach要找到速度下降的原因,速度下降可能是項(xiàng)目失敗的先兆。 Copyright 2002 Chinaxp. All rights reserved71Pair Programming迭代計(jì)劃會(huì)議結(jié)束

45、后,每個(gè)Task的Owner會(huì)尋找一個(gè)Partner進(jìn)行Pair開發(fā)。Task開發(fā)的次序由程序員們自己協(xié)商。一個(gè)程序員不能同時(shí)擔(dān)當(dāng)Owner和Partner的角色,他(她)可以先作為Partner和其他Owner一起開發(fā)某個(gè)Task,然后再找另一個(gè)程序員作為Partner來(lái)共同開發(fā)自己承擔(dān)的Task。 Copyright 2002 Chinaxp. All rights reserved72程序員的一天程序員的一天9AM Standup MeetingPair UpQA測(cè)試測(cè)試編碼編碼重構(gòu)重構(gòu)集成集成5PM 結(jié)束結(jié)束 Copyright 2002 Chinaxp. All rights res

46、erved73風(fēng)險(xiǎn)管理風(fēng)險(xiǎn)管理需求階段:SPIKE和Story的風(fēng)險(xiǎn)評(píng)估。計(jì)劃過(guò)程:發(fā)布計(jì)劃和迭代計(jì)劃中,根據(jù)需求變化進(jìn)行相應(yīng)調(diào)整。設(shè)計(jì)過(guò)程:簡(jiǎn)單設(shè)計(jì)避免Over-Engineering。開發(fā)過(guò)程: 1) 設(shè)計(jì)驅(qū)動(dòng)的開發(fā)過(guò)程; 2) Pair Programming; 3) 持續(xù)集成; 4) 頻繁的小發(fā)布。 Copyright 2002 Chinaxp. All rights reserved75發(fā)布分類廣告瀏覽分類廣告Use Case 說(shuō)明說(shuō)明:名稱簡(jiǎn)短描述事件流程初始狀態(tài)結(jié)束狀態(tài)異常術(shù)語(yǔ)表術(shù)語(yǔ)表:客戶: 分類廣告:補(bǔ)充說(shuō)明:補(bǔ)充說(shuō)明:可用性: 可靠性: 可維護(hù)性:User Story 和和

47、 Use Case 的區(qū)別的區(qū)別PresentationRequirementMock-upWindow Copyright 2002 Chinaxp. All rights reserved76User Story 和和 Use Case 的區(qū)別的區(qū)別User StoryUse Case Modeling從用戶角度看從用戶角度看從開發(fā)人員角度看由用戶寫由用戶寫由開發(fā)人員寫給開發(fā)人員看給開發(fā)人員看給用戶看一張卡片上的一段描述一張卡片上的一段描述圖每張卡必須有商業(yè)價(jià)值、開發(fā)風(fēng)險(xiǎn)和每張卡必須有商業(yè)價(jià)值、開發(fā)風(fēng)險(xiǎn)和開發(fā)時(shí)間三個(gè)評(píng)估值開發(fā)時(shí)間三個(gè)評(píng)估值每個(gè)圖通常常有正規(guī)的說(shuō)明、術(shù)語(yǔ)表等等不包含細(xì)節(jié)流程

48、不包含細(xì)節(jié)流程包含細(xì)節(jié)流程1周周 粒度粒度 3周周無(wú)一張卡片只有一個(gè)一張卡片只有一個(gè)User Story一個(gè)圖通常有多個(gè)Use Case開發(fā)計(jì)劃以開發(fā)計(jì)劃以User Story為單位為單位無(wú)開發(fā)速度根據(jù)開發(fā)速度根據(jù)User Story計(jì)算計(jì)算無(wú) Copyright 2002 Chinaxp. All rights reserved77System Metaphor開發(fā)過(guò)程中可能會(huì)形成很多Metaphor。第一個(gè)Metaphor是在Exploration階段形成的 在完成User Story和Spike之后,Team通過(guò)“諸葛亮?xí)背橄笊逃蚰P汀M粋€(gè)概念或模型,可能有多個(gè)Metaphor從不同

49、角度理解。Metaphor雖然提供了不精確的描述,但留下了擴(kuò)展和思考的空間。最差的Metaphor是平鋪直敘的描述(Nave Metaphor);Metaphor不是圖(例如Use Case Diagram,Activity Diagram,類圖等等)。Metaphor提供了開發(fā)過(guò)程中命名的Context,好的Metaphor有時(shí)可以作為頂級(jí)類名。如果Metaphor在開發(fā)過(guò)程中變得毫無(wú)用處,或者對(duì)Metaphor的理解出現(xiàn)很大差異,Team應(yīng)該檢討需求和設(shè)計(jì)。最后最好的Metaphor表達(dá)了艱苦獲得的知識(shí),可以作為文檔保留下來(lái)。 Copyright 2002 Chinaxp. All rig

50、hts reserved78XP的的Anti-Patterns“有些規(guī)則好像不適用,比如Pair Programming,可以去掉。XP是靈活的?!?XP的靈活是建立在所有的慣例和規(guī)則上的。“簡(jiǎn)單設(shè)計(jì),還沒(méi)做到那里,就不要想那個(gè)需求的實(shí)現(xiàn)細(xì)節(jié)?!?不要忘了XP的Spike是什么?!皶r(shí)間太緊了,別寫測(cè)試了?!?測(cè)試只會(huì)幫你節(jié)省時(shí)間?!爸貥?gòu)就是讓不斷地壓縮code?!?最后沒(méi)有人知道怎么改那些code。“要簡(jiǎn)單,想那些Metaphor太復(fù)雜了?!?XP的價(jià)值觀不僅僅是簡(jiǎn)單。“我們的XP項(xiàng)目不用Metaphor也能成功?!?XP是個(gè)不斷練習(xí)的過(guò)程,你需要逐步增加建模和交流的能力?!皠e問(wèn)我,我不知道。

51、我現(xiàn)在很忙,你去問(wèn)他?!?XP的交流反對(duì)這種拒絕?!拔覀冇玫氖荴P,不需要天才,而且任何人走都沒(méi)關(guān)系?!?成功的XP項(xiàng)目非常吸引程序員,讓他們充分發(fā)揮自己的潛力;而不是把他們變成編程機(jī)器。 Copyright 2002 Chinaxp. All rights reserved80XP過(guò)程過(guò)程1、準(zhǔn)備開發(fā)環(huán)境。2、Exploration Phase(1) 程序員和用戶一起把需求分解為User Story,用戶寫Story卡。 (2) 用戶把在Story卡上標(biāo)上商業(yè)優(yōu)先級(jí)(1,2,3)。(3) 程序員看卡片,估計(jì)所需要的理想開發(fā)周,把估計(jì)的時(shí)間寫在Story卡上(1,2,3) 。 (3.1) 由一

52、個(gè)Senior估計(jì)時(shí)間。 (3.2) 如果估計(jì)不出來(lái),做Spike。 (3.2) 如果時(shí)間大于三周,分解Story,撕掉舊Story卡,寫下新的Story卡?;氐?3),重新估計(jì)。 (3.3) 由一個(gè)Junior估計(jì)時(shí)間。衡量二者的差異,取平均值。 (3.3) 如果時(shí)間大于三周,回到(3.2)。 (3.4) 如果時(shí)間小于一周,嘗試和其它Story合并。合并后,撕掉原來(lái)的Story卡,寫下新的Story卡。(4) 程序員看卡片,估計(jì)開發(fā)風(fēng)險(xiǎn)。把風(fēng)險(xiǎn)級(jí)別寫在Story卡上(1,2,3) 。 (4.1) 程序員將所有卡片放在一起,然后閱讀。如果認(rèn)為風(fēng)險(xiǎn)低,就放在第二堆,否則不移動(dòng)。 (4.2) 程序員閱讀第二堆卡片。如果認(rèn)為風(fēng)險(xiǎn)低,就放在第三堆,否則不移動(dòng)。 (4.2) 對(duì)三堆卡片分別標(biāo)記。 Copyright 2002 Chinaxp. All rights reserved81XP過(guò)程過(guò)程3、Release Plan(1) 確定該Release中Iteration的長(zhǎng)度(例如3周)。計(jì)算,開發(fā)總時(shí)間/迭代長(zhǎng)度 = 迭代數(shù)。(2) 計(jì)算可完成的開發(fā)量,告訴客戶。

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論