第六章_軟件演化技術(shù)_第1頁
第六章_軟件演化技術(shù)_第2頁
第六章_軟件演化技術(shù)_第3頁
第六章_軟件演化技術(shù)_第4頁
第六章_軟件演化技術(shù)_第5頁
已閱讀5頁,還剩75頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第六章 軟件演化技術(shù)本章內(nèi)容o 6.1 軟件演化概述o 6.2 軟件需求演化o 6.3 軟件演化的分類n 6.3.1 基于過程和函數(shù)的軟件演化n 6.3.2 面向?qū)ο蟮能浖莼痭 6.3.3 基于構(gòu)件的軟件演化n 6.3.4 基于體系結(jié)構(gòu)的軟件演化o 6.4 軟件靜態(tài)演化技術(shù)本章內(nèi)容o 6.5 軟件動態(tài)演化技術(shù)n 6.5.1 動態(tài)軟件體系結(jié)構(gòu)o 6.5.1.1 動態(tài)軟件體系結(jié)構(gòu)的概念o 6.5.1.2 動態(tài)更新的原則o 6.5.1.3 基于構(gòu)件的動態(tài)體系結(jié)構(gòu)模型n 6.5.2 動態(tài)軟件體系結(jié)構(gòu)的意義n 6.5.3 動態(tài)體系結(jié)構(gòu)描述語言n 6.5.4 動態(tài)演化工具o 6.6 可演化軟件的設(shè)計6.

2、1 軟件演化概述o 軟件的開發(fā)、發(fā)布和維護是一個漸進變化并要達到預(yù)期目標的過程,是一種演化過程o 在軟件系統(tǒng)開發(fā)完畢正式投入使用之后,用戶需求發(fā)生了改變,或者要將該系統(tǒng)移植到另一個運行環(huán)境中,或者在新環(huán)境中需求發(fā)生變化,都需要對軟件系統(tǒng)進行修改和完善o 軟件系統(tǒng)進行漸進完善并達到所希望的目標的過程就是軟件演化(Software Evolution)6.1 軟件演化概述o 軟件演化過程是由一系列復(fù)雜的變化活動組成的,控制系統(tǒng)按照預(yù)期目標進行變化是開發(fā)者所追求的目標6.1 軟件演化概述o 軟件演化是指在軟件生命周期內(nèi)進行系統(tǒng)維護和系統(tǒng)更新的動態(tài)行為o 軟件演化的核心問題是:如何使軟件系統(tǒng)適應(yīng)外界的

3、改變,軟件演化過程是軟件演化和軟件過程的統(tǒng)一o 軟件演化過程應(yīng)該具有以下幾個特征:n 迭代性:在軟件演化過程中,必須不斷地對系統(tǒng)進行變更,許多活動要比在傳統(tǒng)模式中具有更高的重復(fù)執(zhí)行頻率6.1 軟件演化概述n 并行性:為了提高軟件演化的效率,必須對軟件演化過程進行并行處理n 反饋性:用戶需求和軟件系統(tǒng)所處的工作環(huán)境總是在不斷地發(fā)生該變,一旦環(huán)境發(fā)生變化后,就必須作出反饋,啟動軟件演化過程n 多層次性:軟件演化是一項多層次的工作,它是多方面因素共同作用的結(jié)果n 交錯性:軟件演化既具有連續(xù)性有具有間斷性,二者是交錯進行的6.2 軟件需求演化o 軟件演化是不斷調(diào)節(jié)應(yīng)用系統(tǒng)以滿足用戶需求的過程,是對已有

4、系統(tǒng)不斷進行修改、補充和完善,以適應(yīng)外界環(huán)境變化的過程o 隨著新需求和新技術(shù)的不斷涌現(xiàn),幾乎所有的系統(tǒng)都要不斷地進行升級和更新,這種變化的起因更多地歸結(jié)為軟件需求的演化o 在軟件生命周期的各個階段,軟件需求都可能發(fā)生改變6.2 軟件需求演化o 系統(tǒng)需求主要包括非功能性需求和功能需求兩部分,非功能性需求往往具有全局性,在框架結(jié)構(gòu)級別上,比較容易體現(xiàn)出來o 軟件體系結(jié)構(gòu)、非功能性需求和功能需求之間的關(guān)系6.2 軟件需求演化n 首先,必須在功能需求中體現(xiàn)非功能性需求,在軟件體系結(jié)構(gòu)中體現(xiàn)功能需求和非功能性需求n 其次,非功能性需求對軟件體系結(jié)構(gòu)和功能需求具有約束n 此外,軟件體系結(jié)構(gòu)也進一步約束了功

5、能需求o 需求分析往往具有無法避免的不徹底性和不完備性,一些無法預(yù)料的外部條件變化也總是在所難免的o 軟件需求演化主要分為以下三類:6.2 軟件需求演化n 需求增加:軟件工程師檢查用戶提出的新需求是否與原有功能沖突,如果產(chǎn)生沖突則向開發(fā)小組報告,否則將新需求加入到系統(tǒng)需求規(guī)格說明中,啟動軟件演化過程n 需求刪除:在開發(fā)和運行階段,系統(tǒng)往往存在著某些不必要的或重復(fù)功能,必須刪除這些功能所對應(yīng)的需求描述n 需求改寫:經(jīng)過與客戶的商討之后,軟件工程師對功能定義、數(shù)據(jù)定義和實現(xiàn)方法進行修改,然后通知相關(guān)人員按照新需求重新啟動軟件演化過程6.2 軟件需求演化o 在軟件需求演化過程中,應(yīng)該注意以下幾個問題

6、:n 如何預(yù)先推導(dǎo)變更的結(jié)果和影響的范圍n 在更替軟件元素時,需要保證替換前后元素的外部行為是一致的n 在軟件需求演化過程中,應(yīng)該具備控制變更過程的手段,以保持其完整性6.3 軟件演化的分類o 軟件演化指的是系統(tǒng)進行變化并達到預(yù)期目標的過程,可以分為靜態(tài)演化和動態(tài)演化兩種類型n 靜態(tài)演化是指系統(tǒng)在停機狀態(tài)下所進行的修改n 動態(tài)演化則是指軟件在運行期間所進行的更新o 在靜態(tài)演化中,先對需求變化進行分析,鎖定軟件更新的范圍,然后實施系統(tǒng)升級n 在停機狀態(tài)下,系統(tǒng)的維護和二次開發(fā)就是一種典型的軟件靜態(tài)演化6.3 軟件演化的分類o 對于執(zhí)行關(guān)鍵任務(wù)的一些軟件系統(tǒng)而言,通過停止、更新和重啟來實現(xiàn)維護演化

7、任務(wù)將會導(dǎo)致不可接受的延遲、代價和危險n 例如:當對航班調(diào)度系統(tǒng)和某些實時監(jiān)控系統(tǒng)進行演化時,不能進行停機更新,而必須切換到備用系統(tǒng)上,以確保相關(guān)服務(wù)仍舊可用o 條件發(fā)生改變時,移動計算系統(tǒng)需要調(diào)整對應(yīng)的計算構(gòu)件,以適應(yīng)外界環(huán)境的變化6.3 軟件演化的分類n 諸如:交通控制軟件、電信交換軟件、Internet服務(wù)應(yīng)用軟件以及高可用性的公共信息軟件o 軟件動態(tài)演化可以分為兩種類型:預(yù)設(shè)的和非預(yù)設(shè)的n 動態(tài)變化的因素是軟件設(shè)計者能夠預(yù)先設(shè)想到的,可實現(xiàn)為系統(tǒng)的固有功能,這就是預(yù)設(shè)的軟件動態(tài)演化6.3 軟件演化的分類n 對系統(tǒng)配置進行修改和調(diào)整是直到軟件投入運行以后才能確定的,這就要求系統(tǒng)能夠處理在

8、原始設(shè)計中沒有完全預(yù)料到的新需求,這就是非預(yù)設(shè)的軟件動態(tài)演化o 從實現(xiàn)方式和粒度上看,演化主要包括:基于過程和函數(shù)的軟件演化、面向?qū)ο蟮能浖莼⒒跇?gòu)件的軟件演化和基于體系結(jié)構(gòu)的軟件演化6.3.1 基于過程和函數(shù)的軟件演化o 早期的動態(tài)鏈接庫DLL的動態(tài)加載就是以DLL為基礎(chǔ)的函數(shù)層的軟件演化o DLL的調(diào)用方式可以分為加載時刻的隱含調(diào)用和運行時刻的顯式調(diào)用n 加載時的隱含調(diào)用由編譯系統(tǒng)來完成對DLL的加載和卸載工作,屬于軟件靜態(tài)演化n 運行時的顯式調(diào)用則是由編程者使用API函數(shù)來加載DLL和卸載DLL,以實現(xiàn)調(diào)用DLL的目的6.3.1 基于過程和函數(shù)的軟件演化o Mark給出了一個名為PO

9、DUS(Procedure-Oriented Dynamic Updating System)的原型系統(tǒng)n 程序的更新是通過載入新版本的程序,用過程的新版本來替換舊版本,同時,在運行時將當前的捆綁改為新版本的捆綁來實現(xiàn)的6.3.2 面向?qū)ο蟮能浖莼痮 在面向?qū)ο笳Z言出現(xiàn)之后,許多研究者開始考慮利用面向?qū)ο蠹夹g(shù)來提高軟件系統(tǒng)的演化能力o 利用對象和類的相關(guān)特性,在軟件升級時,可以將系統(tǒng)修改局限于某個或某幾個類中,以提高演化的效率o 可動態(tài)演化的對象應(yīng)該具備以下幾個特征:n 在系統(tǒng)運行時,允許進行重新配置6.3.2 面向?qū)ο蟮能浖莼痭 動態(tài)調(diào)整不涉及實現(xiàn)代碼,可直接在運行實例中修改應(yīng)用系統(tǒng)n

10、使用反射、元數(shù)據(jù)及元對象協(xié)議來實現(xiàn)對象的動態(tài)更新n 參照透明,即被替換的對象無需告訴它的使用者,在客戶機-服務(wù)器(Client-Server)模式中,服務(wù)器Server的更新對客戶機Client保持透明n 狀態(tài)遷移,在對象動態(tài)演化中,被替換對象的相關(guān)狀態(tài)信息,例如:屬性和當前運行狀態(tài),應(yīng)該遷移到新對象上6.3.2 面向?qū)ο蟮能浖莼痭 相互引用問題,對象之間往往存在著某種相互依賴的關(guān)系o 在面向?qū)ο蠹夹g(shù)中,類層次的動態(tài)演化是最具代表性的方法,其原理是:在代理機制下,實現(xiàn)類的動態(tài)替換o Java語言使用了動態(tài)類的概念,并通過修改標準Java虛擬機,增加相應(yīng)動態(tài)類載入器,在升級前先檢查類型的正確性

11、6.3.3 基于構(gòu)件的軟件演化o 從復(fù)用的粒度來講,軟件構(gòu)件要比對象大得多,更易于復(fù)用,而且也更易于演化o 構(gòu)件演化是在現(xiàn)有構(gòu)件的基礎(chǔ)上,對其進行修改,以滿足用戶的新需求o 從構(gòu)件組成的角度來看,構(gòu)件演化主要包括三種類型:n 信息演化是給構(gòu)件增加新的內(nèi)部狀態(tài)n 行為演化是在保持構(gòu)件對外接口不變的情況下,修改構(gòu)件的具體功能,重新實現(xiàn)構(gòu)件的內(nèi)部邏輯6.3.3 基于構(gòu)件的軟件演化n 接口演化則是要對構(gòu)件的接口進行修改,包括:增加、減少和替換原構(gòu)件的接口o 反射式中間件(Reflective Middleware)是一種通過開放內(nèi)部實現(xiàn)細節(jié)以獲取更高靈活性的中間件o 通過引入反射技術(shù),以一種受限的方式

12、來操縱中間件運行時的內(nèi)部狀態(tài)和行為,使系統(tǒng)具有反射性6.3.3 基于構(gòu)件的軟件演化o 系統(tǒng)的反射性是指系統(tǒng)能夠提供對自身狀態(tài)和行為的自我描述,并且系統(tǒng)的實際狀態(tài)和行為始終與自我描述保持一致o 自我描述的改變能夠立即反映到系統(tǒng)的實際狀態(tài)和行為中,而系統(tǒng)的實際狀態(tài)和行為改變也能夠立即在自我描述中得到反映o 反射系統(tǒng)定義了一個層次化的反射體系,包括一個基層和一個或多個元層6.3.3 基于構(gòu)件的軟件演化n 工作在基層中的實體執(zhí)行系統(tǒng)正常的業(yè)務(wù)功能,而工作在元層中的實體負責(zé)建立和維護系統(tǒng)的自我描述o 軟件構(gòu)件之間的交互是通過連接件中相關(guān)信息的變化來實現(xiàn)的,同時,這種信息的變化可以觸發(fā)和驅(qū)動系統(tǒng)自身的調(diào)整

13、o 演化平臺可以截獲構(gòu)件之間的調(diào)用請求和構(gòu)件狀態(tài)6.3.3 基于構(gòu)件的軟件演化n 當接收到演化命令時,演化平臺將調(diào)用請求阻塞,根據(jù)體系結(jié)構(gòu)配置信息對構(gòu)件進行重新組裝和部署n 完成連接件的重定向并釋放構(gòu)件的調(diào)用請求o 基于構(gòu)件的演化與面向?qū)ο蟮难莼扔幸欢ǖ膮^(qū)別,又有一定的聯(lián)系n 軟件構(gòu)件的實例是一種更為復(fù)雜的對象,在更新時仍然需要借助面向?qū)ο蟮难莼椒?.3.4 基于體系結(jié)構(gòu)的軟件演化o 從宏觀的角度來刻畫軟件演化問題,一種行之有效的手段就是從軟件體系結(jié)構(gòu)出發(fā),來把握整個系統(tǒng)的更新問題o 由于系統(tǒng)需求、技術(shù)、環(huán)境和分布等因素的變化,最終將導(dǎo)致系統(tǒng)框架按照一定的方式來變動,這就是軟件體系結(jié)構(gòu)演化

14、o 如果單純從系統(tǒng)是否運行的角度出發(fā),軟件體系結(jié)構(gòu)演化包括:靜態(tài)演化和動態(tài)演化6.3.4 基于體系結(jié)構(gòu)的軟件演化n 在非運行時刻,系統(tǒng)框架結(jié)構(gòu)的修改和變更被稱為軟件體系結(jié)構(gòu)的靜態(tài)演化n 在運行時刻,系統(tǒng)框架結(jié)構(gòu)的變更被稱為軟件體系結(jié)構(gòu)的動態(tài)演化o 軟件體系結(jié)構(gòu)靜態(tài)演化n 在停止運行的狀態(tài)下,體系結(jié)構(gòu)演化的基本活動包括:刪除構(gòu)件、增加構(gòu)件、修改構(gòu)件、合并構(gòu)件和分解構(gòu)件6.3.4 基于體系結(jié)構(gòu)的軟件演化n 在體系結(jié)構(gòu)的靜態(tài)演化中,表面上看是對構(gòu)件進行增加、替換和刪除操作,但是,實質(zhì)上這種變化蘊涵著一系列的連帶和波及效應(yīng),更多的表現(xiàn)為變化的構(gòu)件和連接件與其它相關(guān)聯(lián)的構(gòu)件和連接件的重新組合與調(diào)整n 在

15、靜態(tài)演化階段,對軟件的任何擴充和修改都需要在體系結(jié)構(gòu)的指導(dǎo)下來完成,以維持整體設(shè)計的合理性和性能的可分析性,為維護的復(fù)雜性和代價分析提供依據(jù)6.3.4 基于體系結(jié)構(gòu)的軟件演化o 軟件體系結(jié)構(gòu)動態(tài)演化n 在軟件體系結(jié)構(gòu)的動態(tài)演化中,要求框架結(jié)構(gòu)模型不僅具有刻畫靜態(tài)結(jié)構(gòu)特性的能力,而且還應(yīng)該具有描述構(gòu)件狀態(tài)變化和構(gòu)件之間通過連接件的相互作用等動態(tài)特性的能力n 需要將構(gòu)件之間的相互作用與約束細化為構(gòu)件與連接件之間的相互作用與約束n 從不動點轉(zhuǎn)移的角度來看,軟件體系結(jié)構(gòu)靜態(tài)演化實質(zhì)上是動態(tài)演化的一個子過程6.3.4 基于體系結(jié)構(gòu)的軟件演化o 軟件體系結(jié)構(gòu)演化可以分為以下四個階段:n 設(shè)計時的體系結(jié)構(gòu)演

16、化,隨著對系統(tǒng)理解的不斷深入,系統(tǒng)的整體框架會越來越清晰,這本身就是一個體系結(jié)構(gòu)設(shè)計方案不斷完善的過程n 運行前的體系結(jié)構(gòu)演化,此時,框架各部分所對應(yīng)的代碼已經(jīng)被編譯到軟件系統(tǒng)中,但系統(tǒng)還沒有開始運行n 安全運行模式下的體系結(jié)構(gòu)演化,這種演化方式又稱受限運行演化,系統(tǒng)運行在安全模式下,即系統(tǒng)的運行要受到一定條件的約束和限制6.3.4 基于體系結(jié)構(gòu)的軟件演化n 運行時刻的體系結(jié)構(gòu)演化,在系統(tǒng)運行過程中,框架演化通常與構(gòu)件演化密切相關(guān)o 軟件體系結(jié)構(gòu)對于系統(tǒng)演化的意義主要表現(xiàn)在以下幾個方面:n 對系統(tǒng)的框架結(jié)構(gòu)進行形式化表示,提高軟件的可構(gòu)造性,從而更加易于軟件的演化n 體系結(jié)構(gòu)設(shè)計方案將有助于開

17、發(fā)人員充分地考慮將來可能出現(xiàn)的各種演化問題、演化情況和演化環(huán)境6.3.4 基于體系結(jié)構(gòu)的軟件演化n 在應(yīng)用系統(tǒng)中,軟件體系結(jié)構(gòu)以一類實體顯性地被表示出來,被整個運行環(huán)境所共享,可以作為整個系統(tǒng)運行的基礎(chǔ)n 體系結(jié)構(gòu)對系統(tǒng)的整體框架進行了充分地描述,說明了構(gòu)件與構(gòu)件之間的對應(yīng)關(guān)系、構(gòu)件與連接件之間的連接關(guān)系、以及系統(tǒng)架構(gòu)的配置狀況,在系統(tǒng)演化階段,可以充分地利用這些信息n 在設(shè)計系統(tǒng)的框架結(jié)構(gòu)時,通常將相關(guān)協(xié)同邏輯從計算部件中分離出來,進行顯式地、集中地表示,同時,解除系統(tǒng)部件之間的直接耦合,這會有助于系統(tǒng)的動態(tài)調(diào)整6.3.4 基于體系結(jié)構(gòu)的軟件演化o 從軟件更新的角度來看,軟件演化和軟件維護有

18、著非常密切的聯(lián)系n 軟件維護是對已交付的系統(tǒng)進行修改,使目標系統(tǒng)能夠完成新任務(wù),或是在新環(huán)境中完成同樣的功能,主要指在維護期間對現(xiàn)有系統(tǒng)的修改活動n 軟件演化則著眼于整個軟件生命周期,從功能行為角度來觀察系統(tǒng)的變化,是軟件的一種向前發(fā)展過程,主要體現(xiàn)在軟件功能的不斷完善n 在軟件維護期間,通過具體的維護活動可以使系統(tǒng)不斷地向前演化6.4 軟件靜態(tài)演化技術(shù)o 靜態(tài)演化可以是一種更正代碼錯誤的簡單變更,也可以是更正設(shè)計方案的重大調(diào)整,可以是對描述錯誤所作的較大范圍的修改,還可以是針對新需求所作的重大完善o 在演化時,首先根據(jù)用戶的需求變動,開發(fā)新功能模塊或更新已有的功能模塊,然后編譯鏈接生成新應(yīng)用

19、系統(tǒng),最后部署更新后的軟件系統(tǒng)6.4 軟件靜態(tài)演化技術(shù)o 靜態(tài)演化技術(shù)的優(yōu)點是:在更新過程中,不需要考慮系統(tǒng)的狀態(tài)遷移和活動線程問題o 靜態(tài)演化技術(shù)的缺點是:停止應(yīng)用程序意味著停止系統(tǒng)所提供的相關(guān)服務(wù),也就是使軟件暫時失效o 軟件靜態(tài)演化的步驟包括:n 軟件理解:查閱軟件文檔,分析系統(tǒng)內(nèi)部結(jié)構(gòu),識別系統(tǒng)組成元素及其之間的相互關(guān)系,提取系統(tǒng)的抽象表示形式6.4 軟件靜態(tài)演化技術(shù)n 需求變更分析:軟件的靜態(tài)演化往往是由于用戶需求變化、系統(tǒng)運行出錯和運行環(huán)境發(fā)生改變所導(dǎo)致的n 演化計劃:對原系統(tǒng)進行分析,確定更新范圍和所花費的代價,制定更新成本和演化計劃n 系統(tǒng)重構(gòu):根據(jù)演化計劃對原軟件系統(tǒng)進行重構(gòu)

20、,使之能夠適應(yīng)當前的需求n 系統(tǒng)測試:對更新后的軟件元素和整個系統(tǒng)進行測試,以查出其中的錯誤和不足之處6.4 軟件靜態(tài)演化技術(shù)o 軟件靜態(tài)演化的過程模型6.4 軟件靜態(tài)演化技術(shù)o 在對系統(tǒng)功能進行更新時,最簡單的機制就是創(chuàng)建相關(guān)類的子類,然后重載需要變更的方法,利用多態(tài)性來調(diào)用新創(chuàng)建的方法o 在開發(fā)構(gòu)件時,通常采用接口和實現(xiàn)相分離的原則,構(gòu)件之間只能通過接口來進行通信o 具有兼容接口的不同構(gòu)件實現(xiàn)部分可以相互取代,在靜態(tài)演化過程中,這已經(jīng)成為一條非常有效的途徑6.4 軟件靜態(tài)演化技術(shù)o 在基于構(gòu)件的開發(fā)模式中,經(jīng)常出現(xiàn)的構(gòu)件接口與系統(tǒng)設(shè)計接口不兼容的情況包括:接口方法名稱不一致和參數(shù)類型不一致

21、o 為了提高軟件演化的效率,通常使用構(gòu)件包裝器(Component Wrapper)來修改原構(gòu)件的接口,包裝器對構(gòu)件接口進行封裝以適應(yīng)新的需求環(huán)境o 在構(gòu)件包裝器中,封裝了原始構(gòu)件,同時提供了系統(tǒng)所需要的接口,這樣就解決了構(gòu)件接口不兼容的問題6.4 軟件靜態(tài)演化技術(shù)o 包裝器的實質(zhì)是一個篩選器,將對原構(gòu)件的請求進行過濾并調(diào)用對應(yīng)的方法o 將一個或多個構(gòu)件作為復(fù)合構(gòu)件的組成部分,包裝允許構(gòu)件組合和聚集起來完成新的功能6.4 軟件靜態(tài)演化技術(shù)o 繼承機制也可以實現(xiàn)構(gòu)件演化n 新創(chuàng)建的構(gòu)件是通過繼承原構(gòu)件而獲得的,是原構(gòu)件的子類型n 子類型化是通過加強原構(gòu)件創(chuàng)建一個新構(gòu)件,并重用其實現(xiàn)部分來完成的n

22、 在原構(gòu)件的基礎(chǔ)上,使用繼承機制來創(chuàng)建子構(gòu)件,并按照需求重新實現(xiàn)相關(guān)的虛函數(shù),就可以完成構(gòu)件演化任務(wù)6.4 軟件靜態(tài)演化技術(shù)6.4 軟件靜態(tài)演化技術(shù)o 軟件體系結(jié)構(gòu)給出了系統(tǒng)的整體框架,可以作為設(shè)計、實現(xiàn)和更新的基礎(chǔ),承擔了“保證最經(jīng)常發(fā)生的變動是最容易進行的”這一重擔o 在軟件靜態(tài)演化過程中,對系統(tǒng)任何部分所作的擴充和修改都需要在體系結(jié)構(gòu)的指導(dǎo)下來完成o 以軟件體系結(jié)構(gòu)為基礎(chǔ),對系統(tǒng)需求變化進行整體把握,將有助于確定系統(tǒng)更新的最佳方案,更好地控制軟件質(zhì)量和演化成本6.4 軟件靜態(tài)演化技術(shù)o 軟件體系結(jié)構(gòu)演化基本上可以歸結(jié)為3類n 局部更新是指修改單個軟件構(gòu)件,包括:構(gòu)件刪除、構(gòu)件增加和構(gòu)件修

23、改n 非局部更新則是指對幾個軟件構(gòu)件進行修改,但不影響整個體系結(jié)構(gòu),包括:構(gòu)件合并、構(gòu)件分解和若干個構(gòu)件的修改n 體系結(jié)構(gòu)級更新則會影響到系統(tǒng)各組成元素之間的相互關(guān)系,甚至要改動整個框架結(jié)構(gòu)6.4 軟件靜態(tài)演化技術(shù)o 局部更新是最經(jīng)常發(fā)生的,也是最容易實現(xiàn)的o 在系統(tǒng)功能發(fā)生調(diào)整時,會出現(xiàn)非局部更新,其處理過程要相對復(fù)雜一些o 當系統(tǒng)功能發(fā)生重大變化時,會發(fā)生體系結(jié)構(gòu)級更新o 在正交體系結(jié)構(gòu)中,因為線索是正交的,因此,每一個需求變動只影響一條線索,而不涉及其它線索6.4 軟件靜態(tài)演化技術(shù)n 需求變動只對相關(guān)模塊起作用,不會影響到其它模塊,從而使系統(tǒng)的修改更加容易實現(xiàn)n 當應(yīng)用程序發(fā)生演化時,可

24、以在原軟件結(jié)構(gòu)的基礎(chǔ)之上,通過新增、修改和刪除線索來生成新系統(tǒng)的框架結(jié)構(gòu)n 整個演化過程是以原結(jié)構(gòu)的線索和構(gòu)件為基礎(chǔ),由左向右自頂向下來進行的o 正交軟件體系結(jié)構(gòu)的演化過程如下:n (1)需求變動歸類6.4 軟件靜態(tài)演化技術(shù)n (2)制定體系結(jié)構(gòu)演化計劃n (3)修改、增加或刪除構(gòu)件n (4)更新構(gòu)件之間的相互作用n (5)產(chǎn)生演化后的軟件體系結(jié)構(gòu)n (6)迭代,如果第(5)步得到的體系結(jié)構(gòu)不夠詳細,還不能實現(xiàn)變化的需求,可以對(3)(5)步進行多次迭代n (7)對以上步驟進行確認,進行階段性技術(shù)評審6.4 軟件靜態(tài)演化技術(shù)6.5 軟件動態(tài)演化技術(shù)o 為了支持軟件的動態(tài)演化,人們在編程語言和工

25、作機制方面做了大量探索性的研究工作n 基于硬件的動態(tài)演化,使用多個冗余的硬件設(shè)備,用于軟件的動態(tài)升級服務(wù)n 動態(tài)裝載,在編程語言方面,引進相關(guān)機制來支持軟件系統(tǒng)的動態(tài)演化n 動態(tài)類:在軟件運行過程中,類的實現(xiàn)可以動態(tài)地變化o 凍結(jié)”策略,系統(tǒng)等待已存在的舊版本的對象被客戶釋放6.5 軟件動態(tài)演化技術(shù)o “重建”策略,系統(tǒng)使用動態(tài)類的新版本來創(chuàng)建相關(guān)對象,同時,將舊版本的對象的狀態(tài)信息拷貝到新對象中o “共存”策略,動態(tài)類新、舊版本的對象共存,但是,以后對象的創(chuàng)建使用動態(tài)類的新版本o 在實現(xiàn)動態(tài)類時,通常需要引入代理(Proxy)機制o 代理負責(zé)維護動態(tài)類的所有實現(xiàn)版本和實現(xiàn)版本的外部存儲o 代

26、理機制下的動態(tài)類是一種輕量級的動態(tài)演化技術(shù),它不需要編譯器和底層運行環(huán)境(例如:操作系統(tǒng)和虛擬機)的支持,比較容易實現(xiàn)6.5 軟件動態(tài)演化技術(shù)6.5 軟件動態(tài)演化技術(shù)n 中間件為運行構(gòu)件的動態(tài)替換和升級提供了相關(guān)實現(xiàn)機制,主要包括:命名服務(wù)、反射技術(shù)和動態(tài)適配等o 在命名服務(wù)機制中,給構(gòu)件實例命名,以便客戶使用名字來獲取構(gòu)件實例o 反射技術(shù)是軟件的一種自我描述和自我推理,它提供了系統(tǒng)關(guān)于自身行為表示的一種有效手段o 動態(tài)調(diào)用接口支持客戶請求的動態(tài)調(diào)用,動態(tài)骨架接口支持將請求動態(tài)地指派給相對應(yīng)的構(gòu)件6.5 軟件動態(tài)演化技術(shù)n 基于構(gòu)件的動態(tài)演化o 按照功能劃分,將構(gòu)件的接口分為兩種:用于處理構(gòu)件

27、所提供的服務(wù),即行為接口,用于處理構(gòu)件的演化,即演化接口,演化接口被設(shè)置成在特定的服務(wù)接口被調(diào)用時起作用o 在使用構(gòu)件時,可以通過訪問演化接口,為相關(guān)的動態(tài)插入點定義回調(diào)(CallBack)方法,增加或替換成用戶需要的代碼n 基于過程的動態(tài)演化6.5 軟件動態(tài)演化技術(shù)o 形式化描述系統(tǒng)在運行過程中的狀態(tài),建立系統(tǒng)的狀態(tài)機模型o 在狀態(tài)機模型中,系統(tǒng)的演化可以對應(yīng)于狀態(tài)的遷移n 基于體系結(jié)構(gòu)描述語言的動態(tài)演化o 在體系結(jié)構(gòu)描述語言中,增加動態(tài)描述成份,通過語言來定義構(gòu)件之間是如何進行互操作的,構(gòu)件是如何被替換的,以實現(xiàn)動態(tài)演化n 基于體系結(jié)構(gòu)模型的動態(tài)演化o 這類方法是通過建立一個體系結(jié)構(gòu)模型,

28、并使用這個模型來控制構(gòu)件行為,控制結(jié)構(gòu)改變和行為演化6.5.1 動態(tài)軟件體系結(jié)構(gòu)o 目前,軟件體系結(jié)構(gòu)的研究主要集中在靜態(tài)體系結(jié)構(gòu)上,對系統(tǒng)設(shè)計方案和設(shè)計框架進行靜態(tài)描述o 軟件體系結(jié)構(gòu)的靜態(tài)描述方法缺乏動態(tài)更新機制,很難用它來分析和描述實時、不間斷運行的系統(tǒng),更不能指導(dǎo)系統(tǒng)的動態(tài)演化o 軟件體系結(jié)構(gòu)靜態(tài)描述方法已經(jīng)不能適應(yīng)越來越多的運行時所發(fā)生的系統(tǒng)需求變更,動態(tài)軟件體系結(jié)構(gòu)(Dynamic Software Architecture,DSA)應(yīng)運而生6.5.1.1 動態(tài)軟件體系結(jié)構(gòu)的概念o DSA的特殊之處在于:隨著外界環(huán)境的變化,系統(tǒng)的框架結(jié)構(gòu)可以進行動態(tài)調(diào)整o DSA的動態(tài)性指的是:在

29、運行時刻,由于需求、技術(shù)、環(huán)境和分布等因素的變化,框架結(jié)構(gòu)會發(fā)生改變o DSA允許系統(tǒng)在運行過程中對其體系結(jié)構(gòu)進行修改,這主要是通過其框架結(jié)構(gòu)的動態(tài)演化來實現(xiàn)的6.5.1.1 動態(tài)軟件體系結(jié)構(gòu)的概念o 軟件體系結(jié)構(gòu)的動態(tài)演化主要包括以下幾個方面:n 屬性改變n 行為變化n 拓撲結(jié)構(gòu)改變n 風(fēng)格變化o 在運行時刻,要全面地支持軟件體系結(jié)構(gòu)的演化,必須解決好以下幾個問題:n DSA的形式語義規(guī)約6.5.1.1 動態(tài)軟件體系結(jié)構(gòu)的概念n 軟件框架和模型的定義n 在運行時刻,軟件體系結(jié)構(gòu)必須作為有狀態(tài)、有行為和可操作的實體形式存在,能夠準確地描述目標系統(tǒng)的真實狀態(tài)與行為n 靈活的演化計劃和處理機制,綜

30、合考慮和協(xié)調(diào)動態(tài)演化過程中的諸多因素,給出系統(tǒng)動態(tài)配置的完整方案n 在替換構(gòu)件時,不僅要使它們的接口保持兼容,而且要保證替換前后構(gòu)件的外部行為也一致n 良好的運行平臺支持6.5.1.1 動態(tài)軟件體系結(jié)構(gòu)的概念o DSA的演化是研究的重點,主要包括:演化需求、演化階段和演化步驟等幾個問題o DSA的演化需求是指引起軟件框架在運行時刻發(fā)生改變的因素,分為內(nèi)、外兩種因素n 內(nèi)因,即軟件內(nèi)部執(zhí)行所導(dǎo)致的體系結(jié)構(gòu)改變n 外因,即系統(tǒng)的外部請求所引起的軟件重新配置o DSA的演化發(fā)生在四個時期,即設(shè)計時、預(yù)執(zhí)行時、受約束運行時和運行時6.5.1.1 動態(tài)軟件體系結(jié)構(gòu)的概念n 設(shè)計時演化的對象是體系結(jié)構(gòu)模型

31、,發(fā)生在與之相關(guān)的代碼編譯之前n 預(yù)執(zhí)行時演化發(fā)生在編譯之后和系統(tǒng)執(zhí)行之前n 受約束運行演化只發(fā)生在某些特定的約束條件下n 運行時演化,即系統(tǒng)框架結(jié)構(gòu)在運行時不能滿足要求所作的修改o DSA實施動態(tài)演化的步驟如下:n 捕捉分析需求變化n 生成體系結(jié)構(gòu)演化策略6.5.1.1 動態(tài)軟件體系結(jié)構(gòu)的概念n 根據(jù)演化策略,實施軟件體系結(jié)構(gòu)的演化n 演化后的評估與檢測o 動態(tài)更新的原則n 運行時軟件的演化過程應(yīng)該不破壞體系結(jié)構(gòu)的正確性、一致性和完整性,為了便于演化后的維護,還需要進一步考慮演化過程的可追溯性o 一致性:在動態(tài)更新之后,原系統(tǒng)中正在執(zhí)行的實例能夠成功地轉(zhuǎn)換到新系統(tǒng)中繼續(xù)執(zhí)行,并保證轉(zhuǎn)換后的執(zhí)

32、行過程不會出現(xiàn)錯誤o 正確性:更新后的系統(tǒng)仍然是穩(wěn)定的6.5.1.2 動態(tài)更新的原則o 完整性:動態(tài)演化不破壞體系結(jié)構(gòu)規(guī)約中的約束,演化前后的系統(tǒng)狀態(tài)不會丟失,否則系統(tǒng)將變得不安全,甚至是不能正確運行o 可追溯性:應(yīng)該被延伸到運行時刻,保證系統(tǒng)的任何一次修改都會被驗證o 設(shè)計過程應(yīng)該滿足以下要求:n 系統(tǒng)結(jié)構(gòu)描述語法的完整性,描述語法的完整性可以讓設(shè)計者通過語法檢測來發(fā)現(xiàn)更新后的框架結(jié)構(gòu)中所存在的一些問題6.5.1.2 動態(tài)更新的原則n 數(shù)據(jù)的連貫性,刪除一個構(gòu)件,可能導(dǎo)致后續(xù)構(gòu)件的輸入不連貫,通過增加相關(guān)機制來提供后續(xù)構(gòu)件的輸入,或者刪除那些輸入數(shù)據(jù)不連貫的后續(xù)構(gòu)件n 語義的正確性,在框架結(jié)

33、構(gòu)發(fā)生變化后,語義正確性可以保證系統(tǒng)仍然能夠正確地執(zhí)行n 失敗的原子性,如果一個動態(tài)更新操作執(zhí)行失敗或者被取消,則該更新不能繼續(xù)執(zhí)行n 數(shù)據(jù)的正確性,為了實現(xiàn)數(shù)據(jù)恢復(fù),每次更新數(shù)據(jù)都要保存數(shù)據(jù)日志6.5.1.3 基于構(gòu)件的動態(tài)體系結(jié)構(gòu)模型o CBDA(Component Based Dynamic Architecture),即所謂的基于構(gòu)件的動態(tài)體系結(jié)構(gòu)模型,是一種典型的動態(tài)更新框架o CBDA模型支持系統(tǒng)的動態(tài)更新,主要包括三層:應(yīng)用層、中間層和體系結(jié)構(gòu)層o 應(yīng)用層處于最底層,包括構(gòu)件連接、構(gòu)件接口和執(zhí)行三個部分n 構(gòu)件連接定義了構(gòu)件與連接件之間的關(guān)聯(lián)關(guān)系n 構(gòu)件接口說明了構(gòu)件所提供的相關(guān)

34、服務(wù),例如:消息、操作和變量等6.5.1.3 基于構(gòu)件的動態(tài)體系結(jié)構(gòu)模型n 在應(yīng)用層中,可以添加新構(gòu)件、刪除或更新己有的構(gòu)件o 中間層包括連接件配置、構(gòu)件配置、構(gòu)件描述以及執(zhí)行四個部分n 連接件配置管理連接件和接口通信n 構(gòu)件配置管理構(gòu)件的所有行為n 構(gòu)件描述則說明構(gòu)件的內(nèi)部結(jié)構(gòu)、行為、功能和版本信息n 在中間層中,可以添加版本控制機制和不同的構(gòu)件裝載方法6.5.1.3 基于構(gòu)件的動態(tài)體系結(jié)構(gòu)模型o 體系結(jié)構(gòu)層位于最上層,用于控制和管理整個框架結(jié)構(gòu),包括體系結(jié)構(gòu)配置器、體系結(jié)構(gòu)描述和執(zhí)行三個部分n 體系結(jié)構(gòu)描述說明了構(gòu)件和它們所關(guān)聯(lián)的連接件,闡述了體系結(jié)構(gòu)層的功能行為n 體系結(jié)構(gòu)配置器控制整個

35、分布式系統(tǒng)的執(zhí)行,管理配置層n 在體系結(jié)構(gòu)層中,可以擴展更新機制,修改系統(tǒng)的拓撲結(jié)構(gòu),更新構(gòu)件到處理元素之間的映射關(guān)系6.5.1.3 基于構(gòu)件的動態(tài)體系結(jié)構(gòu)模型6.5.2 動態(tài)軟件體系結(jié)構(gòu)的意義o 研究DSA的意義在于:n 減少系統(tǒng)開發(fā)的費用和風(fēng)險,在以任務(wù)和安全性為主的系統(tǒng)中,如果使用動態(tài)軟件體系結(jié)構(gòu),那么運行時改變框架結(jié)構(gòu)可以減少由此所帶來的成本開銷n 提供自定義功能和可擴展功能,動態(tài)軟件體系結(jié)構(gòu)為用戶提供了更新服務(wù),以實現(xiàn)系統(tǒng)屬性的動態(tài)修改6.5.3 動態(tài)體系結(jié)構(gòu)描述語言o 說明構(gòu)件、連接件及其配置關(guān)系的語言,就是體系結(jié)構(gòu)描述語言ADLo ADL無法刻畫系統(tǒng)的動態(tài)行為,也不能描述運行時的框架結(jié)構(gòu)o 在ADL的基礎(chǔ)之上,許多學(xué)者提出了動態(tài)ADL的概念o 動態(tài)ADL可以分為形式化描述語言和非形式化描述語言兩種,目前的研究主要以形式化描述語言為主6.5.3 動態(tài)體系結(jié)構(gòu)描述語言o 形式化動態(tài)ADL具有以下幾點特性:n 能夠描述構(gòu)件和連接件等獨立實體,在軟件體系結(jié)構(gòu)中,能夠說明構(gòu)件和連接件的屬性,例如:構(gòu)件的抽象層次和連接件的通用性等n 能夠描述構(gòu)件與連接件之間的交互關(guān)系,檢查構(gòu)件和連接件的一致性n 在運行時刻,能夠描述軟件體系結(jié)構(gòu)的演化過程o DSA的形式化描述語言主要包括:圖的方法、基于進程代數(shù)的方法、

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論