- 相關(guān)推薦
淺談?dòng)嬎銠C軟件重構技術(shù)
軟件重構是指在不改變軟件的功能和外部可見(jiàn)性的情況下,對軟件進(jìn)行的改造,以下是小編搜集整理的一篇探究軟件重構的論文范文,歡迎閱讀查看。
摘要:本文闡述了軟件重構技術(shù)的現狀,研究意義和發(fā)展前景。
關(guān)鍵詞:軟件重構 原型開(kāi)發(fā) 簡(jiǎn)化 復用 測試
1、軟件重構的定義
軟件維護最初最貼切的形容就是“打補丁”,所有的維護工作采用的都是一種消極但快速的方法。如果發(fā)現系統有問(wèn)題,維護人員就快速找到這個(gè)問(wèn)題,然后修改源代碼,解決這個(gè)問(wèn)題。如果要添加一個(gè)新的功能,那就找到一個(gè)相似的模塊,修改代碼以后放進(jìn)去。這樣反復多次之后,系統變得越來(lái)越臃腫,越來(lái)越難于理解,維護也越來(lái)越艱難、越來(lái)代價(jià)越高。人們期望解決這一問(wèn)題的根本辦法,于是軟件重構技術(shù)應運而生。通過(guò)這種技術(shù),使得編碼更加謹慎合理,編碼時(shí)如果非常小心,則代碼會(huì )具有良好的形狀和味道,在修改添加代碼前,通過(guò)查看代碼的形狀和味道來(lái)決定是否進(jìn)行更新。如果代碼不容易被理解,則必須重構代碼以使得維護變得容易,再進(jìn)行相應的擴展和更新。
軟件重構是指在不改變軟件的功能和外部可見(jiàn)性的情況下,為了改善軟件的結構,提高清晰性、可擴展性和可重用性而對軟件進(jìn)行的改造。簡(jiǎn)而言之,重構就是改進(jìn)已經(jīng)寫(xiě)好的軟件的設計。也就是說(shuō),改進(jìn)后的軟件其原有的功能和行為都不改變,改變的僅僅是程序內部的編碼。重構是在源代碼級別上進(jìn)行的,目的是使原有的代碼在重構后具有良好的程序結構。
2、軟件重構的意義
計算機技術(shù)的發(fā)展帶來(lái)了全社會(huì )的變革,人們的生活對計算機的依賴(lài)越來(lái)越強,所使用的軟件也越來(lái)越復雜,對開(kāi)發(fā)軟件所使用的技術(shù)也要求越來(lái)越高。面向對象開(kāi)發(fā)方法等有利于軟件利用的方法和技術(shù)得到了廣泛的運用。但同時(shí)也顯示出一些弊端。為了開(kāi)發(fā)出使用方便,利于維護的軟件系統,軟件開(kāi)發(fā)人員希望把初始系統設計得盡可能的完美、靈活、具有良好的可擴展性。這不僅要求軟件開(kāi)發(fā)人員具有較高的軟件設計能力,而且,再完美的設計也不可能完全適應未來(lái)的需求變化。解決這一問(wèn)題的方法是軟件工程中的原型開(kāi)發(fā)方法,在原型開(kāi)發(fā)方法中,系統開(kāi)發(fā)人員首先快速開(kāi)發(fā)出一個(gè)系統原型提供給用戶(hù)使用,通過(guò)用戶(hù)在使用過(guò)程中的不斷反饋來(lái)對系統進(jìn)行修改直到最后開(kāi)發(fā)出系統的成熟版本。軟件擴展是在軟件重構的基礎上完成的。在需要擴展時(shí),使用軟件重構方法和重構工具,采取提取抽象數據類(lèi)型、提取接口等技術(shù)對代碼結構進(jìn)行改造,以利于軟件的維護、功能的增加等活動(dòng)。
對于已經(jīng)投入使用的系統,由于需求、業(yè)務(wù)、法規等因素的變化,也會(huì )因此而改變,需要在原有的系統上進(jìn)行修改和擴充。在維護過(guò)程中可能會(huì )遇到設計風(fēng)格不一致、過(guò)時(shí)的編程語(yǔ)言、系統文檔過(guò)時(shí),不完整和難于理解的問(wèn)題。這時(shí)候,為也延長(cháng)舊系統的生命周期,降低系統維護成本。就可以采用以原有系統進(jìn)行重構的方法對軟件進(jìn)行重構,使其在改善程序結構的基礎上適應需求的變化。
軟件重構也能為程序員的編碼帶來(lái)好處,首先,可以簡(jiǎn)化設計,重構允許系統設計剛好滿(mǎn)足現有需求,不必過(guò)多考慮未來(lái)的需求,降低了系統設計的復雜程度,當有新的需求時(shí),可以利用重構技術(shù),快速進(jìn)行設計擴展。其次,可以增強程序的可讀性,便于理解他人的編程目的,利于快速開(kāi)發(fā)軟件系統。再者,軟件重構可以使程序的結構更加清晰,減少編程過(guò)程中出現的問(wèn)題,并且,由于重構是建立在嚴格的測試之上的,所以能夠快速發(fā)現問(wèn)題。將復雜的軟件測試分解為遞進(jìn)式的簡(jiǎn)單測試,降低了測試的復雜度。最重要的是重構可以使得代碼的可理解性大大提高,原因在于,重構技術(shù)支持更小的類(lèi)、更短的方法、更少的局部變量、更小的系統耦合,重構可以讓程序員養成良好的編程習慣。
3、軟件重構的研究現狀
軟件重構的研究緊緊圍繞以下幾個(gè)方面展開(kāi),目前已經(jīng)取得了一些成果。
(1)基本重構方法和復合重構方法的研究,如Opdyke針對C++語(yǔ)言定義的一組基本重構方法,在其中定義的每個(gè)基本重構方法中,由前提條件和執行動(dòng)作組成。在進(jìn)行重構時(shí)以每個(gè)基本方法為重構的最小單位。通過(guò)執行動(dòng)作對程序的修改步驟進(jìn)行描述,前提條件是用來(lái)保證程序行為的不變。將這些基本重構方法組合起來(lái)形成復合重構,就可以用來(lái)解決復雜的重構問(wèn)題。Roberts等人受Opdyke研究的啟發(fā),對基本重構方法進(jìn)行了改進(jìn),增加了后置條件約束,討論了復合結構中基本重構之間的依賴(lài)性問(wèn)題,提出了計算復合重構前置條件的計算方法,并開(kāi)發(fā)了針對Smalltalk的重構輔助工具。
(2)不良程序結構的探查和整理。如冗余代碼探查和消除、類(lèi)層次的整理、橫切關(guān)注的探查和封裝等。其中冗余代碼的探查和消除主要使用字符串比較的方法,類(lèi)層次的整理主要使用“漸進(jìn)增加類(lèi)”算法實(shí)現,而橫切叛黨的探查和封裝主要使用面向方面范型進(jìn)行研究和實(shí)踐。
(3)程序理解方法和工具。要進(jìn)行軟件維護和軟件重構必須在理解程序結構的基礎上施行。除了針對程序代碼中的不良程序結構進(jìn)行探查,還需要圍繞程序的設計模型進(jìn)行分析。如Pauw等人開(kāi)發(fā)的Ovation系統,使用了執行模式視圖在不同的抽象層次上對程序的執行進(jìn)行可視化,并對生成的模型進(jìn)行一些操作。Storey等人開(kāi)發(fā)Rigi逆向工程環(huán)境則使用有向圖表示軟件構件和它們之間的關(guān)系。
(4)面向典型設計的重構方法。如Tokuda和Batory探討了采用手工方式對程序應用設計模式的重構的方法,他們通過(guò)實(shí)驗指出:一個(gè)典型的系統在使用重構和引入設計模式后,可以明顯地增加軟件質(zhì)量。Tonella和Potrich提出了從C++代碼中自動(dòng)抽取UML交互圖的方法。這個(gè)基于靜態(tài)的程序分析技術(shù)的方法,基本可以描述在任何輸入下程序的結果。將對象交互圖的抽取過(guò)程分兩步:第一步,從源碼中推斷出程序所創(chuàng )建的對象和程序中變量;第二步,把方法的每一個(gè)調用分解成交互過(guò)程中包含的發(fā)送類(lèi)和接收類(lèi)。
(5)軟件重構輔助工具。如Opdyke開(kāi)發(fā)的重構輔助工具C++重構工具,Roberts等人開(kāi)發(fā)的Smalltalk Refactory Browser等。這些工具雖然沒(méi)能成為實(shí)用的工具,但卻是后續研發(fā)工作的基礎。
【淺談?dòng)嬎銠C軟件重構技術(shù)】相關(guān)文章:
淺談互聯(lián)網(wǎng)文化與電視文化的碰擊與重構10-07
淺談網(wǎng)絡(luò )時(shí)代的會(huì )計思維重構08-31
淺談?dòng)嬎銠C軟件工程的維護措施07-23
淺談攤鋪機的技術(shù)保養09-07
軟交換技術(shù)淺談08-15
淺談果樹(shù)盆栽技術(shù)10-10
計算機軟件技術(shù)中插件技術(shù)的運用10-02