課程簡介
本課程注重實戰(zhàn),采用案例貫穿方式完成實踐,收集了大量的真實案例,針對項目過程中技術人員常犯的錯誤進行了匯總,研討,并最終形成培訓教程。本次培訓從程序員的編程思維開始講解,通過大量的真實案例,詳細地介紹了重構需要注意的要點以及難點,這些知識都是講師十幾年經驗的總結。
本次課程1/3時間講解核心思想,1/3時間動手重構實踐,1/3點評分析總結。
目標收益
培訓對象
各類軟件研發(fā)中心的軟件設計師、架構師, 項目經理,技術總監(jiān),質量部門經理。對于重構技術懷有疑問和困惑,需要梳理解答的團隊和個人,效果最佳。
課程大綱
第一部分 為什么軟件需要及時重構 第一單元 軟件腐爛--重構的必要性 |
內容一:軟件業(yè)者的反思: 軟件腐爛 1.軟件腐爛(Software rot),也叫做代碼腐爛(code rot)或軟件腐朽(software decay)。它描述了隨著時間的逝去感知到軟件的緩慢衰退,其將最終導致它變得不完善、不可使用或難以維護。 2.軟件腐爛(Software rot)有兩種形式: 3.1)隱匿的腐爛:軟件逐漸不再(仍)被使用隨著剩余的應用程序的改變變得不能用。它已經被觀察到不再被使用的軟件有可能一年的半衰期; 4.2) 活動的腐爛:軟件隨著不斷地被修改趨向于失去它的完整性。 5.破窗效應與技術債務 6.案例演示1-通過演示大型項目,隨著客戶需求的變化,導致軟件結構混亂,大家反思,為什么? 你認為軟件腐爛的原因? 反思你們公司的軟件系統也面臨這樣的問題嗎? |
第二部分 重構 第二單元 何為重構 |
內容一:重構 1.重構概述 2.何時重構 3.重構的誤區(qū) 4.重構是持續(xù)進行的,不要先編寫爛代碼,再抽出重構 5.如何發(fā)現哪些地方需要重構 6.如何保證重構的正確 7.如何測試重構 8.通過一個小案例演示重構的基本思想(什么時間重構,如何發(fā)現重構點,如何保證重構的正確性,最后如何驗收) 內容二:案例—通過實際項目演示重構 1.介紹項目需求情況,進行設計 2.閱讀代碼指出代碼壞癥狀 3.通過重構逐步改善代碼質量 4.通過該案例演示重構的過程,我們遇到的難處,如何解決? 內容三:重構關鍵—代碼的壞味道 1.代碼壞味道概述 2.代碼壞味道的分類 3.識別代碼壞味道,是重構的最重要一步 4.所謂重構,無非就是嗅到壞味道,然后,一小步一小步的改了它。問題是,很多人對壞味道的容忍度讓他們嗅不到壞味道, 5.案例分析—通過真實項目的代碼,分析代碼壞味道 |
第二單元 重構 |
內容四一:重構 1.重構手法概述 2.簡要演示重構的主要手法 3.使用IDE重構工具進行重構 4.通過案例演示如何通過重構工具完成重構 內容二:Rhythm of Refactoring -baby step 1.Baby steps involve making a few code changes and then checking your work by running tests. Typical refactorings take seconds or minutes to perform 2.The Rhythm of Refactoring goes like this: a)Verify that all automated tests (microtests) pass b)Decide what code to change c)Implement one or more refactorings carefully d)Run the microtests whenever you wish to confirm that changes have not altered system behavior e)Repeat until the refactoring is complete or revert to an earlier state |
第二單元 重構難題 |
內容一:重構技術難題 1.如何發(fā)現重構點 2.知道重構的目標(結果) 3.如何去重構—重構實踐 4.如何保證重構的正確性-單元測試 內容二:重構業(yè)務難題 1.重構手法概述 2.簡要演示重構的主要手法 |
第三部分 重構實戰(zhàn)1一函數相關重構 第三單元 函數重構 |
內容一:函數的重構 1.函數的重構 2.巨型函數的種類 a)項目列表式巨型方法 b)鋸齒狀巨型方法 3.分解函數 4.助手方法提取 5.利用自動重構對付巨型方法 6.利用手工重構對付巨型方法 7.引入感知變量 8.函數依賴收集 9.分解助手方法和方法對象 10.通過案例介紹長函數的重構最佳實踐 |
第三單元 函數策略和技巧 |
內容一: Refactoring Strategies & Tactics 1.Refactoring Strategy: Piecemeal Refactoring 2.Refactoring Strategy:Divide & Conquer 3.Refactoring Strategy:Narrowed Change 4.Refactoring Strategy:Parallel Change 5.Refactoring Strategy:Unified Methods 6.Refactoring Strategy:Evolved Target 7.Refactoring Strategy: Graceful Retreat 8.Refactoring Strategy: Gradual Cutover 9.Refactoring Strategy: Preparing for Change 10.Refactoring Tactic: Rejected Parameter 11.Refactoring Tactic: Caller Swap 12.Refactoring Tactic:Encapsulated Dependency |
第四部分 重構實戰(zhàn)2 一類重構第 四單元 類重構 |
內容一:重構案例—該案例重點 巨大類的重構 1.重構大類 1.對象的職責重構 2.職責的識別 a)方法分組 b)觀察隱藏方法 c)尋找可以更改的原因 d)尋找內部關系 e)尋找主要職責 f)接口分離—接口隔離原則 3.提取類和接口 4.通過案例介紹如何重構巨大的類 |
第五部分 重構實戰(zhàn)3 一重構到模式 第五單元 重構到模式 |
內容一:案例---重構設計方案引入設計模式 1.通過項目分析重構到模式的手段 2.構造Template Method 3.以Composite取代一/多之分 4.引入Null Object 5.用Adapter統一接口 6.用Fatory Method引入多態(tài)創(chuàng)建 5.通過案例介紹如何重構原始設計方案,演示如何通過重構導入設計模式 內容二:案例---重點介紹重構基本類型依賴和對應模式 1.通過案例學習以下重構到模式手段 2.以State取代狀態(tài)改變條件語句 3.以Strategy取代條件邏輯 4.以Composite取代隱含樹 5.以Interpreter取代隱式語言 6.轉移裝飾功能到Decorator 7.用Builder封裝Composite 8.重點學習案例的重構到模式的過程 內容三:案例---重點介紹重構代碼重復和對應模式 7.通過案例學習以下重構到模式手段 8.構造Template Method 9.以Composite取代一/多之分 10.引入Null Object 11.用Adapter統一接口 12.用Fatory Method引入多態(tài)創(chuàng)建 13.重點學習案例的重構到模式的過程 內容四:案例---重點介紹重構代碼過長/過大的類/方法和對應模式 1.轉移聚集操作到Vistor 2.以Strategy取代條件邏輯 3.以Command取代條件調度程序 4.轉移聚集操作到Collecting Parameter 5.重點學習案例的重構到模式的過程 內容五:案例---重點介紹條件邏輯過度復雜和對應模式 1.以Strategy取代條件邏輯 2.以State取代狀態(tài)改變條件語句 3.轉移裝飾功能到Decorator 4.引入Null Object 5.以Command替換條件調度程序 6.轉移聚集操作到Visitor 7.重點學習案例的重構到模式的過程 |
第六部分 重構實戰(zhàn)4 一模塊/組件重構 第六單元 模塊重構 |
內容一:模塊重構 1.優(yōu)良的系統設計意味著我們把系統分割成了一個個可單獨部署的組件,單獨部署意味著如果更改了一個組件,我們也不需要重新部署其他組件。 2.組件和包 壞味道 3.模塊之間解耦 4.組件的內聚性實踐 5.組件的依賴性實踐 6.企業(yè)應用系統組件設計最佳實踐 7.分析某項目,演示模塊重構,如何在大型應用系統進行模塊重構 |
第七部分 重構實戰(zhàn)5一數據庫重構 第七單元 數據庫重構(該部分根據需求,可以裁剪) |
內容一: 數據重構過程 1.驗證數據庫重構是否合適 2.選擇最合適的數據庫重構 3.讓原來的數據庫schema過時 4.前測試、中測試和后測試 5.修改數據庫schema 6.遷移源數據 7.重構外部訪問程序 8.運行回歸測試 9.對工作進行版本控制 10.結束此次重構 11.分析多年遺留的復雜項目,演示如何重構數據庫, 數據庫重構的一般步驟,和普通的應用程序代碼的重構的不同點。 內容二: 數據庫重構策略 1.小的變更更容易進行 2.唯一地標識每一次重構 3.通過許多小變更實現一次大變更 4.建立數據庫配置表 5.觸發(fā)器優(yōu)于視圖或批量同步 6.選擇一個足夠長的轉換期 7.簡化數據庫變更控制委員會策略 8.簡化與其他團隊的協商 9.封裝對數據庫的訪問 10.能夠容易地建立數據庫環(huán)境 11.不要復制sql 12.將數據庫資產置于變更控制之下 12.通過多個大型項目的數據庫重構策略, 分析在不同的數據庫壞味道下,使用不同的重構策略 |
第八部分 安全重構--構筑重構測試體系 |
內容一:安全重構 1.重構的恐懼心里 2.重構勇氣 3.安全重構和祈禱式重構 4.安全重構保證 a)依賴編輯器 b)簽名保持 c)單一目標 d)依賴編譯器 e)個人的能力 f)代碼審查 g)單元測試 h)驗收測試 i)人工測試 5.通過案例如何保證重構的正確性 |
第一部分 為什么軟件需要及時重構 第一單元 軟件腐爛--重構的必要性 內容一:軟件業(yè)者的反思: 軟件腐爛 1.軟件腐爛(Software rot),也叫做代碼腐爛(code rot)或軟件腐朽(software decay)。它描述了隨著時間的逝去感知到軟件的緩慢衰退,其將最終導致它變得不完善、不可使用或難以維護。 2.軟件腐爛(Software rot)有兩種形式: 3.1)隱匿的腐爛:軟件逐漸不再(仍)被使用隨著剩余的應用程序的改變變得不能用。它已經被觀察到不再被使用的軟件有可能一年的半衰期; 4.2) 活動的腐爛:軟件隨著不斷地被修改趨向于失去它的完整性。 5.破窗效應與技術債務 6.案例演示1-通過演示大型項目,隨著客戶需求的變化,導致軟件結構混亂,大家反思,為什么? 你認為軟件腐爛的原因? 反思你們公司的軟件系統也面臨這樣的問題嗎? |
第二部分 重構 第二單元 何為重構 內容一:重構 1.重構概述 2.何時重構 3.重構的誤區(qū) 4.重構是持續(xù)進行的,不要先編寫爛代碼,再抽出重構 5.如何發(fā)現哪些地方需要重構 6.如何保證重構的正確 7.如何測試重構 8.通過一個小案例演示重構的基本思想(什么時間重構,如何發(fā)現重構點,如何保證重構的正確性,最后如何驗收) 內容二:案例—通過實際項目演示重構 1.介紹項目需求情況,進行設計 2.閱讀代碼指出代碼壞癥狀 3.通過重構逐步改善代碼質量 4.通過該案例演示重構的過程,我們遇到的難處,如何解決? 內容三:重構關鍵—代碼的壞味道 1.代碼壞味道概述 2.代碼壞味道的分類 3.識別代碼壞味道,是重構的最重要一步 4.所謂重構,無非就是嗅到壞味道,然后,一小步一小步的改了它。問題是,很多人對壞味道的容忍度讓他們嗅不到壞味道, 5.案例分析—通過真實項目的代碼,分析代碼壞味道 |
第二單元 重構 內容四一:重構 1.重構手法概述 2.簡要演示重構的主要手法 3.使用IDE重構工具進行重構 4.通過案例演示如何通過重構工具完成重構 內容二:Rhythm of Refactoring -baby step 1.Baby steps involve making a few code changes and then checking your work by running tests. Typical refactorings take seconds or minutes to perform 2.The Rhythm of Refactoring goes like this: a)Verify that all automated tests (microtests) pass b)Decide what code to change c)Implement one or more refactorings carefully d)Run the microtests whenever you wish to confirm that changes have not altered system behavior e)Repeat until the refactoring is complete or revert to an earlier state |
第二單元 重構難題 內容一:重構技術難題 1.如何發(fā)現重構點 2.知道重構的目標(結果) 3.如何去重構—重構實踐 4.如何保證重構的正確性-單元測試 內容二:重構業(yè)務難題 1.重構手法概述 2.簡要演示重構的主要手法 |
第三部分 重構實戰(zhàn)1一函數相關重構 第三單元 函數重構 內容一:函數的重構 1.函數的重構 2.巨型函數的種類 a)項目列表式巨型方法 b)鋸齒狀巨型方法 3.分解函數 4.助手方法提取 5.利用自動重構對付巨型方法 6.利用手工重構對付巨型方法 7.引入感知變量 8.函數依賴收集 9.分解助手方法和方法對象 10.通過案例介紹長函數的重構最佳實踐 |
第三單元 函數策略和技巧 內容一: Refactoring Strategies & Tactics 1.Refactoring Strategy: Piecemeal Refactoring 2.Refactoring Strategy:Divide & Conquer 3.Refactoring Strategy:Narrowed Change 4.Refactoring Strategy:Parallel Change 5.Refactoring Strategy:Unified Methods 6.Refactoring Strategy:Evolved Target 7.Refactoring Strategy: Graceful Retreat 8.Refactoring Strategy: Gradual Cutover 9.Refactoring Strategy: Preparing for Change 10.Refactoring Tactic: Rejected Parameter 11.Refactoring Tactic: Caller Swap 12.Refactoring Tactic:Encapsulated Dependency |
第四部分 重構實戰(zhàn)2 一類重構第 四單元 類重構 內容一:重構案例—該案例重點 巨大類的重構 1.重構大類 1.對象的職責重構 2.職責的識別 a)方法分組 b)觀察隱藏方法 c)尋找可以更改的原因 d)尋找內部關系 e)尋找主要職責 f)接口分離—接口隔離原則 3.提取類和接口 4.通過案例介紹如何重構巨大的類 |
第五部分 重構實戰(zhàn)3 一重構到模式 第五單元 重構到模式 內容一:案例---重構設計方案引入設計模式 1.通過項目分析重構到模式的手段 2.構造Template Method 3.以Composite取代一/多之分 4.引入Null Object 5.用Adapter統一接口 6.用Fatory Method引入多態(tài)創(chuàng)建 5.通過案例介紹如何重構原始設計方案,演示如何通過重構導入設計模式 內容二:案例---重點介紹重構基本類型依賴和對應模式 1.通過案例學習以下重構到模式手段 2.以State取代狀態(tài)改變條件語句 3.以Strategy取代條件邏輯 4.以Composite取代隱含樹 5.以Interpreter取代隱式語言 6.轉移裝飾功能到Decorator 7.用Builder封裝Composite 8.重點學習案例的重構到模式的過程 內容三:案例---重點介紹重構代碼重復和對應模式 7.通過案例學習以下重構到模式手段 8.構造Template Method 9.以Composite取代一/多之分 10.引入Null Object 11.用Adapter統一接口 12.用Fatory Method引入多態(tài)創(chuàng)建 13.重點學習案例的重構到模式的過程 內容四:案例---重點介紹重構代碼過長/過大的類/方法和對應模式 1.轉移聚集操作到Vistor 2.以Strategy取代條件邏輯 3.以Command取代條件調度程序 4.轉移聚集操作到Collecting Parameter 5.重點學習案例的重構到模式的過程 內容五:案例---重點介紹條件邏輯過度復雜和對應模式 1.以Strategy取代條件邏輯 2.以State取代狀態(tài)改變條件語句 3.轉移裝飾功能到Decorator 4.引入Null Object 5.以Command替換條件調度程序 6.轉移聚集操作到Visitor 7.重點學習案例的重構到模式的過程 |
第六部分 重構實戰(zhàn)4 一模塊/組件重構 第六單元 模塊重構 內容一:模塊重構 1.優(yōu)良的系統設計意味著我們把系統分割成了一個個可單獨部署的組件,單獨部署意味著如果更改了一個組件,我們也不需要重新部署其他組件。 2.組件和包 壞味道 3.模塊之間解耦 4.組件的內聚性實踐 5.組件的依賴性實踐 6.企業(yè)應用系統組件設計最佳實踐 7.分析某項目,演示模塊重構,如何在大型應用系統進行模塊重構 |
第七部分 重構實戰(zhàn)5一數據庫重構 第七單元 數據庫重構(該部分根據需求,可以裁剪) 內容一: 數據重構過程 1.驗證數據庫重構是否合適 2.選擇最合適的數據庫重構 3.讓原來的數據庫schema過時 4.前測試、中測試和后測試 5.修改數據庫schema 6.遷移源數據 7.重構外部訪問程序 8.運行回歸測試 9.對工作進行版本控制 10.結束此次重構 11.分析多年遺留的復雜項目,演示如何重構數據庫, 數據庫重構的一般步驟,和普通的應用程序代碼的重構的不同點。 內容二: 數據庫重構策略 1.小的變更更容易進行 2.唯一地標識每一次重構 3.通過許多小變更實現一次大變更 4.建立數據庫配置表 5.觸發(fā)器優(yōu)于視圖或批量同步 6.選擇一個足夠長的轉換期 7.簡化數據庫變更控制委員會策略 8.簡化與其他團隊的協商 9.封裝對數據庫的訪問 10.能夠容易地建立數據庫環(huán)境 11.不要復制sql 12.將數據庫資產置于變更控制之下 12.通過多個大型項目的數據庫重構策略, 分析在不同的數據庫壞味道下,使用不同的重構策略 |
第八部分 安全重構--構筑重構測試體系 內容一:安全重構 1.重構的恐懼心里 2.重構勇氣 3.安全重構和祈禱式重構 4.安全重構保證 a)依賴編輯器 b)簽名保持 c)單一目標 d)依賴編譯器 e)個人的能力 f)代碼審查 g)單元測試 h)驗收測試 i)人工測試 5.通過案例如何保證重構的正確性 |