作為Internet 環(huán)境下的一種新型的軟件形態(tài), 網(wǎng)構軟件對傳統的軟件開(kāi)發(fā)理論、方法與技術(shù)提出了一系列的挑戰. 作為一種以軟件復用為核心思想、以軟件構件為基本實(shí)體、以軟件體系結構為中心、以軟件中間件為運行支撐的軟件開(kāi)發(fā)方法學(xué), ABC(architecture based component composition)方法能夠有力支持網(wǎng)構軟件的開(kāi)發(fā). 其中, 基于特征的領(lǐng)域建模以及特定應用的特征模型剪裁方法和技術(shù), 反映了網(wǎng)構軟件在問(wèn)題空間實(shí)現自底向上、從“無(wú)序”到“有序”的構造過(guò)程;基于自適應軟件體系結構的分析與設計方法, 支持自適應網(wǎng)構軟件的開(kāi)發(fā); 具有反射機制、支持自主構件的中間件平臺則為網(wǎng)構軟件的運行, 尤其是網(wǎng)構軟件結構的自適應和實(shí)體的自適應提供支撐機制Internet 的發(fā)展為信息技術(shù)的應用開(kāi)啟了新的篇章, 同時(shí)也帶來(lái)了諸多的技術(shù)挑戰, 并由此產(chǎn)生了多個(gè)信息技術(shù)研究與實(shí)踐的熱點(diǎn)領(lǐng)域. 這些領(lǐng)域往往從某種側面或層次對信息技術(shù)提出一種新型模式或理念, 如, 網(wǎng)格計算從資源共享與管理的角度探討未來(lái)網(wǎng)絡(luò )系統的應用與構造模式; 普適計算從“人機交互”的角度研究未來(lái)網(wǎng)絡(luò )系統的應用模式; 服務(wù)計算從“軟件即服務(wù)”的理念出發(fā), 提出了一種新型的軟件形態(tài)并著(zhù)重探討軟件的協(xié)同性和動(dòng)態(tài)性; 模型驅動(dòng)的開(kāi)發(fā)以特定于領(lǐng)域的代碼自動(dòng)生成為基礎, 探討基于中間件的軟件系統的開(kāi)發(fā)方法與技術(shù)?;陬?lèi)似的出發(fā)點(diǎn), 網(wǎng)構軟件從軟件形態(tài)的角度考察開(kāi)放、動(dòng)態(tài)、多變的Internet環(huán)境對軟件理論、方法和技術(shù)的挑戰. 作為傳統軟件結構的自然延伸, 網(wǎng)構軟件具有區別于傳統軟件形態(tài)的獨有的基本特征, 包括自主性、演化性、協(xié)同性、多態(tài)性和反應性等
從網(wǎng)構軟件的角度來(lái)考察當今有代表性的軟件工程方法學(xué),可以發(fā)現傳統的軟件工程方法學(xué)體系由于其本質(zhì)上是一種靜態(tài)和封閉的框架體系, 難以支持由開(kāi)放、動(dòng)態(tài)、多變的Internet 環(huán)境衍生的網(wǎng)構軟件的開(kāi)發(fā).從技術(shù)的角度看, 網(wǎng)構軟件在Internet 上展現為一種與當前的信息Web 類(lèi)似的Software Web. 以軟件構件等技術(shù)支持的軟件實(shí)體將以開(kāi)放、自主的方式存在于Internet 的各個(gè)節點(diǎn)之上, 任何一個(gè)軟件實(shí)體可在開(kāi)放的環(huán)境下通過(guò)某種方式加以發(fā)布, 并以各種協(xié)同方式與其他軟件實(shí)體進(jìn)行跨網(wǎng)絡(luò )的互連、互通、協(xié)作和聯(lián)盟. 由于Internet 的開(kāi)放、動(dòng)態(tài)和多變, 以及用戶(hù)使用方式的個(gè)性化要求, 決定了網(wǎng)構軟件的開(kāi)發(fā)不同于傳統軟件開(kāi)發(fā)的“一次成型”式, 具體表現為, 網(wǎng)構軟件在發(fā)布之后, 能夠感知外部網(wǎng)絡(luò )環(huán)境的動(dòng)態(tài)變化, 并隨著(zhù)這種變化按照功能指標、性能指標和可信性指標等進(jìn)行靜態(tài)的調整和動(dòng)態(tài)的演化, 以使系統具有盡可能高的用戶(hù)滿(mǎn)意度, 而且, 由于用戶(hù)需求的多樣化和個(gè)性化以及投資回收等因素,一個(gè)軟件系統往往存在時(shí)間較長(cháng), 因此, 網(wǎng)構軟件的演化過(guò)程也在長(cháng)時(shí)間內持續不斷. 顯然, 開(kāi)發(fā)具有上述技術(shù)特點(diǎn)的網(wǎng)構軟件面臨著(zhù)開(kāi)發(fā)過(guò)程、開(kāi)發(fā)方法以及支持技術(shù)3 個(gè)方面的挑戰在軟件開(kāi)發(fā)過(guò)程方面, 傳統軟件系統的開(kāi)發(fā)因所基于的平臺相對封閉、靜態(tài)、穩定, 基本采用自頂向下的途徑, 確定系統的范圍(即scoping)總是建立需求的第一步, 然后通過(guò)分解而實(shí)施分而治之的策略, 整個(gè)開(kāi)發(fā)過(guò)程處于有序控制之下. 而網(wǎng)構軟件系統的開(kāi)發(fā)所基于的平臺是一個(gè)有豐富基礎軟件資源但同時(shí)又是開(kāi)放、動(dòng)態(tài)和多變的框架, 開(kāi)發(fā)活動(dòng)呈現為通過(guò)將原本“無(wú)序”的基礎軟件資源組合為“有序”的基本系統, 隨著(zhù)時(shí)間推移, 這些系統和資源在功能、質(zhì)量、數量上的變化導致它們再次呈現出“無(wú)序”的狀態(tài), 這種由“無(wú)序”到“有序”的過(guò)程往復循環(huán), 基本上是一種自底向上、由內向外的螺旋方式. 此外, 在傳統的軟件工程體系中, 軟件生命周期概念所強調的是從問(wèn)題提出到軟件交付的整個(gè)開(kāi)發(fā)過(guò)程的重要性, 而對于交付之后的軟件變化過(guò)程往往只采用“軟件維護”加以簡(jiǎn)單概括.
這樣一種軟件生命周期概念對處于靜態(tài)封閉環(huán)境下的軟件系統的開(kāi)發(fā)是合適的,但對處于Internet 開(kāi)放、動(dòng)態(tài)和多變環(huán)境下網(wǎng)構軟件系統的開(kāi)發(fā)則有明顯的局限性. 首先, 新的軟件實(shí)體往往通過(guò)已有的軟件實(shí)體組裝而成, 由于這些實(shí)體彼此獨立、自主運行, 不受任何機構或組織的統一控制, 因此, 在系統交付運行之前,很難由這些被組裝的軟件實(shí)體準確無(wú)誤地推演出目標系統的功能和質(zhì)量. 其次,環(huán)境的開(kāi)放、動(dòng)態(tài)和多變決定了軟件實(shí)體及其之間的協(xié)同均面臨著(zhù)諸多變化, 不論這些變化能否在運行前準確預知, 運行系統都不得不進(jìn)行持續的適應性調整.第3, 網(wǎng)構軟件既服務(wù)于處在不同時(shí)區的用戶(hù)也服務(wù)于隨時(shí)到達的其他網(wǎng)構軟件的請求, 而且, 一個(gè)網(wǎng)構軟件系統本身往往由散布在Internet 上的其他軟件組成,因此, 一個(gè)網(wǎng)構軟件系統一旦交付使用, 往往就不能完全停機. 這意味著(zhù)改錯、優(yōu)化、增加新功能等活動(dòng)均需在線(xiàn)執行, 這些活動(dòng)也需要經(jīng)歷分析、設計、實(shí)現、測試、部署, 而傳統軟件生存周期中的維護期難以準確刻畫(huà)這些活動(dòng).在軟件開(kāi)發(fā)方法方面, 對于網(wǎng)構軟件所具備的自主性、演化性、協(xié)同性、多態(tài)性和反應性, 傳統的開(kāi)發(fā)方法考慮不多、支持遠遠不夠.?
首先, 網(wǎng)構軟件自主性是指軟件實(shí)體具有相對獨立性、主動(dòng)性和自適應性. 從技術(shù)角度看, 網(wǎng)構軟件實(shí)體一般都是獨立開(kāi)發(fā)和管理的, 它們可能在不同的網(wǎng)絡(luò )節點(diǎn)上獨立運行. 它們的目標和所提供的服務(wù)由其所有者來(lái)決定, 其行為受自身的目標驅動(dòng), 而并非單純地被動(dòng)用于組裝或部署. 它們在運行過(guò)程中可能實(shí)時(shí)收集環(huán)境的各種變化信息, 并根據預先設定好的策略, 在必要時(shí)自動(dòng)調整自身的行為以適應環(huán)境的變化;其次, 協(xié)同性是指網(wǎng)構軟件系統中軟件實(shí)體與軟件實(shí)體之間可按多種靜態(tài)連接和動(dòng)態(tài)合作方式在開(kāi)放的網(wǎng)絡(luò )環(huán)境下加以互連、互通、協(xié)作和聯(lián)盟. 從技術(shù)角度看, 傳統軟件系統在封閉集中環(huán)境下往往采用單一靜態(tài)的連接模式, 而網(wǎng)構軟件則支持連接模式的適應性調整, 如, 不同互操作協(xié)議的切換, 連接安全級別的升降, 同步異步的轉變, 消息傳遞可靠性的調整等; 第3, 反應性是指網(wǎng)構軟件具有感知外部運行和使用環(huán)境并對系統演化提供有用信息的能力.?
從技術(shù)角度看, 網(wǎng)構軟件的外部環(huán)境由其他網(wǎng)構軟件以及底層支撐平臺組成, 因此, 反應性既要求網(wǎng)構軟件能夠以某種方式暴露自身的狀態(tài)和行為信息, 也要求網(wǎng)構軟件支撐平臺能夠開(kāi)放底層實(shí)現細節及運行狀態(tài); 第4, 演化性是指網(wǎng)構軟件結構可根據應用需求和網(wǎng)絡(luò )環(huán)境變化而發(fā)生動(dòng)態(tài)演化, 主要表現在其實(shí)體元素數目的可變性,結構關(guān)系的可調節性和結構形態(tài)的動(dòng)態(tài)可配置性. 從技術(shù)角度看, 演化性要求軟件體系結構具備動(dòng)態(tài)調整能力; 最后, 多態(tài)性是指網(wǎng)構軟件系統的效果體現出相容的多目標性, 它可根據某些基本協(xié)同原則, 在動(dòng)態(tài)變化的網(wǎng)絡(luò )環(huán)境下, 滿(mǎn)足多種相容的目標形態(tài). 從技術(shù)角度看, 多態(tài)性既要求系統開(kāi)發(fā)過(guò)程中需要支持多目標建模, 又要求系統運行時(shí)能夠基于環(huán)境變化進(jìn)行動(dòng)態(tài)目標的適應性選擇.?
基于上述分析, 網(wǎng)構軟件諸多特性在技術(shù)上的主要共性可歸結為自適應性, 具體表現為軟件實(shí)體的自適應性和軟件結構的自適應性, 即, 網(wǎng)構軟件在運行過(guò)程中能夠在合適的時(shí)刻、合適的場(chǎng)合、準確捕捉變化并進(jìn)行合理的適應性調整, 以滿(mǎn)足功能和質(zhì)量的需求. 人在網(wǎng)構軟件適應過(guò)程中的參與程度決定了網(wǎng)構軟件自適應能力的高低. 因此, 如何開(kāi)發(fā)出具有這種自適應能力的軟件系統, 并盡可能減少運行過(guò)程中人的參與, 是網(wǎng)構軟件開(kāi)發(fā)方法的關(guān)鍵挑戰在軟件運行支撐技術(shù)方面, 傳統的軟件開(kāi)發(fā)工具往往針對軟件交付前的分析、設計、實(shí)現、測試中的一個(gè)或幾個(gè)階段, 而軟件交付后則部署在運行平臺上,并利用各種管理工具進(jìn)行維護.?
而基于上述分析, 網(wǎng)構軟件的開(kāi)發(fā)已經(jīng)不僅僅局限于軟件交付之前, 軟件開(kāi)發(fā)的重心從交付前逐漸轉移到運行過(guò)程中, 而網(wǎng)構軟件自動(dòng)或手動(dòng)的調整往往依賴(lài)于軟件生存周期各個(gè)階段的活動(dòng)與制品. 因此, 網(wǎng)構軟件開(kāi)發(fā)工具不僅要覆蓋整個(gè)軟件生存周期, 還有必要與運行平臺融合, 從而支持軟件運行中持續不斷的開(kāi)發(fā)活動(dòng). 另一方面, 網(wǎng)構軟件的諸多特性對運行平臺提出了極大的挑戰, 首先, 運行平臺不僅要具備實(shí)時(shí)顯示自身運行狀態(tài)和行為的能力, 還應協(xié)助實(shí)現上層軟件實(shí)體內部狀態(tài)和行為的實(shí)時(shí)展現, 其次, 運行平臺必須支持網(wǎng)構軟件實(shí)體與結構的動(dòng)態(tài)調整,否則, 自適應很難甚至在某些情況下無(wú)法實(shí)現綜上所述, 網(wǎng)構軟件的開(kāi)發(fā)在過(guò)程方面, 需要遵循自底向上、從“無(wú)序”到“有序”的新型構造途徑, 開(kāi)發(fā)重心由系統交付前向系統運行時(shí)轉移; 在開(kāi)發(fā)方法方面, 需要重點(diǎn)考慮軟件實(shí)體和結構的自適應性; 在支持技術(shù)方面, 需要整合開(kāi)發(fā)工具和運行平臺以支持跨整個(gè)軟件生存周期的開(kāi)發(fā), 而運行平臺應提供軟件實(shí)體和結構自適應所需的基本機制.本文針對網(wǎng)構軟件需求, 考慮網(wǎng)構軟件更關(guān)注實(shí)體組合的特點(diǎn), 提出一種以軟件體系結構為中心的網(wǎng)構軟件開(kāi)發(fā)方法, 該方法采用ABC(architecture basedcomponent composition)方法框架, 即以構件組裝為基本手段, 使用軟件體系結構的理論與概念來(lái)指導軟件開(kāi)發(fā), 以提高系統開(kāi)發(fā)的效率和質(zhì)量. 考慮網(wǎng)構軟件的特性, 該方法重點(diǎn)關(guān)注3 個(gè)問(wèn)題: (1)Internet 上“無(wú)序”軟件資源的有效建模、組織和管理, (2)網(wǎng)構軟件自適應建模, (3)支持網(wǎng)構軟件特征的支持工具和運行平臺
ABC 方法概覽
ABC 方法于2000 年正式提出, 從支持軟件復用的角度來(lái)看, 是軟件體系結構(SA)研究和基于構件的軟件開(kāi)發(fā)(CBSD)途徑的結合. SA 研究提供了一種自頂向下實(shí)現基于構件的復用的途徑, 即通過(guò)體系結構描述語(yǔ)言(ADL, architecturedescription language)在較高抽象層次上描述構件接口的語(yǔ)法和語(yǔ)義、系統中的構件和連接子以及它們之間的交互關(guān)系、構件的非功能屬性、以及構件間協(xié)議, 從而建立系統的體系結構模型. 但是, 當前的SA 研究大都局限于體系結構描述和一些高層的性質(zhì)驗證, 對體系結構求精和實(shí)現的支持能力明顯不足. 另一方面,CBSD提供了一種
通過(guò)使用現存的中間件基礎設施自底向上地實(shí)現基于構件的軟件復用的途徑, 強調使用已經(jīng)開(kāi)發(fā)好的構件來(lái)構造軟件系統. 但是, 當前CBSD討論的重點(diǎn)主要局限于COM, CORBA 和EJB 等二進(jìn)制構件, 這些中間件技術(shù)僅僅提供了在實(shí)現層次上支持構件交互的基礎機制, 缺少指導CBSD 過(guò)程的系統化的方法學(xué), 特別是對高抽象層次的構件組裝無(wú)能為力. 作為一種自然的解決方案,ABC 方法有機組合了這兩種途徑, 以支持有效的基于構件的復用.ABC 方法的核心思想是將軟件體系結構引入到軟件開(kāi)發(fā)的各個(gè)階段, 作為系統開(kāi)發(fā)的藍圖, 利用工具支持的自動(dòng)轉換機制縮小從高層設計到實(shí)現的距離,而后在構件運行平臺(軟件中間件)的支持下實(shí)現自動(dòng)的系統組裝生成. ABC 方法過(guò)程模型如圖1