賀慧琳
(南華大學數(shù)理學院,湖南 衡陽 421001)
GO法在軟件體系結構可靠性分析中的應用*
賀慧琳
(南華大學數(shù)理學院,湖南 衡陽 421001)
GO法是一種系統(tǒng)可靠性分析方法,可將GO法應用到軟件體系結構的可靠性分析中。根據(jù)軟件體系結構自身的特點及構件之間的關系,分別建立了軟件體系結構六種基本結構的GO模型,并進行了定量GO運算。通過一個實例,說明了應用GO法對軟件體系結構的可靠性進行分析的全過程。實踐表明:運用定量GO運算能夠方便地計算出整個軟件體系結構的可靠度,通過定性GO分析還可評估各構件及連接件的重要性,對后期系統(tǒng)的設計與開發(fā)具有一定的指導意義。
GO法;可靠性分析;軟件體系結構
為了適應大規(guī)模、高復雜性軟件的開發(fā),20世紀90年代后,基于構件的軟件開發(fā)技術被廣泛應用,這是一種“構件開發(fā)+基于體系結構的構件組裝”的開發(fā)技術[1],這種開發(fā)技術將體系結構的開發(fā)作為系統(tǒng)開發(fā)過程的一個關鍵性環(huán)節(jié),它在軟件需求與軟件設計之間起到了橋梁的作用,軟件體系結構SA(Software Architectures)的好壞將會直接影響到軟件的質量。隨著人們對軟件質量的要求越來越高,軟件的可靠性作為衡量軟件質量的一個重要因素也受到了人們的重視。因此,對軟件體系結構的可靠性分析實際上就是在軟件開發(fā)早期對系統(tǒng)可靠性進行的評估,這使得人們能夠盡早發(fā)現(xiàn)系統(tǒng)中可能存在的問題,不僅有助于提高軟件的質量,而且對系統(tǒng)后期的開發(fā)具有一定的指導意義。
近年來,已有許多國內(nèi)外學者對軟件體系結構的可靠性進行了研究,并提出了一些基于軟件體系結構的可靠性模型,如Yacoub模型[2]、Wang模型[3]和毛曉光通用模型[4]。這些現(xiàn)有的模型可分為兩 類[5]:基 于路 徑 的 模 型[2]和 基于狀 態(tài) 的 模型[3,4]?;诼?徑的 模 型 通常 根 據(jù) 軟件 各 執(zhí) 行路徑的可靠性及執(zhí)行概率來計算軟件可靠性,容易出現(xiàn)路徑無窮長問題[4]。而基于狀態(tài)的模型通常假設構件的控制轉移行為具有馬爾科夫隨機性,利用Markov鏈來描述構件的狀態(tài)轉移,但未對構件間的確定性轉移行為進行分析,此外,當系統(tǒng)復雜性增加時,可能會出現(xiàn)狀態(tài)空間組合爆炸問題。以上兩類模型都沒有考慮軟件體系結構自身的結構特點,因此無法從組成軟件體系結構的基本結構出發(fā)來指導軟件體系結構的設計[6]。
GO法是一種以成功為導向的系統(tǒng)可靠性分析技術,多適用于有實際物流如電流的系統(tǒng)可靠性分析。GO法的主要步驟就是建立GO圖和進行GO運算,它通過對系統(tǒng)的分析來構造相應的模型,這個模型稱為GO圖,通常可根據(jù)系統(tǒng)流程圖、原理圖或結構圖來建立GO圖。GO圖主要由操作符和信號流組成,系統(tǒng)中的元件、部件或子系統(tǒng)可統(tǒng)稱為單元,操作符可用來代表單元功能和單元輸入、輸出信號之間的邏輯關系;而信號流則用于連接操作符生成GO圖,它表示系統(tǒng)單元的輸入和輸出以及單元之間的關聯(lián)。GO法定義了17種標準操作符[7],操作符的定義及運算規(guī)則詳見文獻[7~9]。
對于軟件體系結構的定義,目前學術界尚未形成統(tǒng)一的意見,但是,多數(shù)定義都強調(diào)了體系結構的基本要素是構件、連接件及其約束。其中,構件是指具有一定功能的軟件單元,連接件是構件之間的連接單元,用于建立構件間的交互,約束確定了體系結構的構件與連接件的連接關系。因構件和連接件被用于構建系統(tǒng)或軟件體系結構時所起的作用不同,構件與連接件不交;構件、連接件是一個體系結構,構件之間通過連接件經(jīng)有限次連接后仍是 一 個 體 系 結構[10]。
文獻[6]從軟件體系結構自身結構特征出發(fā),把整個軟件體系結構看作是由六種基本結構嵌套構成的。本文基于文獻[6]的理論,嘗試用GO法及故障樹法對軟件體系結構的六種基本結構及整個軟件體系結構進行可靠性建模,實現(xiàn)在軟件開發(fā)早期對軟件進行可靠性評估,并通過兩種方法的對比說明GO法應用與軟件可靠性分析的優(yōu)缺點。
根據(jù)SA自身的特點及構件之間的關系,可以把整個SA看作是由順序結構、與匯合結構、或匯合結構、與分支結構、或分支結構和迭代結構六種基本結構嵌套構成[6]。本節(jié)分別用 GO法和故障樹法對這六種基本結構進行可靠性建模。
在GO圖中,可用操作符代表構件和連接件,構件及連接件都有兩個狀態(tài),若能正常工作即為成功狀態(tài),若失效則為故障狀態(tài),因此構件和連接件可用類型1操作符表示。GO圖操作符中第一個數(shù)字表示操作符的類型,第二個數(shù)字表示操作符的編號,編號必須唯一,這里操作符及信息流的編號與構件、連接件的編號保持一致。
在故障樹法中,可將構件及連接件的失效作為故障事件。
用GO圖和故障樹法分析軟件體系結構可靠性的前提是必須已知構件和連接件的可靠性,通??捎蓸嫾_發(fā)者或供應商提供。
設PCi表示編號為Ci(即構件)的操作符的成功概率,PLi表示編號為Li(即連接件)的操作符的成功概率,PSi表示編號為i的信號流的成功概率,PR表示輸出信號流的成功概率,PS表示系統(tǒng)故障概率。設置操作符0作為虛擬輸入操作符,其成功概率為1,即P0=1。
(1)順序。
順序結構的SA如圖1a所示。SA由n個構件組成,n個構件連續(xù)處理能夠完成某個功能,當且僅當n個構件、連接件全部正常工作,系統(tǒng)才正常工作[6]。為順序結構建立的GO圖及故障樹如圖1b和圖1c所示。
Figure 1 Serial software architecture,its GO chart and fault tree圖1 順序型SA及其GO圖和故障樹
定量GO運算根據(jù)文獻[7~9]給出的各操作符運算規(guī)則,可得到各信號流成功概率的計算式:
根據(jù)圖1c所示故障樹得到系統(tǒng)故障概率計算式為:
(2)與匯合。
與匯合結構的SA如圖2a所示。SA由n+1個構件組成,由n個構件共同與某一構件協(xié)作來完成某個功能,當且僅當n+1個構件和n個連接件全部正常工作,系統(tǒng)才能正常工作[6]。n個構件之間的邏輯關系可用類型10與門操作符表示,為與匯合結構建立的 GO圖及故障樹如圖2b和圖2c所示。
同理可得信號流成功概率的計算式:,該公式與式(1)一致,表明由GO法
(3)或匯合。
或匯合的SA如圖3a所示。SA由n+1個構件組成,選擇n個構件中的任一構件和第n+1個構件協(xié)作就能夠完成某個功能,即只要構件Ci、連接件Li和 構 件Cn+1正常 工 作 時,系 統(tǒng) 才 正 常工作[6]。n個構件之間的邏輯關系可用類型2或門操作符表示,為或匯合結構建立的GO圖及故障樹
由故障樹求得系統(tǒng)故障概率計算式為:
如圖3b和圖3c所示。
Figure 2 And confluence software architecture,its GO chart and fault tree圖2 與匯合型SA及其GO圖和故障樹
同理可得信號流成功概率的計算式為:
由故障樹求得系統(tǒng)故障概率計算式為:
(4)與分支。
與分支的SA如圖4a所示。SA由n+1個構件組成,要經(jīng)過一個構件與n個構件共同來完成某個功能[6],系統(tǒng)正常 工 作 的 條 件是 構 件 C0和n條支路都正常工作。n條支路之間的邏輯關系可用類型10與門操作符表示,為與分支結構建立的GO圖及故障樹如圖4b和圖4c所示。
Figure 4 And branch software architecture,its GO chart and fault tree圖4 與分支型SA及其GO圖和故障樹
同理可得各信號流成功概率的計算式為:
上式中信號流Ci(i=1,…,n)不獨立,有共有信號C0,因此上式不成立,需要進行修正,根據(jù)文獻[7]的方法,可用共有信號概率的一次項代替其高次項來進行簡化,即是對共有信號項的修正,修正后的概率表達式為:
(5)或分支。
或分支的SA如圖5a所示。SA由n+1個構件組成,經(jīng)過一個構件與n個構件中的某一個構件共同來完成某個功能[6],系統(tǒng)正常工作的條件是構件C0能正常工作,且n條支路中至少有一條能正常工作。n條支路之間的邏輯關系可用類型2或門操作符表示,為或分支結構建立的GO圖及故障樹如圖5b和圖5c所示。
由故障樹求得系統(tǒng)故障概率計算式為:
Figure 5 Or branch type software architecture,its GO chart and fault tree圖5 或分支型SA及其GO圖和故障樹
此結構中也包含共有信號C0,共有信號修正方法與(4)相同。修正后的輸出信號流成功概率的計算式為:
(6)迭代。
迭代的SA如圖6a所示。SA由1個構件組成,某個功能是n次執(zhí)行該構件來完成,即當且僅當構件C、連接件L、遷移過程正常工作時,系統(tǒng)才正常[6]。為迭代結構建立的 GO圖及故障樹如圖6b和圖6c所示。
由故障樹求得系統(tǒng)故障概率計算式為:
Figure 6 Iteration software architecture,its GO chart and fault tree圖6 迭代型SA及其GO圖和故障樹
文獻[6]中迭代結構SA的可靠性等于構件與連接件可靠性乘積的n次冪,那么當n越大,則系統(tǒng)可靠性將越小,甚至可能趨近于0,這顯然不合理。GO運算考慮的是由 GO圖描述的系統(tǒng)結構的可靠性,由參考文獻[8,9]可得閉環(huán)系統(tǒng)的定量計算公式為(該公式不考慮部件的維修率):PR= PS0×PC1×PL1=PC1×PL1。如果要計算系統(tǒng)運行時的可靠性,在處理迭代結構時也不能簡單地將系統(tǒng)的可靠性計算為構件與連接件可靠性乘積的n次冪。
由故障樹求得系統(tǒng)故障概率計算式為:C1、L1,2和B構件組成的順序結構,其中B又可看成是由C2、L2,3、L2,4、C和D 組成的或分支,C是由C3、L3,5、L3,6、C5和C6構成的與分支,D是由C4、L4,7、L4,8、C7和C8構成的或匯合。
Figure 7 Software architecture diagram圖7 一個軟件體系結構圖
3.1 基于故障樹法的軟件體系結構可靠性分析
故障樹分析法是一種自頂向下識別系統(tǒng)故障的方法,它已被廣泛用于軟件的可靠性分析中,應用故障樹法分析軟件系統(tǒng)時,可從一個系統(tǒng)故障(頂事件)的失敗事件著手,來找到引發(fā)故障的所有可能因素(基本事件),通過自上而下地分析因素間的因果邏輯關系,并以圖形演繹方法建立軟件故障樹,最后根據(jù)建立的故障樹進行可靠性分析。
為圖7建立的故障樹如圖8所示。
Figure 8 Fault tree of figure 7圖8 圖7例子的故障樹
本節(jié)應用文獻 [6]的實例作為研究實例,如圖7所示,分別說明應用GO法和故障樹法對該SA進行可靠性分析的具體過程,并對兩種方法得出的結果進行對比分析。
圖7所示的軟件體系結構可看成是由構件
對圖8所示故障樹求取其最小割集為:{C1},{L1,2},{C2},{C1},{L2,3,C},{L2,3,D},{L2,4,C},{L2,4,D},{L2,3,L2,4}。
假設構件的可靠性分別為:PC1=0.97,PC2= 0.97,PC3=0.96,PC4=0.94,PC5=0.95,PC6= 0.95,PC7=0.90,PC8=0.90,連接件的可靠性分別為:PL1,2=0.97,PL2,3=0.95,PL2,4=0.92,PL3,5= 0.95,PL3,6=0.95,PL4,7=0.90,PL4,8=0.90。計算得到的系統(tǒng)故障率為:
PS=1—PC1×PL1,2×PC2×(1—(1—PL2,3×PC3×PL3,5×PC5×PL3,6×PC6)×(1—PL2,4×PC4×(1—(1—PC7×PL4,7)(1—PC8× PL4,8))))=0.1264
那么,系統(tǒng)成功概率為0.873 6。
3.2 基于GO法的軟件體系結構可靠性分析
用GO圖分析軟件體系結可靠性的前提是構件和連接件的可靠性已知。設構件Ci成功狀態(tài)概率為PCi,連接件Li的成功狀態(tài)概率為PLi。
3.2.1 定量計算
基于GO法的軟件體系結構可靠性分析步驟:第一步對系統(tǒng)軟件體系結構進行分解,通過遞歸的方法,每次依順序、與匯合、或匯合、與分支、或分支或迭代的形式,對系統(tǒng)的軟件體系結構自頂向下進行逐級分解,直至分解所得的每一個部分都只含有單一的順序、與匯合、或匯合、與分支、或分支或迭代結構為止[6]。第二步建立 GO圖,根據(jù)分解后的軟件體系結構建立GO圖,對于分解出來的各個部分可先建立GO子圖;然后用一個等效操作符代表相應的GO子圖,GO子圖的輸出信號流的成功概率作為等效操作符的成功概率;最后建立起整個軟件體系結構GO圖。第三步GO運算,根據(jù)建立的GO圖,進行GO運算。
下面以圖7所示軟件體系結構為例,說明應用GO法對該SA進行定量計算的具體過程,其步驟如下:
(1)對軟件體系結構進行逐級分解,分解結果如前所述。
(2)建立GO圖。通常對于分解出來的位于頂層的與分支或或分支結構可以不用建立GO子圖,而是將其直接畫在整體GO圖中;其他情況下,對于分解出來的與分支、或分支、與匯合、或匯合及迭代結構都應繪制GO子圖,因此為圖7中的C、D分別建立了GO子圖,如圖9a和圖9b所示,整個軟件體系結構的GO圖如圖9c所示,其中編號為C'3、C'4的操作符是圖9a、圖9b所示GO子圖的等效操作符。
(3)GO定量運算。假設的構件及連接件可靠性見3.1節(jié)。
上式中信號流C'3和C'4包含共有信號C2,因此在求信號流1的概率時需要進行修正,修正并代入后的計算式如式(3)所示,它也是SA的可靠性計算公式,它與文獻[6]中給出的計算公式相同,與故障樹分析結果一致。
Figure 9 GO chart and sub graphs for the software architecture圖9 軟件體系結構GO圖及其GO子圖
3.2.2 定性分析
GO法的特點之一就是可以應用操作符狀態(tài)概率計算式來直接定量計算系統(tǒng)狀態(tài)概率,而不必首先進行定性分析[7]。另外,對于兩狀態(tài)系統(tǒng),GO法可直接應用定量計算結果進行定性分析,得到系統(tǒng)最小割集。文獻[7]中給出了直接定性分析方法。對圖7采用文獻[7]中給出的方法求得最小割集,如表1所示,與故障樹法得到的最小割集一致。
Table 1 The minimal cut sets of the system表1 系統(tǒng)最小割集
最小割集中操作符故障狀態(tài)的組合代表系統(tǒng)功能部件故障事件的組合,最小割集的發(fā)生概率可用這些部件故障概率的乘積表示。計算得到系統(tǒng)最小割集發(fā)生概率的總和為0.136 6,這是系統(tǒng)故障概率的近似值,可作為系統(tǒng)故障概率的上限。進行系統(tǒng)定性分析時,可將最小割集的發(fā)生概率作為評價其重要度的依據(jù),對于發(fā)生概率高的最小割集中操作符代表的構件,在實際系統(tǒng)開發(fā)中應給予重點關注。
3.3 結果分析
相比文獻[6]的方法,本方法既可以對SA的可靠性進行定量計算,又可以進行定性分析,另外還可以利用GO圖直接進行定性GO分析[7]。本文提出的方法可在軟件開發(fā)的各階段對軟件可靠性進行分析。在開發(fā)早期,在構件及連接件可靠度已知的情況下,可通過定量GO運算對整個軟件體系結構的可靠性進行評估,而定性GO分析又可說明各構件及連接件的重要性,對后期系統(tǒng)的設計與開發(fā)具有一定的指導意義。在開發(fā)后期,同樣可通過定量GO運算計算整個軟件的可靠性,通過定性GO分析來分析系統(tǒng)故障原因。
當用GO圖模擬比較復雜的系統(tǒng)結構時,可以通過分解的方法,先建立GO子圖,再建立GO圖,降低GO圖的復雜性,從而降低分析的復雜性。另外借助Matlab工具可以實現(xiàn)簡便的定量計算。
對圖7采用故障樹法進行分析時,得到的最小割集及系統(tǒng)成功的概率計算結果與GO法分析結果一致。GO法最大的優(yōu)勢就是可以直接進行定量計算,而不需要事先求出最小割集;GO法能夠計算出各輸出信號流的成功概率,而故障樹法只能得到最終系統(tǒng)的故障概率;GO法是依照系統(tǒng)原理圖或結構圖來建模,對于不同的入建模型差別不會很大,方便檢查核對,而故障樹的建立受人為因素影響較大,不同的分析人員所建立的故障樹可能會有較大的差別。
GO法目前多用于工程系統(tǒng)可靠性分析,將GO法應用于軟件可靠性分析中尚處于研究階段。本文探討了如何將GO法應用于軟件體系結構的可靠性分析中,實踐證明,此方案是可行的。
當然方法也有缺陷,如,該方法被用在軟件開發(fā)早期對軟件進行可靠性評估時,進行定量GO運算須已知構件及連接件的可靠性數(shù)據(jù);由軟件體系結構建立GO圖目前還是手工建模;在對復雜系統(tǒng)進行建模時,雖然可以通過分解的方式降低建模的復雜度,但仍具有一定的難度,從而造成實用性較差;此外,構件的狀態(tài)遷移概率并沒有在 GO圖中反映出來。接下來的工作包括對GO圖進行擴展,將構件的狀態(tài)遷移屬性添加到GO圖中,使其更具有通用性;為建模過程的自動化提供方便有效的工具支持,使其更具有實用性。
[1] Feng Chong,Jiang He,F(xiàn)eng Jing-fang.The theory and practice of software architecture[M].Beijing:People's Posts and Telecommunications Publishing House,2004.(in Chinese)
[2] Yacoub S M,Cukic B,Ammar H H.A scenario-based reliability analysis approach for component-based software[J]. IEEE Transactions on Reliability,2004,53(4):465-480.
[3] Wang Wen-li,Pan Dai,Chen Mei-hwa.Architecture-based software reliability modeling[J].Journal of Systems and Software,2006,79(1):132-146.
[4] Mao Xiao-guang,Deng Yong-jin.A general model for component-based software reliability[J].Journal of Software,2004,15(1):27-32.(in Chinese)
[5] Gokhale S S.Architecture-based software reliability analysis:Overview and limitations[J].IEEE Transactions on Dependable and Secure Computing,2007,4(1):32-40.
[6] Zhou Na-qin,Zhang You-sheng.Reliability analysis based on software architecture[J].Computer Engineering and Applications,2008,44(30);68-71.(in Chinese)
[7] Shen Zu-pei,Huang Xiang-rui.Principle and application of GO methodology:A system reliability analysis methodology [M].Beijing:Tsinghua University Press,2004.(in Chinese)
[8] Wang Gui-li.System reliability analysis GO methodology and research[D].Harbin:Harbin Institute of Technology,2006. (in Chinese)
[9] Xu Zhi,Chen Bin-bing.Equivalent substitution idea for maintainable closed-loop system GO methodology[J].Communications Technology,2009,42(11):238-240.(in Chinese)
[10] Zhang You-sheng.Software architecture[M].2nd edition. Beijing:Tsinghua University Press,2006.(in Chinese)
附中文參考文獻:
[1] 馮沖,江賀,馮靜芳.軟件體系結構理論與實踐[M].北京:人民郵電出版社,2004.
[4] 毛曉光,鄧勇進.基于構件軟件的可靠性通用模型[J].軟件學報,2004,15(1):27-32.
[6] 周娜琴,張友生.基于軟件體系結構的可靠性分析[J].計算機工程與應用,2008,44(30):68-71.
[7] 沈祖培,黃祥瑞.GO法原理及應用:一種系統(tǒng)可靠性分析方法[M].北京:清華大學出版社,2004.
[8] 王桂麗.系統(tǒng)可靠性分析 GO法及其應用的研究[D].哈爾濱:哈爾濱工業(yè)大學,2006.
[9] 徐志,陳彬兵.可維修閉環(huán)系統(tǒng)GO法等效代換思路[J].通信技術,2009,42(11):238-240.
[10] 張友生.軟件體系結構[M].第2版.北京:清華大學出版社,2006.
賀慧琳(1980),女,湖南衡陽人,碩士,講 師,研 究方 向 為 系 統(tǒng) 可 靠 性。E-mail:hhl1998hhy@qq.com
HE Hui-lin,born in 1980,MS,lecturer,her research interest includes system reliability.
Application of the GO methodology in reliability analysis of software architecture
HE Hui-lin
(School of Mathematics&Physics,University of South China,Hengyang 421001,China)
The GO methodology is a method of system reliability analysis,which is applied in the reliability analysis of software architecture.Based on the characteristics of software architecture and the relationship among components,we build GO models with six basic structures,and conduct quantitative GO operations.We demonstrate the whole process of reliability analysis of software architecture using the GO methodology through an example.The practice indicates that the reliability of software architecture can be calculated through quantitative GO operations.The importance of components and connectors can be evaluated via qualitative GO analysis,which has a certain guiding significance for the design and development of the system.
GO methodology;reliability analysis;software architecture
TP302.7
A
10.3969/j.issn.1007-130X.2015.08.016
1007-130X(2015)08-1525-08
2014-05-23;
2014-12-02
湖南省衡陽市科技局基金資助項目(2013KJ19)
通信地址:421001湖南省衡陽市南華大學數(shù)理學院
Address:School of Mathematics&Physics,University of South China,Hengyang 421001,Hunan,P.R.China