新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 嵌入式軟件運行剖面建模及測試用例生成

        嵌入式軟件運行剖面建模及測試用例生成

        作者: 時間:2010-04-21 來源:網(wǎng)絡(luò) 收藏

        航天應(yīng)用中的大部分都是,可靠性要求很高,因此,對其進行充分顯得尤為重要。但是,環(huán)境同硬件有著密切的關(guān)系,使得軟件過程非常復(fù)雜,目前存在的一些工具偏重于白盒測試且價格昂貴,針對黑盒測試,目前還是以人工測試為主。由于軟件的復(fù)雜程度越來越高,導(dǎo)致人為設(shè)計測試用例數(shù)量巨大且無法保證測試充分性。而對航天軟件來說,是否滿足任務(wù)要求是軟件的重點,因此,從用戶的角度對軟件進行數(shù)學(xué),對系統(tǒng)是怎樣的以及它會怎樣被使用做出一個定量描述,根據(jù)這些量值可以對軟件中至關(guān)重要的、生命攸關(guān)的、關(guān)系到系統(tǒng)成敗的部分給與充分的測試。通過任務(wù)模型可獲取測試用例和測試數(shù)據(jù)的等價類信息,自動測試用例,大大減輕測試人員的工作量,提高了測試工作的效率和質(zhì)量。本文中采用帶標(biāo)記的Markov鏈對軟件進行描述,并據(jù)此測試用例。

        本文引用地址:http://www.104case.com/article/151909.htm

          1.軟件運行剖面

          軟件運行剖面是用來描述軟件的實際使用情況的。1993年,MUSA在IEEE發(fā)表了一篇題為《軟件可靠性工程中的運行剖面》的文章,開創(chuàng)了軟件運行剖面的研究,文中MUSA給出了實施軟件運行剖面的一般步驟。MUSA(參考文章[1])對軟件分析的原則,不僅適用于嵌入式軟件,對一般的應(yīng)用軟件也適用。首先對軟件的使用者進行分類,不同類型的使用者可能以不同的方式來使用軟件,根據(jù)對使用者的劃分將軟件劃分成不同的模式剖面。其次,模式剖面又可以劃分為不同的功能剖面,即每個模式下都有許多不同的功能。最后,每一個功能又由許多運行組成。這些運行的集合便構(gòu)成了運行剖面。上述的每一次劃分都是依據(jù)概率發(fā)生的,這些概率估計主要是基于如下幾個方面: ① 從現(xiàn)有系統(tǒng)收集到的數(shù)據(jù), ② 與用戶的交談或?qū)τ脩暨M行觀察獲得的信息, ③ 原型使用與試驗分析的結(jié)果, ④ 相關(guān)領(lǐng)域?qū)<业囊庖姟6x使用概率的最佳方法是使用實際的用戶數(shù)據(jù),如來自原型系統(tǒng)、前一版本的使用數(shù)據(jù);其次是由該軟件應(yīng)用領(lǐng)域的用戶和專家提供的預(yù)期使用數(shù)據(jù)。軟件的運行剖面是定量描述用戶實際使用軟件方式的有效方法。MUSA的軟件劃分原則簡單且容易實施,只要按照步驟逐步實行就可以得出軟件的比較準(zhǔn)確的運行剖面。但是,也要看到,MUSA的軟件分析原則只是提供了一個分析軟件的方法,在特定的應(yīng)用中,有些步驟可以簡化處理,根據(jù)具體的實際情況,靈活運用。

          2.運行剖面的構(gòu)造過程

          2.1 運行的表示方法

          首先來定義兩種圖,第一種圖用來描述分解后的運行,即運行圖,定義為TF={P1,P2,……Pn},其中,P1,P2……Pn表示構(gòu)成運行的各個狀態(tài),Pi的下一個狀態(tài)為Pi+1,Pi的上一個狀態(tài)為Pi-1,這些狀態(tài)表示的是一個任務(wù)從開始到結(jié)束的一個過程,即P1-〉P2……-〉Pn。我們可以用這個圖來描述經(jīng)分析得到的運行。當(dāng)運行圖中某個狀態(tài)中可以有幾種不同的路徑到達下一個狀態(tài)時,僅用運行圖就不能準(zhǔn)確表達該運行,此時,就要用到狀態(tài)細化圖,狀態(tài)細化圖用來描述運行圖中狀態(tài)的內(nèi)部細節(jié),定義為一個三元組DTF= ,其中,sequence={Bi|Bi=TFi}, i=1……n。start為此細化圖的公共開始節(jié)點,end為此細化圖的公共終止節(jié)點。被測軟件中所有的運行,只要劃分的足夠細,都可以由上面兩種圖準(zhǔn)確的表示出來。

          2.2 將由運行圖、狀態(tài)細化圖表示的運行剖面轉(zhuǎn)化為Markov鏈表示

          將以上兩種圖描述的運行剖面轉(zhuǎn)化成Markov鏈描述主要基于以下考慮:

          1.Markov鏈的特點是下一個狀態(tài)只和當(dāng)前狀態(tài)有關(guān),而與歷史狀態(tài)無關(guān),在這里就是軟件的當(dāng)前狀態(tài)只和上一狀態(tài)有關(guān),與更早的歷史狀態(tài)無關(guān),若上一狀態(tài)正確,則在正確的輸入下,軟件的當(dāng)前狀態(tài)一定正確,否則,軟件一定存在缺陷,這對于定位軟件測試中的錯誤是十分方便的,通過Markov鏈中狀態(tài)轉(zhuǎn)移概率,還能直觀的認識到軟件中各個功能的使用頻率,給出一個定量的描述。

          2.這里的Markov鏈描述相當(dāng)于編譯中的中間語言,即程序的所有處理都是基于Markov鏈的。使用中間語言便于程序內(nèi)部處理。

          3.當(dāng)某個節(jié)點內(nèi)部有需要細化的分支時,Markov鏈會綜合內(nèi)部分支,給出一個整體的綜合表述。這對于產(chǎn)生測試用例非常方便。

          4.算法1:圖描述轉(zhuǎn)化為Markov鏈描述算法:該算法的輸入為運行圖、以及狀態(tài)細化圖,將運行圖進行化簡、并綜合其中的狀態(tài)細化圖,將每一個運行都表示為一Markov鏈。

          對每一個運行圖,調(diào)用以下算法:

          1.首先,插入一個開始狀態(tài),讀入第一個節(jié)點

          2.對該節(jié)點進行以下判斷:

          3.1.1 該節(jié)點是否為分支節(jié)點,若是則對該節(jié)點調(diào)用分枝遍歷算法

          2.1 其次判斷該節(jié)點是否有輸入,若有則插入一個新狀態(tài),并設(shè)置新狀態(tài)的相關(guān)屬性,并一條消息從當(dāng)前狀態(tài)指向新插入的狀態(tài)


          4.若還有其他節(jié)點,則進入下一個節(jié)點,重復(fù)步驟2,否則,算法結(jié)束

          5. 算法2:分支遍歷算法:

          1.讀入一個分支的第一個節(jié)點

          1.1對該節(jié)點進行以下判斷:

          1.1.1判斷該節(jié)點是否為分支節(jié)點,若是則調(diào)用分支遍歷算法

          2.1.1判斷該節(jié)點是否有輸入,若有則插入一個新狀態(tài),設(shè)置新狀態(tài)的相關(guān)屬性,并生成一條消息從當(dāng)前狀態(tài)指向新插入的狀態(tài)

          2.1若還有其他節(jié)點,則進入下一個節(jié)點,重復(fù)步驟1.1

          3.1進行以下判斷:

          1.3.1若當(dāng)前處理完的為第一個分支,則插入一個新的狀態(tài),并使最后一個節(jié)點指向這個新插入的節(jié)點

          2.3.1若不是第一個分支,則使最后一個節(jié)點指向第一個分支的最后一個節(jié)點

          4.1將當(dāng)前節(jié)點置為算法開始時傳入的節(jié)點,即分支的父節(jié)點,進行判斷:

          1.4.1當(dāng)前父節(jié)點是否有超過1個的子分支,若有則進行判斷:若超過一個子分支的下一個節(jié)點都是第一個分支的最后一個節(jié)點,則將這些子分支合并成一個子分支,即由父狀態(tài)指向第一個分支的最后一個節(jié)點,概率為各個子分支的和

          2.若還有其他分支,則進入其他分支,并設(shè)置當(dāng)前分支為算法開始時傳入的父節(jié)點,重復(fù)步驟1

          經(jīng)以上算法作用后,運行剖面可以表示為{OPi|OPi=<Oi,Pi>,i=1,2,…,N},其中Oi表示組成這個運行剖面的其中一個運行,Pi表示這個運行發(fā)生的概率。

        linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

        上一頁 1 2 下一頁

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 绵竹市| 宣威市| 北辰区| 雷波县| 海原县| 汉寿县| 八宿县| 余姚市| 阳春市| 探索| 盖州市| 汝城县| 彭阳县| 奇台县| 黔西| 克东县| 睢宁县| 泰宁县| 翼城县| 长白| 赤水市| 临沂市| 东至县| 且末县| 电白县| 浠水县| 康保县| 石屏县| 虹口区| 巴楚县| 平舆县| 洛川县| 林西县| 安顺市| 新晃| 神池县| 吴江市| 景德镇市| 汶川县| 岳池县| 黎平县|