課程簡介
本課程為期2天,從了解什么是重構(gòu)、單元測試;對人的要求和益處是什么、對產(chǎn)品的影響和結(jié)果怎么樣;到更重要怎么做重構(gòu)和單元測試。
目標(biāo)收益
學(xué)習(xí)結(jié)束后,學(xué)員對重構(gòu)和單元測試能建立正確、深入的觀點(diǎn)和理解,掌握重構(gòu)單元測試的基本實(shí)踐、要點(diǎn)、流行的工具和常見的誤解和錯誤的做法。
培訓(xùn)對象
軟件交付人員:開發(fā)工程師、測試工程師、項(xiàng)目經(jīng)理/交付經(jīng)理
課程大綱
重構(gòu)(一天) |
1. 能識別代碼中的壞味道 用團(tuán)隊(duì)中的產(chǎn)品代碼做例子分析所出現(xiàn)的壞味道 結(jié)論討論和分析 總結(jié)、講解、概要分析所有種類的壞味道(21種) 結(jié)論討論和分析 2. 正確認(rèn)識和對待壞味道 3. 為什么需要重構(gòu)? 重構(gòu)的考慮、成本、粒度、頻率和方式 4. 學(xué)習(xí)重構(gòu)的原則和步驟 5. 學(xué)習(xí)正確的重構(gòu)步驟 6. 練習(xí)小規(guī)模重構(gòu)-如何重構(gòu)一個(gè)類 重構(gòu)的循環(huán) 【講座】識別類內(nèi)的壞味道 【講座】重構(gòu)的循環(huán) 【講座】什么時(shí)候算做完了? 【講座】在一個(gè)重構(gòu)之內(nèi) 【練習(xí)】小步前進(jìn)-識別重構(gòu)常用的步驟 【練習(xí)】簡單設(shè)計(jì)-如何判斷簡單、你是怎么理解的 已知的Smells 【重構(gòu)】Extract Method/ Class / Subclass /Introduce Rename Method Introduce Assertion Duplicate Observer Date Replace Parameter with Method Preserve Whole Object Introduce Parameter Object 【講座&練習(xí)】注釋 【講座&練習(xí)】長方法 【講座&練習(xí)】大類 【講座&練習(xí)】長參數(shù)列表 【練習(xí)】測驗(yàn):Smells和重構(gòu) 【講座】Smells和重構(gòu) 命名 【重構(gòu)】 【講座&練習(xí)】在名字中嵌入了類型 【講座&練習(xí)】無法達(dá)意的名字 【講座&練習(xí)】不一致的名字 不必要的復(fù)雜性 【重構(gòu)】 【講座&練習(xí)】死代碼 【講座&練習(xí)】投機(jī)未來的可能性 【講座】成對出現(xiàn)的重構(gòu) 重復(fù) 【重構(gòu)】 【講座&練習(xí)】神奇數(shù)字 【講座&練習(xí)】重復(fù)的代碼 【講座&練習(xí)】可互換的類有不同的接口 條件邏輯 【重構(gòu)】 【講座&練習(xí)】空值檢測 【講座&練習(xí)】復(fù)雜的布爾表達(dá)式 【講座&練習(xí)】特殊處理的Case 【講座&練習(xí)】模擬的繼承 7. 練習(xí)較大規(guī)模重構(gòu)-多個(gè)類之間的重構(gòu) 描述數(shù)據(jù) 【講座&練習(xí)】主要的困擾 【講座&練習(xí)】數(shù)據(jù)類 【講座&練習(xí)】數(shù)據(jù)塊 【講座&練習(xí)】臨時(shí)字段 繼承 【講座&練習(xí)】子類拒絕來自父親的遺產(chǎn) 【講座&練習(xí)】不合適的親密關(guān)系(生成子類) 【講座&練習(xí)】Lazy Class 責(zé)任 【講座&練習(xí)】父類嫉妒子類的特性 【講座&練習(xí)】不合適的親密關(guān)系(提取父類) 【講座&練習(xí)】消息鏈 【講座&練習(xí)】中間人 適應(yīng)變化 【講座&練習(xí)】不同的變化動機(jī) 【講座&練習(xí)】散彈獵槍式的修改 【講座&練習(xí)】平行繼承結(jié)構(gòu) 用作公共庫的類 【講座&練習(xí)】不完整的庫類 |
單元測試(1天) |
單元測試入門: 1.【演示】用JUnit4進(jìn)行單元測試-初步掌握用JUnit4進(jìn)行單元測試的能力 2.【練習(xí)】如何按業(yè)務(wù)價(jià)值導(dǎo)向進(jìn)行單元測試設(shè)計(jì) 樹立正確的單元測試認(rèn)識、概念和思路 Fixture組織 單元測試的力度 如何劃分單元測試 3.【討論&分析】為什么不寫單元測試 4.【討論&分析】誰該對(外部/內(nèi)部)質(zhì)量負(fù)責(zé) 5.【講座】什么不是單元測試 6.【講座】什么是單元測試 7.【講座】項(xiàng)目中單元測試策略 怎么寫單元測試 1.【講座】單元測試結(jié)構(gòu) 2.【講座】單元測試內(nèi)容 3.【練習(xí)】如何組織測試數(shù)據(jù) 4.【討論&分析】邊界條件 5.【練習(xí)】如何用Mock輔助邊界條件測試 單元測試重構(gòu) 1.【討論&分析】識別單元測試中的壞味道 2.【練習(xí)】重構(gòu)單元測試 單元測試和構(gòu)建流水線(bulid pipeline) 1.【討論&分析】單元測試在構(gòu)建流水線中的位置和作用 2.【講座&練習(xí)】用Buildr做Java項(xiàng)目構(gòu)建 3.【講座&練習(xí)】用Rake做Ruby項(xiàng)目構(gòu)建 4.【講座&練習(xí)】用Jenkins/Hudson做持續(xù)集成 |
重構(gòu)(一天) 1. 能識別代碼中的壞味道 用團(tuán)隊(duì)中的產(chǎn)品代碼做例子分析所出現(xiàn)的壞味道 結(jié)論討論和分析 總結(jié)、講解、概要分析所有種類的壞味道(21種) 結(jié)論討論和分析 2. 正確認(rèn)識和對待壞味道 3. 為什么需要重構(gòu)? 重構(gòu)的考慮、成本、粒度、頻率和方式 4. 學(xué)習(xí)重構(gòu)的原則和步驟 5. 學(xué)習(xí)正確的重構(gòu)步驟 6. 練習(xí)小規(guī)模重構(gòu)-如何重構(gòu)一個(gè)類 重構(gòu)的循環(huán) 【講座】識別類內(nèi)的壞味道 【講座】重構(gòu)的循環(huán) 【講座】什么時(shí)候算做完了? 【講座】在一個(gè)重構(gòu)之內(nèi) 【練習(xí)】小步前進(jìn)-識別重構(gòu)常用的步驟 【練習(xí)】簡單設(shè)計(jì)-如何判斷簡單、你是怎么理解的 已知的Smells 【重構(gòu)】Extract Method/ Class / Subclass /Introduce Rename Method Introduce Assertion Duplicate Observer Date Replace Parameter with Method Preserve Whole Object Introduce Parameter Object 【講座&練習(xí)】注釋 【講座&練習(xí)】長方法 【講座&練習(xí)】大類 【講座&練習(xí)】長參數(shù)列表 【練習(xí)】測驗(yàn):Smells和重構(gòu) 【講座】Smells和重構(gòu) 命名 【重構(gòu)】 【講座&練習(xí)】在名字中嵌入了類型 【講座&練習(xí)】無法達(dá)意的名字 【講座&練習(xí)】不一致的名字 不必要的復(fù)雜性 【重構(gòu)】 【講座&練習(xí)】死代碼 【講座&練習(xí)】投機(jī)未來的可能性 【講座】成對出現(xiàn)的重構(gòu) 重復(fù) 【重構(gòu)】 【講座&練習(xí)】神奇數(shù)字 【講座&練習(xí)】重復(fù)的代碼 【講座&練習(xí)】可互換的類有不同的接口 條件邏輯 【重構(gòu)】 【講座&練習(xí)】空值檢測 【講座&練習(xí)】復(fù)雜的布爾表達(dá)式 【講座&練習(xí)】特殊處理的Case 【講座&練習(xí)】模擬的繼承 7. 練習(xí)較大規(guī)模重構(gòu)-多個(gè)類之間的重構(gòu) 描述數(shù)據(jù) 【講座&練習(xí)】主要的困擾 【講座&練習(xí)】數(shù)據(jù)類 【講座&練習(xí)】數(shù)據(jù)塊 【講座&練習(xí)】臨時(shí)字段 繼承 【講座&練習(xí)】子類拒絕來自父親的遺產(chǎn) 【講座&練習(xí)】不合適的親密關(guān)系(生成子類) 【講座&練習(xí)】Lazy Class 責(zé)任 【講座&練習(xí)】父類嫉妒子類的特性 【講座&練習(xí)】不合適的親密關(guān)系(提取父類) 【講座&練習(xí)】消息鏈 【講座&練習(xí)】中間人 適應(yīng)變化 【講座&練習(xí)】不同的變化動機(jī) 【講座&練習(xí)】散彈獵槍式的修改 【講座&練習(xí)】平行繼承結(jié)構(gòu) 用作公共庫的類 【講座&練習(xí)】不完整的庫類 |
單元測試(1天) 單元測試入門: 1.【演示】用JUnit4進(jìn)行單元測試-初步掌握用JUnit4進(jìn)行單元測試的能力 2.【練習(xí)】如何按業(yè)務(wù)價(jià)值導(dǎo)向進(jìn)行單元測試設(shè)計(jì) 樹立正確的單元測試認(rèn)識、概念和思路 Fixture組織 單元測試的力度 如何劃分單元測試 3.【討論&分析】為什么不寫單元測試 4.【討論&分析】誰該對(外部/內(nèi)部)質(zhì)量負(fù)責(zé) 5.【講座】什么不是單元測試 6.【講座】什么是單元測試 7.【講座】項(xiàng)目中單元測試策略 怎么寫單元測試 1.【講座】單元測試結(jié)構(gòu) 2.【講座】單元測試內(nèi)容 3.【練習(xí)】如何組織測試數(shù)據(jù) 4.【討論&分析】邊界條件 5.【練習(xí)】如何用Mock輔助邊界條件測試 單元測試重構(gòu) 1.【討論&分析】識別單元測試中的壞味道 2.【練習(xí)】重構(gòu)單元測試 單元測試和構(gòu)建流水線(bulid pipeline) 1.【討論&分析】單元測試在構(gòu)建流水線中的位置和作用 2.【講座&練習(xí)】用Buildr做Java項(xiàng)目構(gòu)建 3.【講座&練習(xí)】用Rake做Ruby項(xiàng)目構(gòu)建 4.【講座&練習(xí)】用Jenkins/Hudson做持續(xù)集成 |