段明璐
(華北計(jì)算技術(shù)研究所 軟件測(cè)評(píng)中心,北京 100083)
科技在發(fā)展,軟件已經(jīng)漸漸隨著信息化的普及而與我們的生活密不可分,然而,它的生產(chǎn)過程又和其他產(chǎn)品有很大不同。不管是國(guó)家級(jí)的軟件項(xiàng)目還是個(gè)人開發(fā)的共享軟件,都或多或少地存在各種各樣的缺陷,我們不可能對(duì)所有缺陷都進(jìn)行關(guān)注和修復(fù),但有的缺陷帶來的惡劣后果是大到我們無(wú)法接受的,甚至?xí)斐芍T如人員傷亡、財(cái)產(chǎn)損失的重大事故,比如 1996年歐洲的 Ariane火箭,由于程序溢出引起了爆炸,又如90年代美國(guó)Therac25型放射治療儀軟件,由于設(shè)計(jì)缺陷導(dǎo)致了群體死亡事件的發(fā)生,我們必須想辦法盡量避免此類問題的產(chǎn)生[1]。
很多軟件公司試圖在軟件交付用戶之前找到所有的缺陷進(jìn)行修復(fù),但這是不現(xiàn)實(shí)的,因?yàn)檫@依賴于成本、進(jìn)度、資源等諸多因素。因此開發(fā)者應(yīng)該對(duì)缺陷進(jìn)行分析,依據(jù)分析結(jié)果來確定可能導(dǎo)致嚴(yán)重問題的因素和模塊,這樣就可以有針對(duì)性的調(diào)整準(zhǔn)則規(guī)范、測(cè)試范圍和測(cè)試程度,以此來杜絕同類缺陷的再次發(fā)生,在成本進(jìn)度與質(zhì)量之間找尋一個(gè)相對(duì)合理的平衡點(diǎn),由此判斷何時(shí)軟件可以相對(duì)成熟的交付給用戶使用[2]。
本文的主要目的是依據(jù)筆者經(jīng)歷過的大型項(xiàng)目中出現(xiàn)過的典型重要缺陷類別,結(jié)合故障樹建模方式構(gòu)建一個(gè)基于貝葉斯算法的典型軟件故障樹算法分析模型,在缺陷數(shù)據(jù)的基礎(chǔ)上,探索出適合大型軟件測(cè)試使用的、質(zhì)量要求高的、基于貝葉斯網(wǎng)絡(luò)的軟件故障樹建模及分析方法。用于降低國(guó)內(nèi)軟件企業(yè)在大型項(xiàng)目中對(duì)重要缺陷分析的難度和成本,為其他單位使用軟件故障樹分析的方法進(jìn)行缺陷分析開拓思路、提供參考。
1.1.1 基本概念
軟件故障樹分析法是把軟件系統(tǒng)及其應(yīng)用環(huán)境看成一個(gè)整體來考量的分析方法,其最終目的是為了找到包含在軟件設(shè)計(jì)和實(shí)現(xiàn)中的可能導(dǎo)致軟件系統(tǒng)發(fā)生故障的錯(cuò)誤,并且會(huì)導(dǎo)致軟件系統(tǒng)功能失效的環(huán)境條件[3]。
軟件故障樹分析方法一般有以下兩種應(yīng)用情況:
(a)對(duì)軟件系統(tǒng)已發(fā)現(xiàn)的重大缺陷進(jìn)行分析,以便找到導(dǎo)致其產(chǎn)生的根本原因,及時(shí)制定糾正措施;
(b)在項(xiàng)目前期,針對(duì)用戶使用中可能造成嚴(yán)重后果的情況或是用戶最在意最擔(dān)心出現(xiàn)的情況進(jìn)行分析,在可能導(dǎo)致這種情況產(chǎn)生的模塊中加強(qiáng)設(shè)計(jì)規(guī)范檢查或是測(cè)試,從根本上扼殺出現(xiàn)這些情況的可能性。
軟件故障樹分析法使用的基本符號(hào)與一般故障樹是一樣的,具體符號(hào)及其意義[4]如表1所示。
用簡(jiǎn)化的方式來描述,軟件故障樹分析法就是把軟件使用中最不希望出現(xiàn)的嚴(yán)重缺陷作為軟件系統(tǒng)故障的分析對(duì)象,然后尋找會(huì)直接導(dǎo)致此類缺陷發(fā)生的全部因素,再繼續(xù)找出直接造成下一級(jí)事件發(fā)生的全部因素,直到跟蹤到無(wú)需再探明其發(fā)生原因的因素為止。
產(chǎn)生這個(gè)最不希望出現(xiàn)的嚴(yán)重缺陷的事件,我們稱之為“頂事件”,也就是軟件故障樹的“樹根”,用規(guī)定的邏輯符號(hào)表示。而最終無(wú)需再探明其發(fā)生原因的因素事件稱為“底事件”,也叫“基本事件”。在找出所有可能導(dǎo)致這一缺陷產(chǎn)生的直接因素和原因的過程中,那些介于頂事件與底事件之間的事件稱為“中間事件”。
表1 故障樹的基本圖元表Tab.1 The basic sign of fault tree
對(duì)于所有的故障樹而言,不管它的層次有多深,包含的因素有多復(fù)雜,它都只有三個(gè)邏輯層次,即頂事件-最小割集-底事件[5]。
1.1.2 建模方法
故障樹建模的最初流程是要確定故障樹的分析范圍,包括可能產(chǎn)生的事件,也包含所分析的問題、系統(tǒng)設(shè)計(jì)的水平、系統(tǒng)的使用層面、其它的運(yùn)行環(huán)境條件等細(xì)節(jié)。故障樹應(yīng)以能清晰地表示導(dǎo)致頂事件發(fā)生的各結(jié)構(gòu)事件的形式構(gòu)建。
當(dāng)明確定義了頂事件、系統(tǒng)的類型和分析的范圍后,故障樹就可自上而下的進(jìn)行構(gòu)建了。從頂事件開始分析其導(dǎo)致發(fā)生的直接事件,并通過適當(dāng)?shù)拈T建模和表示。然后這些事件又成為起因,逐層地展開各自的原因事件。每個(gè)事件分別自上而下地發(fā)展各自的故障樹,當(dāng)達(dá)到最底事件時(shí),故障樹的構(gòu)建就完成了[6]。
故障樹分析隨著事件自頂向下逐步展開,并確定事件的原因。故障樹分析可采用定性的分析或定量的分析,或者兩者混合使用。應(yīng)用故障樹分析的定量分析可確定哪些事件對(duì)頂事件有較大影響及一些高概率事件發(fā)生的原因。例如,若系統(tǒng)中某一模塊的故障發(fā)生概率較高,對(duì)系統(tǒng)故障的影響較大,那么便可對(duì)其原因進(jìn)行調(diào)查分析,找出其明確的原因,減小其失效模式的影響。舉例簡(jiǎn)單說明,未在界面中對(duì)特殊字符做校驗(yàn)這個(gè)問題對(duì)界面系統(tǒng)故障概率有較大影響,那么編寫相應(yīng)的測(cè)試用例校驗(yàn)界面可減小保存操作的故障概率,系統(tǒng)的故障概率也隨之減小。
1.2.1 基本概念
貝葉斯網(wǎng)絡(luò)[7-9]是一種結(jié)合圖論和概率論來闡述知識(shí)的方法,通過這種方法建立的模型是可以進(jìn)行概率計(jì)算的。從直觀上描述,貝葉斯網(wǎng)絡(luò)就是一個(gè)賦值的復(fù)雜因果關(guān)系網(wǎng)絡(luò)圖,網(wǎng)絡(luò)中的每個(gè)節(jié)點(diǎn)代表了一個(gè)事件,各事件之間的弧表示事件發(fā)生的因果關(guān)系。
下面介紹貝葉斯網(wǎng)絡(luò)的基本概念:
(1)隨機(jī)變量的屬性
包括兩類屬性,即變量的狀態(tài)和概率。
(2)條件概率
假設(shè)事件A和事件B之間不是相互獨(dú)立的,且已知事件B發(fā)生,我們可以得到 P ( A)的相關(guān)信息,即A在B中的條件概率 P ( A | B):
(3)先驗(yàn)概率和后驗(yàn)概率
無(wú)條件概率 P ( A)被稱為先驗(yàn)概率,它一般是根據(jù)之前的經(jīng)驗(yàn)數(shù)據(jù)分析得到的概率,在全概率公式中是“持因求果”問題中的因;而條件概率 P ( A |B )則被稱為后驗(yàn)概率,是在已知結(jié)果信息的情況下對(duì)概率的修正,是“由果尋因”問題中的因,相比先驗(yàn)概率,后驗(yàn)概率是基于最新信息對(duì)原概率估計(jì)的更接近實(shí)際情況的修正。
(4)聯(lián)合概率
假設(shè)事件 A和事件 B同時(shí)發(fā)生,那這個(gè)概率P( A ∩ B)就被叫做A和B的聯(lián)合概率。
(5)相關(guān)公理
1. 所有事件A的概率均滿足0<= P ( A)<=1;
2. P( Ω )=1;
3. 假設(shè)事件A和事件B相互獨(dú)立,則
(6)條件獨(dú)立性
如果 P ( AB)= P ( A ) P( B),則可判斷事件A和事件B之間是相互獨(dú)立的。
(7)乘法規(guī)則
(8)貝葉斯定理
假設(shè)空間S包含有n個(gè)互斥事件,每個(gè)事件被稱為S的一個(gè)劃分:
對(duì)于 S中的任意一個(gè)事件B,可以描述為由 n個(gè)不相交事件1BA,2BA,3BA,...,nBA組成,即:
轉(zhuǎn)化為全概率定律可以表示為:
進(jìn)一步結(jié)合條件概率就可以得到貝葉斯公式[10]:
其中 P (A1), P ( A2),..., P ( An)是在初始就知道得到它們以概率分布的形式,這就是先驗(yàn)分布。假設(shè)在求果的過程中事件 B發(fā)生了,這就導(dǎo)致事件A1,A2,A3,…,An產(chǎn)生的概率出現(xiàn)變化,也就是P( Ai | B),這個(gè)概率由式6可以得出,它是在發(fā)生變化之后對(duì)原先估計(jì)修正得出的,因此是后驗(yàn)概率。P( A1|B),P( A2|B),…, P ( An|B)形成了一類分布,也就是后驗(yàn)分布。它結(jié)合了先驗(yàn)概率和求果過程中的新變化,形成了關(guān)于事件A發(fā)生概率的最新信息。這個(gè)由先驗(yàn)概率向后驗(yàn)概率的轉(zhuǎn)化,就是貝葉斯統(tǒng)計(jì)方法最主要的特征。
1.2.2 貝葉斯網(wǎng)絡(luò)的建立方法
貝葉斯網(wǎng)絡(luò)是由有向無(wú)環(huán)圖和條件概率表[11]兩部分組成的,圖1就是一個(gè)簡(jiǎn)單的貝葉斯網(wǎng)絡(luò)。
圖1 典型貝葉斯網(wǎng)絡(luò)圖Fig.1 The classic bayesian network
(1)有向無(wú)環(huán)圖:Directed Acyclic Gragh,簡(jiǎn)稱DAG,屬于貝葉斯網(wǎng)絡(luò)的定性部分,其中節(jié)點(diǎn)代表隨機(jī)變量,可以解釋為任何事物的抽象,節(jié)點(diǎn)具有以下特點(diǎn):
1. 所有節(jié)點(diǎn)可以是連續(xù)或是離散的;
2. 所有節(jié)點(diǎn)可以有兩個(gè)或者更多的狀態(tài);
3. 所有節(jié)點(diǎn)可以是確定型的或是可能型的。
而節(jié)點(diǎn)之間的有向邊則代表了節(jié)點(diǎn)的因果關(guān)系,貝葉斯網(wǎng)絡(luò)規(guī)定了圖中每個(gè)節(jié)點(diǎn) X i與由其父節(jié)點(diǎn)給定的非 X i后代節(jié)點(diǎn)構(gòu)建的節(jié)點(diǎn)子集條件獨(dú)立,也就是說如果用 M ( X i)表示非 X i后代節(jié)點(diǎn)構(gòu)建的節(jié)點(diǎn)子集,用 P a( X i ) 表示 X i的父節(jié)點(diǎn),則可得出條件獨(dú)立性假設(shè)公式[12]:
(2)條件概率分布:CPD,屬于貝葉斯網(wǎng)絡(luò)的定量部分。
條件概率表:Conditional Probability Table,簡(jiǎn)稱CPT,是反映變量間是否存在關(guān)聯(lián)的概率分布集合,可以用式(8)中的 P a( X i | P a( X i) )來表示,它表達(dá)了節(jié)點(diǎn)同其父節(jié)點(diǎn)間的條件概率,而沒有父節(jié)點(diǎn)的條件概率就是先驗(yàn)概率。每個(gè)節(jié)點(diǎn)的條件概率一般都在條件概率表中進(jìn)行存放。
邱兵兵(1989—),男,山東濰坊人,博士生,研究方向?yàn)榉蔷€性船舶運(yùn)動(dòng)控制。E-mail:bbqiu.dmu@gmail.com
當(dāng)已知節(jié)點(diǎn)及其相互關(guān)系(有向邊)和條件概率表,通過貝葉斯網(wǎng)絡(luò)就可以表達(dá)出組成網(wǎng)絡(luò)所有節(jié)點(diǎn)的聯(lián)合概率,而且可以通過先驗(yàn)概率或是某些節(jié)點(diǎn)的概率,計(jì)算出其他任意節(jié)點(diǎn)的概率。聯(lián)合概率的計(jì)算公式如下:
由此可得出圖1中貝葉斯網(wǎng)絡(luò)的聯(lián)合概率分布公式為:
貝葉斯網(wǎng)絡(luò)可以表達(dá)出節(jié)點(diǎn)的聯(lián)合概率分布,并且可以使節(jié)點(diǎn)的聯(lián)合概率求解大大簡(jiǎn)化。
以下給出一個(gè)工程實(shí)例來對(duì)貝葉斯網(wǎng)絡(luò)的結(jié)構(gòu)做具體說明,如圖2所示。
貝葉斯網(wǎng)絡(luò)的構(gòu)建主要包括以下四個(gè)步驟[13]:
(1)首先我們需要定義待解決的問題,也就是確定構(gòu)建模型所需的X和Y,即網(wǎng)絡(luò)模型的起始節(jié)點(diǎn)和終止節(jié)點(diǎn)。
(2)然后開始構(gòu)建貝葉斯網(wǎng)絡(luò)結(jié)構(gòu)。因?yàn)榫W(wǎng)絡(luò)結(jié)構(gòu)是一個(gè)有著多節(jié)點(diǎn)的有向無(wú)環(huán)圖,因此第一步是添加圖中的節(jié)點(diǎn),把全部X設(shè)為起始節(jié)點(diǎn),全部Y設(shè)置為總結(jié)節(jié)點(diǎn)。如果發(fā)現(xiàn)X會(huì)直接影響Y,則將該X節(jié)點(diǎn)直接指向Y節(jié)點(diǎn)。如果只是間接影響到Y(jié),則需要在網(wǎng)絡(luò)中添加中間節(jié)點(diǎn),先將X節(jié)點(diǎn)指向中間節(jié)點(diǎn),然后該中間節(jié)點(diǎn)經(jīng)過指向后最終要連接到Y(jié)節(jié)點(diǎn)上。通過上述方法就構(gòu)建出貝葉斯網(wǎng)絡(luò)的初步架構(gòu)。在這個(gè)步驟中,如果要確定兩個(gè)節(jié)點(diǎn)之間是否存在推理關(guān)系,往往需要依賴于大量歷史數(shù)據(jù)和領(lǐng)域?qū)<业慕?jīng)驗(yàn),主觀性較高。
圖2 軟件輸入異常案例Fig.2 The case of software inputting exception
(3)計(jì)算每個(gè)節(jié)點(diǎn)的概率表,即各節(jié)點(diǎn)對(duì)其他節(jié)點(diǎn)影響程度的概率。這個(gè)步驟同樣需要依賴于專家經(jīng)驗(yàn)和歷史數(shù)據(jù)確定兩個(gè)節(jié)點(diǎn)的條件概率,然后依據(jù)貝葉斯定理公式(7)來構(gòu)建兩個(gè)節(jié)點(diǎn)之間的推理關(guān)系。
(4)對(duì)貝葉斯網(wǎng)絡(luò)進(jìn)行驗(yàn)證。因?yàn)樨惾~斯網(wǎng)絡(luò)的構(gòu)建過程畢竟有很多因素是主觀性較強(qiáng)的,構(gòu)建后應(yīng)該通過實(shí)際案例進(jìn)行校驗(yàn),查看網(wǎng)絡(luò)模型是否與實(shí)際情況一致,并不斷進(jìn)行調(diào)整完善。
從圖形表示方式來看,故障樹與貝葉斯網(wǎng)絡(luò)有很多相似處,兩者均通過推理建立圖形內(nèi)部聯(lián)系[14]。故障樹從頂至下逐步探索問題原因,貝葉斯網(wǎng)絡(luò)從底至上計(jì)算問題在某種情況下的發(fā)生概率。兩者定性定量的結(jié)合可以更好的解決問題。故障樹的推理過程是邏輯性較強(qiáng)的過程,并且有多種邏輯門的支持,而貝葉斯網(wǎng)絡(luò)的節(jié)點(diǎn)和有向邊建立的連接性更靈活,運(yùn)用范圍更為廣泛,更易于表示更豐富的信息內(nèi)容,加上貝葉斯網(wǎng)絡(luò)節(jié)點(diǎn)概率值依賴于構(gòu)建專家的經(jīng)驗(yàn)數(shù)據(jù),使問題的解決更切合實(shí)際。
為軟件測(cè)試問題找最終原因是一個(gè)相對(duì)主觀又復(fù)雜的過程,為了使這個(gè)過程的因果分析更嚴(yán)密,采用故障樹分析技術(shù)可以起到很好的理論支撐作用。而由于測(cè)試的軟件領(lǐng)域不同,軟件開發(fā)的人員團(tuán)隊(duì)特點(diǎn),每類問題的原因又有一定的差別,這種差別的量化表示就需要貝葉斯網(wǎng)絡(luò)這種建立在某種條件下的概率來更為清晰的描述。因此,建立起同一軟件問題的故障樹模型和貝葉斯模型,并將兩者轉(zhuǎn)換結(jié)合共同使用就顯得尤為重要。具體怎樣建立起事件與節(jié)點(diǎn)的轉(zhuǎn)換,邏輯門與有向邊的轉(zhuǎn)換在文章的算法建模研究中會(huì)進(jìn)一步探討。
軟件行業(yè)的產(chǎn)品質(zhì)量因素受軟件組織所處的成熟度階段、軟件領(lǐng)域等諸多因素的影響,所以軟件組織測(cè)試所產(chǎn)生的缺陷問題也是千差萬(wàn)別的,缺陷的相關(guān)信息以及原因也不盡相同,這就要求軟件缺陷分析的基礎(chǔ)數(shù)據(jù)在特定范圍進(jìn)行采集。收集并分析的統(tǒng)計(jì)數(shù)據(jù)有實(shí)時(shí)性及行業(yè)相關(guān)性,還受開發(fā)團(tuán)隊(duì)、開發(fā)進(jìn)度要求等條件的限定,所以采集的項(xiàng)目測(cè)試數(shù)據(jù)的分析結(jié)果為采集對(duì)象服務(wù),也就是說通過數(shù)據(jù)分析出的問題的糾正措施和解決方案是為數(shù)據(jù)來源企業(yè)量身定制的,不能適用于所有企業(yè)單位,這也是軟件工程不同于其他傳統(tǒng)學(xué)科的原因,沒有任何一個(gè)模型可以全面覆蓋所有的軟件工程過程,實(shí)現(xiàn)數(shù)據(jù)的通用,實(shí)現(xiàn)完全的自動(dòng)化,甚至在某種特定情況下還需要統(tǒng)計(jì)人員根據(jù)實(shí)際情況結(jié)合經(jīng)驗(yàn)數(shù)據(jù)作出主觀判斷。
根據(jù)業(yè)界成熟的缺陷分類方法 ODC及缺陷分析方法根本原因(Root Cause)方法對(duì)歷史數(shù)據(jù)進(jìn)行分析分類,收集缺陷不同維度的屬性信息進(jìn)行整理,從中挖掘出有用的信息作為對(duì)缺陷原因進(jìn)行逐層分析直至最終確定缺陷產(chǎn)生原因數(shù)據(jù)集。最終整理信息表《缺陷分類表》、《缺陷溯源表》,如表2、表3所示。
《缺陷分類表》是根據(jù)測(cè)試項(xiàng)目數(shù)據(jù)分析總結(jié)而成的典型缺陷集,未涵蓋所有缺陷,只是重點(diǎn)測(cè)試類型重點(diǎn)項(xiàng)目出現(xiàn)頻度較高的測(cè)試問題的部分范例。
《缺陷溯源表》本文也只列出了18類錯(cuò)誤中的4類作為范例。針對(duì)《缺陷分類表》中的問題,結(jié)合《缺陷溯源表》中數(shù)據(jù)采用故障樹建模方法可較快速地找出缺陷問題的原因。
表2 缺陷分類表Tab.2 The classification of software defect
表3 缺陷溯源表Tab.3 The tracing of software defect
按照故障樹的建造流程分析建造軟件故障樹,首先確定建模的范圍,也就是確定頂事件。在《缺陷分類表》中選取第16個(gè)問題“點(diǎn)擊報(bào)表打印按鈕,按鈕點(diǎn)擊后,頁(yè)面跳轉(zhuǎn)到一空頁(yè)面”作為此次建樹的頂事件,將這個(gè)頂事件簡(jiǎn)稱為“打印無(wú)效”。確定了頂事件后,開始尋找導(dǎo)致其發(fā)生的直接事件,然后這些事件又成為起因,逐層地展開各自的原因事件,此時(shí)結(jié)合表格《缺陷溯源表》可得出表4如下:
這個(gè)頂事件被確認(rèn)為級(jí)別為“二級(jí)”的測(cè)試問題,對(duì)二級(jí)問題的定義為“嚴(yán)重問題,系統(tǒng)需求未實(shí)現(xiàn)或欠缺、不完整、沒有達(dá)到要求”,使用故障樹建模方式解決此類問題會(huì)更方便。
此表中數(shù)據(jù)為從《缺陷溯源表》中逐步分析選取的原因,根據(jù)歷史數(shù)據(jù)及建表人的經(jīng)驗(yàn)信息最終找到問題根本原因,此時(shí)將這個(gè)表格的各個(gè)事件自上而下地以故障樹的形式表示出來,當(dāng)表示完最后一個(gè)底事件節(jié)點(diǎn)后,這顆軟件故障樹就快速的構(gòu)建完成了,如圖3所示。
從表示故障樹和貝葉斯網(wǎng)絡(luò)的圖形組成結(jié)構(gòu)看,故障樹由兩大要素事件(頂事件、中間事件和底事件)和各種邏輯門組成,它們分別對(duì)應(yīng)到貝葉斯網(wǎng)絡(luò)就是節(jié)點(diǎn)和有向邊。
由于故障樹中假定各種事件均可用正常和故障兩種狀態(tài)表示,可將故障樹中的事件看作是貝葉斯網(wǎng)絡(luò)中節(jié)點(diǎn)的某種特殊狀態(tài)。
故障樹中的邏輯門描述的是上一級(jí)事件與下一級(jí)事件之間的故障邏輯關(guān)系,該節(jié)只分析兩個(gè)最常用的重要邏輯門與門和或門。對(duì)于與門,表示當(dāng)所有下一級(jí)事件都發(fā)生時(shí),上一級(jí)事件才發(fā)生;對(duì)于或門,表示至少有一個(gè)下一級(jí)事件發(fā)生時(shí),上一級(jí)事件就發(fā)生。這種邏輯關(guān)系與貝葉斯網(wǎng)絡(luò)中有向邊的概念是相對(duì)應(yīng)的。
表4 打印無(wú)效缺陷分析表Tab.4 The analysis of software print exception
圖3 打印無(wú)效故障樹Fig.3 The fault tree of software print exception
假設(shè)當(dāng)軟件中的缺陷Z發(fā)生時(shí),用Z=1表示;未發(fā)生時(shí),用Z=0表示。軟件缺陷狀態(tài)在貝葉斯網(wǎng)絡(luò)中可以用變量的取值來表示。如圖4所示,故障樹中邏輯或門、與門的貝葉斯網(wǎng)絡(luò)表達(dá)形式。故障樹底事件的先驗(yàn)概率與其對(duì)應(yīng)貝葉斯網(wǎng)絡(luò)父節(jié)點(diǎn)的先驗(yàn)概率是同等概念,條件概率表達(dá)式表現(xiàn)了節(jié)點(diǎn)為某種狀態(tài)時(shí)其條件概率的值。具體的轉(zhuǎn)換步驟如下:
1. 把故障樹中全部底事件逐一轉(zhuǎn)換為貝葉斯網(wǎng)絡(luò)中的節(jié)點(diǎn),在故障樹中的節(jié)點(diǎn)重復(fù)出現(xiàn)多次的情況下,可以在貝葉斯網(wǎng)絡(luò)中將其簡(jiǎn)化為一個(gè)節(jié)點(diǎn);
2. 將故障樹中全部底事件的概率值對(duì)應(yīng)到貝葉斯網(wǎng)絡(luò)中相應(yīng)節(jié)點(diǎn);
3. 故障樹中的全部邏輯門可以轉(zhuǎn)化為貝葉斯網(wǎng)絡(luò)中的某個(gè)節(jié)點(diǎn),故障樹中邏輯門的上一級(jí)事件狀態(tài)與該節(jié)點(diǎn)狀態(tài)取值保持一致;
4. 依據(jù)故障樹中邏輯門與底事件之間關(guān)系鏈接貝葉斯網(wǎng)絡(luò)中的各節(jié)點(diǎn),通過有向邊的方向來表達(dá)故障樹中邏輯門的關(guān)系;
5. 將故障樹中不同邏輯門的邏輯關(guān)系表達(dá)為貝葉斯網(wǎng)絡(luò)中對(duì)應(yīng)節(jié)點(diǎn)的條件概率表。
圖4 故障樹向貝葉斯網(wǎng)絡(luò)轉(zhuǎn)換圖Fig.4 The transition graph of fault tree to bayesian networks
根據(jù)此轉(zhuǎn)換建模方法對(duì)圖3“打印無(wú)效故障樹”進(jìn)行轉(zhuǎn)換,如圖5“打印無(wú)效貝葉斯網(wǎng)絡(luò)表示”:
如上圖所示,T為頂事件,表示“打印無(wú)效”;其他節(jié)點(diǎn)的名稱用表4打印無(wú)效缺陷分析表中的原因標(biāo)號(hào)表示,也就是打印無(wú)效故障樹中事件的名稱,其中中間事件包括節(jié)點(diǎn) 1、4、1.1、4.2、1.1.1;底事件包括節(jié)點(diǎn),1.2、4.3、1.1.3、1.1.4、1.3.3、4.1.3、4.2.1、4.2.2、1.1.1.1、1.1.1.2、1.1.2.1、1.4.1.2。這些節(jié)點(diǎn)名稱的含義可在表4中對(duì)應(yīng)找出。圖5中的一些中間事件可以在圖中省略,在建造貝葉斯網(wǎng)絡(luò)模型時(shí)與其他節(jié)點(diǎn)合并,如節(jié)點(diǎn)1.4、4.1。
根據(jù)對(duì)筆者單位的大量項(xiàng)目測(cè)試數(shù)據(jù)的統(tǒng)計(jì)和對(duì)樣本數(shù)據(jù)的觀察分析,結(jié)合領(lǐng)域?qū)<抑R(shí)和用戶的反饋,考慮測(cè)試過程中各種可能影響軟件測(cè)試缺陷產(chǎn)生的因素及之間的相互關(guān)系及相互影響程度的大小,確定貝葉斯網(wǎng)絡(luò)中各節(jié)點(diǎn)的條件概率。為使分析更實(shí)用,我們盡量精確的分析出每一個(gè)節(jié)點(diǎn)的概率值,決定其在某種特定情況下可能的狀態(tài)。最終分析得出“打印無(wú)效貝葉斯網(wǎng)絡(luò)”中各個(gè)節(jié)點(diǎn)的條件概率如表5、表6所示:
如表 5、表 6所示,根據(jù)歷史數(shù)據(jù)可進(jìn)行不同節(jié)點(diǎn)概率的賦值[15],對(duì)于底事件節(jié)點(diǎn),其概率包含發(fā)生的概率和不發(fā)生的概率兩種值;對(duì)于中間事件節(jié)點(diǎn),需要考慮在不同輸入節(jié)點(diǎn)的概率下的節(jié)點(diǎn)概率,表6中用節(jié)點(diǎn)4.2作為一個(gè)例子解釋節(jié)點(diǎn)M的概率受節(jié)點(diǎn)J、節(jié)點(diǎn)K影響制約的情況,并給出了發(fā)生概率表示方式。
頂事件T的狀態(tài)有兩種,“打印無(wú)效”事件發(fā)生或不發(fā)生,在貝葉斯網(wǎng)絡(luò)公式中,可規(guī)定T=0的項(xiàng)乘以 0,T=1的項(xiàng)乘以 1,這樣可根據(jù)公式計(jì)算出任意底事件發(fā)生對(duì)頂事件發(fā)生的影響概率。計(jì)算出所有底事件發(fā)生對(duì)頂事件發(fā)生影響的概率,便可比較分析問題產(chǎn)生的各種直接原因的重要程度,根據(jù)分析結(jié)果指導(dǎo)開發(fā)和測(cè)試。具體可按照底事件的重要程度對(duì)整個(gè)開發(fā)測(cè)試環(huán)境的各種因素進(jìn)行分析診斷,包括開發(fā)團(tuán)隊(duì)的能力、產(chǎn)品的提交進(jìn)度、對(duì)產(chǎn)品質(zhì)量目標(biāo)要求的高低,硬件資源等等。對(duì)分析出的關(guān)鍵因素的關(guān)鍵問題采取糾正措施進(jìn)行缺陷預(yù)防,達(dá)到減少問題產(chǎn)生,提高軟件開發(fā)效率及測(cè)試效率的目的,最終提升整個(gè)軟件工程過程和產(chǎn)品的質(zhì)量。
圖5 打印無(wú)效貝葉斯網(wǎng)絡(luò)表示Fig.5 The bayesian networks of software print exception
表5 打印無(wú)效底事件概率表Tab.5 The bottom events probability of software print exception
表6 打印無(wú)效中間事件概率表Tab.6 The middle events probability of software print exception
本文針對(duì)目前國(guó)內(nèi)軟件企業(yè)對(duì)提升軟件質(zhì)量的需要,研究了結(jié)合貝葉斯網(wǎng)絡(luò)的軟件故障樹缺陷分析建模技術(shù),構(gòu)建了模型,并在實(shí)踐中得以應(yīng)用,形成了包括缺陷數(shù)據(jù)收集和分類、軟件故障樹建模、基于貝葉斯網(wǎng)絡(luò)的缺陷分析在內(nèi)的一套完整的軟件故障樹建模分析流程。對(duì)于同類的軟件企業(yè)用來進(jìn)行缺陷預(yù)防提高軟件質(zhì)量具有借鑒和指導(dǎo)作用。
[1] 單錦輝, 徐克俊. 軟件故障診斷探討[J]. 北京化工大學(xué)學(xué)報(bào), 2007.SHAN J H, XU K J. A Diagnose and discuss of software defect[J]. Journal of Beijing University of chemical Technology,2007. (in Chinese)
[2] 朱少民. 軟件質(zhì)量保證和管理[M]. 北京: 清華大學(xué)出版社, 2007.ZHU S M.Software Quality Assurance and Management[M].Beijing: Tsinghua University Press, 2007. (in Chinese)
[3] 周凱, 王璞. 軟件故障樹分析技術(shù)[J]. 航空計(jì)算技術(shù),1997, (3): 54-57.ZHOU K, WANG P. Software fault tree analysis technology[J]. Aeronautical Computing Technique, 1997, (3): 54-57.(in Chinese)
[4] 蔡一平, 王玉璽. 軟件故障樹分析實(shí)施指南[M]. 北京: 中國(guó)國(guó)防科技信息中心, 2000.CAI Y P, WANG Y X. Software fault tree analysis and implementation guide[M]. Beijing: China Defense Science and Technology Information Center, 2000. (in Chinese)
[5] 侯安華, 秦紅磊. 基于故障樹和規(guī)則的故障診斷專家系統(tǒng)[J]. 微計(jì)算機(jī)信息, 2008, 7(1): 191-193.HOU A H, QIN H L. The expert system based on fault tree and rule[J]. Microcomputer Information, 2008, 7(1): 191-193.(in Chinese)
[6] 胡中偉, 吳芳美. 形式化故障樹分析建模和軟件安全性測(cè)試[J]. 同濟(jì)大學(xué)學(xué)報(bào), 2001, 11.HU Z W, WU F M. Formal Fault Tree Modeling and software security testing[J]. Journal of Tongji University, 2001, 11. (in Chinese)
[7] PEARLl J, Graphical Models for Probabilistic and Causal Reasoning[J]. The Computer Science and Engineering Handbook, Kluwer Academic Publishers, 1997: 697-714.
[8] KRAUSE P J. Learing Probabilistic Networks[J]. Knowledge Engineering Review, 1998, 13: 321-351.
[9] Hong G.Y, Xie M. A Statistical Method For Controlling Software Defect Detection Process[J]. Computers & Industrial Engineering, 1999, 37: 137-140.
[10] 張金槐, 唐雪梅. Bayes方法[M]. 長(zhǎng)沙: 國(guó)防科技大學(xué)出版社, 1989.ZHANG J K, TANG X M. Bayes method[M]. Changsha: National Defense University Press, 1989. (in Chinese)
[11] AMASAKI S, TAKAGI Y, MIZUNO O, et al. A Bayesian Belief Network for Assessing the Likelihood of Fault Content[R]. Proceedings of the 14th International Symposium on Software Reliability Engineering, 2003.
[12] 王朔. 基于貝葉斯網(wǎng)絡(luò)的艦艇導(dǎo)彈防御系統(tǒng)決策模型算法研究[D]. 長(zhǎng)沙: 國(guó)防科學(xué)技術(shù)大學(xué), 2005.WANG S. Research of naval vessels and guided missile defense system based on bayesian network decision Algorithm Modeling[D]. Changsha:National University of Defense Technology, 2005. (in Chinese)
[13] 林士敏, 田鳳占, 陸玉昌. 貝葉斯網(wǎng)絡(luò)的建造及其在數(shù)據(jù)采掘中的應(yīng)用[J]. 清華大學(xué)學(xué)報(bào)(自然科學(xué)版), 2001, 41(l):l~2.LIN S M, TIAN F Z, LU Y C. The construct and application of Bayesian network in data mining[J]. Journal of Tsinghua University (Science and Technology), 2001, 41(l): l-2. (in Chinese)
[14] 張少中. 基于貝葉斯網(wǎng)絡(luò)的知識(shí)發(fā)現(xiàn)與決策應(yīng)用研究[D].大連: 大連理工大學(xué), 2003.ZHANG S Z. Research of knowledge discovery and decision application based on bayesian network[D]. Dalian:Dalian University of Technology, 2003. (in Chinese)
[15] 白成剛. 基于Bayes網(wǎng)的軟件殘留錯(cuò)誤數(shù)度量[J]. 計(jì)算機(jī)工程, 2003, 10: 39~40.BAI C G. Software residual errors measurement based on bayesian network[J]. Computer Engineering, 2003, 10: 39-40.(in Chinese)
[16] ChANG C P, CHU P P. Defect Prevention in Software Processes: An Action-Based Approach[J]. Journal of Systems and Software, 2007.
[17] LEE S F, BAI X Y, CHEN Y N. Automatic Mutation Testing and Simulation on OWL-S Specified Web Services[R]. 41st Annual Simulation Symposium (ANSS-41), IEEE Computer Society, 2008.
[18] NIAZI M, BABARC M A, VERNERD J M. Software Process Improvement barriers: A cross-cultural comparison[J]. Information and Software Technology, 2010, 52(11): 1204-1216.
[19] WALT C, BARNARD E. Data characteristics that determine classifier performance[J]. SAIEE Africa Research Journal, 2007.