第10章軟件演化、再工程與逆向工程_第1頁
第10章軟件演化、再工程與逆向工程_第2頁
第10章軟件演化、再工程與逆向工程_第3頁
第10章軟件演化、再工程與逆向工程_第4頁
第10章軟件演化、再工程與逆向工程_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第10章 軟件演化、再工程與逆向工程10.1軟件演化的基本概念“變化”是硯實(shí)吐界水恒的主題.只有“變化”才能發(fā)展Lehman認(rèn)為現(xiàn)實(shí)吐界的 乘統(tǒng)要么變得越來越?jīng)]有價(jià)值耍么進(jìn)行持續(xù)不斷的演化變化臥適應(yīng)環(huán)境的變化.軟件是 對(duì)現(xiàn)實(shí)lit界中問題空間弓解空仙的貝林描述,是客觀于物的一種反映"現(xiàn)次世界是不斷漁 化的,因此*演化杵啟軟件的基本屬性特別忌在Intenwt成対丄流軟件運(yùn)行環(huán)境之后, 網(wǎng)絡(luò)的殲成性和動(dòng)態(tài)性便閔'客戶需求與硬FI卷源更加頻繁地變化,乃敢軟件的演化忡.和以 雜性迸一步埔強(qiáng)"10.1.1軟件演化、軟件維護(hù)與軟件復(fù)用軟件演化<Sofhvare Evolu

2、tion >描任軟件示統(tǒng)的生命周期內(nèi)牧件氾護(hù)利牧件更新的行 為和過粋.it現(xiàn)代軟件系統(tǒng)的牛命周期內(nèi)*演化丘一頂貫穿始終的活納”條統(tǒng)竊求改變、 功能實(shí)現(xiàn)埔強(qiáng)、箭功能加入、軟件俸繞給構(gòu)改.變、軟件缺陷修宜、迄行環(huán)境改變尢恥均理 求軟件系統(tǒng)具仃較強(qiáng)的演化能力,能夠快速適険改變.減少軟件維護(hù)的代價(jià)°軟件演化研完致力F尋找觀則、識(shí)別輕式a這種規(guī)則利棋武才車用于營理那些由臧 用程序的編禪人員或宵足維護(hù)人員所作的變境° K奮味若軟件演化研完F豁致承統(tǒng)平一致 的變化有關(guān)*軟件演化足一個(gè)模糊而范圍廣泛的概老:.普遍的理解認(rèn)為演化就星修改軟件. 侖且意味著需要一個(gè)新的幵笈周期,包括新的測

3、試和生嚴(yán)階段,逑樣對(duì)于資源消耗耒說是 很血險(xiǎn)的。允比浴調(diào)試希不星軟件的開發(fā)人員的時(shí)候,就晶得更加翌雜了。我f門認(rèn)為軟件 演化陶致力門盡町能限創(chuàng)那些町能波彩響的變化豐牙的性質(zhì)-從軟件演化的概念來召,軟件演化和軟件維護(hù)仃蒼密切聯(lián)系,旦二在乂訂本質(zhì)區(qū)別。 軟件維護(hù)尾對(duì)現(xiàn)有的已奩付的軟件猱統(tǒng)進(jìn)行修改,使得目標(biāo)系統(tǒng)能棒完戚新的功能.或足 在新的環(huán)境下沱成同樣的功能.主要尾捺在軟件樂護(hù)期的倏改活動(dòng)-而軟件演化則足若眼 于軟件的整個(gè)生命周期.從冢統(tǒng)功能fj為的角度來觀痰冢統(tǒng)的變化.這科變化是秋件的一 種向前的發(fā)展htf"主堤體現(xiàn)在軟件功能的不斷完善 TT軟件維護(hù)期.通過貝體的縮護(hù)活 動(dòng)可以使系統(tǒng)不

4、斷向前演化.因此.軟件維護(hù)和軟件演化可以歸結(jié)為這樣一種關(guān)系H前巻 足后昇特運(yùn)階段的活勁.井且前巖宜接是后著的組嚴(yán)部分。軼件漁化的過再.也總通過修改敦件的組成成分以適應(yīng)變化的過fVn在叢一過F?中 通常我們會(huì)以可能施用系統(tǒng)己商的部分*降低演化的成卑和代價(jià) LM此支持軟件演化的技 術(shù)通常也包含了軟件復(fù)用的部分技術(shù).如基于構(gòu)件的開繪"構(gòu)件復(fù)用技朋等謬a與軟件冥 用一樣.軟件演化也可能發(fā)生在時(shí)聞' 平臺(tái)、應(yīng)用維F"<1 )時(shí)問細(xì);牧件収以,前的軟件版本作為新版本的基礎(chǔ).適賊新霊求+加入新功能+ 不斷向 前演化<2>平臺(tái)維:軟件哄某平自上的軟件為基礎(chǔ)&quo

5、t;修改其和運(yùn)行平臺(tái)相關(guān)的部分.運(yùn)行在 刪的平臺(tái)上適應(yīng)環(huán)境變化。< 3 )丿垃用維:持過傾域的軟fl演化后閩用于相近的網(wǎng)用傾域“盡宦軼件演化利軟件缸用具仃.如匕的尖冋特性,但亡卡門研究問題的出凝點(diǎn)和手段冃的 部足不同的。軟件何I的門的是避仇軟件卄發(fā)的.匝惡勞動(dòng)+扌是高軼件開發(fā)的噴宅和效率。 而軟件濱化甘眼廠略個(gè)軼件的牛.命周期*研完如何在較低的卄發(fā)代價(jià)的怙況廠延長軟件 的生命周期.提有軟件適應(yīng)改變的能力。10.1.2軟件演化的分類軟件演化可棊本匕分為兩種:前態(tài)演化利動(dòng)態(tài)演優(yōu)。<1)靜態(tài)演化(Static Evolutionh是指軟杵在停機(jī)狀態(tài)卜的演化。其優(yōu)點(diǎn)是不用考慮 運(yùn)行狀態(tài)的遷

6、移、同時(shí)也沒有活動(dòng)的進(jìn)程鬧要處理口然而停止一個(gè)應(yīng)用程序就意味看中斷 它堤供的服務(wù).造成軟件暫時(shí)失效a(2、動(dòng)態(tài)演化f Dynamk Ewohnion x是指軟件在執(zhí)行期間的軟件演化*其優(yōu)點(diǎn)是軟件 不會(huì)存在韓時(shí)的失效*有持續(xù)可用件的明皿優(yōu)點(diǎn)°歸由戶涉履狀態(tài)遷移斧問題.比靜態(tài)演 化從技術(shù)上更難處埋"動(dòng)畜演化*最境雜也#最仃丈陟意義的演化形式.動(dòng)態(tài)演化使得軟件在運(yùn)行過程中, 可以根據(jù)陶用霜壟和環(huán)境變化,動(dòng)態(tài)地進(jìn)行軟件的配貿(mào)、峯護(hù)和更新.其表現(xiàn)形式包拈系 統(tǒng)元素?cái)?shù)目的可變性、結(jié)構(gòu)關(guān)系的可譏節(jié)性和結(jié)構(gòu)形態(tài)的動(dòng)態(tài)可配?Y性。軟件的動(dòng)態(tài)演化 特nf I適應(yīng)未來軟件發(fā)展的”放件、動(dòng)態(tài)14貞

7、言巾箜帝義。按照變史發(fā)生的時(shí)機(jī)+軟件懺化町分為以卜JL類。(1 設(shè)計(jì)時(shí)演化;設(shè)計(jì)時(shí)演化是捋在軟件編譯前.通過儲(chǔ)改軟件的設(shè)計(jì)、源代碼,重 新編譯r部署垂統(tǒng)來適應(yīng)變化。設(shè)計(jì)時(shí)演化是目前在軟件開發(fā)實(shí)跌中應(yīng)用最廣泛的演化形 式。2)裝載期演化匕裝我期演化足指在軟件編譯后、運(yùn)行前進(jìn)行的演化*變史發(fā)生在運(yùn) 行平臺(tái)裝載代碼期RU因?yàn)橄到y(tǒng)尚未開始執(zhí)行,這類演化不涉及系統(tǒng)狀態(tài)的維護(hù)問養(yǎng)3)運(yùn)行時(shí)演化:發(fā)生在程序執(zhí)行過程中的任何時(shí)刻部分代碼或看對(duì)銀在執(zhí)擰期閭 被修改.這種演化是研究領(lǐng)域的一個(gè)熱點(diǎn)問題"顯而易見,設(shè)計(jì)時(shí)演化是靜態(tài)演化.運(yùn)行時(shí)演化魁一種典型的動(dòng)態(tài)演化.而轉(zhuǎn)載期何 的演化既可以波看作是靜態(tài)演化

8、也可以看作足動(dòng)態(tài)演化,取決f它怎樣披平臺(tái)或提供苕使 用°事實(shí)匕如果足用尸裝我類和代碼.那么裝較期演化就足靜態(tài)演f匕丙為它其實(shí)是類 的映射+而實(shí)際的裝我代碼井沒有改變*界-種可能足埔抑f層、允許在運(yùn)行時(shí)刻動(dòng)態(tài) 的裝戦代碼和卸鞍I 口的版本這樣*通過進(jìn)續(xù)的版本來更換代碼,皐后實(shí)現(xiàn)系統(tǒng)的演化* 變里本身也可以被認(rèn)為是動(dòng)態(tài)的演化機(jī)制.另外.演化可収是預(yù)設(shè)的和非預(yù)設(shè)的.M預(yù)設(shè)演化是可以被殲發(fā)人員所預(yù)見的演化.例如.插件技代就是一種允許程序員 和維護(hù)人員在不更改臧用捉序核心部分的前提卜擴(kuò)展泵統(tǒng)功能的機(jī)制。楚優(yōu)點(diǎn)懇它町以握 供依賴尸動(dòng)態(tài)軟件濁化卜商單前裝戰(zhàn)和卸戦機(jī)制,同時(shí)也可以眾供依戰(zhàn)于靜態(tài)湧化卜

9、的 API:塊點(diǎn)是在一些可能的變更中缺少適應(yīng)性.2非預(yù)設(shè)演化是指不能披卄發(fā)人員所預(yù)見的那些演化.變更必須得到語擊或首是執(zhí) 疔平自(在創(chuàng)態(tài)演化中的龍打。其優(yōu)點(diǎn)足包舍了更聲町能的演化、缺瘵足仍然沒右一個(gè) 被普垢接覺的演化解訣方案。我ff更加關(guān)注于非預(yù)設(shè)的動(dòng)態(tài)演化.也就是說我們想耍得到一個(gè)在運(yùn)行期間不受演化 可能性限制的演化系統(tǒng).10.2設(shè)計(jì)時(shí)演化設(shè)計(jì)時(shí)演化是目前在軟件開發(fā)宴韭中感用繪廣泛的演化形式設(shè)計(jì)時(shí)諼化在軟件編譯 前*通過修改軟件的設(shè)計(jì)*源代碼車新編譯、部莒系統(tǒng)來適屜變化“目前有多種技術(shù)用 來提高軟件的設(shè)計(jì)時(shí)演化能力,如基于構(gòu)件的卄發(fā)CBSD).基于軟件框架(Framework) 的卄發(fā)、設(shè)計(jì)

10、模式(Dewgn Pattern)等等。10.2.1設(shè)計(jì)模式對(duì)設(shè)計(jì)時(shí)演化的支持設(shè)計(jì)模式覽村經(jīng)過實(shí)踐檢驗(yàn)的s好的設(shè)計(jì)經(jīng)驗(yàn)的提煉和總結(jié),它強(qiáng)調(diào)了在特定環(huán)境卜“ 制反V出現(xiàn)的址計(jì)問題的一牛牧件解*側(cè)匝于解決軟件険計(jì)中存在的貝體問題。設(shè)計(jì)模式解塊的核七何題與設(shè)計(jì)時(shí)演化一致,要解決軟竹A何適應(yīng)變化的問題*各種 設(shè)計(jì)模式在實(shí)際上都從不同側(cè)面封裝了變化,有效地握高了軟件的設(shè)計(jì)時(shí)演化能力,表1-1 列出了部分設(shè)計(jì)模式和它們所對(duì)裝的變化。表1-1 設(shè)計(jì)模式對(duì)設(shè)計(jì)時(shí)演化的支持變化設(shè)計(jì)模式實(shí)觀算法Visitor Strategy用戶接口操作Comnund對(duì)象接口Adapter對(duì)蒙實(shí)現(xiàn)Bridge對(duì)象之問的殳1

11、63;Mediator- Facade. Prosy對(duì)毎創(chuàng)建過釋Abilract Factory. Factor' Method. Prolotypc對(duì)彖結(jié)構(gòu)謹(jǐn)工過程Builder對(duì)象結(jié)構(gòu)C omposire響歷算法IreratiM對(duì)象行詬State、Decorator操作執(zhí)彳亍過程TeinphtePublish-Subscribe10.2.2構(gòu)件技術(shù)對(duì)設(shè)計(jì)時(shí)演化的支持構(gòu)件是用來枸世軼件系統(tǒng)的町復(fù)用的軟件元索.構(gòu)件理常衰現(xiàn)為不同的形態(tài)*形態(tài)的 差異體現(xiàn)在結(jié)構(gòu)的組織方式和所依賴的軟件卄發(fā)方法.按照陶件的境用方式,構(gòu)件町以分為以F兩種。 源代碼構(gòu)件:這是最常見的構(gòu)件形式*如結(jié)構(gòu)化編稅中的曲

12、數(shù);而向村象編我中 的類、類樹:包(Package)等° 二進(jìn)制構(gòu)件*構(gòu)件以編譯后代碼的陪式握供.如ActiveX揑件、EJB構(gòu)件、Java 類丈件等.按照應(yīng)用領(lǐng)域.構(gòu)件町分為以下三種° 通用棊本構(gòu)件;這是計(jì)算機(jī)索統(tǒng)的共性構(gòu)成成分.如基本的數(shù)據(jù)結(jié)構(gòu)r用戶接口 兀索等,它們町以存在于各種應(yīng)用系統(tǒng)中* 領(lǐng)城共件構(gòu)件:這足肉用系統(tǒng)所屈領(lǐng)城的共性構(gòu)成成分.它們存奮于諂領(lǐng)域的冷 牛應(yīng)用系統(tǒng)中.應(yīng)用專用構(gòu)件:這是每個(gè)嵐用系統(tǒng)的特有構(gòu)成成分匚基 f' 的軟 竹 開發(fā)(Ccunponenl Based Software Development, CBSE>)是一心:不UHJ

13、町第用的軟件構(gòu)件建工岡用至統(tǒng)的技貳這些構(gòu)件由:部為組成;構(gòu)件實(shí)現(xiàn)功罷說明:構(gòu) 件的設(shè)計(jì)實(shí)現(xiàn)*構(gòu)件的卄發(fā)接口。cbsd的基本忠歸就足通過利用e<臺(tái)掏件或白我組縱卄境的佝件來m裝隔用程宇。 CB3D基SoftwareIC的思想.強(qiáng)調(diào)軟件幵發(fā)的44組裝”特性.即軟件開發(fā)過程就是技術(shù) 構(gòu)件的構(gòu)適、組織“選取、釘.裝過fY 町見用構(gòu)件為育計(jì)劃地進(jìn)"逐用捉供手段*壘實(shí) 現(xiàn)軟口比用I向離石.共生產(chǎn)和便用必須滿足兩個(gè)基本前捉,即構(gòu)件接口的標(biāo)準(zhǔn)化和構(gòu)件的 集成機(jī)制“目舸從構(gòu)件的宦義和站構(gòu)衆(zhòng)說+ L匕有比較戰(zhàn)熟的構(gòu)件規(guī)范+如COM DCOM. CORBA. EJB等.這些規(guī)范為基于構(gòu)件的軟件升發(fā)、

14、組裝過程提供了完善的基礎(chǔ)設(shè)施匚構(gòu)件卑現(xiàn)代軾件系統(tǒng)的主強(qiáng)組成成力.是條統(tǒng)功能實(shí)觀的找體.因此軟件演化的基本 單位就碓構(gòu)件演化.實(shí)際上構(gòu)件演化也膽軟件演化的主要形式“支持構(gòu)件殳計(jì)時(shí)演化的主 聽技術(shù)如下。1. 構(gòu)件包裝在泵統(tǒng)開發(fā)過程中*經(jīng)常出現(xiàn)集成的構(gòu)件接【1幻泵統(tǒng)設(shè)計(jì)需要的接I丨不抿容的情況* 常見問題包括接口亓法名稱平 致*參散類型卞亠致+這就要求對(duì)原掏件邊行橫化 時(shí)于 這類接PF演化問題,通常來用的做法是使用構(gòu)件包裝器(Component Wrapper)D構(gòu)件包賤 器(如圖1-1)內(nèi)封袈了原始構(gòu)件.同時(shí)提伏了泵統(tǒng)需夏的接門.這柑就解隗了構(gòu)件接門 干兼容的問題“zX演化構(gòu)件® 1-1

15、包裝器將構(gòu)件的接口 A演優(yōu)為接口 B構(gòu)件包裝器本身不做核心工作.它只是進(jìn)行簡單的蛀理后,調(diào)用原始掏件合適的方法. 執(zhí)行客戶的請(qǐng)求、因此這星一種簡單肖效的構(gòu)件演化的方法°構(gòu)件包裝器4:僅可以包裝單個(gè)構(gòu)件,南if町以包駛務(wù)亍構(gòu)件"即冋時(shí)対裝掏件。通 過更合多個(gè)構(gòu)件的功能.包裝器可以提供更加強(qiáng)大的功能.此時(shí)包裝器時(shí)亍包裝器的客戶, 啖際卒牙也已經(jīng)成為一個(gè)構(gòu)件口 一亍月裝了兩個(gè)構(gòu)件力能的赳裝器的丈現(xiàn)如圖12 示.圖封裝了兩牛構(gòu)忤的構(gòu)件包裝器的實(shí)現(xiàn)2. 基于繼承機(jī)制的構(gòu)件演化基j継承機(jī)制的構(gòu)件演化足一種廣泛吏用的掏件演化技術(shù)*継承 5山zimnw)和 多態(tài)(PRynKHphisnl是

16、對(duì)象建模技術(shù)適應(yīng)變牝的強(qiáng)有力武器。通常需寒演化的構(gòu)件,將 自己可能需要浪化的部分定義為虛函數(shù),并捉供默認(rèn)實(shí)現(xiàn).在新的環(huán)境中*當(dāng)需褻對(duì)原構(gòu) 件進(jìn)行演化時(shí)通過創(chuàng)建進(jìn)承自原構(gòu)件的子構(gòu)件,并按照瓏求蟲新實(shí)現(xiàn)制分虛圉散,就M 以達(dá)到構(gòu)件演化的口的如個(gè)撲印構(gòu)件,負(fù)擊實(shí)現(xiàn)備統(tǒng)魏據(jù)的打印輸出,具輸山過玫由三那分拘成。 beforePrintOi初始化打E卩機(jī)©piintOi打印文檔°afierPruitOi員貴打印結(jié)束后的后期赴理.対F不冋的掏件彳吏用環(huán)蜒.打評(píng)機(jī)的初始化和后期處理可能都不相同通過將befbrePrintOafterPnntO定遼為能函裁* fl K寸不同"勺壞蛹

17、川倉不同的/拘件+就仔敢賣 現(xiàn)了打印構(gòu)件的演化,具體冥現(xiàn)如圖1_3所示。扌J即構(gòu)伴prints打印枸件T讎承圖1-3里于繼承機(jī)制賓現(xiàn)打印構(gòu)愷的演代10.2.3框架技術(shù)對(duì)設(shè)計(jì)時(shí)演化的支持(FrEunvork)町以看作 種大柚度的構(gòu)件*其中包含桿丁嚴(yán)掙通構(gòu)件+定瓷構(gòu) 件之間的協(xié)作規(guī)約.臥實(shí)硯-卜大的瘀統(tǒng)功能同時(shí)框架也星-亍軟件產(chǎn)昂的半成品*它含 可變和不變部分、通過討河變部分的定制得到軍同的同用系統(tǒng)=對(duì)簸框架的更用可以機(jī)人地 降低牌用開發(fā)的難度.通過境用一個(gè)好的権架可UJ得到一個(gè)設(shè)計(jì)簡潔高效、穩(wěn)定的累統(tǒng)口 脈架是用用至統(tǒng)或子索統(tǒng)的可鰻用交用設(shè)計(jì),在面向?qū)潥У酿鼋y(tǒng)中.愜架通常由一乘 列的抽家類和貝體

18、蹇組成*系統(tǒng)的行由抽象類的貝體宜現(xiàn)類的交互決定.護(hù)架是比設(shè)計(jì)模式和構(gòu)件更高忌次、更大粒度的址用方式.成功的軟件框架設(shè)訐通軸 崗;也擅了大hL.的i殳計(jì)模式< Design Pattem)和列比用構(gòu)(1 < Reusable C'ononeiit】* H發(fā)西 可以更用這些設(shè)計(jì)模式機(jī)拘件開發(fā)自U貝體的應(yīng)用*框架都足面向特定領(lǐng)域的.如用戶接口設(shè)計(jì)或分布式通訊。12列出了一些流行的 軟件框架”» 1-2 一楚面向特定領(lǐng)域的軟件框架應(yīng)用框架簡介JARS Jax'a Authentication and AntiionrizatioifiSerxrice )JARS址

19、-個(gè)用Th偏 的用廠認(rèn)訕:和授敘空響框架. 以珅插拔的方式提供空全認(rèn)1止鵬芬.迪立底圧.H體 的出住認(rèn)證賓現(xiàn)A< E < Adaptive ConinuirLieficHt EnvironmentACE是一個(gè)面向?qū)ο蟮幕贑的分術(shù)式通訊框 架*它挺供廣屮富的迪州模式和陶艸來幵覽時(shí)平白閭 高檢能分布式系統(tǒng)SwingSwing足Jnva平臺(tái)的GUI W發(fā)慮煤MFCMFCJ Microsoft 的 WIN32 GUI 幵置扮架* 它Win32 API,WIN32應(yīng)用程序的開圾QT一個(gè)屜于C的GUI甘處矗架+ 1司的玄持苓牛平臺(tái) (Windows. Unix/Linux, Mac OS X

20、, Embedded Linux)的燉用系比卄發(fā)段計(jì)抿架的主翌tl的足軟件眨用'框架足-種比構(gòu)件更大粒度、更高層次同軟件更用 方式。從某種意義匕 可以把框架看作一個(gè)大粒度的構(gòu)件。和普通構(gòu)件類似,使用環(huán)境的 改變、軟件技術(shù)的更新、系統(tǒng)功能的更新都要求框架處在不斷的演化過程中.和普通構(gòu)件 不同的是.框架演化對(duì)兼容性有更高的要求,因?yàn)橥ǔ<航?jīng)存在一些基于舊版*框架開發(fā) 的軟件系統(tǒng),推架演化應(yīng)該保證軟件系統(tǒng)可以容易地移植到演化后的框架之上,以保護(hù)原 有的投資.軟fl椎架按照對(duì)設(shè)計(jì)時(shí)演化支持方式的不同可朝分為臼箱框架(White B酥 Framework > fl f 啓;FH *懺駅(B

21、lack Box Framework).1.白箱框架白箱框絮逋常足框絮開發(fā)經(jīng)歷的第一個(gè)階I乳這一階段的工蚩特征是框架大屋便用基 于繼承的枸件演化技術(shù)=繼承足椒架支拎設(shè)計(jì)時(shí)演化的主翌予段.因?yàn)楸阌美^承機(jī)制,需 姜演化者對(duì)框架的內(nèi)部機(jī)制冇淸晰的理解、因此演化者通常足粗架的設(shè)計(jì)者a由F便用靜 態(tài)的基于繼承的演化技術(shù)、臼箱框架不支持框架的動(dòng)態(tài)演化a在白箱演化階段*為了提高抿架的疫用能力,通常使用寡種設(shè)討摸武如Template和 Factory尊。同時(shí)白箱框架也會(huì))發(fā) 些構(gòu)件庫 Ccnupouent Ubrary)供框架便用者使用©隨著基于白箱框架的開發(fā)應(yīng)用系統(tǒng)歲模的擴(kuò)大,白箱框架的缺點(diǎn)逐漸暴

22、躍出來(1白箱框架通過琳承擴(kuò)展框架的功能+為了刃變一個(gè)簡單的功能.框架需要派生子 類*這樣會(huì)導(dǎo)致生成氐塞的子類,増加了系統(tǒng)的缸雜度降低了系絨的可理解性和町維護(hù) 性百(2白賴框架耍求性用占黜愚框緊的結(jié)構(gòu).刼用者惡悉框媳的內(nèi)部實(shí)現(xiàn)細(xì)節(jié),猶承導(dǎo) 致構(gòu)件之沏較強(qiáng)的耦合.捉高了樞架的復(fù)用難度"f 3継承是一種棘態(tài)演化機(jī)制*不支押框架的功態(tài)演化"圖1-斗基于繼承的門箱搟架演化機(jī)制2.黑箱框架黒箱框架走框架演化發(fā)展的下一階段,這一階段的主燙特征是黑箱框架使用基于構(gòu)件 組合(QoirJonent CompoEion)的方式進(jìn)行框架演化亠構(gòu)件組合方式和繼承方式最大的不 同是構(gòu)件組合方式支持構(gòu)

23、件的運(yùn)行時(shí)動(dòng)態(tài)改變,支持框架的動(dòng)態(tài)演化.圖1-5黑箱框架適過可錘拔構(gòu)件實(shí)現(xiàn)設(shè)計(jì)時(shí)演此権架演化的主要 右武通過可插拔構(gòu)件(Pluggiible Component)實(shí)現(xiàn) 町捕拔構(gòu)件指 符合一定接I前橋件,衣接門不變的情況下.可以實(shí)現(xiàn)以車冋方式實(shí)現(xiàn)的構(gòu)件互換使用 基于可插拔構(gòu)件技術(shù).框架的演化者無霜理解框架的整體實(shí)現(xiàn)細(xì)節(jié),只肅按照框架說明 丈現(xiàn)符件一定核口的町插拔構(gòu)件.將堆靜態(tài)或動(dòng)態(tài)的插入框架叩.就對(duì)丈現(xiàn)對(duì)椎架的定 制-10.3軟件再工程10.3.1概述軟件再工程是指對(duì)既存對(duì)象系統(tǒng)進(jìn)行調(diào)查,并將其重構(gòu)為新形式代碼的開發(fā)過程。最大限度 地重用既存系統(tǒng)的各種資源是再工程的最重要特點(diǎn)之一。從軟件重用方法

24、學(xué)來說,如何開發(fā)可重 用軟件 和如何構(gòu) 造采用可重用軟件的系統(tǒng)體系結(jié)構(gòu)是兩個(gè)最關(guān)鍵問題。不過對(duì)再工程來說 前者很大部分內(nèi)容是對(duì)既存系統(tǒng) 中非可重用構(gòu)件的 改造。在軟件再工程的各個(gè)階段,軟件的可重用程度都將決定軟件再工程的工作量。(1)再分析。再分析階段的主要任務(wù)是對(duì)既存系統(tǒng)的 規(guī)模、體系結(jié)構(gòu)、外部功能、內(nèi)部算 法、 復(fù)雜度等進(jìn)行調(diào)查分 析。這一階段早期 分析最直接目的就是調(diào)查 和預(yù)測 再工程 涉及的范圍。北京 工業(yè)大學(xué)軟件工程 研究所研 制開發(fā)的 軟件再工程 輔助調(diào)查工 具一一SFRE ”正是從 整體上 支持 該 分析階段 的再工程 自動(dòng)化工具。重用是軟件工程 經(jīng)濟(jì)學(xué)最重要 原則之一,重用 得

25、越多,再工程 成 本越低,所以逆向工程再分 析階段最重要的 目的是尋找可重用的對(duì)象 和重用策略,最終確定的再 工程任務(wù)和 工作量也 將依存于可重用對(duì)象 范圍(重用率)和重用策略。與一次工程不同,再工程分 析者最終提岀的重用范圍和重用策略將成為決定再工程成敗以及 再工程 產(chǎn)品系統(tǒng)可維護(hù) 性高低的關(guān)鍵因素。如果重用對(duì)象 都是既存代碼 級(jí)的當(dāng)然理想,然而可能 性有限。但是再工程分 析者如果因此而放棄 重用,以為 改他人的代碼 不如自己重新編寫”,便犯 了再工程的大 忌。因?yàn)橐粋€(gè)運(yùn)行良久的既存系統(tǒng),最 起碼的價(jià)值是在操作方法和正確性上已被用 戶接受。而再高明的程序員在軟件沒有經(jīng)過用戶一段時(shí)間的使用驗(yàn)證

26、之前都不 敢保證自己的程序 正確無誤;更何況越是有經(jīng)驗(yàn)的程序員越是知道對(duì)一個(gè)處于局部變更地位的程序進(jìn)行重新 編寫遠(yuǎn) 比一次工程的原始編程復(fù)雜得多,因?yàn)樗枰獙?duì)應(yīng)無數(shù) 的 副作用”,正所謂 碰一筋而動(dòng)全身”。 所以,讀文檔一一即使是破爛不堪”、讀代碼一一即使是千瘡百孔”,也要堅(jiān)持住,并且從中篩 岀可重用對(duì)象。(2) 再編碼。根據(jù)再分析階段做成的再工程設(shè)計(jì) 書,再編碼過程將 在系統(tǒng)整體再分析基礎(chǔ)上 對(duì)代碼 做進(jìn)一步分析。如果說再分 析階段產(chǎn)品 是再工程的基本設(shè)計(jì)書,那么再編碼階段如同一次 工程一樣,先要產(chǎn)生的是類 似詳細(xì)設(shè)計(jì) 書的編碼設(shè)計(jì) 書。但是再工程 比一次工程更難以進(jìn)行過程 分割,換言之,瀑

27、布模型更不適應(yīng)再工程,無法將再分析、再設(shè)計(jì)、再 編碼截然分開。(3)再測試。一般來說,再測試是再工程過程 中工作量最大的一項(xiàng)工作。如果能夠重用原有 的測試用例及運(yùn)行結(jié)果,將能大大降低再工程 成本。對(duì)于重用的 部分,特 別是可重用的 (獨(dú)立性 較強(qiáng)的)局部系統(tǒng),還可以免除測試,這也正 是重用技術(shù) 被再工程 高度評(píng)價(jià)的關(guān)鍵原 因之一。當(dāng) 然再工程后的系統(tǒng)總有變動(dòng)和增加的部分,對(duì)受其影響的整個(gè)范圍都 要毫無遺漏地進(jìn)行測試,不 可心存僥幸,以免因 一個(gè)蒼蠅壞了百年老湯”。軟件再工程的 兩部分:首先,逆向過程:從代碼開 始推導(dǎo)岀設(shè)計(jì) 或是規(guī)格說明(可理解性); 其次,改善軟件的 靜態(tài)質(zhì) 量(可維護(hù) 性、

28、復(fù)用 性或演化性)。為什么實(shí)施軟件再工程?( 1)再工程可 幫助軟件機(jī)構(gòu) 降低軟件演化的 風(fēng)險(xiǎn)。(2)再工程可 幫助機(jī)構(gòu)補(bǔ)償軟件投資。(3)再工程可 使得軟件易于進(jìn)一步變革。(4)軟件再工程 有著廣闊的市場。(5)再工程 能力擴(kuò)大CASE工具集。(6)再工程是 推動(dòng)自動(dòng) 軟件維護(hù)發(fā) 展的動(dòng)力。10.3.2實(shí)用的重用戰(zhàn)略在判斷既存系統(tǒng) 應(yīng)該如何重用時(shí),首先要明確哪些是可重用對(duì)象, 以及如何使用這些可重用對(duì)象。下面以既存LAN系統(tǒng)重構(gòu)成 Web系統(tǒng)的再工程為 例,說明再分析和再編碼將遇到的一些 重用課題。我們可以將既存LAN系統(tǒng)劃分成界面、邏輯、數(shù)據(jù)三個(gè)層次。用既存系統(tǒng)的 三個(gè)層次去分別 對(duì)應(yīng)典型

29、 Web系統(tǒng)的表示層、邏輯層 和數(shù)據(jù)層。由此從邏輯上得到對(duì)應(yīng)每個(gè)層次的輸入和輸岀, 然后為每一層尋找能 夠?qū)崿F(xiàn)最大程度重用的重構(gòu)方法。(1)界面重用策略界面模擬方法:將基于文本的舊界面包裝為新的 圖形界面。舊界面運(yùn)行在終端上,新界面可 以是基于PC的圖形界面,也可以是運(yùn)行在瀏覽器上的HTML頁面。新用戶界面通過一個(gè)界面模 擬工具與舊界面通信。此方法重用 率相當(dāng)高。但是不修改既存系統(tǒng) 會(huì)同時(shí)將舊系統(tǒng)的結(jié)構(gòu)性缺點(diǎn) 全部繼承下來?;?客戶端的Web應(yīng)用(Java Applet ) : Applet可以實(shí)現(xiàn)從界面、邏輯到 數(shù)據(jù)庫的許多功能。 完全用Java語言重寫一個(gè)系統(tǒng)是 不現(xiàn)實(shí)的,重用 率也不

30、會(huì)很高,這不是軟件再工程 所提倡的。但 目前已有許多Applet自動(dòng)轉(zhuǎn)化工具,而且其轉(zhuǎn)化后代碼的重用 率相當(dāng)高。基于服務(wù)器端的Web應(yīng)用:重新開發(fā) 界面。這種方法看上去沒有重用既存 界面代碼,其實(shí)不 然。首先,界面設(shè)計(jì)完全可以重用,從 而節(jié)省設(shè)計(jì)時(shí) 間;其次,我們可以將某些界面做成可重用 的,這樣也會(huì)減少工作量。(2)邏輯層包裝原則通過對(duì)邏輯層的分解可得到可重用和不可重用的兩部 分代碼。對(duì)可重用部分可直接使用,對(duì)于 不可重用 部分則應(yīng)盡量通過各種包裝技術(shù) 按統(tǒng)一標(biāo)準(zhǔn)將其改造成 可重用構(gòu)件。 包裝方法有很多,如對(duì)象包裝法、部件包裝法等。(3)數(shù)據(jù)層重用策略數(shù)據(jù)層通常要求更高的重用 率。邏輯和數(shù)據(jù)

31、休戚相關(guān), 如果改動(dòng)數(shù)據(jù)庫,邏輯勢必不能正 常運(yùn)行,對(duì)邏輯部分的重 用也就無從談起。如果非改不可的話,也要以保證最大限度 的重用為原則,爭取做到只增不刪,以保證數(shù)據(jù)的完整性。再工程工 具。再工程工 具用來支持重構(gòu)一 個(gè)功能和 性能 更為完善的軟件系統(tǒng)。 目前的再工程工 具主要集中在代碼重 構(gòu)、程 序結(jié)構(gòu)重構(gòu) 和數(shù)據(jù)結(jié)構(gòu)重構(gòu) 等方面。10.3.3軟件再工程過程典型 的軟件再工程過程模型如圖所示,該模型定義了 6類活動(dòng)。在某些情況下這些活動(dòng)以 線性順序發(fā)生,但也并非總是這樣,例如,為 了理解某個(gè)程序 的內(nèi)部 工作原 理,可 能在 文檔 重構(gòu)開 始之前必須 先進(jìn)行逆向工程。在圖中顯示 的再工程 范型

32、是一 個(gè)循環(huán) 模型。這意味 著作為該范 型的組成部分的 每個(gè)活動(dòng)都 可 能被重復(fù), 而且 對(duì)于任意一個(gè)特定的循環(huán) 來說,過程可 以在完成任 意一個(gè)活動(dòng)之后終止。下面 簡 要地 介紹 該模型所定義的 6類活動(dòng)。 圖 軟件再工程過程模 型1. 庫存 目 錄分 析每個(gè)軟件 組織 都應(yīng)該保存其擁有的所有應(yīng) 用系統(tǒng)的 庫存目錄。該目 錄包含關(guān)于每個(gè)應(yīng)用系統(tǒng) 的基本 信息(例如,應(yīng)用系統(tǒng)的 名字,最初構(gòu)建它的日期,已做 過的實(shí)質(zhì) 性修改次 數(shù),過去 18個(gè) 月報(bào)告 的錯(cuò)誤,用 戶數(shù) 量,安裝它的機(jī) 器數(shù)量,它的復(fù) 雜程度, 文檔質(zhì)量,整體 可維護(hù) 性等級(jí), 預(yù)期 壽命 ,在未來 36 個(gè)月內(nèi)的預(yù)期 修改次

33、 數(shù),業(yè)務(wù) 重要程度 等)。每一 個(gè)大的軟件開發(fā)機(jī)構(gòu) 都擁 有上百萬行老代碼, 它們都可能是逆向工程 或 再工程的對(duì)象。 但是, 某些程序并不頻繁 使用而且 不需要改變,此外,逆向工程 和再工程工 具尚不成熟,目前 僅 能對(duì)有限種類的 應(yīng)用系統(tǒng) 執(zhí)行逆向工程 或再工程,代 價(jià)又十分高昂,因此 ,對(duì) 庫中每個(gè)程序都做 逆向工程 或再工程是 不現(xiàn)實(shí)的。下述 3 類程序有 可能成 為預(yù)防性維護(hù)的對(duì)象 :( 1)預(yù)定 將使用多 年的程 序;( 2)當(dāng)前正在成功 地使用著的程序;(3)在 最近的將來可 能要做重大 修改或增強(qiáng) 的程 序。應(yīng)該仔細(xì)分析庫存目錄,按照業(yè)務(wù) 重要程度、 壽命、當(dāng)前可維護(hù) 性、預(yù)

34、期 的修改次數(shù)等標(biāo)準(zhǔn), 把庫中的應(yīng)用系統(tǒng) 排序,從 中選出再工程的 候選者,然后明智地分配再工程 所需要的資源。2. 文檔 重構(gòu)老程序固有的特點(diǎn)是 缺乏文檔。具體 情況不同,處理 這個(gè)問題 的方法 也不同 :(1)建立文檔 非常耗費(fèi) 時(shí)間,不可能為數(shù)百個(gè)程序都重新建立文檔 。如果一個(gè)程序是相對(duì)穩(wěn)定的,正在 走向其 有用生命的終點(diǎn), 而且 可能不會(huì)再經(jīng)歷什么變化, 那么 ,讓它保持現(xiàn)狀是一個(gè)明智的選擇 。(2) 為了便 于今后的維護(hù), 必須 更新文檔 ,但是由于資源 有限,應(yīng)采用“使用時(shí)建文檔 ”的方法, 也 就是說, 不是一 下子把 某應(yīng)用系統(tǒng)的 文檔全 部都 重建起來, 而是只針對(duì)系統(tǒng) 中當(dāng)

35、前正在 修改的那 些部分建立完整文檔。隨著時(shí)間流逝 ,將 得到一組有用的和相關(guān)的文檔。(3)如果某應(yīng)用系統(tǒng)是 完成業(yè)務(wù) 工作的關(guān)鍵,而且必須 重構(gòu)全部文檔 ,則仍然應(yīng)該設(shè)法把文檔 工作減少 到必需的最 小量。3. 逆向工程軟 件的逆 向工程 是分 析 程 序 以 便 在 比 源代碼 更高 的 抽 象 層 次上 創(chuàng) 建 出 程 序 的 某 種 表示 的過 程, 也就 是說,逆向工程是一 個(gè)恢復(fù)設(shè)計(jì) 結(jié)果的過程,逆向工程工 具從現(xiàn)存的程 序代碼 中抽取有 關(guān)數(shù)據(jù) 、體系結(jié)構(gòu)和處理 過程的設(shè)計(jì) 信息 。4. 代碼重構(gòu)代碼重構(gòu)是最 常見的再工程 活動(dòng)。某些老 程序具有比 較完整、合理的體系結(jié)構(gòu),但是, 個(gè)體 模塊的編碼方式 卻是難于理解、測試和維護(hù)的。 在這 種情況下,可以重構(gòu)可 疑模塊的代碼。為

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論