摘 要:在軟件體系結(jié)構(gòu)層次應(yīng)用度量技術(shù)對于保證最終產(chǎn)品的質(zhì)量有重要意義。但體系結(jié)構(gòu)度量領(lǐng)域普遍存在對于度量擴展支持不足的問題。針對該問題,采用新的思路實現(xiàn)了一個可支持度量擴展的軟件體系結(jié)構(gòu)度量工具。該工具支持一組基本度量,并支持較為豐富的組合運算,使用戶可定制度量,從而在一定程度內(nèi)解決了體系結(jié)構(gòu)度量領(lǐng)域存在的問題。
關(guān)鍵詞:軟件體系結(jié)構(gòu);軟件度量;基本度量;軟件質(zhì)量
中圖分類號:TP301 文獻(xiàn)標(biāo)志碼:A
文章編號:1001-3695(2008)09-2700-03
Research and implementation on software architecture metric tool
SONG Guangyu,GAO Hui
(Software Engineering Institute, Beihang University, Beijing 100083, China)
Abstract:Measuring software architecture plays an important role in the success of software, but there is shortage of the extension of metrics in this field. This paper presented a tool for measuring software architecture in a novel idea. The tool realized userdefined metrics based a new set of basicmetrics and several modes of combination which could be used to support the complex measure, so it solved the problem in a certain extent.
Key words:software architecture; software metrics; basicmetrics; software quality
0 引言
作為軟件設(shè)計早期的關(guān)鍵制品之一,軟件體系結(jié)構(gòu)對于控制軟件系統(tǒng)質(zhì)量、支持軟件開發(fā)和復(fù)用有重要的意義[1]。在體系結(jié)構(gòu)層次應(yīng)用度量可以盡早發(fā)現(xiàn)軟件中存在的錯誤,提高軟件品質(zhì),并幫助人們客觀地分析、評估甚至預(yù)測軟件的質(zhì)量屬性。
軟件體系結(jié)構(gòu)最基礎(chǔ)的信息是結(jié)構(gòu)和行為信息[2]。體系結(jié)構(gòu)的結(jié)構(gòu)和行為特征直接影響了軟件可擴展性、易維護(hù)性、性能等質(zhì)量屬性。因此,對這些特征進(jìn)行度量是十分必要的。當(dāng)前,軟件體系結(jié)構(gòu)的研究人員已經(jīng)陸續(xù)提出了針對體系結(jié)構(gòu)通用的結(jié)構(gòu)和行為特征的度量指標(biāo),如構(gòu)件的復(fù)雜度[3]、構(gòu)件的扇出消息數(shù)[4]、消息傳出耦合[5]、系統(tǒng)消息復(fù)雜性[6]、系統(tǒng)深度[6] 、構(gòu)件動態(tài)復(fù)雜度[7]、角色間的輸出耦合[8]等,并對其中的部分指標(biāo)進(jìn)行了驗證和應(yīng)用。
雖然體系結(jié)構(gòu)度量已經(jīng)取得了一定的進(jìn)展,但是當(dāng)前的體系結(jié)構(gòu)度量技術(shù)仍存在以下最主要的問題:a)度量工具較少;b)已有的度量工具普遍對度量擴展支持不足,如Maisa、ObjecTime tool等都只是支持特定的體系結(jié)構(gòu)度量指標(biāo)。當(dāng)前,體系結(jié)構(gòu)度量的研究仍處于發(fā)展階段,研究人員不斷地提出新的度量指標(biāo),若體系結(jié)構(gòu)度量工具可以支持度量的擴展,這無疑將促進(jìn)該工具的應(yīng)用;反之,使用可擴展的度量工具進(jìn)行大樣本度量又可以幫助分析和驗證已有的度量指標(biāo)。因此,體系結(jié)構(gòu)度量領(lǐng)域迫切需要一個可支持度量擴展的體系結(jié)構(gòu)度量工具。軟件工程領(lǐng)域常采用分解的思想來解決問題,例如1984年Basili和Weiss提出的目標(biāo)—問題—度量元;1977年Walters and McCall提出的因素—準(zhǔn)則—度量元等。沿用這種思想,本文分析和研究現(xiàn)有的體系結(jié)構(gòu)度量指標(biāo)[4~9]發(fā)現(xiàn),度量可以分解為兩個層次,即基本度量和組合度量。本文定義基本度量是對實體的單一屬性的度量,而組合度量是基本度量的函數(shù)值。
文獻(xiàn)[3]提出構(gòu)件復(fù)雜度可通過某個構(gòu)件的狀態(tài)轉(zhuǎn)移數(shù)該構(gòu)件的方法數(shù)來計算,而文獻(xiàn)[8]中提出的用McCabe的圈數(shù)度量來計算復(fù)雜性的度量指標(biāo)中也使用了構(gòu)件的狀態(tài)轉(zhuǎn)移數(shù),那么,可以將構(gòu)件的狀態(tài)轉(zhuǎn)移數(shù)看做基本度量,而文獻(xiàn)[3]提出的構(gòu)件的復(fù)雜度則屬于組合度量。
在兩個層次的度量中,用戶關(guān)心的往往是組合度量。為了支持體系結(jié)構(gòu)度量的可擴展性,本文定義了一組基本度量和組合運算,使用戶通過組合基本度量來自行定制組合度量,并基于此設(shè)計和實現(xiàn)了一個可支持度量擴展的軟件體系結(jié)構(gòu)度量工具。在度量工具的支持下,用戶只需重用現(xiàn)有的基本度量和組合運算就可以定義新的組合度量并得到度量結(jié)果,從而在一定程度上解決了擴展支持不足的問題。
本文的研究內(nèi)容包括以下兩個部分:a)設(shè)計組合度量的表達(dá)方式。為了表達(dá)組合度量,本文定義了一組體現(xiàn)軟件體系結(jié)構(gòu)的結(jié)構(gòu)和行為特征的基本度量,并設(shè)計了一組較為豐富的組合運算集。b)基于a)實現(xiàn)可擴展的軟件體系結(jié)構(gòu)度量工具。該工具可以自動獲取體系結(jié)構(gòu)模型中的信息,計算基本度量值,同時可以支持用戶定制組合度量,從而支持度量擴展。
1 基本度量
度量可以分解為兩個層次,即基本度量和組合度量。用戶關(guān)注的往往是組合度量。為了實現(xiàn)用戶定制組合度量,本文定義了一組體現(xiàn)軟件體系結(jié)構(gòu)的結(jié)構(gòu)和行為特征的基本度量。
1.1 定義基本度量組
本文通過兩個步驟來定義和完善基本度量組:a)對軟件體系結(jié)構(gòu)所包含的信息進(jìn)行分解和細(xì)化,得到體現(xiàn)其結(jié)構(gòu)和行為特征的屬性集合,從而初步定義基本度量組;b)通過已提出并得以驗證的組合度量和質(zhì)量屬性的映射關(guān)系,驗證基本度量組合而成的組合度量集合是否可以表達(dá)出人們所關(guān)注的絕大多數(shù)質(zhì)量屬性,如可修改性、可擴展性、效率、可維護(hù)性和復(fù)雜度等。
基本度量是針對單一屬性進(jìn)行的度量,所以需要首先分析體系結(jié)構(gòu)包含的實體,以及每個實體包含的屬性。通過分析現(xiàn)有的體系結(jié)構(gòu)定義和相關(guān)研究[9~13],本文將體系結(jié)構(gòu)實體分為七類,分別是:體系結(jié)構(gòu)模型、構(gòu)件、端口、連接件、角色、場景和消息。每一個實體包含著若干屬性,它們分別表現(xiàn)體系結(jié)構(gòu)的結(jié)構(gòu)和行為特征。例如,構(gòu)件的關(guān)聯(lián)關(guān)系這一屬性體現(xiàn)了其結(jié)構(gòu)特征。對于任何一個有清晰可標(biāo)志狀態(tài)和復(fù)雜行為的構(gòu)件,構(gòu)件的各種狀態(tài)與狀態(tài)之間的轉(zhuǎn)換這兩個屬性能夠體現(xiàn)構(gòu)件的行為特征。軟件體系結(jié)構(gòu)的行為特征主要通過連接件來表現(xiàn)。連接件可以通過場景進(jìn)行細(xì)化。場景中可以顯示角色之間的消息交互,如一個場景中一個角色對另一角色的調(diào)用消息的屬性就體現(xiàn)了角色的行為特征。體系結(jié)構(gòu)的實體及其對應(yīng)的屬性如表1所示。通過對體系結(jié)構(gòu)每個屬性定義度量,可以初步得到基本度量組。
表1 體系結(jié)構(gòu)的實體和屬性對應(yīng)關(guān)系
實體屬性實體屬性
體系結(jié)構(gòu)模型構(gòu)件數(shù)連接件數(shù)連接件場景數(shù)角色數(shù)
構(gòu)件端口數(shù)關(guān)聯(lián)關(guān)系數(shù)簡單狀態(tài)數(shù)復(fù)合狀態(tài)數(shù)狀態(tài)轉(zhuǎn)換數(shù)角色方法數(shù)參與的場景數(shù)承擔(dān)某角色的構(gòu)件數(shù)調(diào)用消息數(shù)
端口方法數(shù)粘結(jié)的角色數(shù)場景角色數(shù)
消息觸發(fā)其他消息數(shù)
度量的最終目的是為了對軟件質(zhì)量進(jìn)行有效的控制。目前,基于度量的體系結(jié)構(gòu)評估方法的研究人員陸續(xù)提出了一些組合度量與質(zhì)量屬性之間的映射關(guān)系。初步定義好度量組后,需要基于這些映射關(guān)系從質(zhì)量屬性的角度對基本度量組進(jìn)行驗證和修改。例如通過組合基本度量定義的組合度量——系統(tǒng)連接性密度[6],該度量已被驗證會對系統(tǒng)的可維護(hù)性和靈活性產(chǎn)生影響;通過基本度量的多種組合,可以驗證其是否已經(jīng)可以反映絕大多數(shù)的質(zhì)量屬性。
1.2 基本度量組
通過分解細(xì)化——驗證的過程,本文定義了包含17個基本度量的度量組,如表2所示。
當(dāng)新的變化或需求出現(xiàn)時,可以對基本度量組進(jìn)行擴展以對新的變化和需求提供支持。
2 組合度量
2.1 組合運算
通過分析軟件度量領(lǐng)域現(xiàn)有的組合度量[3~8,14,15]和總結(jié)歸納常見的組合運算,本文設(shè)計并實現(xiàn)了一組組合運算,如表3所示。
表2 軟件體系結(jié)構(gòu)基本度量組
縮寫度量實體基本度量定義
NCPM()模型模型的構(gòu)件數(shù)目模型中的所有構(gòu)件數(shù)
NCNM()模型模型的連接件數(shù)模型中的所有連接件數(shù)
NPCP(cp)構(gòu)件構(gòu)件的端口數(shù)構(gòu)件cp的所有端口數(shù)
NASC(cp)構(gòu)件構(gòu)件的關(guān)聯(lián)關(guān)系數(shù)與構(gòu)件cp關(guān)聯(lián)的所有構(gòu)件數(shù)
NSCP(cp)構(gòu)件構(gòu)件的簡單狀態(tài)數(shù)包括組合狀態(tài)中的簡單狀態(tài)在內(nèi),構(gòu)件cp的所有簡單狀態(tài)總數(shù)
NCSCP(cp)構(gòu)件構(gòu)件的復(fù)合狀態(tài)數(shù)構(gòu)件cp的所有組合狀態(tài)總數(shù)
NTCP(cp)構(gòu)件構(gòu)件的狀態(tài)轉(zhuǎn)換數(shù)構(gòu)件cp的所有狀態(tài)轉(zhuǎn)換數(shù)
NMP(p)端口端口的方法數(shù)端口p具有的方法數(shù)
NRP(p)端口端口粘結(jié)的角色數(shù)與端口p粘結(jié)的所有角色數(shù)
NRCN(cn)連接件連接件的角色數(shù)連接件cn中的所有角色數(shù)
NSCCN(cn)連接件連接件的場景數(shù)連接件cn中包含的所有場景數(shù)
NMR(r)角色角色的方法數(shù)角色r具有的方法數(shù)
NSCR(r)角色角色參與的場景數(shù)角色r參與的場景數(shù)
NCPR(r)角色承擔(dān)某角色的構(gòu)件數(shù)扮演角色r的所有構(gòu)件數(shù)
NMRR(r1,r2,s)角色角色在一個場景中調(diào)用另一個角色的消息數(shù)在場景s中,角色r1調(diào)用角色r2的消息數(shù)
NRSC(s)場景場景中的所有角色數(shù)場景s中出現(xiàn)的所有角色數(shù)
NTM(m)消息消息的觸發(fā)數(shù)消息m的到達(dá)觸發(fā)的消息數(shù)目
2.2 組合度量舉例
通過第1章定義的基本度量組和表3的組合運算集合,已經(jīng)可以表示多種體系結(jié)構(gòu)領(lǐng)域主流的組合度量,如構(gòu)件的復(fù)雜度、構(gòu)件動態(tài)復(fù)雜度和系統(tǒng)角色復(fù)雜性等。文獻(xiàn)[3]提出的組合度量——構(gòu)件的復(fù)雜度。
定義:構(gòu)件c中平均每個方法導(dǎo)致的狀態(tài)轉(zhuǎn)移數(shù)。
計算方法:構(gòu)件c的狀態(tài)轉(zhuǎn)移總數(shù)/構(gòu)件c的方法數(shù)。
組合表示:I(xiàn)=PCPI(c);M1(c)=NTCP(c)/x∈I(NMP(x))。
3 體系結(jié)構(gòu)度量工具
3.1 系統(tǒng)結(jié)構(gòu)
本文基于基本度量和組合運算,設(shè)計并實現(xiàn)了一個可擴展的體系結(jié)構(gòu)度量工具SAMT(software architecture metric tool)。該工具采用Java語言,以RSA(rational software architect)的插件形式實現(xiàn),支持基于UML2.0多視圖模型描述的軟件體系結(jié)構(gòu)。
SAMT可從體系結(jié)構(gòu)模型中獲取和識別體系結(jié)構(gòu)信息,自動計算基本度量值;支持用戶定制組合度量;存儲用戶定制的度量函數(shù),使用戶可以基于已定義的度量函數(shù)來定制組合度量;可以方便地對基本度量和組合運算的實現(xiàn)進(jìn)行擴充。因此,它在很大程度上減輕了軟件體系結(jié)構(gòu)評估人員和設(shè)計人員的工作量,降低了度量的難度。
SAMT采用三層MVC結(jié)構(gòu),主要功能如下:
a)數(shù)據(jù)存儲層。度量數(shù)據(jù)庫存儲了用戶定制的度量函數(shù)和度量值。用戶可復(fù)用已定義的度量函數(shù)。此外,在體系結(jié)構(gòu)模型未變的情況下,該工具只需讀取度量數(shù)據(jù)庫即可得到度量值,從而保證了系統(tǒng)的高性能。
b)核心控制層。包括基本度量計算和表達(dá)式解析兩個模塊。基本度量計算模塊實現(xiàn)以下功能:(a)讀取模型,收集用于計算基本度量的相關(guān)信息;(b)向度量數(shù)據(jù)庫中寫入必要信息。表達(dá)式解析模塊是本系統(tǒng)的核心模塊,主要完成對組合度量表達(dá)式的處理和對度量函數(shù)的存儲,從而實現(xiàn)對度量擴展的支持。若用戶選擇定制組合度量,該層則根據(jù)組合度量的表達(dá)式,從數(shù)據(jù)庫中讀入必要信息,解析和計算出對應(yīng)的度量值,并存儲結(jié)果;若用戶選擇定制度量函數(shù),該層則實現(xiàn)對該函數(shù)的存儲。
c)用戶界面層。主要包含以下三個功能:(a)在本地選擇SA模型;(b)輸入用戶定制的組合度量表達(dá)式,該表達(dá)式基于數(shù)據(jù)庫中的度量函數(shù)和基本度量;(c)顯示度量結(jié)果的列表和度量指標(biāo)的統(tǒng)計圖,幫助軟件管理者直觀地從現(xiàn)實結(jié)果中觀測出軟件在維護(hù)、測試、理解、重用等方面的優(yōu)劣,從而對軟件質(zhì)量作出直觀地判斷。
SAMT的體系結(jié)構(gòu)如圖1所示。其中實線表示控制流,虛線表示數(shù)據(jù)流。
3.2 核心模塊
SAMT的核心模塊——表達(dá)式解析模塊包括詞法分析、語法分析和結(jié)果計算。該模塊采用將詞法分析部分作為語法分析部分的子過程的編譯技術(shù),在需要時,由語法分析部分調(diào)用詞法分析部分。詞法分析部分主要完成對單詞token的識別。語法分析部分首先根據(jù)度量計算所需的信息編寫B(tài)NF范式,繼而完成信息的提取工作。由于Java語言支持遞歸調(diào)用,語法分析部分采用遞歸下降分析方法。
語法分析部分所需要的EBNF范式是該模塊實現(xiàn)的關(guān)鍵。下面列出了組合度量的EBNF范式:
組合度量::= 基本度量{運算符 常數(shù)}|函數(shù)表達(dá)式| LP組合度量RP|組合度量 運算符 組合度量
函數(shù)表達(dá)式::= 多元函數(shù)名 LP多元函數(shù)輸入值 RP|一元函數(shù)名LP組合度量RP
多元函數(shù)名::=||max|min
一元函數(shù)名::=square|sqrt|ln|exp
多元函數(shù)輸入值::= 組合度量{COMMA,組合度量}n1|集合 COMMA組合度量運算符::=+|-|×|/
基本度量::= 基本度量函數(shù)名LP軟件體系結(jié)構(gòu)元素標(biāo)志符{COMMA,軟件體系結(jié)構(gòu)元素標(biāo)志符}|變量{COMMA,變量}RP
基本度量函數(shù)名::=NCPM|NCNM|NPCP|NASC|NSCP|NCSCP| NTCP|NOP| NRP|NRCN| NSCCN| NMR|NSCR|NCPR| NMRR|NRSC| NTM
集合::=集合函數(shù) LP集合函數(shù)輸入值 RP|集合 集合運算符 集合|LP集合RP
集合函數(shù)::=CPI|CNI|PCPI|CPPI|RCNI|CNRI|PRI|RPI| SCCNI|RSCI
集合函數(shù)輸入值::=集合| 軟件體系結(jié)構(gòu)元素標(biāo)志符
集合運算符::= ∪|∩|—
軟件體系結(jié)構(gòu)元素標(biāo)志符::=字母| 軟件體系結(jié)構(gòu)元素標(biāo)志符 {字母數(shù)字} ,其中軟件體系結(jié)構(gòu)元素僅為構(gòu)件、端口、連接件、角色、場景、消息
字母數(shù)字::=字母|數(shù)字
字母::=a|b|c|…|z
數(shù)字::=0|1|2|…|9
LP::=(
RP::=)
COMMA::=,
4 工具應(yīng)用
基于基本度量和組合運算,SAMT已經(jīng)可以表示多種體系結(jié)構(gòu)領(lǐng)域主流的組合度量,如構(gòu)件的扇入扇出消息數(shù)、角色間的輸入耦合、構(gòu)件動態(tài)復(fù)雜度和系統(tǒng)角色復(fù)雜性等。構(gòu)件的扇出消息數(shù)[4]是度量耦合時常用的一個組合度量。
為了減輕用戶定義度量的工作量和難度,SAMT預(yù)定義了十余種體系結(jié)構(gòu)度量領(lǐng)域主流的組合度量,如構(gòu)件的扇出消息數(shù)、構(gòu)件的扇入消息數(shù)、系統(tǒng)深度、角色間的輸出耦合、角色間的輸入耦合、構(gòu)件動態(tài)復(fù)雜度、系統(tǒng)消息復(fù)雜性和系統(tǒng)角色復(fù)雜性等。用戶可以基于這些預(yù)定義的組合度量和基本度量來定制組合度量,這樣可以方便用戶利用現(xiàn)有的研究成果,而不用總是基于基本度量來定制組合度量;同時可以對用戶定制組合度量提供一定的基礎(chǔ)和指導(dǎo),從而增強了該工具的實用性與易用性。
5 結(jié)束語
本文采用分解—組合的思想,定義了一組軟件體系結(jié)構(gòu)的基本度量,總結(jié)歸納了一組較為豐富的組合運算,設(shè)計并實現(xiàn)了一個支持度量定制的體系結(jié)構(gòu)度量工具SAMT。該工具能夠支持定制組合度量,提供用戶定制度量函數(shù)的存儲和擴展,并可方便地實現(xiàn)基本度量和組合運算的擴展。SAMT的實現(xiàn)在一定程度上解決了體系結(jié)構(gòu)度量領(lǐng)域存在的擴展支持不足的問題。目前,本研究對體系結(jié)構(gòu)的度量主要集中在其最基礎(chǔ)和最重要的行為和結(jié)構(gòu)特征上,而針對某些
特定領(lǐng)域如性能領(lǐng)域的度量,本研究還需進(jìn)一步擴展,從而支持體系結(jié)構(gòu)的其他特征。因此,在今后的工作中,還需要針對特定領(lǐng)域的特點,對SAMT支持的基本度量和組合運算進(jìn)行擴展,從而更好地滿足用戶需求。
參考文獻(xiàn):
[1]梅宏,申峻嶸.軟件體系結(jié)構(gòu)研究進(jìn)展[J].軟件學(xué)報,2006,17(6):12571275.
[2]OQUENDO F.πADL:an architecture description language based on the higherorder typed πcalculus for specifying dynamic and mobile software architectures[J].ACM SIGSOFT Software Engineering Notes,2004,29(3): 114.
[3]MUSKENS J,CHAUDRON M,LANGE C.Investigations in applying metrics to multiview architecture models[C]//Proc of the 30th EUROMICRO Conference.2004:372-379.
[4]BENGTSSON P.Towards maintainability metrics on software architecture:an adaptation of objectoriented metrics[C]//Proc of the1st Nordic Workshop on Software Architecture.Ronneby:[s.n.],1998.
[5]高暉,張莉.軟件體系結(jié)構(gòu)層次的結(jié)構(gòu)度量研究[J].計算機工程與應(yīng)用,2007,43(24):19-23. [6]NENONEN L,GUSTAFSSON J,PAAKKI J,et al.Measuring objectoriented software architectures from UML diagrams[R].Finland:Dept. of Computer Science,University of Helsinki,2000.
[7]YACOUB S M,AMMAR H H,ROBINSON T.Dynamic metrics for objectoriented designs[C]//Proc of the 6th Int’l Symp on Software Metrics.1999.
[8]GOSEVAPOPSTOJANOVA K,HASSAN A,GUEDEM A,et al.Architecturallevel risk analysis using UML[J].IEEE Trans on Software Engineering, 2003,29(10): 946-960.
[9]CLEMENTS P,BACHMANN F,BASS L.軟件構(gòu)架編檔[M].朱崇高,譯.北京:清華大學(xué)出版社, 2003.
[10]BASS L,CLEMENTS P,KAZMAN R.軟件構(gòu)架實踐[M].孫學(xué)濤,譯.北京:清華大學(xué)出版社, 2004.
[11]馮沖,江賀,馮靜芳.軟件體系結(jié)構(gòu)理論與實踐[M].北京:人民郵電出版社,2004.
[12]孫昌愛,金茂忠,劉超.軟件體系結(jié)構(gòu)研究綜述[J].軟件學(xué)報,2003,13(7):12281235.
[13]BUSCHMANN F,MEUNIER R,ROHNERT H,et al.面向模式的軟件體系結(jié)構(gòu) 卷1:模式系統(tǒng)[M].賁可榮,譯.北京:機械工業(yè)出版社,2003:30-41.
[14]BRITO F,ABREU E.The MOOD metric set[C]//Proc of the ECOOP’95 Workshop on Metrics.1995.
[15]LANKFORD J.Measuring system and software architecture complexity[C]//Proc of IEEE Aerospace Conference.2003