摘要:提出了用擴充的構件描述語言xJBCDL描述軟件體系結構的演化,并實現(xiàn)了從xJBCDL到基于構件軟件配置管理模型的自動轉換,從而達到自動捕獲軟件體系結構演化信息的目的。
關鍵詞:軟件體系結構; 軟件演化; 版本
中圖分類號:TP3文獻標志碼:A
文章編號:1001-3695(2007)11-0074-02
軟件演化是軟件不斷更新變化的過程,是軟件的本質(zhì)特征之一。軟件作為對客觀世界的一種反映,是知識的提煉、體現(xiàn)和固化。客觀世界是不斷發(fā)展變化的,因此,軟件系統(tǒng)不可能一成不變。隨著新需求、新技術的不斷出現(xiàn),軟件也要不斷地升級、演化,體現(xiàn)為軟件的演化性[1]。軟件在生命周期的各個階段,都可能發(fā)生演化。記錄和分析軟件在演化過程中的信息,能夠更有助于理解軟件演化的本質(zhì),為更好地控制和預測未來軟件的變化奠定基礎。
另一方面,構件化軟件開發(fā)作為軟件復用的核心技術,越來越受到關注。軟件體系結構作為構件化開發(fā)中的核心資產(chǎn),體現(xiàn)了軟件設計的早期設計決策。通過記錄軟件體系結構在生命周期內(nèi)的演化歷史,可以更好地理解軟件體系結構的演化本質(zhì),為改善軟件體系結構的質(zhì)量奠定基礎。
本文在以前研究工作的基礎上,將軟件體系結構的演化與基于構件的軟件配置管理模型建立映射關系,并實現(xiàn)了兩者之間的自動映射算法,在系統(tǒng)的支持下實現(xiàn)對軟件體系結構演化信息的捕獲和記錄。
1支持軟件體系結構演化的構件描述
軟件體系結構的配置由構件以及構件之間的連接關系構成,可以用復合構件表示軟件體系結構的配置。復合構件的內(nèi)部結構由一組關系緊密、相互協(xié)作的成員構件以及它們之間的約束關系組成。復合構件中的成員構件相當于軟件體系結構配置中的構件;成員構件之間的約束關系相當于軟件體系結構的連接關系。在前期研究中[2, 3],以青鳥構件描述語言JBCDL討論了如何擴展JBCDL支持軟件體系結構的演化,將擴充后的JBCDL稱之為xJBCDL(extended JBCDL)。 xJBCDL的語法形式如下:
a)擴充后的構件接口規(guī)約
Component_Interface ::= Component 〈component_name〉 \"〈\" 〈VersionInfo〉 \"〉\" is
[Provides:〈Function_Spec_list〉
Requires:〈Function_Spec_list〉 ]|
[Services: [dual] Service〈service_name〉{,[dual]Service〈service_name〉}]
Description: 〈text_docu〉semiformal document| Formal document
End Component_Interface;
〈VersionInfo〉::= Version=〈VersionNo〉
b)擴充后的復合構件實現(xiàn)體規(guī)約
[Compound_component::=(復合構件的實體)
Reference:(包含的成員構件)
〈ReferenceSet〉
〈ReferenceSet〉::={〈Component〉\"〈\"〈ComponentInfo〉\"〉\";}
〈ComponentInfo〉::=〈LocationInfo〉; [〈 ProjectTeamInfo 〉]
〈ProjectTeamInfo〉::=ComponentManager=〈Name〉,
[ComponentUsers=〈NameList〉,]
[ComponentDesigner=〈NameList〉]
〈LocationInfo〉::= Location=〈Path〉
〈InstanceSet〉::={〈Component〉〈ComponentInstance〉;}
Instance:(成員構件的實例化)
……//這部分規(guī)約內(nèi)容沒有發(fā)生變化,在這里省去
2擴充的JBCDL到CBSCM模型的自動轉換
基于構件的軟件配置管理模型CBSCM支持軟件系統(tǒng)結構實現(xiàn)的存儲和追蹤。為了實現(xiàn)能夠自動地從擴充的構件描述語言xCDL構造出相應的CBSCM模型,首先介紹基于構件的軟件配置管理模型CBSCM;然后提出了從xJBCDL到CBSCM模型實例轉換的方法。
2.1基于構件的軟件配置管理模型
在文獻[4]中提出了基于構件的配置管理模型CBSCM,通過在配置管理技術中引入構件的概念,以構件為版本控制的基本單位。在此基礎上定義配置(復合構件)的概念,從而支持構件的演化管理。與其他軟件配置管理模型相比,可以更好地支持基于構件的軟件開發(fā)的演化管理。模型中相關定義如下:
定義1構件是可以被多個軟件系統(tǒng)所復用的具有獨立功能的系統(tǒng)構成成分。在配置管理系統(tǒng)中的構件定義為通過目錄結構組織起來的一組密切相關文件的集合。構件概念支持各種形態(tài)的構件,如分析構件或設計構件、運行級構件等。構件由若干分支組成。每個分支代表了構件的一個演化方向,每個分支由若干版本構成。
定義2配置是指一組配置項的集合,其中每個配置項可以是一個構件,也可以是一個配置(作為配置項的配置也稱子配置),配置具有自包含性。配置可以表示基于構件的軟件開發(fā)中的復合構件,也可以表示組裝出來的系統(tǒng)。定義3基線為配置及其所有子配置中的構件都選定一個特定版本,就得到了配置的一個基線,該操作稱為基線操作。配置的基線表示復合構件或系統(tǒng)的一個版本。
2.2xJBCDL到CBSCM的轉換算法
元模型是一種描述模型元素以及元素之間關系的機制。在這里,借助用元模型機制說明擴充的青鳥構件描述語言xJBCDL與基于構件的軟件配置管理模型CBSCM之間的映射關系如圖1表示。
軟件體系結構的配置有若干成員構件,每個成員構件對應于CBSCM中的構件,因此軟件體結構的配置對應于CBSCM中的一個配置。軟件體系結構中構件演化歷史對應于CBSCM中的構件版本簇;軟件體系結構配置的演化歷史對應于CBSCM中的基線,如果軟件體系結構配置發(fā)生了變化,則對應于CBSCM中一個新的配置;當軟件系統(tǒng)結構配置不發(fā)生變化,只是組成配置的構件發(fā)生變化,則對應于CBSCM中一個新的基線。
1)從JBCDL自動地生成配置
首先介紹如何從JBCDL自動生成CBSCM中的一個配置。算法Construct_Configuration 的偽代碼如下:
算法1Construct_Configuration
說明:構造構件c規(guī)約語言在CBSCM中對應的配置或構件。如果構件c是原子構件,則返回CBSCM中對應的構件名;如果構件c是復合構件,則返回CBSCM中對應的配置名。
function(c:CDL):Config
begin
if c 是原子構件 then
在CBSCM中創(chuàng)建一個構件,構件名為c.name;
return new Config(c.name);
if c 是復合構件 Then
cConfig:= new Config(c.name);
在CBSCM中創(chuàng)建一個配置,配置名為c.name;
for 對于c中的每一個成員構件 t Do
if t 是原子構件 Then
在CBSCM中創(chuàng)建一個構件,構件名為t.name;
將 t作為cConfig的一個構件;
else
tConfig:=Construct_configuration(t);//迭代地調(diào)用生成一個新的配置
將 tConfig作為cConfig的一個子配置;
end if
end for
return cconfig;
end
2)從xJBCDL自動生成基線
在算法1的基礎上,從xJBCDL自動生成CBSCM中一個基線的算法偽代碼如下:
算法2Construct_Baseline
說明:構造構件c擴展的規(guī)約語言在CBSCM中對應的基線或者版本構件。如果構件c是原子構件,則返回CBSCM中對應的版本構件;如果構件c是復合構件,則返回CBSCM中對應的基線。
function Construct_Baseline(c:xCDL):BaseLine
begin
if c 是原子構件 Then
在CBSCM中創(chuàng)建一個名為c.name,版本號為c.ver的版本構件;
return new BaseLine(c.name);
if c 是復合構件 Then
cBaseLine:=new BaseLine(c.name);
在CBSCM中創(chuàng)建一個名為c.name,版本號為c.ver的基線;
for 對于c中的每一個成員構件 t Do
if t 是原子構件 Then
在CBSCM中創(chuàng)建一個名為c.name,版本號為c.ver的版本構件;
將 t作為c的一個版本構件;
else
tBaseLine:=Construct_Baseline(t);//迭代地調(diào)用本程序生成一個新的基線
將 tBaseLine作為cBaseLine的一個子基線;
end if
end for
return cBaseLine;
end
end
2.3系統(tǒng)實現(xiàn)
在上述基礎上,本文實現(xiàn)了一個原型系統(tǒng)支持軟件體系結構演化信息的捕獲。整個系統(tǒng)體系結構圖如圖2所示, 包括擴展的xJBCDL編輯器、xJBCDL2CBSCM轉換器。xJBCDL是一個編輯環(huán)境,用于操縱軟件體系結構的變化,通過xJBCDL2CBSCM轉換器將軟件體系結構的變化傳播到基于構件的軟件配置管理系統(tǒng)中,完成軟件體系結構在實現(xiàn)級的變化。
3結束語
軟件演化研究的是軟件系統(tǒng)的變化模式,探討影響軟件變化的基本機制,為軟件演化提供更好的過程指導[5]。軟件演化分析的數(shù)據(jù)主要來源于軟件配置管理系統(tǒng)。軟件配置管理系統(tǒng)中記錄的軟件開發(fā)歷史,不僅能夠揭示開發(fā)者的
設計意圖,而且可以預測軟件未來的變化[6]。另一方面,人們逐漸意識到軟件配置管理模型與構件、軟件體系結構在概念上的相似性,提出了一些方法試圖集成兩者的數(shù)據(jù)模型,以便更好地支持軟件演化,例如Koala方法[7]和Ménage方法[8]。在文獻[9]中設計并實現(xiàn)了一個靈活的類似于SQL的數(shù)據(jù)查詢引擎,除能夠按類型、名、屬性以及度量查詢外,可以查詢出符合某種度量的軟件版本。在文獻[10]設計了一個版本歷史數(shù)據(jù)庫RHDB(release history database),用一種結構化的方法存儲版本數(shù)據(jù)和軟件變化管理中的問題報告。通過瀏覽、查詢歷史數(shù)據(jù)以及度量,為進一步研究軟件特征演化分析提供了物質(zhì)基礎。
本文通過擴充的構件描述語言xJBCDL描述軟件體系結構的演化,并自動地實現(xiàn)從xJBCDL到CBSCM的轉換,可以自動地記錄軟件體系結構的演化信息,為軟件體系結構質(zhì)量的改善奠定了基礎。
參考文獻:
[1]楊芙清.軟件技術與軟件產(chǎn)業(yè)[J].中國計算機用戶,1996 (1):7-8.
[2]鐘林輝,謝冰,邵維忠. 擴充CDL支持基于構件的系統(tǒng)組裝與演化[J]. 計算機研究與發(fā)展, 2002,39(10):13611365.
[3]鐘林輝,謝冰,邵維忠. 擴充CDL支持構件演化模型的方法研究[J]. 軟件學報, 2002,13:138142.
[4]張路. 基于構件的軟件配置管理技術研究[D] 北京:北京大學,2000.
[5]TU Q, GODFREY M W. An integrated approach for studying architectural evolution[C]//Proc of the 10th International Workshop on Program Comprehension (IWPC’02).2002:127136.
[6]ROBBES R, LANZA M. Versioning systems for evolution research[C]//Proc of the 8th International Workshop on Principle of Software Evolution. 2005.
[7]OMMERING R van. Koala: a component model for consumer electronics product software[C]//Proc of the 2nd International ESPRIT ARES Workshop. Berlin: SpringerVerlag,1998:76-86.
[8]ROSHANDEL R, HOEK A van der,MIKICRAKIC M,et al. Mae:a system model and environment for managing architectural evolution[J]. ACM Transactions on Software Engineering and Metho ̄dology, 2004,13(2):240-276.
[9]LANZA M, DUCASSE S, STEIGER L.Understanding software evolution using a flexible query engine[C]//Proc of the Workshop on Formal Foundations of Software Evolution.2001.
[10]FISCHER M, PINZGER M, GALL H. Analyzing and relating bug report data for feature tracking[C]//Proc of the 10th Working Confe ̄rence on Reverse Engineering.Victoria:IEEE Computer Society,2003:90-99.
“本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文”