課程簡介
1、以重構視角,剖析多家巨頭軟件公司的成敗興衰。揭示重構工作的重要性。
2、與敏捷管理結合,提供重構管理的策略與方式方法。
3、借助案例,展現(xiàn)重構步驟的最佳實踐。
4、重構的保證:自動化測試。
5、重構的基礎工作:尋找代碼的壞味道。
6、用多個實戰(zhàn)訓練的方式,由粗到細,講解類重構、函數(shù)重構、函數(shù)內(nèi)部重構3個層次要達成的重構目標,以及相關的重構技巧。
目標收益
1、隨著軟件越來越大,開發(fā)效率越來越低。需求變更需要多處代碼修改,并且極易引入Bug。
2、管理者不知道如何評判軟件內(nèi)部質量的優(yōu)劣,缺乏衡量標準的知識和相關工具的運用。
3、有經(jīng)驗的老員工,因為厭煩了枯燥的維護工作而離職。
4、程序員員希望改變代碼腐化的現(xiàn)狀,卻不知道如何入手。
5、項目開發(fā)人員缺乏設計原則的知識,開發(fā)的代碼只是為了完成功能,很少進行架構優(yōu)化。
6、軟件無法重用,每一個新項目幾乎都是一次重新開始。
7、由于代碼可讀性差,新員工無法接手遺留系統(tǒng)。并且軟件越維護越雜亂
培訓對象
培訓面向人群:使用面向對象語言的軟件架構師、軟件設計師、程序員、測試人員。
課程大綱
第一單元 重構的重要性 與 重構管理 |
該單元內(nèi)容主要面向公司管理人員。 通過分析巨頭軟件公司在代碼維護上的失敗經(jīng)驗,讓管理者認識到重構工作的重要性。 并提出相應的管理辦法。 1、開發(fā)效率問題 (1)大部分公司的現(xiàn)狀 (2)消失的巨頭公司 (3)代碼是怎么腐化變爛的 (4)代碼是債務,而不是資產(chǎn) 2、償還債務的辦法――重構與重寫 (1)重構與重新的區(qū)別 (2)為何要選擇重構而不是重寫? 3、重構管理 (1)重新認識代碼的內(nèi)部質量 (2)重構面臨的管理挑戰(zhàn) 重構的推行策略與方式 |
第二單元 重構對開發(fā)人員的意義 與 重構最佳實踐 |
從第二單元開始,授課內(nèi)容面向程序員。 通過案例,展示糟糕代碼對程序員工作情緒的影響,讓程序員產(chǎn)生主動重構的動力。 通過實戰(zhàn)訓練操作,向程序員說明重構的最佳實踐步驟。 并在實戰(zhàn)訓練的同時,介紹幾個重構相關工具的使用方法。 1、重構――從程序員自己做起 (1)從中興的案例說起 (2)寫出好代碼的目的 (3)代碼是寫給人讀的,而不是寫給機器跑的 (4)讓營地比你來時更干凈 2、重構的最佳實踐 (1)覓取重構點 (2)重構代碼 (3)自動化單元測試 3、重構相關工具 (1)單元測試工具 (2)測試覆蓋率工具 (3)打樁工具 (4)自動化重構工具 (5)自動化測試工具 |
第三單元 嗅出代碼的壞味道 |
介紹代碼的多種壞味道,為重構點指明方向。 學習使用代碼內(nèi)部質量檢測工具,讓覓取重構點的工作工具化。 學習使用自動化檢測工具,讓覓取重構點的工作自動化。 1、壞味道的分類 (1)重復的代碼 (2)含糊不清的命名 (3)方法相關的壞味道 (4)類相關的壞味道 (5)散彈式修改 (6)發(fā)散式變化 (7)不恰當?shù)谋┞?br/>(8)過多的注釋 (9)其他壞味道 2、“鼻子”麻木了怎么辦 代碼內(nèi)部質量檢測工具 3、沒時間檢測怎么辦 (1)自動化的測試和告警工具 (2)自動化檢測原理 |
第四單元 類重構技能 |
講解創(chuàng)建類的目的。引申出對象職責的概念,并通過實戰(zhàn)訓練講述職責劃分的技巧。 講授面向對象設計的5大設計原則。 詳細講解“單一職責原則”。 通過實戰(zhàn)訓練,傳授“依賴倒置原則”的使用。 1、為什么需要封裝類 (1)設計“類”概念的目的 (2)良好模塊和糟糕模塊的區(qū)別 (3)最少知道原則 (4)封裝相關的壞味道 2、對象職責概念 (1)對象職責概論 (2)對象職責的劃分技巧 3、面向對象設計的5大設計原則 (1)單一職責原則 (2)開閉原則 (3)里氏替換原則 (4)接口隔離原則 (5)依賴倒置原則 4、單一職責原則 (1)定義與案例 (2)職責的識別技巧 (3)職責相關的壞味道 5、依賴倒置原則 (1)定義 (2)案例 6、類重構技巧 (1)提煉抽象 (2)打樁測試 (3)分離組件(6個組包原則) (4)組件內(nèi)部優(yōu)化 7、設計模式 (1)策略模式 (2)工廠模式 (3)MVP模式 (4)觀察者模式 (5)其他模式 |
第五單元 函數(shù)重構技能 |
該單元主要講解函數(shù)重構。函數(shù)的重構最主要的工作是函數(shù)抽取。 講授高質量函數(shù)的標準和助手函數(shù)的概念。 最后介紹VS2008自帶的C#重構工具,主要演示其中“提取方法”和“封裝字段”功能。 1、創(chuàng)建函數(shù)的理由 列舉多個創(chuàng)建函數(shù)的理由,避免程序中產(chǎn)生巨型函數(shù)。 2、高質量函數(shù)的三原則 (1)單一抽象層次原則 (2)單一職責原則 (3)短小原則 3、助手函數(shù) (1)定義 (2)好處 4、自動化重構工具 學習VS2008內(nèi)置的重構工具。減少程序員抽取函數(shù)的工作量。 |
第六單元 函數(shù)內(nèi)部優(yōu)化 |
在上一單元的基礎上,本單元主要講解如何通過優(yōu)化函數(shù)內(nèi)部的代碼,增加代碼的可讀性、可維護性。 1、為你的函數(shù)取個好名字 (1)一些基本原則 (2)檢查方法 2、簡化表達式 (1)引入解釋性變量 (2)盡量少用邏輯非運算符 3、馴服深層嵌套 (1)使用衛(wèi)語句 (2)用switch-case語句,代替if-els (3)表驅動法 4、消除魔鬼數(shù)字 5、優(yōu)化變量 (1)變量命名 (2)一個變量只做一件事 (3)控制變量的作用域 (4)縮短變量的存活時間 (5)減少控制標記 6、優(yōu)化循環(huán) (1)循環(huán)的種類 (2)循環(huán)的選擇 (3)循環(huán)的危險性 (4)循環(huán)的重構 7、縮短參數(shù)列表 |
第七單元 維護遺留系統(tǒng) |
課程的最后,介紹在無自動化測試用例保證的遺留系統(tǒng)中,如何進行保護性的開發(fā)和重構工作。并提出維護代碼的準則。 1、維護代碼的準則 首先做到不傷害。 2、修改代碼的藝術 (1)新生方法 (2)新生類 (3)外敷方法 (4)外敷類 |
第八單元 架構師的作用 |
1、設計者 (1)切分系統(tǒng) (2)設計接口 (3)選用設計模式 2、教導者 (1)引導團隊 (2)修正偏離 加強學習 |
第一單元 重構的重要性 與 重構管理 該單元內(nèi)容主要面向公司管理人員。 通過分析巨頭軟件公司在代碼維護上的失敗經(jīng)驗,讓管理者認識到重構工作的重要性。 并提出相應的管理辦法。 1、開發(fā)效率問題 (1)大部分公司的現(xiàn)狀 (2)消失的巨頭公司 (3)代碼是怎么腐化變爛的 (4)代碼是債務,而不是資產(chǎn) 2、償還債務的辦法――重構與重寫 (1)重構與重新的區(qū)別 (2)為何要選擇重構而不是重寫? 3、重構管理 (1)重新認識代碼的內(nèi)部質量 (2)重構面臨的管理挑戰(zhàn) 重構的推行策略與方式 |
第二單元 重構對開發(fā)人員的意義 與 重構最佳實踐 從第二單元開始,授課內(nèi)容面向程序員。 通過案例,展示糟糕代碼對程序員工作情緒的影響,讓程序員產(chǎn)生主動重構的動力。 通過實戰(zhàn)訓練操作,向程序員說明重構的最佳實踐步驟。 并在實戰(zhàn)訓練的同時,介紹幾個重構相關工具的使用方法。 1、重構――從程序員自己做起 (1)從中興的案例說起 (2)寫出好代碼的目的 (3)代碼是寫給人讀的,而不是寫給機器跑的 (4)讓營地比你來時更干凈 2、重構的最佳實踐 (1)覓取重構點 (2)重構代碼 (3)自動化單元測試 3、重構相關工具 (1)單元測試工具 (2)測試覆蓋率工具 (3)打樁工具 (4)自動化重構工具 (5)自動化測試工具 |
第三單元 嗅出代碼的壞味道 介紹代碼的多種壞味道,為重構點指明方向。 學習使用代碼內(nèi)部質量檢測工具,讓覓取重構點的工作工具化。 學習使用自動化檢測工具,讓覓取重構點的工作自動化。 1、壞味道的分類 (1)重復的代碼 (2)含糊不清的命名 (3)方法相關的壞味道 (4)類相關的壞味道 (5)散彈式修改 (6)發(fā)散式變化 (7)不恰當?shù)谋┞?br/>(8)過多的注釋 (9)其他壞味道 2、“鼻子”麻木了怎么辦 代碼內(nèi)部質量檢測工具 3、沒時間檢測怎么辦 (1)自動化的測試和告警工具 (2)自動化檢測原理 |
第四單元 類重構技能 講解創(chuàng)建類的目的。引申出對象職責的概念,并通過實戰(zhàn)訓練講述職責劃分的技巧。 講授面向對象設計的5大設計原則。 詳細講解“單一職責原則”。 通過實戰(zhàn)訓練,傳授“依賴倒置原則”的使用。 1、為什么需要封裝類 (1)設計“類”概念的目的 (2)良好模塊和糟糕模塊的區(qū)別 (3)最少知道原則 (4)封裝相關的壞味道 2、對象職責概念 (1)對象職責概論 (2)對象職責的劃分技巧 3、面向對象設計的5大設計原則 (1)單一職責原則 (2)開閉原則 (3)里氏替換原則 (4)接口隔離原則 (5)依賴倒置原則 4、單一職責原則 (1)定義與案例 (2)職責的識別技巧 (3)職責相關的壞味道 5、依賴倒置原則 (1)定義 (2)案例 6、類重構技巧 (1)提煉抽象 (2)打樁測試 (3)分離組件(6個組包原則) (4)組件內(nèi)部優(yōu)化 7、設計模式 (1)策略模式 (2)工廠模式 (3)MVP模式 (4)觀察者模式 (5)其他模式 |
第五單元 函數(shù)重構技能 該單元主要講解函數(shù)重構。函數(shù)的重構最主要的工作是函數(shù)抽取。 講授高質量函數(shù)的標準和助手函數(shù)的概念。 最后介紹VS2008自帶的C#重構工具,主要演示其中“提取方法”和“封裝字段”功能。 1、創(chuàng)建函數(shù)的理由 列舉多個創(chuàng)建函數(shù)的理由,避免程序中產(chǎn)生巨型函數(shù)。 2、高質量函數(shù)的三原則 (1)單一抽象層次原則 (2)單一職責原則 (3)短小原則 3、助手函數(shù) (1)定義 (2)好處 4、自動化重構工具 學習VS2008內(nèi)置的重構工具。減少程序員抽取函數(shù)的工作量。 |
第六單元 函數(shù)內(nèi)部優(yōu)化 在上一單元的基礎上,本單元主要講解如何通過優(yōu)化函數(shù)內(nèi)部的代碼,增加代碼的可讀性、可維護性。 1、為你的函數(shù)取個好名字 (1)一些基本原則 (2)檢查方法 2、簡化表達式 (1)引入解釋性變量 (2)盡量少用邏輯非運算符 3、馴服深層嵌套 (1)使用衛(wèi)語句 (2)用switch-case語句,代替if-els (3)表驅動法 4、消除魔鬼數(shù)字 5、優(yōu)化變量 (1)變量命名 (2)一個變量只做一件事 (3)控制變量的作用域 (4)縮短變量的存活時間 (5)減少控制標記 6、優(yōu)化循環(huán) (1)循環(huán)的種類 (2)循環(huán)的選擇 (3)循環(huán)的危險性 (4)循環(huán)的重構 7、縮短參數(shù)列表 |
第七單元 維護遺留系統(tǒng) 課程的最后,介紹在無自動化測試用例保證的遺留系統(tǒng)中,如何進行保護性的開發(fā)和重構工作。并提出維護代碼的準則。 1、維護代碼的準則 首先做到不傷害。 2、修改代碼的藝術 (1)新生方法 (2)新生類 (3)外敷方法 (4)外敷類 |
第八單元 架構師的作用 1、設計者 (1)切分系統(tǒng) (2)設計接口 (3)選用設計模式 2、教導者 (1)引導團隊 (2)修正偏離 加強學習 |