架構(gòu)師
互聯(lián)網(wǎng)
電商
支付平臺
傳統(tǒng)金融
互聯(lián)網(wǎng)金融
可穿戴設(shè)備
醫(yī)療
智能家居
物聯(lián)網(wǎng)
車聯(lián)網(wǎng)
安全
制造
電信
政府機(jī)構(gòu)
稅務(wù)
快消品
其他
推薦課程
average > 0 ? $model->average . '分' : '10.0分' ?>

軟件重構(gòu)實(shí)戰(zhàn)訓(xùn)練營(2天)

課程費(fèi)用

5800.00 /人

課程時長

2

成為教練

課程簡介

重構(gòu)是持續(xù)進(jìn)行的,而不是在項目結(jié)束時、發(fā)布版本時、迭代結(jié)束時,甚至不是每天快下班時才進(jìn)行的。重構(gòu)是我們每隔一個小時或者半個小時就要去做的事情。通過重構(gòu),我們可以持續(xù)地保持代碼盡可能干凈、簡單并且具有表達(dá)力。

目標(biāo)收益

隨著不同產(chǎn)品的推出,不同客戶、不同版本的發(fā)布,需要維護(hù)的遺留代碼越來越多,重構(gòu)也就在所難免。不僅如此,所有的軟件系統(tǒng),經(jīng)過一段時間的維護(hù),都會逐漸變成遺留系統(tǒng),并且都遭遇了緩慢而不可抗拒的腐化。因此,軟件開發(fā)人員不得不面對既有系統(tǒng)的混亂代碼。而本課程正是告訴你如何重構(gòu)既有的遺留系統(tǒng),如何重構(gòu)代碼、重構(gòu)設(shè)計、重構(gòu)架構(gòu)。

培訓(xùn)對象

各類軟件研發(fā)中心的軟件設(shè)計師、架構(gòu)師、項目經(jīng)理、技術(shù)總監(jiān)、質(zhì)量部門經(jīng)理。對于重構(gòu)技術(shù)懷有疑問和困惑,需要梳理解答的團(tuán)隊和個人,效果最佳。

課程大綱

第一部分 為什么軟件需要及時重構(gòu)

第一單元 剖析軟件質(zhì)量不斷下降的根源
質(zhì)量不斷下降的表現(xiàn):
1. 程序代碼越來越亂
2. 軟件維護(hù)成本越來越高
3. 軟件變更越來越困難
4. 無法進(jìn)行新技術(shù)的改造
以往采取的措施:
1. 頭痛醫(yī)頭,腳痛醫(yī)腳
2. 拋棄掉重新編寫
3. 因擔(dān)心未來變化而做的過度設(shè)計
帶來的問題
1. 團(tuán)隊成員越來越多但效率卻越來越低
2. 測試變得越來越困難而任務(wù)繁重
3. 軟件系統(tǒng)越來越笨重而不適應(yīng)未來變化
分析與反思

案例分析:一個遺留系統(tǒng)的演化過程
1. 起初的設(shè)計
2. 隨后的變更
3. 質(zhì)量不斷下降的過程
軟件質(zhì)量下降的根源:
1. 軟件總是因變更而變得越來越復(fù)雜
2. 軟件結(jié)構(gòu)已經(jīng)不再適應(yīng)復(fù)雜的軟件需求
3. 必須要調(diào)整軟件結(jié)構(gòu)以適應(yīng)新的軟件需求

軟件是因需求變更而質(zhì)量下降嗎?
案例分析:推演軟件變更的設(shè)計過程
應(yīng)對軟件變更的最佳方式:兩頂帽子
1. 重構(gòu)原有代碼以適應(yīng)新的需求
2. 實(shí)現(xiàn)新的需求
案例:演示兩頂帽子的設(shè)計過程
第二單元 高質(zhì)量的軟件設(shè)計過程 以往軟件設(shè)計的過程:
1. 演示以往軟件設(shè)計的過程
2. 剖析以往軟件設(shè)計的問題與風(fēng)險
小步快跑模式的開發(fā)過程:
1. 用最快的速度開發(fā)一個最核心的功能
2. 讓第一個版本運(yùn)行起來并可以驗(yàn)證
3. 在第一個版本的基礎(chǔ)上不斷添加功能:
a. 每次只添加一個很簡單、很單一的功能
b. 每次以兩頂帽子的方式添加新功能
c. 運(yùn)行、調(diào)試與驗(yàn)證
d. 重復(fù)這個過程添加下一個功能
4. 復(fù)雜的系統(tǒng)就是由一次次正確開發(fā)的不斷積累而成
案例:演示小步快跑的開發(fā)過程
小步快跑解決的問題:
1. 復(fù)雜功能有效地解耦
2. 代碼編寫總是可測試與驗(yàn)證
3. 簡化設(shè)計與思考的復(fù)雜度
4. 適時重構(gòu)以避免軟件退化

測試驅(qū)動設(shè)計
1. TDD vs. 后測試開發(fā)
2. 案例:演示測試驅(qū)動設(shè)計的過程
3. 測試驅(qū)動設(shè)計的優(yōu)勢
4. 實(shí)踐測試驅(qū)動設(shè)計的難題
討論:自動化測試腳本應(yīng)當(dāng)由誰來寫?

練習(xí):運(yùn)用小步快跑的方式設(shè)計一個軟件
第二部分 重構(gòu)的概念

第三單元 何為重構(gòu)
軟件重構(gòu)的概念
1. 重構(gòu)是一系列代碼的等量變換
案例:一個Hello World重構(gòu)過程
2. 重構(gòu)的保險索:自動化測試
案例:Hello World的自動化測試過程
3. 軟件修改的四種動機(jī)——重構(gòu)的價值
4. 一個真實(shí)的謊言——重構(gòu)的誤區(qū)
5. 重構(gòu)的主要方法與技巧

案例分析:重構(gòu)一個大型遺留系統(tǒng)
1. 重構(gòu)第一步:分解大函數(shù)
超級大函數(shù)及其危害
案例:演示大函數(shù)產(chǎn)生的過程
案例:演示抽取方法操作步驟
實(shí)踐抽取方法會遇到的問題和解決方案
2. 重構(gòu)第二步:拆分大對象
超級大對象及其危害
案例:演示超級大對象的產(chǎn)生過程
案例:演示抽取類的操作步驟
講解單一職責(zé)設(shè)計原則
案例:演示“分久必合,合久必分”的重構(gòu)過程
3. 重構(gòu)第三步:提高復(fù)用率
講解順序編程及其危害
“不要重復(fù)代碼”原則
案例:提高代碼復(fù)用的6個方法
案例:演示新增代碼時的代碼復(fù)用過程
用靜態(tài)檢查工具檢查重復(fù)代碼
4. 重構(gòu)第四步:可擴(kuò)展設(shè)計
過度設(shè)計 vs. 恰如其分的設(shè)計
講解“開放-封閉”的設(shè)計原則
案例:講解可擴(kuò)展設(shè)計的4個方法
案例:講解新增代碼的可擴(kuò)展設(shè)計過程
5. 重構(gòu)第五步:降低耦合度
案例:講解接口、實(shí)現(xiàn)與工廠模式
案例:講解外部接口解耦與適配器模式
案例:講解繼承泛濫問題與橋接模式
案例:講解方法解耦與策略模式
案例:講解過程解耦與命令模式
案例:講解透明擴(kuò)展與組合模式、裝飾者模式
6. 重構(gòu)第六步:系統(tǒng)分層
反思軟件架構(gòu)需要怎樣的分層結(jié)構(gòu)
遺留系統(tǒng)如何擁抱需求變化
遺留系統(tǒng)如何應(yīng)對技術(shù)變革
7. 重構(gòu)第七步:領(lǐng)域驅(qū)動設(shè)計
領(lǐng)域驅(qū)動設(shè)計的概念
講解領(lǐng)域模型分析方法
講解原文分析法與領(lǐng)域驅(qū)動設(shè)計

討論:如何制定重構(gòu)項目計劃
練習(xí):重構(gòu)一個小程序并編寫測試腳本
第四單元 關(guān)于重構(gòu)的討論 什么時候重構(gòu)
1. 重構(gòu)是一種習(xí)慣
2. 重構(gòu)讓程序可讀
3. 重構(gòu),才好復(fù)用
4. 先重構(gòu),再擴(kuò)展
5. 緊急任務(wù)時的重構(gòu)

測試的困境
1. 重構(gòu)初期的困局
2. 解耦與自動化測試
3. 建立自動化測試體系

重構(gòu)的評價
1. 評價軟件質(zhì)量的指標(biāo)
2. 評價軟件質(zhì)量的工具
第一部分 為什么軟件需要及時重構(gòu)

第一單元 剖析軟件質(zhì)量不斷下降的根源
質(zhì)量不斷下降的表現(xiàn):
1. 程序代碼越來越亂
2. 軟件維護(hù)成本越來越高
3. 軟件變更越來越困難
4. 無法進(jìn)行新技術(shù)的改造
以往采取的措施:
1. 頭痛醫(yī)頭,腳痛醫(yī)腳
2. 拋棄掉重新編寫
3. 因擔(dān)心未來變化而做的過度設(shè)計
帶來的問題
1. 團(tuán)隊成員越來越多但效率卻越來越低
2. 測試變得越來越困難而任務(wù)繁重
3. 軟件系統(tǒng)越來越笨重而不適應(yīng)未來變化
分析與反思

案例分析:一個遺留系統(tǒng)的演化過程
1. 起初的設(shè)計
2. 隨后的變更
3. 質(zhì)量不斷下降的過程
軟件質(zhì)量下降的根源:
1. 軟件總是因變更而變得越來越復(fù)雜
2. 軟件結(jié)構(gòu)已經(jīng)不再適應(yīng)復(fù)雜的軟件需求
3. 必須要調(diào)整軟件結(jié)構(gòu)以適應(yīng)新的軟件需求

軟件是因需求變更而質(zhì)量下降嗎?
案例分析:推演軟件變更的設(shè)計過程
應(yīng)對軟件變更的最佳方式:兩頂帽子
1. 重構(gòu)原有代碼以適應(yīng)新的需求
2. 實(shí)現(xiàn)新的需求
案例:演示兩頂帽子的設(shè)計過程
第二單元 高質(zhì)量的軟件設(shè)計過程
以往軟件設(shè)計的過程:
1. 演示以往軟件設(shè)計的過程
2. 剖析以往軟件設(shè)計的問題與風(fēng)險
小步快跑模式的開發(fā)過程:
1. 用最快的速度開發(fā)一個最核心的功能
2. 讓第一個版本運(yùn)行起來并可以驗(yàn)證
3. 在第一個版本的基礎(chǔ)上不斷添加功能:
a. 每次只添加一個很簡單、很單一的功能
b. 每次以兩頂帽子的方式添加新功能
c. 運(yùn)行、調(diào)試與驗(yàn)證
d. 重復(fù)這個過程添加下一個功能
4. 復(fù)雜的系統(tǒng)就是由一次次正確開發(fā)的不斷積累而成
案例:演示小步快跑的開發(fā)過程
小步快跑解決的問題:
1. 復(fù)雜功能有效地解耦
2. 代碼編寫總是可測試與驗(yàn)證
3. 簡化設(shè)計與思考的復(fù)雜度
4. 適時重構(gòu)以避免軟件退化

測試驅(qū)動設(shè)計
1. TDD vs. 后測試開發(fā)
2. 案例:演示測試驅(qū)動設(shè)計的過程
3. 測試驅(qū)動設(shè)計的優(yōu)勢
4. 實(shí)踐測試驅(qū)動設(shè)計的難題
討論:自動化測試腳本應(yīng)當(dāng)由誰來寫?

練習(xí):運(yùn)用小步快跑的方式設(shè)計一個軟件
第二部分 重構(gòu)的概念

第三單元 何為重構(gòu)
軟件重構(gòu)的概念
1. 重構(gòu)是一系列代碼的等量變換
案例:一個Hello World重構(gòu)過程
2. 重構(gòu)的保險索:自動化測試
案例:Hello World的自動化測試過程
3. 軟件修改的四種動機(jī)——重構(gòu)的價值
4. 一個真實(shí)的謊言——重構(gòu)的誤區(qū)
5. 重構(gòu)的主要方法與技巧

案例分析:重構(gòu)一個大型遺留系統(tǒng)
1. 重構(gòu)第一步:分解大函數(shù)
超級大函數(shù)及其危害
案例:演示大函數(shù)產(chǎn)生的過程
案例:演示抽取方法操作步驟
實(shí)踐抽取方法會遇到的問題和解決方案
2. 重構(gòu)第二步:拆分大對象
超級大對象及其危害
案例:演示超級大對象的產(chǎn)生過程
案例:演示抽取類的操作步驟
講解單一職責(zé)設(shè)計原則
案例:演示“分久必合,合久必分”的重構(gòu)過程
3. 重構(gòu)第三步:提高復(fù)用率
講解順序編程及其危害
“不要重復(fù)代碼”原則
案例:提高代碼復(fù)用的6個方法
案例:演示新增代碼時的代碼復(fù)用過程
用靜態(tài)檢查工具檢查重復(fù)代碼
4. 重構(gòu)第四步:可擴(kuò)展設(shè)計
過度設(shè)計 vs. 恰如其分的設(shè)計
講解“開放-封閉”的設(shè)計原則
案例:講解可擴(kuò)展設(shè)計的4個方法
案例:講解新增代碼的可擴(kuò)展設(shè)計過程
5. 重構(gòu)第五步:降低耦合度
案例:講解接口、實(shí)現(xiàn)與工廠模式
案例:講解外部接口解耦與適配器模式
案例:講解繼承泛濫問題與橋接模式
案例:講解方法解耦與策略模式
案例:講解過程解耦與命令模式
案例:講解透明擴(kuò)展與組合模式、裝飾者模式
6. 重構(gòu)第六步:系統(tǒng)分層
反思軟件架構(gòu)需要怎樣的分層結(jié)構(gòu)
遺留系統(tǒng)如何擁抱需求變化
遺留系統(tǒng)如何應(yīng)對技術(shù)變革
7. 重構(gòu)第七步:領(lǐng)域驅(qū)動設(shè)計
領(lǐng)域驅(qū)動設(shè)計的概念
講解領(lǐng)域模型分析方法
講解原文分析法與領(lǐng)域驅(qū)動設(shè)計

討論:如何制定重構(gòu)項目計劃
練習(xí):重構(gòu)一個小程序并編寫測試腳本
第四單元 關(guān)于重構(gòu)的討論
什么時候重構(gòu)
1. 重構(gòu)是一種習(xí)慣
2. 重構(gòu)讓程序可讀
3. 重構(gòu),才好復(fù)用
4. 先重構(gòu),再擴(kuò)展
5. 緊急任務(wù)時的重構(gòu)

測試的困境
1. 重構(gòu)初期的困局
2. 解耦與自動化測試
3. 建立自動化測試體系

重構(gòu)的評價
1. 評價軟件質(zhì)量的指標(biāo)
2. 評價軟件質(zhì)量的工具

活動詳情

提交需求