課程詳情
培訓(xùn)目標(biāo):
本課程涵蓋代碼重構(gòu)(2天),設(shè)計重構(gòu)(1天),架構(gòu)重構(gòu)(1天)3個層次.
主要包含以下幾個方面的內(nèi)容:
n 結(jié)合電信、金融等多個項目案例進(jìn)行分析。本次培訓(xùn)所用案例均為真實項目案例,僅供課堂學(xué)術(shù)討論。
n 重構(gòu)技術(shù):軟件并不是在一開始就可以設(shè)計的完美無缺,因此必須經(jīng)過不斷的重構(gòu)進(jìn)行改善,重構(gòu)是實現(xiàn)優(yōu)秀設(shè)計的一種重要手段
n 代碼壞味道: 介紹常見的糟糕的代碼壞味道,以告誡學(xué)員,今后如何避免出現(xiàn)這樣的拙劣代碼。這是21條代碼基本要求,是代碼管理的較低要求,可以接受的底線.
n 代碼管理:項目管理者和質(zhì)量管理部門,如何組織代碼評審,代碼審查,如果通過代碼評審,提高設(shè)計能力。
n 重構(gòu)到模式: 模式的應(yīng)用是一個漸進(jìn)演變的過程, 壞味道也不是一開始就出現(xiàn)的.如果在一開始就想到用某某模式, 有時很可能導(dǎo)致設(shè)計過度.重構(gòu)與模式有一種天然的關(guān)系. 重構(gòu)是手段, 模式是目的, 同時模式也為重構(gòu)指明了方向和原則.通過案例分析設(shè)計模式是如何演進(jìn)/重構(gòu)出來的
n 單元測試: 介紹如何使用XUnit進(jìn)行單元測試,如何更高效地撰寫bug更少的代碼;如何在團(tuán)隊中高效地進(jìn)行測試,設(shè)計具有易測性的軟件等等。
n 代碼質(zhì)量度量: 結(jié)合和完善Logiscope和McCabe兩種軟件度量體系,選取出依據(jù)軟件程序代碼的可量化測量,建立代碼質(zhì)量度量評估模型.有助于軟件的量化評價,為質(zhì)量管理人員了解軟件質(zhì)量水平、軟件設(shè)計師改進(jìn)軟件程序質(zhì)量,提供量化的客觀依據(jù).
n 持續(xù)集成和靜態(tài)分析工具: 介紹持續(xù)集成基本原則和工具,以及應(yīng)用較佳實踐。同時介紹業(yè)界大量使用代碼靜態(tài)分析工具,以便在編碼階段就能夠找出可能的編碼缺陷和壞味道。
n 設(shè)計重構(gòu): 介紹什么是好的設(shè)計特征,如何實現(xiàn)優(yōu)秀設(shè)計.以及敏捷設(shè)計思想(演化設(shè)計)與重構(gòu).
n 架構(gòu)重構(gòu): 由于軟件應(yīng)對需求變化的能力越來越差,通過重構(gòu)架構(gòu)進(jìn)行軟件重建的做法變得越來越有吸引力。如何進(jìn)行架構(gòu)重構(gòu),怎樣重構(gòu)等.
培訓(xùn)對象:
程序員、軟件設(shè)計師、架構(gòu)師、項目經(jīng)理、質(zhì)量部門員工。對于重構(gòu)技術(shù)懷有疑問和困惑,需要梳理解答的團(tuán)隊和個人。
學(xué)員基礎(chǔ):
學(xué)員學(xué)習(xí)本課程應(yīng)具備下列基礎(chǔ)知識:
n 了解Java/C#或者C 任一面向?qū)ο笳Z言,
n 具有面向?qū)ο蠡靖拍?,熟悉基本設(shè)計模式
學(xué)時:4天24學(xué)時(1小時 / 學(xué)時)
課程安排:
重構(gòu)基礎(chǔ)
軟件代碼的新思維----代碼就是設(shè)計,代碼質(zhì)量決定軟件可維護(hù)性
軟件可維護(hù)性(為什么必須重視軟件的可維護(hù)性)
代碼質(zhì)量概述
破窗效應(yīng)
對代碼的重新認(rèn)識---代碼就是設(shè)計
優(yōu)秀代碼的評價標(biāo)準(zhǔn)
好代碼和糟糕代碼之間的區(qū)別
劣質(zhì)代碼的代價
大師評價整潔代碼的標(biāo)準(zhǔn)
Robert C Martin
Kent Beck`
Ward Cunningham
Ron Jeffries
Grady Booch
Dave Thomas
重構(gòu)思想
重構(gòu)概述
何時重構(gòu)
如何發(fā)現(xiàn)哪些地方需要重構(gòu)
如何保證重構(gòu)的正確
如何測試重構(gòu)
通過一個小案例演示重構(gòu)的基本思想(什么時間重構(gòu),如何發(fā)現(xiàn)重構(gòu)點,如何保證重構(gòu)的正確性,較后如何驗收)
案例—通過實際項目演示重構(gòu)
介紹項目需求情況,進(jìn)行設(shè)計
閱讀代碼指出代碼壞癥狀
通過重構(gòu)逐步改善代碼質(zhì)量
關(guān)注代碼壞味道
重構(gòu)關(guān)鍵—發(fā)現(xiàn)代碼的壞味道
代碼壞味道概述
代碼壞味道的分類
代碼壞味道----低級篇(重復(fù)的代碼、過長的函數(shù)、過大的類、過長的參數(shù)列表、發(fā)散式變化、分散的修改)
代碼壞味道----中級篇(偽面向?qū)ο蟮恼{(diào)用、數(shù)據(jù)泥團(tuán)、基本類型的誤用、switch-case結(jié)構(gòu)的誤用、平行繼承體系、過薄的類、只有局部意義的成員變量)
代碼壞味道----高級篇(過度耦合的消息鏈、過薄的中間對象、緊耦合類、相似的類、只有數(shù)據(jù)的類、濫用類的繼承關(guān)系)
通過案例,讓學(xué)員尋找代碼壞味道
可以根據(jù)客戶現(xiàn)在的項目作為案例進(jìn)行現(xiàn)場分析,找出相應(yīng)的代碼壞味道
某項目分析----重點了解現(xiàn)實項目代碼的充斥大量壞味道
介紹項目需求情況,閱讀現(xiàn)有代碼指出代碼壞癥狀
不看不知道,代碼到底有多爛—觸目驚心的代碼
通過重構(gòu)逐步改善代碼質(zhì)量
本案例學(xué)習(xí)多種重構(gòu)方式
重構(gòu)方法
重構(gòu)技術(shù)
重構(gòu)名錄
介紹常見的重構(gòu)技術(shù)
分別通過相關(guān)案例展示重構(gòu)手段
重構(gòu)工具
重構(gòu)工具概述
使用IDE重構(gòu)工具進(jìn)行重構(gòu)
重構(gòu)工具的使用標(biāo)準(zhǔn)
重構(gòu)工具的使用心得
通過案例演示如何通過重構(gòu)工具完成重構(gòu)
重構(gòu)案例—該案例重點 函數(shù)和函數(shù)調(diào)用重構(gòu)
函數(shù)的重構(gòu)
函數(shù)調(diào)用重構(gòu)
函數(shù)參數(shù)的重構(gòu)
重復(fù)代碼處理策略
通過案例介紹函數(shù)的重構(gòu)
重構(gòu)案例—該案例重點 復(fù)雜條件表達(dá)式重構(gòu)
復(fù)雜條件表達(dá)式重構(gòu)
IF/Else語句的危害
Switch語句的危害
通過案例介紹如何重構(gòu)面向過程代碼到面向?qū)ο?/p>
重構(gòu)案例—該案例重點學(xué)習(xí)代碼格式和命名
代碼格式規(guī)范
代碼命名-名副其實
很重要,但是總被忽略的基本功
通過案例介紹代碼格式以及如何使用IDE工具進(jìn)行定制格式
通過案例介紹代碼的命名,以及如何重構(gòu)
重構(gòu)案例—該案例重點 數(shù)據(jù)結(jié)構(gòu)重構(gòu)
數(shù)據(jù)結(jié)構(gòu)重構(gòu)
通過案例介紹如何重構(gòu)面向過程代碼到面向?qū)ο?/p>
重構(gòu)案例—該案例重點 對象職責(zé)和對象重構(gòu)
過程化思維和面向?qū)ο笤O(shè)計
對象的重新思考
職責(zé)驅(qū)動的對象設(shè)計
通過案例介紹如何重構(gòu)面向過程代碼到面向?qū)ο?/p>
重構(gòu)的度量
軟件質(zhì)量和代碼質(zhì)量
軟件質(zhì)量概述
代碼質(zhì)量的度量
Chidamber & Kemerer度量,
Depth of Inheritance Tree(DIT)
Number of Childre(NOC)
Response for a Class(RFC)
Afferent/Efferent Couplings(CA/CE)
Lack of cohesion in methods(LCOM)
業(yè)界其他度量標(biāo)準(zhǔn)
通過分析多個實際項目,分別度量相關(guān)是否標(biāo)準(zhǔn)
代碼評審和質(zhì)量抽查
代碼評審前期準(zhǔn)備
代碼評審的代碼量
代碼評審的檢查表
代碼評審的總結(jié)與學(xué)習(xí)
通過案例分析如何做好代碼評審
持續(xù)重構(gòu)
代碼靜態(tài)分析工具
代碼靜態(tài)分析工具概述
以Java語言代碼靜態(tài)分析工具為例介紹
CheckStyle:用于編碼標(biāo)準(zhǔn)
PMD 的 CPD:幫助發(fā)現(xiàn)代碼重復(fù)
Coverlipse:測量代碼覆蓋率
JDepend:提供依賴項分析
Metric:有效地查出復(fù)雜度
其他語言相關(guān)代碼靜態(tài)分析工具
通過案例演示工具在項目之中的應(yīng)用
持續(xù)集成
持續(xù)集成概述
持續(xù)集成的要點和原則
構(gòu)建策略和較佳實踐
持續(xù)集成對代碼分析的支持
通過案例演示如何利用持續(xù)集成完成代碼檢查和代碼分析
設(shè)計重構(gòu)
什么是好的設(shè)計以及如何預(yù)先設(shè)計實現(xiàn)
什么是好的設(shè)計和衡量的手段
可擴展性(Extensibility)容易添加新的功能. 結(jié)合案例,通過那些手段如何實現(xiàn)該目標(biāo)
靈活性(Flexibility)代碼修改平穩(wěn)地發(fā)生. 結(jié)合案例,通過那些手段如何實現(xiàn)該目標(biāo)
可插入性(Pluggability)容易將一個類抽出去,同時將另一個有同樣接口的類加入進(jìn)來. 結(jié)合案例,通過那些手段如何實現(xiàn)該目標(biāo)
軟件的變化分析---發(fā)現(xiàn)變化/封裝變化/隔離變化
分析真實項目,如何預(yù)先設(shè)計,給我們哪些啟示,我們可以學(xué)習(xí)到什么
重構(gòu)與設(shè)計----敏捷設(shè)計思想(演化式設(shè)計或者反思性設(shè)計)
重構(gòu)與設(shè)計的思想---根據(jù)代碼壞味道改善設(shè)計
軟件需求不可預(yù)測性----設(shè)計師不可能進(jìn)行預(yù)測式設(shè)計
軟件設(shè)計的重構(gòu)
軟件演化式設(shè)計---敏捷的設(shè)計思想
分析某電信項目,如何設(shè)計重構(gòu),給我們哪些啟示,我們可以學(xué)習(xí)到什么
通過代碼指標(biāo)進(jìn)行設(shè)計重構(gòu)
代碼指標(biāo)和可視化有助于識別代碼的重要部分,從而識別設(shè)計壞味道,進(jìn)行重構(gòu)設(shè)計
相關(guān)代碼指標(biāo)(HIT 繼承樹的高度/NOP 包的數(shù)量/NOC 類的數(shù)量/NOM 方法的數(shù)量/LOC 代碼行數(shù)/CYCLO 圈復(fù)雜度/CALL 每個方法的調(diào)用數(shù))
分析案例主要討論兩個指標(biāo),圈復(fù)雜度(cyclomatic complexity) 和傳入耦合(afferent coupling), 介紹顯示和理解這兩個指標(biāo)的一些工具,以及如何通過組合指標(biāo)幫助發(fā)現(xiàn)設(shè)計特征。