黃鴻云,張 娟,丁佐華
(浙江理工大學(xué),a.信息學(xué)院;b.理學(xué)院,杭州 310018)
?
基于架構(gòu)的服務(wù)組合可靠性預(yù)測
黃鴻云a,張娟b,丁佐華a
(浙江理工大學(xué),a.信息學(xué)院;b.理學(xué)院,杭州 310018)
軟件可靠性是衡量軟件質(zhì)量的重要指標(biāo),而軟件架構(gòu)可以幫助預(yù)測軟件的可靠性。為了研究基于服務(wù)組件架構(gòu)的服務(wù)組合的可靠性計(jì)算,提出一種新的無需假設(shè)組件的失效是獨(dú)立的可靠性計(jì)算方法。根據(jù)服務(wù)組件架構(gòu)的端口執(zhí)行情況構(gòu)建Markov模型,并結(jié)合端口的失效數(shù)據(jù)來計(jì)算服務(wù)組合的可靠性。通過在線購物系統(tǒng)的可靠性計(jì)算論證方法的有效性。
服務(wù)組合;面向服務(wù)組件的架構(gòu);端口;可靠性;失效數(shù)據(jù)
在過去三十多年里,人們對軟件可靠性的計(jì)算進(jìn)行了較多的研究[1-9],其中一種計(jì)算模型是基于架構(gòu)的模型[5-9]。它不僅有助于基于組件的軟件開發(fā),同時(shí)還提供了一種可進(jìn)行早期軟件質(zhì)量預(yù)測的方法。因此,可以利用軟件架構(gòu)來預(yù)測基于組件的軟件的質(zhì)量。例如,Chen等[5]提出了一種分析系統(tǒng)可靠性的模型,該模型適合具有不同架構(gòu)層次的系統(tǒng)。此時(shí),系統(tǒng)的可靠性分析依賴于組件的可靠性和不同層次間的連接器。此外,通過利用不同組件間的變遷概率來考慮操作剖面。但是他們要求假設(shè)組件和連接器的可靠性和變遷概率是相互獨(dú)立的。單個(gè)組件的可靠性依賴于操作剖面和組件在系統(tǒng)的位置。系統(tǒng)可靠性的計(jì)算等價(jià)于組件執(zhí)行路徑的可靠性計(jì)算。執(zhí)行路徑的可靠性問題可以轉(zhuǎn)化為一個(gè)基于組件的問題[6]。路徑可靠性等于該路徑上執(zhí)行的組件的可靠性乘積。此時(shí),可靠性的計(jì)算需假設(shè)組件間的失效是相互獨(dú)立的以及接口的可靠性為1。Yacoub等[7]提出了一類關(guān)于基于組件的軟件的可靠性模型和可靠性分析技術(shù)。為了分析系統(tǒng)的可靠性,他們利用組件間的交互場景構(gòu)造稱為組件依賴圖(component-dependency graph,CDG)的概率模型。但是,CDG僅描述系統(tǒng)行為的序列模型,因此場景描述中的并發(fā)性質(zhì)丟失了。
本文提出了一種新的計(jì)算面向服務(wù)組件架構(gòu)(service component architecture,SCA)的服務(wù)組合的可靠性的方法。SCA的端口執(zhí)行構(gòu)成一個(gè)Markov鏈,端口映射為狀態(tài),則狀態(tài)的可靠性即為端口的可靠性。于是,給定端口的失效數(shù)據(jù)即可在設(shè)計(jì)階段預(yù)測系統(tǒng)的可靠性。另外,當(dāng)系統(tǒng)在運(yùn)行時(shí),還可以獲得實(shí)際失效數(shù)據(jù)。因此,所提方法能夠從設(shè)計(jì)階段到實(shí)施階段提高系統(tǒng)的可靠性。一旦完成了組件的設(shè)計(jì),同時(shí)也獲得了可靠性計(jì)算公式;在實(shí)施之后,通過測試和失效密度分析,可以確定公式中個(gè)參數(shù)的具體值。該方法無需假設(shè)組件間的失效是相互獨(dú)立的。
Cheung[10]提出的基于組件的可靠性模型同時(shí)考慮了組件的可靠性和操作剖面,該模型使用描述系統(tǒng)行為的狀態(tài)圖。狀態(tài)代表單個(gè)組件的執(zhí)行,從一個(gè)狀態(tài)到另一個(gè)狀態(tài)的轉(zhuǎn)移概率從系統(tǒng)的操作剖面獲得。系統(tǒng)的可靠性依賴于狀態(tài)的執(zhí)行序列和單個(gè)狀態(tài)的可靠性。
假設(shè)一個(gè)系統(tǒng)由3個(gè)組件構(gòu)成,組件間的通信如圖1所示。A、B為組件1的2個(gè)端口,C1、C2、S是組件2的3個(gè)端口,D、E是組件3的2個(gè)端口。組件1通過端口B將控制傳遞給組件2,組件2通過端口C2將控制傳遞給組件3,而組件3通過端口E將控制傳遞給組件1。
圖1 具有3個(gè)組件的系統(tǒng)
在文獻(xiàn)[11-12]提出的方法中,假設(shè)不同組件間的控制切換具有Markov性質(zhì),則組件架構(gòu)可以用離散時(shí)間Markov鏈(discrete time markov chain,DTMC)進(jìn)行建模,其中狀態(tài)表示活動(dòng)組件,有向弧表示控制的切換。圖2(a)給出了上述系統(tǒng)的具有3個(gè)狀態(tài)的Markov鏈。該方法將組件作為原子單元而忽略了端口間的交互。如果考慮端口的交互作用,則無需假設(shè)組件的失效是相互獨(dú)立的,得到的Markov模型如圖2(b)所示,它有6個(gè)狀態(tài)。
圖2 組件架構(gòu)到Markov鏈的映射
SCA模型[13]的提出使得基于服務(wù)的系統(tǒng)的實(shí)施變得更為容易,它提供一種定義和構(gòu)建服務(wù)組件的方法,是諸如BPLE等服務(wù)組合語言的補(bǔ)充,使得開發(fā)者能夠更加方便、有效地開發(fā)服務(wù)。但是SCA組裝模型[13]缺乏形式化定義。因此,在以前工作中[14],形式化定義了SCA模型。
定義1[14]:端口p是一個(gè)三元組(M,t,c),M表示p中的有限方法集,t表示端口類型(provided或required),c表示通信類型(同步或異步)。
定義2[14]:組件Com是一個(gè)四元組(Pp, Pr, G, W),其中Pp是有限provided端口集;Pr是有限r(nóng)equired端口集;G是有限子組件集合;W?TP×∪C∈G(C.Pp∪C.Pr)表示非自反的端口關(guān)系,其中TP=Pp∪Pr∪(∪C∈G(C.Pp∪C.P)r),C.Pp和C.Pr分別表示子組件C的provided端口集合和required端口集合。
因?yàn)槎丝谟脕硖幚硎录?,因此可用端口活?dòng)來描述組件的動(dòng)態(tài)行為。組件的動(dòng)態(tài)行為表達(dá)式可定義為:BE::=
此表達(dá)式包含如下結(jié)構(gòu):序列化、選擇、循環(huán)、并發(fā)和不確定。p·m表示端口p同步發(fā)送消息m,p1·mp2表示端口p1同步發(fā)送消息m給端口p2。BE[p1→p2]表示不同組件的端口的綁定操作,具體定義為:
其中⊙∈{·m,°m,◆m,◇m}。
自動(dòng)綁定集合定義為:
Mw(Com1,Com2)={(p1,p2)|p1∈Mp(Com1,Com2)∧p2=(p1.M,provided,p1.c)}。
于是,自動(dòng)組合可定義為:
c)G=G1∪G2;
d)W=Mw∪{(p,p)|p∈Pp∪Pr};
e)BE=(BE1?BE2)[Mw]。
其中Mp和Mw分別是Mp(Com1,Com2),Mw(Com1,Com2)的縮寫。
顯然,根據(jù)定義,兩個(gè)組件的組合還是一個(gè)組件。
3.1Markov模型
則整個(gè)系統(tǒng)的可靠性計(jì)算公式為:
R=T(1,n)×Rn,
Cheung[10]提出的模型只有一個(gè)初始狀態(tài)和一個(gè)終止?fàn)顟B(tài)。對于具有多個(gè)初始狀態(tài)和多個(gè)終止?fàn)顟B(tài)的大型系統(tǒng),可以通過在狀態(tài)圖中引入一個(gè)超初始狀態(tài)和超終止?fàn)顟B(tài)將多初始狀態(tài)多終止?fàn)顟B(tài)問題轉(zhuǎn)化為單初始狀態(tài)單終止?fàn)顟B(tài)問題。
定義4:有限狀態(tài)機(jī)是一個(gè)5元組(Σ,S,s0,δ,F),其中:
a)Σ是有限輸入字符(有限非空符號集);
b)S表示有限非空狀態(tài)集;
c)s0表示系統(tǒng)的初始狀態(tài),s0∈S;
d)δ表示狀態(tài)變遷函數(shù),δ:S→S;
e)F表示終止?fàn)顟B(tài)集合,是S的一個(gè)字跡(可以為空)。
Markov鏈?zhǔn)沁@樣一個(gè)有限狀態(tài)機(jī):每個(gè)變遷都附加了一個(gè)概率,且到下一個(gè)狀態(tài)的轉(zhuǎn)移概率僅依賴于當(dāng)前狀態(tài)。對于離散時(shí)間Markov鏈,變遷僅發(fā)生在離散時(shí)間間隔或離散事件,變遷概率服從離散分布。因此,離散時(shí)間Markov鏈包含:
a)n個(gè)狀態(tài)組成的有限狀態(tài)集合,S={s1,…,sn};
3.2從SCA建立Markov鏈的算法
根據(jù)端口的語義,可以通過計(jì)算SCA模型中所有的可達(dá)狀態(tài)來建立有限狀態(tài)機(jī)。下面給出了針對3個(gè)組件的組合的可達(dá)狀態(tài)計(jì)算算法。令Com1、Com2、Com3為3個(gè)組件,它們對應(yīng)的動(dòng)態(tài)行為表達(dá)分別為BE1、BE2和BE3。
算法*注:本文只列出BE1和BE2間存在綁定的6種情況;事實(shí)上,綁定還可以在BE1和BE3之間,也可以在BE2和BE3間,故共有18種情況。:建立服務(wù)組合的可達(dá)狀態(tài)
輸入:Com1、Com2、Com3
輸出:可達(dá)狀態(tài)RS
Begin1Mw={p'→p″};ε=?;i=1;j=1;k=12BE1=x1☉2☉…☉xn1☉;BE2=y1☉y2☉…☉yn2☉;BE3=z1☉z2☉…☉zn3☉3(BE1‖BE2‖BE3)[Mw]=BE1[Mw]‖BE2[Mw]‖BE3[Mw]=x1☉x2☉…☉xn1☉[Mw]‖y1☉y2☉…☉yn2☉[Mw]‖z1☉z2☉…☉zn3☉[Mw]=x1☉[Mw]x2☉[Mw]…xn1☉[Mw]‖y1☉[Mw]y2☉[Mw]…yn2☉[Mw]‖z1☉[Mw]z2☉[Mw]…zn3☉[Mw]4while(i<=n1&&j<=n2&&k<=n3)5 if(xi·m=p'&&yjm=p″)6 RS((BE1‖BE2‖BE3)[Mw])=RS(xi+1;…[Mw]‖yi+1;…[Mw]‖zk;zk+1;…[Mw])7 RS=RS→(xi,yj,zk)→{(xi+1,yj,zk)‖(xi,yj+1,zk)}8 i++;j++9 endif10 if(xi·m≠p'&&yjm=p″)11 RS((BE1‖BE2‖BE3)[Mw])=RS((xi·m[p'→p″]);(yjm;yj+1…[Mw]‖xi+1;…[Mw])‖zk;zk+1…[Mw]);12 RS=RS→{(xi,yj,zk+1)→};13 i++;j++;14 endif15 if(xi·m≠p'&&yjm≠p″)16 RS((BE1‖BE2‖BE3)[Mw]) =χ1(BE)RS((yjm;(yj+1…xi;…))[Mw]‖zk;…[Mw])+χ2(BE')RS((xi·m;(xi+1…‖yj;…))[Mw]‖zk;…[Mw]);BE=(yjm;(yj+1…‖xi;…))‖zk;…,BE'=(xi·m;(xi+1…‖yj;…))‖zk;…;17 i++;j++;18 endif19 if(xi◆m=p'&&yj◇m=p″)
20 RS((BE1‖BE2‖BE3)[Mw])=RS(xi◆m[p'→p″];xi+1[p'→p″];…‖yjm[p'→p″];yj+1[p'→p″];…‖zk; zk+1…[Mw]‖
根據(jù)上述算法,可以計(jì)算可達(dá)狀態(tài)并建立有限狀態(tài)機(jī);但是,狀態(tài)間的轉(zhuǎn)移概率和各狀態(tài)的可靠性還需要在后面通過測試進(jìn)行配置。
4.1配置狀態(tài)間的轉(zhuǎn)移概率
在軟件開發(fā)的后期,當(dāng)測試或者領(lǐng)域數(shù)據(jù)可以使用時(shí),組件軌跡可以通過分析工具獲得,而測試覆蓋工具用來獲得一系列執(zhí)行軌跡和變遷弧的頻數(shù)。需要說明的是,每個(gè)變遷的概率必須包含軌跡的重復(fù)次數(shù)。
4.2配置狀態(tài)的可靠性
兩個(gè)服務(wù)的交互的特點(diǎn)包含如下3個(gè)屬性:伙伴鏈接、端口類型以及操作。服務(wù)組合的后期綁定可以通過將服務(wù)的結(jié)束點(diǎn)分配給伙伴鏈接而獲得。如果將服務(wù)看作是組件,則可以定義包含這3個(gè)屬性的端口,如此對服務(wù)組合的測試實(shí)際上就是對端口交互的測試。于是,服務(wù)組合的可靠性依賴于端口的交互行為,或者端口可靠性。狀態(tài)的可靠性可以通過下述方法進(jìn)行計(jì)算。假設(shè)某個(gè)狀態(tài)關(guān)聯(lián)了端口集(p1,p2,p3)。在測試階段可以獲得端口p1,p2,p3的失效,所有這些失效合在一起就是該狀態(tài)的失效。這也是和傳統(tǒng)的狀態(tài)的可靠性計(jì)算方法的不同之處。注意,本文考慮的是一個(gè)狀態(tài)對應(yīng)一個(gè)來自不同組件的端口的組合;如果一個(gè)狀態(tài)有好幾個(gè)不同的端口組合,則可用隱式Markov鏈計(jì)算系統(tǒng)的可靠性。
獲取失效數(shù)據(jù)的方法之一是監(jiān)測每個(gè)端口中變量的所有值,并判斷這些值是否在預(yù)期的范圍內(nèi)。另一種方法是利用程序不變量,而程序不變量可以用Daikon工具獲得,于是每個(gè)端口中“不好”的不變量就可以當(dāng)作失效數(shù)據(jù)[15]。
本文通過一個(gè)在線購物系統(tǒng)的例子來介紹所提出模型的使用。雖然該系統(tǒng)是一個(gè)簡化的版本,但是它還是包含了如下結(jié)構(gòu):序列化、選擇、循環(huán)和并行。
在實(shí)現(xiàn)時(shí),首先創(chuàng)建組件,定義接口,然后將這些組件綁定到一起并用BPEL編輯器來實(shí)現(xiàn)。本文利用IBM WebSphere Integration Developer來開發(fā)BPEL的自主服務(wù)綁定。如此,在服務(wù)選擇之后,服務(wù)綁定可以自動(dòng)完成。通過將SCA模型映射為完整的J2EE應(yīng)用包來部署應(yīng)用,Java應(yīng)用可由Tomcat和SQL數(shù)據(jù)庫來實(shí)現(xiàn)。
圖3 在線購物系統(tǒng)的SCA
原子組件C11的端口定義為:
synchronous),
required,synchronous),
原子組件C12的端口定義為:
provided,synchronous)
provided,synchronous)
c)G1={},
此外,假設(shè)運(yùn)輸服務(wù)提供者Cds提供的服務(wù)為:BEds=pshippingAlways◇?b?pshipping°;pstatus°;pstop◇;信用卡檢查服務(wù)提供者Ccs提供的服務(wù)為:BEcs=pcardcheck°。
令端口的關(guān)系集為:
則在線購物系統(tǒng)的動(dòng)態(tài)行為語義模型(記作SCAonline)為:
SCAonline=C1⊕C2⊕C3⊕Cds⊕Ccs.
其行為表達(dá)為:
BE=(BE1‖BE2‖BE3‖BEds‖BEcs)[Mw]
=BE1[Mw]‖BE2[Mw]‖BE3[Mw]‖
BEds[Mw]‖BEcs[Mw].
其次,根據(jù)測試可獲得運(yùn)行軌跡,于是有:
I=User-Inputs};
BE1=BE11‖BE12
BE2=BE21‖BE22
根據(jù)可達(dá)狀態(tài),可獲得對應(yīng)的Markob鏈模型,如圖4所示。其中R1表示進(jìn)入狀態(tài)的可靠性,R15表示退出狀態(tài)的可靠性,概率矩陣為:
圖4 在線購物系統(tǒng)對應(yīng)的Markov鏈可靠性模型
因此,遷移矩陣為:
其中:R1=0.9812,R2=0.9943,R3=0.9932,R4=0.9961,R5=0.9903,R6=0.9973,R7=0.9906,R8=0.9983,R9=0.9953,R10=0.9975,R11=0.9946,R12=0.9952,R13=0.9934,R14=0.9878,R15=0.9978。
因此,根據(jù)可靠性計(jì)算公式有:T(1,15)=0.9484,R=T(1,15)*0.9978=0.9436。
本文提出了一種新的計(jì)算面向服務(wù)系統(tǒng)的可靠性方法。利用面向服務(wù)組件的架構(gòu),構(gòu)建了Markov可靠性模型,它可在測試階段重新配置。該方法的優(yōu)點(diǎn)在于無需假設(shè)組件的失效是獨(dú)立的。其次,考慮失效數(shù)據(jù)的獲得,所提方法和已有方法是一個(gè)均衡過程。對于已有的基于組件的可靠性模型,因?yàn)槭?shù)據(jù)來自組件,所以容易測試,但是無法反應(yīng)內(nèi)部的錯(cuò)誤,因?yàn)閷τ谝粋€(gè)輸入,只有一個(gè)輸出;對于本文提出的模型,失效數(shù)據(jù)來自端口,故能反應(yīng)系統(tǒng)內(nèi)部錯(cuò)誤信息,但是需要增加額外的測試工作。
[1]CHENM,LYUMR,WONGWE.Effectofcodecoverageonsoftwarereliabilitymeasurement[J].IEEETransactionsonReliability, 2001, 50(2): 165-170.
[2]HAMLETD.Arewetestingfortruereliability[J].Software,IEEE, 1992, 9(4): 21-27.
[3]KRISHNAMURTHYS,MATHURAP.Ontheestimationofreliabilityofasoftwaresystemusingreliabilitiesofitscomponents[C]//SoftwareReliabilityEngineering, 1997.Proceedings,TheEighthInternationalSymposiumon.IEEE, 1997: 146-155.
[4]LITTLEWOODB.Softwarereliabilitymodeledformodularprogramstructure[J].IEEETransactionsonReliability, 1979, 28(3): 241-246.
[5]MAJ,CHENH.Areliabilityevaluationframeworkoncompositewebservice[C]//Service-OrientedSystemEngineering, 2008.SOSE′08.IEEEInternationalSymposiumon.IEEE, 2008: 123-128.
[6]DOLBECJ,SHEPARDT.Acomponentbasedsoftwarereliabilitymodel[C]//Proceedingsofthe1995conferenceoftheCentreforAdvancedStudiesonCollaborativeresearch.IBMPress, 1995:19-29.
[7]YACOUBS,CUKICB,AMMARHH.Ascenario-basedreliabilityanalysisapproachforcomponent-basedsoftware[J].IEEETransactionsonReliability, 2004, 53(4): 465-480.
[8]GOKHALESS,WONGWE,TrivediKS,etal.Ananalyticalapproachtoarchitecture-basedsoftwarereliabilityprediction[C]//ComputerPerformanceandDependabilitySymposium, 1998.IPDS′98.Proceedings.IEEEInternational.IEEE, 1998: 13-22.
[9]WANGW,PAND,CHENM.Architecture-basedsoftwarereliabilitymodeling[J].TheJournalofSystemandSoftware, 2006, 79(1): 132-146.
[10]CHEUNGRC.AUser-OrientedSoftwareReliabilityModel[J].IEEETransitionsonSoftwareEngineering, 1980, 6(2):118-125.
[11]GOSEVAPK,TRIVEDIKS.Architecture-basedapproachtoreliabilityassessmentofsoftwaresystems[J].PerformanceEvaluation, 2001, 45(2): 179-204.
[12]GOSEVAPK,MATHURAP,TrivediKS.Comparisonofarchitecture-basedsoftwarereliabilitymodels[C]//SoftwareReliabilityEngineering, 2001.ISSRE2001.Proceedings. 12thInternationalSymposiumon.IEEE, 2001: 22-31.
[13]CHAPMANM,EDWARDSM,BEISIEGELM,etal.Servicecomponentarchitectureassemblymodespecificationversion1.1[R].Technicalreport,OASIS, 2011.
[14]DINGZH,CHENZ,LIUJ.Arigorousmodelofservicecomponentarchitecture[J].ElectronicNotesinTheoreticalComputerScience, 2008, 207: 33-48.
(責(zé)任編輯: 陳和榜)
Architecture-based Prediciton of Service Combination Reliability
HUANGHongyuna,ZHANGJuanb,DINGZuohuaa
(a. School of Information Science and Technology; b.School of Science,Zhejiang Sci-Tech University, Hangzhou 310018, China)
Software reliability is an important index to measure the quality of software, while software architecture can help us to predict the software reliability. In order to study reliability of service combination based on Service Component Architecture (SCA), a new method is proposed, which needs not assume that component failures are independent. Markov model is built based on the execution of ports of SCA. Then, reliability of service combination is calculated in the combination of failure data of ports. The effectiveness of the method is demonstrated through the reliability calculation of an online shopping system.
service combination; architecture oriented to service component; port; reliability; failure data
10.3969/j.issn.1673-3851.2016.01.014
2015-02-27
國家自然科學(xué)基金項(xiàng)目(61210004,61170015)
黃鴻云(1977-),女,江蘇如皋人,碩士研究生,主要從事軟件工程方面的研究。
丁佐華,E-mail:zouhuading@hotmail.com
TP311.5
A
1673- 3851 (2016) 01- 0084- 09 引用頁碼: 010602