嵌入式軟件的重構(gòu)-總論_第1頁
嵌入式軟件的重構(gòu)-總論_第2頁
嵌入式軟件的重構(gòu)-總論_第3頁
嵌入式軟件的重構(gòu)-總論_第4頁
嵌入式軟件的重構(gòu)-總論_第5頁
已閱讀5頁,還剩39頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、輕松,自如的培訓(xùn)氛圍咖啡,泡茶時間:5分鐘 “咖啡,茶,果珍”1嵌入式軟件的重構(gòu)系列培訓(xùn) 總論 李春生2004年05月13日2通過本次課程,你想學(xué)到什么? 3本次培訓(xùn)內(nèi)容重構(gòu)的定義; 嵌入式軟件的重構(gòu); 壞味道; 重構(gòu)的實(shí)例(6個) ;重構(gòu)在現(xiàn)實(shí)開發(fā)中的推廣和障礙;成立重構(gòu)研究小組;4什么是程序?什么是軟件? 5一、重構(gòu)的定義 6重構(gòu)關(guān)于本次培訓(xùn) 培訓(xùn)取材:重構(gòu)改善既有代碼的設(shè)計 高度評價:和設(shè)計模式并列為“JAVA行業(yè)的圣經(jīng); GOF,四巨頭的重視; 適用性 :面向?qū)ο蟮某绦蛟O(shè)計 重構(gòu)功能:增加程序的可性,可維護(hù)性,可測試性, 模塊化和單元測試的必然基礎(chǔ);7重構(gòu)我的感受 改善軟件質(zhì)量: 可讀

2、性,可測試性,可維護(hù)性; 質(zhì)量活動的開展:單元測試,同行評審,培訓(xùn),模塊化; 提高軟件的開發(fā)能力:讓重構(gòu)成為程序員開發(fā)準(zhǔn)則和習(xí)慣; 獨(dú)特的特征 :和編程規(guī)范不同,是一種動態(tài)的行為; 軟件工程 :真正擺脫作坊式的軟件開發(fā),走向正 規(guī)開發(fā)的必然之路; 8重構(gòu)的至理名言任何一個傻瓜都能寫出計算器可以理解的代碼,唯有寫出人類容易理解的代碼,才是優(yōu)秀的程序員;事不過三,三則重構(gòu);當(dāng)你接獲bug提報,請先撰寫一個單元測試來揭發(fā)這個bug;當(dāng)你感覺需要撰寫注釋,請先嘗試重構(gòu),試著讓所有的注釋變得多余;當(dāng)你發(fā)現(xiàn)自己需要為程序增加一個特性,而代碼結(jié)構(gòu)使你無法方便的這樣做,就先重構(gòu)那個程序;9重構(gòu)的至理名言重構(gòu)之

3、前,必須建立一套可靠的測試機(jī)制;寫軟件就像種樹,優(yōu)秀的程序員挖成小坑后隨及填好,繼續(xù)挖下一個,只會產(chǎn)生一系列小坑,不會有大坑, 菜鳥則不會意識到所挖的坑正在變大,還是不停的挖,直到自己掉進(jìn)大坑,爬不出來,陷入無盡的痛苦深淵;開發(fā)時間越長,越能體會垃圾代碼的痛苦,卻不知道如何改進(jìn);Kent Beck:我不是一個偉大的程序員,我只是個有著一些優(yōu)秀習(xí)慣的好程序員而已;10重構(gòu)的定義: 對軟件內(nèi)部結(jié)構(gòu)的一種調(diào)整,目的是在不改變軟件之可察性前提下,提高其可理解性,降低其修改成本。 11重構(gòu)的作用改進(jìn)軟件設(shè)計;有使軟件更易被理解;幫助你找到BUG;幫助你提高編程速度;12重構(gòu)作用的高度總結(jié)增加軟件的可讀性

4、,可維護(hù)性,可測試性;單元測試,同行評審,培訓(xùn)的完美組合;模塊化的必然之路;軟件開發(fā)的長遠(yuǎn)眼光,未來的受益者;從編碼層次上升的軟件設(shè)計層次;13重構(gòu)的起源?我們或多或少都做過的事情;更多的存在于專家領(lǐng)域;優(yōu)秀程序員的自覺行為與菜鳥的被迫行為;沒有總結(jié),提煉成一種思想,一種標(biāo)準(zhǔn)來指導(dǎo)我們 ;14二、嵌入式軟件的重構(gòu)15嵌入式軟件的重構(gòu)缺點(diǎn)I. 面向?qū)ο蟮能浖O(shè)計和結(jié)構(gòu)化設(shè)計不一樣;II. 側(cè)重于軟件的設(shè)計而不是具體的實(shí)現(xiàn);III. 面向?qū)ο蟮暮诵睦^承和多態(tài)在結(jié) 構(gòu)化設(shè)計中無法表達(dá); IV. 嵌入式軟件更多的和硬件打交道,更注重 軟件的實(shí)現(xiàn),面向?qū)ο蟮能浖t重視軟件 的設(shè)計和復(fù)用;16嵌入式軟件的

5、重構(gòu)優(yōu)點(diǎn)I. 軟件的核心思想是一樣的;II. 函數(shù)和數(shù)據(jù)都和面向?qū)ο蠡疽恢拢械?class可以轉(zhuǎn)換成模塊的思想,對象之間的重 構(gòu)可以看作模塊之間的重構(gòu)。 III. 代碼模塊相當(dāng)于面向?qū)ο蟮念悾?IV. 共同的軟件質(zhì)量屬性可測試性,可讀性, 可維護(hù)性; V. 嵌入式軟件代碼規(guī)模小,更適合重構(gòu),見效 更快; 17三、壞味道18壞味道 改進(jìn)軟件,最重要的是要知道改進(jìn)哪里,Kent給了我們很生動的描述“壞味道”。 當(dāng)我們察看代碼的時候,每個人的嗅覺是不一樣的,嗅覺靈敏的一下子就可以察覺到那些壞味道的存在; 嗅覺能力是需要培養(yǎng)的,這就是資深工程師和入門者之間的差別。19壞味道舉例重復(fù)的代碼: 如果

6、你在一個以上的地點(diǎn)看到相同的程序結(jié)構(gòu),那么可以肯定:設(shè)法將它們合而為一,程序?qū)⒆兊酶谩?過長函數(shù): 程序愈長愈難理解。更應(yīng)該積極的分解函數(shù),需要注釋的地方提煉出去。條件式和循環(huán)常常也是提煉的信號。 過小結(jié)構(gòu) : 過多單一全局變量,合并成結(jié)構(gòu)進(jìn)行統(tǒng)一管理。 數(shù)據(jù)泥團(tuán): 參數(shù),變量數(shù)據(jù),函數(shù)集中管理,修改成結(jié)構(gòu)。 20壞味道舉例過多參數(shù)列表 : 函數(shù)調(diào)用太多的參數(shù)。模塊信息的封裝: 提供過多的接口,內(nèi)部變量泄漏,沒有實(shí)現(xiàn)信息的隱藏。 過大結(jié)構(gòu) :按功能結(jié)構(gòu)劃分,裁減到舒服的使用。 過度耦合 : 模塊之間關(guān)系不清晰,高內(nèi)聚,低耦合 。 21討論在你的代碼里,有哪些壞味道?你的嗅覺如何?22四、重構(gòu)

7、舉例23 一、重新組織你的函數(shù) 重構(gòu)手法中,很大一部分是對函數(shù)進(jìn)行整理。處理過長代碼,重復(fù)代碼是最重要的功能之一。24重構(gòu)方法提煉函數(shù):1)小結(jié):有一段代碼可以被組織在一起獨(dú)立出來,將這段代碼放進(jìn)一個獨(dú)立函數(shù)中,并讓函數(shù)名稱解釋該函數(shù)的用途。2)動機(jī):對付過長的函數(shù),對付重復(fù)代碼; 3)好處:復(fù)用機(jī)會大,容易理解(代替注釋),容易覆寫;4)問題:局部變量的處理。5)實(shí)用性:非常大,最好的重構(gòu)方法。 25 二、重新組織你的數(shù)據(jù) 主要是對數(shù)據(jù)的處理,封裝,可理解性,常數(shù)的替換,對象之間的關(guān)聯(lián) 。26重構(gòu)方法封裝值域:1)概括:直接訪問一個值域,會增加與值域的耦合,為這個值域建立設(shè)值/取值函數(shù),并且

8、只以這些函數(shù)來訪問值域。2)動機(jī):可以通過覆寫一個函數(shù)改變獲取數(shù)據(jù)的途徑,支持更靈活的數(shù)據(jù)管理方式。3)好處: 封裝數(shù)據(jù),模塊化用,容易修改,減少耦合。4)問題:函數(shù)增加,不必所有的值域都這樣封裝。5)實(shí)用性:模塊化對外不留接口,模塊內(nèi)部基本可以不用這種方式; 27重構(gòu)方法用結(jié)構(gòu)代替數(shù)組 :1)小結(jié):數(shù)組的各個元素各自代表不同的東西,可以用結(jié)構(gòu)來代替,結(jié)構(gòu)的成員來描述數(shù)組的元素。2)動機(jī):數(shù)組描述了不同類型的成員,容易出錯。3)好處:管理方便,可讀性強(qiáng);4)問題:;5)實(shí)用性:碰到這種情況,一定要替換,用數(shù)組是入門練習(xí)的做法。 28 三、模塊之間搬移特性 面向?qū)ο蟮念悾覀兛梢韵鄳?yīng)的認(rèn)為就是文

9、件,功能模塊的一個體現(xiàn)。 適用在各個文件內(nèi)的組織變量和函數(shù)的位置,責(zé)任,解決軟件的耦合性,如是驅(qū)動,還是單板相關(guān),還是cpu,操作系統(tǒng)相關(guān)。29重構(gòu)方法搬移函數(shù) :1)概括:某個函數(shù)與另一個模塊之間的關(guān)系更密切,調(diào)用后者,或者被后者調(diào)用,或者從邏輯關(guān)系,功能上講,更適合另一個模塊。2)動機(jī):模塊的功能過大,耦合太多、; 3)好處:功能穩(wěn)定,減少耦合;4)問題:,5)實(shí)用性:比較大,如獲取單板硬件版本號算在哪個模塊。30重構(gòu)方法引入外加函數(shù): 1)概括:一個已經(jīng)提交或者沒有源代碼的模塊,需要增加一個額外函數(shù),建立一個新的函數(shù),并且把相應(yīng)模塊的結(jié)構(gòu)傳遞進(jìn)來。2)動機(jī):增加模塊的功能;已有穩(wěn)定的模塊

10、或者庫文件沒有源代碼,而需要增加新的功能3)好處:不要破壞成熟的模塊,或者無法獲得源代碼;4)問題:效率,定義麻煩;5)實(shí)用性:對于模塊化的實(shí)施,或者對已有模塊的擴(kuò)展,這個函數(shù)放的位置不是很重要。 31 四、簡化條件表達(dá)式 將復(fù)雜的條件邏輯分成若干小塊。使得切換邏輯和操作細(xì)節(jié)分開。32重構(gòu)方法合并重復(fù)的條件片斷 : 1)概括:在條件式的每個分支上有著相同的一段代碼,將這段重復(fù)代碼搬移到條件式之外。2)動機(jī):不同條件含有相同代碼,可以清晰描述變化。3)好處: 容易維護(hù),不容易出錯。4)問題:注意代碼出現(xiàn)的位置。5)實(shí)用性:很重要,一定采納;33 五、簡化函數(shù)調(diào)用 函數(shù)式代碼最重要的組成單位,函數(shù)

11、的信息隱藏,參數(shù)個數(shù),查詢和修改分離,函數(shù)命名等 。34重構(gòu)方法將查詢函數(shù)和修改函數(shù)分離 : 1)概括:某個函數(shù)既返回對象狀態(tài)值,又修改對象狀態(tài),建立兩個不同的函數(shù),一個負(fù)責(zé)查詢,一個負(fù)責(zé)修改。2)動機(jī):注意函數(shù)調(diào)用的副作用,分離會讓函數(shù)功能更明確,更容易維護(hù); 3)好處:方便管理,不要手動保持同步;4)問題: 5)實(shí)用性:結(jié)構(gòu)化設(shè),驅(qū)動設(shè)計等用的很多;35 五、處理概括關(guān)系 主要用在各個模塊之間的封裝和函數(shù)調(diào)用關(guān)系,注意這里和面向?qū)ο蟛顒e很大。36重構(gòu)方法提煉模塊 : 1)概括:將多個模塊共有的屬性提煉出來。作為單獨(dú)模塊; 2)動機(jī):方便擴(kuò)展。3)好處:方便管理,例如uc/os-ii, vxWorks的信號量處理;4)問題:。 5) 實(shí)用性:根據(jù)情況。37五、重構(gòu)在現(xiàn)實(shí)開發(fā)中的推廣和障礙38為什么開發(fā)者不愿意重構(gòu)他們的程序?新手不相信重構(gòu),老手不知道如何重構(gòu);如果這些利益是長遠(yuǎn)才體現(xiàn)的,何必現(xiàn)在付出這些努力呢?說不定當(dāng)項(xiàng)目收獲這些利益時,你已經(jīng)不在職位上了;代碼重構(gòu)是一項(xiàng)額外工作,項(xiàng)目經(jīng)理則是進(jìn)度為第一驅(qū)動力;重構(gòu)可能破壞現(xiàn)有程序;39我想到的解決辦法重構(gòu)系列培訓(xùn),單板軟件試點(diǎn),組建重構(gòu)小組;重構(gòu)同樣可以短期受益,正如鍛煉身體和飲食調(diào)控;降低重構(gòu)帶來的額外開銷,頂

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論