《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 設(shè)計應(yīng)用 > 一種面向狀態(tài)COM組件的測試用例生成方法
一種面向狀態(tài)COM組件的測試用例生成方法
來源:微型機與應(yīng)用2010年第10期
吳 忠
(江西方興科技有限公司 技術(shù)部,江西 南昌330025)
摘要: 基于組件的開發(fā)方法提高了軟件的可復(fù)用性和軟件開發(fā)效率,但組件具有的封裝和狀態(tài)特性增加了組件和基于組件軟件的測試難度。依據(jù)組件的狀態(tài)特性,在組件中引入狀態(tài)性概念,將組件分為非狀態(tài)組件和狀態(tài)組件。對具有不同特征的組件進行有針對性的測試。對于狀態(tài)組件,除使用非狀態(tài)組件的測試方法外,還定義了擴展鄰接表和擴展約束對照表來存儲狀態(tài)信息,并結(jié)合基于流的測試方法來產(chǎn)生方法序列測試用例及腳本。在理論研究的基礎(chǔ)上開發(fā)出COM(Component Object Model)組件測試用例及腳本自動生成系統(tǒng),驗證了測試用例及腳本生成方法的有效性。
Abstract:
Key words :

摘  要: 基于組件的開發(fā)方法提高了軟件的可復(fù)用性和軟件開發(fā)效率,但組件具有的封裝和狀態(tài)特性增加了組件和基于組件軟件的測試難度。依據(jù)組件的狀態(tài)特性,在組件中引入狀態(tài)性概念,將組件分為非狀態(tài)組件和狀態(tài)組件。對具有不同特征的組件進行有針對性的測試。對于狀態(tài)組件,除使用非狀態(tài)組件的測試方法外,還定義了擴展鄰接表和擴展約束對照表來存儲狀態(tài)信息,并結(jié)合基于流的測試方法來產(chǎn)生方法序列測試用例及腳本。在理論研究的基礎(chǔ)上開發(fā)出COM(Component Object Model)組件測試用例及腳本自動生成系統(tǒng),驗證了測試用例及腳本生成方法的有效性。
關(guān)鍵詞: COM組件;組件測試;狀態(tài)組件;測試用例

    目前基于組件的軟件工程(CBSE)已成為軟件工程領(lǐng)域的研究熱點[1,2,4]。CBSE是從面向?qū)ο蟮拈_發(fā)方法發(fā)展而來,其特點是能夠?qū)崿F(xiàn)組件的重用,使組件實現(xiàn)“即插即用”,縮短軟件開發(fā)周期,降低開發(fā)維護成本。各種新型組件開發(fā)技術(shù)進一步提高了組件開發(fā)效率及組件性能,但組件的一系列問題始終沒有得到較好的解決。狀態(tài)組件是COM組件中另一類非常重要、使用非常廣泛的組件。由于狀態(tài)組件具有狀態(tài)特性,對狀態(tài)組件的測試要求也更高,難度也更大。
    本文將在非狀態(tài)組件分析的基礎(chǔ)上,針對狀態(tài)組件的特性進行研究。將詳細分析狀態(tài)組件與擴展有限狀態(tài)機的共性,并結(jié)合狀態(tài)組件的狀態(tài)特性及方法調(diào)用序列要求,分析兩者間的關(guān)聯(lián)性。通過將狀態(tài)組件轉(zhuǎn)換為等價的擴展有限狀態(tài)機,并將信息存儲在自定義的擴展鄰接表和擴展約束對照表中,再結(jié)合有向圖的遍歷算法來產(chǎn)生測試方法序列。方法序列中單個接口成員函數(shù)的測試用例的生成,采用非狀態(tài)組件中使用的測試用例生成方法。
1 狀態(tài)組件與狀態(tài)機
    由于狀態(tài)組件與有限狀態(tài)機存在狀態(tài)特性上的相似性[1-3],因而在狀態(tài)組件測試用例生成方法中引入了擴展有限狀態(tài)機。
    有限狀態(tài)機FSM(Finite State Machine),已經(jīng)成為需求規(guī)格說明的一種相當(dāng)于標(biāo)準(zhǔn)的表示方法[5,6]。在很多結(jié)構(gòu)化分析中都使用了某種形式的有限自動機,而且在絕大多數(shù)的面向?qū)ο蠓治鲋袕V泛使用。
    在現(xiàn)有的軟件測試領(lǐng)域經(jīng)常使用的狀態(tài)機是在原始狀態(tài)機的基礎(chǔ)上經(jīng)過改造的擴展?fàn)顟B(tài)機EFSM(Extended FSM)[7]。EFSM可定義為一個5元組:EFSM=<∑,S,T,Γ,s0>,其中∑是狀態(tài)機接受的輸入集合;S是狀態(tài)機的狀態(tài)集合;Γ是邏輯表達式集合;T是轉(zhuǎn)換集合,T=∑×S×S×Γ,表示狀態(tài)機處于一個起始狀態(tài),s1∈S時,接收到一個輸入e∈∑,而且滿足條件λ∈Γ,那么狀態(tài)機的狀態(tài)將變成s2∈S;s0∈S是狀態(tài)機的初始狀態(tài)集。
    由狀態(tài)組件的特性分析和有限狀態(tài)機的介紹可知,狀態(tài)組件與擴展有限狀態(tài)機有很大的關(guān)聯(lián)性,具體體現(xiàn)在以下幾個方面:
    (1)狀態(tài)組件的接口成員方法一般都有輸入?yún)?shù),而對沒有輸入?yún)?shù)的接口成員函數(shù),可以將輸入?yún)?shù)置為空。這些輸入?yún)?shù)與有限狀態(tài)機中的輸入集∑具有一致性,因此可以認(rèn)為方法的輸入?yún)?shù)對組成了狀態(tài)組件的輸入集∑。
    (2)狀態(tài)組件的接口成員函數(shù)組成的函數(shù)方法集合[8],與有限狀態(tài)機的狀態(tài)相似,都是一類事物的集合,具有關(guān)聯(lián)性。可以將狀態(tài)組件的接口成員函數(shù)方法抽象成一種特定的擴展?fàn)顟B(tài)S′。這些擴展?fàn)顟B(tài)組成的集合便可以構(gòu)成一個擴展?fàn)顟B(tài)集S。
    (3)一些方法的后置斷言有相應(yīng)的后置斷言條件,這些后置斷言條件約束了方法可以轉(zhuǎn)換到哪一個后序方法上。這與擴展?fàn)顟B(tài)機中的Γ是一致的。因此可以將這些后置斷言條件組成的集合當(dāng)作Γ。
    (4)當(dāng)一個初始方法M1完成后,在滿足一定的后置斷言條件時,可以根據(jù)后置斷言和后置斷言方法的輸入?yún)?shù),轉(zhuǎn)移到下一個方法上。這與擴展?fàn)顟B(tài)機中的T轉(zhuǎn)換集合也是一致的。
    (5)另外,狀態(tài)組件有一些接口成員方法沒有前置斷言,即可以被直接調(diào)用而沒有特定的要求。可以認(rèn)為這些沒有前置斷言的方法是一種初始狀態(tài)方法集,即對應(yīng)于擴展?fàn)顟B(tài)機中的s0。
    由上述關(guān)聯(lián)性分析可知,可以將狀態(tài)組件的方法轉(zhuǎn)換為有限狀態(tài)機中的狀態(tài),而方法之間約束條件可以轉(zhuǎn)換為有限狀態(tài)機各狀態(tài)之間的轉(zhuǎn)移,其具體的對照形式如圖1所示。

    綜上所述,可以充分地認(rèn)為狀態(tài)組件可以轉(zhuǎn)換為等效的擴展有限狀態(tài)機模型。這樣可以通過擴展用于存儲擴展有限狀態(tài)機信息的擴展鄰接表來存儲狀態(tài)組件的信息。
2 狀態(tài)組件測試用例生成
    在將狀態(tài)組件的信息轉(zhuǎn)換為擴展有限狀態(tài)機,并存入擴展鄰接表和擴展約束對照表中后,可以通過有向圖的相關(guān)性質(zhì)來遍歷狀態(tài)組件所有方法轉(zhuǎn)換,以此產(chǎn)生方法調(diào)用序列集。狀態(tài)組件接口成員方法序列集的生成過程分為兩個步驟:第一步是產(chǎn)生初始的方法序列集(算法1);由于第一步產(chǎn)生方法序列集中可能會存在冗余,因此第二步是去除初始方法序列集中的冗余方法序列,生成最終狀態(tài)組件接口成員方法序列集(算法2)。
    算法1:初始方法序列集的生成算法
    輸入:最大循環(huán)數(shù)MaxCircle,狀態(tài)組件的擴展鄰接表ExternAdjacencyTable,擴展約束對照表ExternConditionTable
    輸出:初始方法序列集SequencesList
    {
        foreach(head∈ExternAdjacencyTable.ExternAdjacency-
Head)
        if(head is start method)
            CreateSequence(head,head.name);
    }
    CreateSequence(ExternAdjacencyHead head,string sequence)
    {
        foreach(conn∈head.Connections)
        {
        TempSequence=sequence;
        TempHead=ExternAdjacencyHead[conn.MethodNum];
        if(TempHead.visittime<MaxCircle)
        {
            TempSequence+=conn.postConditionID+
TempHead.methodname;
            TempHead.visittime++;
            if(TempHead is end method)
                Add TempSequence into SequencesList;
            if(TempHead has connections)
                CreateSequence(TempHead,TempSequence);
        }
        }
    }
    算法的時間復(fù)雜度主要由初始方法的數(shù)量M以及方法的間轉(zhuǎn)移的邊數(shù)E決定。每一個初始方法都要完成一遍所有邊的掃描,因此算法的時間復(fù)雜度為O(M×E)。
    算法2:方法序列集約簡算法
    輸入:初始方法序列集SequencesList
    輸出:最終方法序列集Sequences
    {
        foreach(tempSequence∈SequencesList)
        {
        I=0;
        foreach(tempSequence2∈SequencesList)
        {
            if(tempSequence2 contains tempSequence)
                I++;
            if(I>1)
                break;
        }
        if(I>1)
            continue;
        else
          Add tempSequence into Sequences;
        }
    }
    算法時間復(fù)雜度由兩個foreach循環(huán)決定,兩個循環(huán)都將掃描一遍初始方法序列集,因此算法時間復(fù)雜度O(n2)。
3 系統(tǒng)實現(xiàn)及分析
    由前面的介紹可知,COM組件測試用例及腳本生成子系統(tǒng)從組件的信息說明文檔中提取基本信息,再針對狀態(tài)組件和非狀態(tài)組件的不同特性分別進行測試用例的設(shè)計。
    對于非狀態(tài)組件會將單個接口成員函數(shù)的參數(shù)按二元組合覆蓋產(chǎn)生的測試用例直接用于生成測試腳本;而對于狀態(tài)組件,二元組合覆蓋產(chǎn)生的測試用例會用于填充接口成員函數(shù)方法序列中的相應(yīng)函數(shù),因此測試用例文檔中會比非狀態(tài)組件的測試用例多一個TYPE字段。在完成了測試用例和方法序列集的準(zhǔn)備后,使用腳本生成模塊來完成測試腳本的自動化生成及編譯工作。COM組件測試用例及腳本生成系統(tǒng)的結(jié)構(gòu)如圖2所示。

    測試用例生成子系統(tǒng)關(guān)鍵實現(xiàn)技術(shù)主要有以下兩項:
    (1)信息存儲與提取——XML技術(shù)
    可擴展標(biāo)記語言XML近年來被許多行業(yè)廣泛采用。組件信息、邊界值信息以及測試數(shù)據(jù)等的存儲都采用了XML文檔的形式。使用XML來定義自己的數(shù)據(jù)信息存儲格式,可以按照要求靈活地變更和修改。而且.NET提供了豐富的操作接口,可以方便、靈活地使用XML。
    (2)測試腳本自動生成——反射機制和CodeDOM技術(shù)
    反射機制(Reflection)是一種運行時機制,允許代碼在運行時獲得數(shù)據(jù)類型信息,即代碼在運行時可以獲得一個變量的數(shù)據(jù)類型。不僅如此,代碼運行時還可以獲得類的成員屬性、方法、域和構(gòu)造器等許多信息。測試用例生成子系統(tǒng)通過按照測試驅(qū)動器自定義的用戶屬性來提供測試腳本,這包括類型屬性[TestFixture]、開始函數(shù)屬性[SetUp]、終止函數(shù)屬性[TearDown]以及測試函數(shù)屬性[Test]等。按要求生成的測試腳本在編譯成測試程序集后,驅(qū)動器可以根據(jù)約定去查找具有相應(yīng)屬性的元素進行調(diào)度。這也是與動態(tài)監(jiān)控和錯誤注入的一個接口約定。
    CodeDOM技術(shù):.NET Framework中用CodeDOM以一種語言中立的方式來表示源代碼文檔。通過CodeDOM創(chuàng)建對象圖,然后使用特定于某種語言的CodeDomProvider類的派生類產(chǎn)生相應(yīng)語言的測試腳本,最后編譯生成測試用例集。COM組件測試腳本到測試程序集的生成流程如圖3所示。

    對于狀態(tài)組件,采用擴展鄰接表來存儲狀態(tài)組件的狀態(tài)信息,通過有向圖的遍歷算法自動產(chǎn)生方法序列,這樣大大的提高了方法序列集生成的效率。同時在程序中加入了對循環(huán)的控制,并對有重復(fù)的方法序列進行了約簡,大大的減少了測試序列集的數(shù)量,并保證了測試的有效性不會隨之降低。表1展示了典型組件約簡前后的方法序列數(shù)量的對照關(guān)系,可以看出約簡后的方法序列數(shù)量較約簡前有了顯著的減少。

    通過IPO算法生成的測試用例可以有效觸發(fā)COM組件中的錯誤,例如針對COM組件PDG2.dll的接口成員函數(shù)Register()生成測試用例及腳本,在編譯成程序集后供驅(qū)動器使用,可以監(jiān)測到錯誤異常。
    狀態(tài)組件是組件中經(jīng)常使用的一類組件,狀態(tài)特性的引入使得其測試更加的復(fù)雜化,測試用例生成的要求更高、代價也更大。本文通過分析狀態(tài)組件的特性及其與擴展有限狀態(tài)機的相關(guān)性介紹,結(jié)合自定義的擴展鄰接表和擴展約束對照表等存儲結(jié)構(gòu),較好地實現(xiàn)了狀態(tài)組件測試方法序列用例及腳本的生成,也使得狀態(tài)組件的測試代價大大降低、測試效率顯著提高。
參考文獻
[1] ALI Y D,UYAR M U.A method enabling feasible conformance test sequence generation for EFSM models[J]. IEEE Transactions on Computers,2004,53(5):614-627.
[2] 蔣凡,魏蓉,鄶吉豐.基于擴展有限狀態(tài)機測試序列生成方法研究[J].計算機工程與應(yīng)用,2007,43(7):62-64.
[3] 戰(zhàn)德臣,王忠杰,徐曉飛.基于XML的組件標(biāo)準(zhǔn)化描述[J].計算機工程與應(yīng)用,2003,39(4):89-92.
[4] 劉永紅.構(gòu)件及基于構(gòu)件的軟件測試研究[D].中科院成都計算機應(yīng)用研究所,2006.
[5] 趙明華,陳榕,王小鴿.基于元數(shù)據(jù)的構(gòu)件自動測試技術(shù) 研究[J].計算機工程與設(shè)計,2006,27(10):1731-1736.
[6] CHANG Liu,RICHARDSON D.Software components with  retrospectors[C].In Proceedings of International Workshop on  the Role of Software Architecture in Testing and Analysis,1998:63-68.
[7] RAKESH S,DAVID C,PAUL S.A passive test oracle using a Component’s API[C].Proceedings of the 12th Asia Pacific Software Engineering Conference(APSEC’05),2005:561-567.
[8] 楊建軍,陳衛(wèi)東,葉澄清,等.面向組件的接口變異測試方法[J].浙江大學(xué)學(xué)報(工學(xué)版),2003,37(2):129-133.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
午夜精品视频在线| 亚洲免费成人av| 亚洲伦理在线免费看| 国产综合视频| 国产午夜精品在线| 国产伦精品一区二区| 国产精品福利在线| 欧美日韩精品国产| 欧美另类综合| 欧美激情一区在线| 欧美福利一区| 欧美成人午夜免费视在线看片| 久久久噜噜噜久久中文字幕色伊伊| 欧美中文字幕精品| 久久精品国产一区二区三| 久久成人亚洲| 久久久久久亚洲精品不卡4k岛国| 久久国产精品黑丝| 久久久久国色av免费观看性色| 欧美在线免费一级片| 久久精品国产亚洲精品| 久久精品日产第一区二区| 久久爱www久久做| 久久久久久久久久久久久女国产乱 | 国产视频一区二区三区在线观看| 国产精品资源| 国内精品亚洲| 亚洲欧洲一区二区在线观看| 亚洲麻豆av| 亚洲图片激情小说| 午夜久久tv| 亚洲电影免费观看高清完整版在线| 亚洲国产日韩一区二区| 亚洲美洲欧洲综合国产一区| aa级大片欧美三级| 亚洲专区一二三| 久久se精品一区二区| 久久天堂精品| 欧美久久九九| 国产精品一区二区你懂的| 精品91免费| av成人老司机| 欧美一区1区三区3区公司| 亚洲国产日韩欧美在线99| 中国成人黄色视屏| 久久av最新网址| 欧美成人自拍| 国产精品久久久久久久第一福利| 国产日韩三区| 亚洲人精品午夜| 亚洲欧美日韩国产一区二区三区| 亚洲电影有码| 亚洲一区二区三区精品在线观看| 久久www成人_看片免费不卡| 欧美成人xxx| 欧美视频一区二| 国产亚洲aⅴaaaaaa毛片| 亚洲国产成人tv| 亚洲网站在线观看| 亚洲国产一区在线| 亚洲欧美另类中文字幕| 免费观看在线综合| 欧美性色综合| 在线电影院国产精品| 一本色道久久综合亚洲精品不| 欧美一级久久久| 一区二区久久| 久久久综合网站| 国产精品久久国产三级国电话系列| 国内一区二区在线视频观看| 亚洲精品日韩激情在线电影| 午夜综合激情| 在线视频亚洲欧美| 久热re这里精品视频在线6| 欧美午夜不卡在线观看免费 | 欧美一级成年大片在线观看| av72成人在线| 老司机精品导航| 国产农村妇女毛片精品久久莱园子| 亚洲国内精品| 久久激情五月婷婷| 午夜一区二区三视频在线观看 | 国产日产精品一区二区三区四区的观看方式| 亚洲国产一区二区三区青草影视| 亚洲欧美综合精品久久成人| 99国内精品| 欧美成人一区二区三区| 国产一级揄自揄精品视频| 亚洲视频香蕉人妖| 99re66热这里只有精品3直播| 久久精品在线观看| 国产精品乱码久久久久久| 亚洲精品一二三区| 亚洲国产欧美一区二区三区久久| 欧美一区二区三区播放老司机| 欧美日韩一区在线观看| 亚洲国产精品久久91精品| 亚洲大胆女人| 久久国产精品99久久久久久老狼| 国产精品国产| 日韩午夜免费| 日韩一级在线观看| 欧美成人乱码一区二区三区| 国产综合欧美| 欧美亚洲视频在线观看| 亚洲欧美日本在线| 欧美无砖砖区免费| 99精品国产热久久91蜜凸| 日韩一级大片在线| 欧美激情一区二区三级高清视频| 在线免费观看欧美| 亚洲黄色成人网| 免费久久精品视频| 伊人婷婷欧美激情| 亚洲高清视频在线观看| 久久人91精品久久久久久不卡| 国产视频久久久久| 午夜激情综合网| 久久爱www久久做| 国产亚洲福利一区| 欧美一区二区三区免费观看| 欧美在线视频观看| 国产欧美日韩精品一区| 亚洲一区在线观看视频 | 午夜精品福利视频| 国产精品久久99| 亚洲字幕在线观看| 欧美一区二区三区日韩| 国产情人节一区| 欧美影视一区| 蜜臀久久久99精品久久久久久| 在线观看一区二区精品视频| 亚洲精品国产精品国自产观看 | 亚洲精品乱码久久久久久| 一二三区精品| 欧美视频中文一区二区三区在线观看 | 国产精品亚洲第一区在线暖暖韩国| 亚洲视频你懂的| 欧美一级成年大片在线观看| 国产区亚洲区欧美区| 久久精品系列| 欧美大学生性色视频| 亚洲美女福利视频网站| 亚洲永久视频| 国产午夜精品理论片a级大结局| 久久精品动漫| 欧美激情一区二区三区在线视频观看 | 亚洲精品美女久久久久| 欧美日韩视频专区在线播放 | 久久精品人人做人人爽| 欧美www视频在线观看| 亚洲精品日韩综合观看成人91| 亚洲欧美另类国产| 国产一区二区三区四区老人| 亚洲国产日韩美| 欧美午夜性色大片在线观看| 香蕉久久国产| 欧美成人精品一区| 中文亚洲免费| 久久狠狠一本精品综合网| 一区二区三区在线不卡| 一区二区欧美日韩视频| 国产免费成人在线视频| 最新日韩中文字幕| 国产精品国产三级国产aⅴ9色| 欧美在线|欧美| 欧美日韩福利在线观看| 亚洲免费视频观看| 男人的天堂成人在线| 一本到12不卡视频在线dvd| 久久久www| 99国产精品久久久久老师| 久久se精品一区二区| 亚洲经典在线看| 欧美有码在线视频| 亚洲第一页在线| 午夜精品视频| 亚洲高清在线精品| 午夜亚洲性色视频| 亚洲日韩中文字幕在线播放| 久久成人在线| 99香蕉国产精品偷在线观看| 久久免费高清视频| 一区二区高清视频在线观看| 久久亚洲电影| 亚洲图片在线| 欧美另类视频在线| 久久gogo国模裸体人体| 欧美性做爰猛烈叫床潮| 亚洲韩日在线| 国产日韩一区二区三区在线播放| 一片黄亚洲嫩模| 精品69视频一区二区三区| 午夜精品剧场| 日韩视频免费| 蜜桃av噜噜一区| 香蕉久久夜色精品国产使用方法 | 欧美丝袜一区二区三区| 亚洲国产欧美一区二区三区久久 | 日韩视频在线永久播放|