架構(gòu)師
互聯(lián)網(wǎng)
電商
電信
推薦課程
average > 0 ? $model->average . '分' : '10.0分' ?>

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

課程費(fèi)用

6800.00 /人

課程時(shí)長(zhǎng)

3

成為教練

課程簡(jiǎn)介

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

目標(biāo)收益

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

培訓(xùn)對(duì)象

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

課程大綱

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

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

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

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

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

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

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

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

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

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

重構(gòu)的評(píng)價(jià)
1. 評(píng)價(jià)軟件質(zhì)量的指標(biāo)
2. 評(píng)價(jià)軟件質(zhì)量的工具
第三部分 系統(tǒng)級(jí)的重構(gòu)項(xiàng)目

第五單元 遺留系統(tǒng)的技術(shù)改造難題
技術(shù)改造的難題
一些大型遺留系統(tǒng)已經(jīng)運(yùn)行維護(hù)十年以上,現(xiàn)在面臨著技術(shù)改造的難題:
1. 程序越來(lái)越亂:代碼在退化,軟件質(zhì)量持續(xù)下降,維護(hù)成本越來(lái)越高;
2. 面臨技術(shù)改造:一直在猶豫改還是不改,但現(xiàn)在到了不得不改的時(shí)候了。

以往的解決方案:
1. 修修補(bǔ)補(bǔ),遇到什么問(wèn)題就解決什么問(wèn)題:
存在的問(wèn)題:
a.始終治標(biāo)不治本,不能從根本上解決許多問(wèn)題;
b.有過(guò)一些改造,但不敢嘗試真正的技術(shù)改造,越老的系統(tǒng)技術(shù)越落后
存在的問(wèn)題:面臨著被市場(chǎng)淘汰的絕大風(fēng)險(xiǎn)

2. 徹底丟棄原有系統(tǒng)重新開發(fā),從而快速擺脫以往的技術(shù)債務(wù)
存在的問(wèn)題:
原系統(tǒng)運(yùn)行維護(hù)十年以上,積累大量繁復(fù)而細(xì)微的業(yè)務(wù)需求與程序邏輯,但在重做過(guò)程中都遭到遺失,給項(xiàng)目帶來(lái)巨大的風(fēng)險(xiǎn)

問(wèn)題的實(shí)質(zhì):
1. 面臨巨大市場(chǎng)的壓力,改造是想做不想做都得做的事情了;
2. 原系統(tǒng)中積累大量繁復(fù)而細(xì)微的業(yè)務(wù)需求與程序邏輯,既不在設(shè)計(jì)文檔中,也不為現(xiàn)有的維護(hù)人員所掌握,但一旦遺失卻嚴(yán)重后果;
3. 一邊在技術(shù)改造,一邊還有新的需求需要維護(hù),意味著改造中的新系統(tǒng),在還未替代老系統(tǒng)前,還要不斷與老系統(tǒng)同步
正是有了如此多的難題與風(fēng)險(xiǎn),使得舊系統(tǒng)改造面臨進(jìn)退兩難的困境。

演化式重構(gòu)解決方案:
1. 演化式地對(duì)原系統(tǒng)進(jìn)行重構(gòu),漸進(jìn)式地進(jìn)行優(yōu)化改進(jìn)
不是丟棄原系統(tǒng),而是從原系統(tǒng)開始,運(yùn)用重構(gòu)方法進(jìn)行一小步一小步的優(yōu)化與調(diào)整,使技術(shù)改造過(guò)程變得平滑
2. 培訓(xùn)、指導(dǎo)與審查并舉,切實(shí)提高代碼編寫質(zhì)量
首先對(duì)人員進(jìn)行代碼質(zhì)量與重構(gòu)的培訓(xùn),制訂代碼規(guī)范與靜態(tài)代碼檢查。在開發(fā)初期加強(qiáng)對(duì)每項(xiàng)設(shè)計(jì)的指導(dǎo),之后組長(zhǎng)責(zé)任制進(jìn)行代碼審查。
3. 組件開發(fā)-測(cè)試為一體的團(tuán)隊(duì)
一邊改造,一邊編寫自動(dòng)化測(cè)試腳本,讓改造過(guò)程隨時(shí)處于質(zhì)量監(jiān)控之下
4. 優(yōu)化與維護(hù)并行開展,讓改造工作快速起效
制訂迭代式計(jì)劃,每完成一次改造就發(fā)布一個(gè)可運(yùn)行版本。之后的運(yùn)行維護(hù)在該版本的基礎(chǔ)上開展
5. 平臺(tái)建設(shè)與系統(tǒng)重構(gòu)并行開展,加快改造速度
分成平臺(tái)組與重構(gòu)組并行開展工作,一邊在搭建新的技術(shù)開發(fā)平臺(tái),一邊運(yùn)用重構(gòu)在優(yōu)化原有系統(tǒng),最終實(shí)現(xiàn)原有系統(tǒng)向新開發(fā)平臺(tái)的代碼遷移
第六單元 系統(tǒng)級(jí)軟件重構(gòu)過(guò)程 案例分析:演化式重構(gòu)的改造過(guò)程:
1. 概念及解決的問(wèn)題
演化式重構(gòu)的概念
建立領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的過(guò)程
2. 模塊的選擇與迭代項(xiàng)目計(jì)劃
先選擇易上手、快速起效的模塊開始改造
再選擇最核心、最關(guān)鍵的模塊進(jìn)行改造
制訂迭代式技術(shù)改造項(xiàng)目計(jì)劃
3. 組建一個(gè)開發(fā)-測(cè)試為一體的團(tuán)隊(duì)
測(cè)試人員與開發(fā)人員同時(shí)開始工作
改造初期的自動(dòng)化測(cè)試過(guò)程
逐漸編寫自動(dòng)化測(cè)試程序的過(guò)程
4. 平臺(tái)建設(shè)與系統(tǒng)重構(gòu)并舉
重構(gòu)組:
一邊在重構(gòu),一邊在升級(jí)維護(hù)上線,既使改造工作快速起效,又使重構(gòu)的成功以最快的速度得到驗(yàn)證,降低改造風(fēng)險(xiǎn)
平臺(tái)組:
構(gòu)建基于領(lǐng)域的輕量級(jí)系統(tǒng)架構(gòu),既為舊系統(tǒng)代碼移植創(chuàng)造條件,又為技術(shù)的更迭降低成本
5. 平滑地代碼移植
代碼移植的條件:
1)舊系統(tǒng)完成了代碼重構(gòu),實(shí)現(xiàn)業(yè)務(wù)代碼與技術(shù)代碼的有效解耦;
2)新平臺(tái)構(gòu)建了一個(gè)基于領(lǐng)域的系統(tǒng)架構(gòu)。
代碼移植過(guò)程:
1)將舊系統(tǒng)中的業(yè)務(wù)領(lǐng)域?qū)佑行崛〕鰜?lái);
2)將業(yè)務(wù)領(lǐng)域代碼放入新平臺(tái)中
3)完成其它的配置、接口、前端界面等工作
4)運(yùn)行、調(diào)試、測(cè)試
改造的效果:
1. 實(shí)現(xiàn)領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),擁抱未來(lái)需求的變化
2. 建立自動(dòng)化測(cè)試體系保障軟件質(zhì)量
3. 更加靈活而快速地應(yīng)對(duì)未來(lái)技術(shù)的更新

討論:系統(tǒng)級(jí)重構(gòu)的經(jīng)驗(yàn)與分享
第一部分 為什么軟件需要及時(shí)重構(gòu)

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

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

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

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

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

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

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

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

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

重構(gòu)的評(píng)價(jià)
1. 評(píng)價(jià)軟件質(zhì)量的指標(biāo)
2. 評(píng)價(jià)軟件質(zhì)量的工具
第三部分 系統(tǒng)級(jí)的重構(gòu)項(xiàng)目

第五單元 遺留系統(tǒng)的技術(shù)改造難題
技術(shù)改造的難題
一些大型遺留系統(tǒng)已經(jīng)運(yùn)行維護(hù)十年以上,現(xiàn)在面臨著技術(shù)改造的難題:
1. 程序越來(lái)越亂:代碼在退化,軟件質(zhì)量持續(xù)下降,維護(hù)成本越來(lái)越高;
2. 面臨技術(shù)改造:一直在猶豫改還是不改,但現(xiàn)在到了不得不改的時(shí)候了。

以往的解決方案:
1. 修修補(bǔ)補(bǔ),遇到什么問(wèn)題就解決什么問(wèn)題:
存在的問(wèn)題:
a.始終治標(biāo)不治本,不能從根本上解決許多問(wèn)題;
b.有過(guò)一些改造,但不敢嘗試真正的技術(shù)改造,越老的系統(tǒng)技術(shù)越落后
存在的問(wèn)題:面臨著被市場(chǎng)淘汰的絕大風(fēng)險(xiǎn)

2. 徹底丟棄原有系統(tǒng)重新開發(fā),從而快速擺脫以往的技術(shù)債務(wù)
存在的問(wèn)題:
原系統(tǒng)運(yùn)行維護(hù)十年以上,積累大量繁復(fù)而細(xì)微的業(yè)務(wù)需求與程序邏輯,但在重做過(guò)程中都遭到遺失,給項(xiàng)目帶來(lái)巨大的風(fēng)險(xiǎn)

問(wèn)題的實(shí)質(zhì):
1. 面臨巨大市場(chǎng)的壓力,改造是想做不想做都得做的事情了;
2. 原系統(tǒng)中積累大量繁復(fù)而細(xì)微的業(yè)務(wù)需求與程序邏輯,既不在設(shè)計(jì)文檔中,也不為現(xiàn)有的維護(hù)人員所掌握,但一旦遺失卻嚴(yán)重后果;
3. 一邊在技術(shù)改造,一邊還有新的需求需要維護(hù),意味著改造中的新系統(tǒng),在還未替代老系統(tǒng)前,還要不斷與老系統(tǒng)同步
正是有了如此多的難題與風(fēng)險(xiǎn),使得舊系統(tǒng)改造面臨進(jìn)退兩難的困境。

演化式重構(gòu)解決方案:
1. 演化式地對(duì)原系統(tǒng)進(jìn)行重構(gòu),漸進(jìn)式地進(jìn)行優(yōu)化改進(jìn)
不是丟棄原系統(tǒng),而是從原系統(tǒng)開始,運(yùn)用重構(gòu)方法進(jìn)行一小步一小步的優(yōu)化與調(diào)整,使技術(shù)改造過(guò)程變得平滑
2. 培訓(xùn)、指導(dǎo)與審查并舉,切實(shí)提高代碼編寫質(zhì)量
首先對(duì)人員進(jìn)行代碼質(zhì)量與重構(gòu)的培訓(xùn),制訂代碼規(guī)范與靜態(tài)代碼檢查。在開發(fā)初期加強(qiáng)對(duì)每項(xiàng)設(shè)計(jì)的指導(dǎo),之后組長(zhǎng)責(zé)任制進(jìn)行代碼審查。
3. 組件開發(fā)-測(cè)試為一體的團(tuán)隊(duì)
一邊改造,一邊編寫自動(dòng)化測(cè)試腳本,讓改造過(guò)程隨時(shí)處于質(zhì)量監(jiān)控之下
4. 優(yōu)化與維護(hù)并行開展,讓改造工作快速起效
制訂迭代式計(jì)劃,每完成一次改造就發(fā)布一個(gè)可運(yùn)行版本。之后的運(yùn)行維護(hù)在該版本的基礎(chǔ)上開展
5. 平臺(tái)建設(shè)與系統(tǒng)重構(gòu)并行開展,加快改造速度
分成平臺(tái)組與重構(gòu)組并行開展工作,一邊在搭建新的技術(shù)開發(fā)平臺(tái),一邊運(yùn)用重構(gòu)在優(yōu)化原有系統(tǒng),最終實(shí)現(xiàn)原有系統(tǒng)向新開發(fā)平臺(tái)的代碼遷移
第六單元 系統(tǒng)級(jí)軟件重構(gòu)過(guò)程
案例分析:演化式重構(gòu)的改造過(guò)程:
1. 概念及解決的問(wèn)題
演化式重構(gòu)的概念
建立領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的過(guò)程
2. 模塊的選擇與迭代項(xiàng)目計(jì)劃
先選擇易上手、快速起效的模塊開始改造
再選擇最核心、最關(guān)鍵的模塊進(jìn)行改造
制訂迭代式技術(shù)改造項(xiàng)目計(jì)劃
3. 組建一個(gè)開發(fā)-測(cè)試為一體的團(tuán)隊(duì)
測(cè)試人員與開發(fā)人員同時(shí)開始工作
改造初期的自動(dòng)化測(cè)試過(guò)程
逐漸編寫自動(dòng)化測(cè)試程序的過(guò)程
4. 平臺(tái)建設(shè)與系統(tǒng)重構(gòu)并舉
重構(gòu)組:
一邊在重構(gòu),一邊在升級(jí)維護(hù)上線,既使改造工作快速起效,又使重構(gòu)的成功以最快的速度得到驗(yàn)證,降低改造風(fēng)險(xiǎn)
平臺(tái)組:
構(gòu)建基于領(lǐng)域的輕量級(jí)系統(tǒng)架構(gòu),既為舊系統(tǒng)代碼移植創(chuàng)造條件,又為技術(shù)的更迭降低成本
5. 平滑地代碼移植
代碼移植的條件:
1)舊系統(tǒng)完成了代碼重構(gòu),實(shí)現(xiàn)業(yè)務(wù)代碼與技術(shù)代碼的有效解耦;
2)新平臺(tái)構(gòu)建了一個(gè)基于領(lǐng)域的系統(tǒng)架構(gòu)。
代碼移植過(guò)程:
1)將舊系統(tǒng)中的業(yè)務(wù)領(lǐng)域?qū)佑行崛〕鰜?lái);
2)將業(yè)務(wù)領(lǐng)域代碼放入新平臺(tái)中
3)完成其它的配置、接口、前端界面等工作
4)運(yùn)行、調(diào)試、測(cè)試
改造的效果:
1. 實(shí)現(xiàn)領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),擁抱未來(lái)需求的變化
2. 建立自動(dòng)化測(cè)試體系保障軟件質(zhì)量
3. 更加靈活而快速地應(yīng)對(duì)未來(lái)技術(shù)的更新

討論:系統(tǒng)級(jí)重構(gòu)的經(jīng)驗(yàn)與分享

活動(dòng)詳情

提交需求