亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Java編譯器的MC/DC測(cè)試覆蓋方法設(shè)計(jì)

        2017-03-31 20:25:21周睿
        軟件導(dǎo)刊 2016年8期

        周睿

        摘 要:基于Java編譯器的MC/DC測(cè)試覆蓋方法設(shè)計(jì),主要對(duì)Java文件中存在的條件表達(dá)式實(shí)現(xiàn)MC/DC測(cè)試覆蓋算法,并對(duì)其條件語句進(jìn)行插樁,生成插樁文件,針對(duì)后續(xù)的具體測(cè)試用例檢查是否滿足MC/DC測(cè)試覆蓋算法以及覆蓋率統(tǒng)計(jì)。

        關(guān)鍵詞關(guān)鍵詞:Java編譯器;MC/DC;插樁技術(shù)

        DOIDOI:10.11907/rjdk.161755

        中圖分類號(hào):TP312

        文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-7800(2016)008-0039-03

        0 引言

        測(cè)試工作日益重要,越來越多的公司使用自動(dòng)化測(cè)試工具。正確選擇和使用自動(dòng)化測(cè)試工具,能提高測(cè)試效率和質(zhì)量,降低測(cè)試成本。根據(jù)測(cè)試方法的不同,自動(dòng)化測(cè)試工具分為白盒測(cè)試工具、黑盒測(cè)試工具和測(cè)試管理工具。這些工具主要是Mercury Intera ctive(MI)、Segue、IBM/Rational Compuware Empirix 等公司的產(chǎn)品[1]。

        國(guó)內(nèi)外主流的白盒測(cè)試工具中都有MC/DC測(cè)試覆蓋分析,如McCabe、C++ Test、CodeCover等。與白盒測(cè)試邏輯覆蓋相比,MC/DC 覆蓋強(qiáng)度高于語句、判定和條件覆蓋,覆蓋范圍大于條件判定組合覆蓋,測(cè)試性能接近多條件覆蓋,但測(cè)試用例數(shù)卻只是線性增加,遠(yuǎn)小于多條件覆蓋的指數(shù)級(jí)增加,符合精簡(jiǎn)高效原則。因此,很有必要在白盒測(cè)試中對(duì)程序?qū)崿F(xiàn)MC/DC 測(cè)試覆蓋算法,生成最小測(cè)試用例集,達(dá)到自動(dòng)測(cè)試程序目的。

        1 核心技術(shù)

        1.1 插樁技術(shù)

        程序插樁技術(shù)最早由J.C.Huang 教授[1]提出,它是在保證被測(cè)程序原有邏輯完整性的基礎(chǔ)上在程序中插入一些探針,通過探針的執(zhí)行并拋出程序運(yùn)行的特征數(shù)據(jù)。通過對(duì)這些數(shù)據(jù)的分析,可以獲得程序的控制流和數(shù)據(jù)流信息,進(jìn)而得到邏輯覆蓋等動(dòng)態(tài)信息,從而實(shí)現(xiàn)測(cè)試目的。

        插樁就是在代碼中插入一段自定義的代碼。

        由于插入的代碼會(huì)一起編譯到可執(zhí)行文件中,所以可執(zhí)行文件在運(yùn)行過程中必然會(huì)執(zhí)行插入的自定義代碼,這樣就可以記錄我們希望得到的信息,例如函數(shù)的調(diào)用信息、軟件測(cè)試的覆蓋率等。插樁難點(diǎn)在于要學(xué)習(xí)目標(biāo)語言的語法,能夠?qū)ζ浣馕龊驼Z義理解;確定插入代碼內(nèi)容和位置。

        程序插樁技術(shù)是在被測(cè)程序中插入探針,然后通過探針的執(zhí)行獲得程序的控制流和數(shù)據(jù)流信息,以此實(shí)現(xiàn)測(cè)試目的??梢愿鶕?jù)探針插入的時(shí)間分為目標(biāo)代碼插樁和源代碼插樁。

        (1)目標(biāo)碼上插樁。在經(jīng)過編譯的目標(biāo)碼上插入記錄測(cè)試覆蓋率的語句,以記錄各個(gè)程序分支或者語句的測(cè)試覆蓋率數(shù)據(jù)。優(yōu)點(diǎn)在于不需要源程序,只要有目標(biāo)程序即可;編譯時(shí)間非常短;比較容易用于處理多種計(jì)算機(jī)語言編寫的軟件。缺點(diǎn)是程序執(zhí)行時(shí)的附加開銷很大;在沒有源碼的情況下,只能告知各模塊的測(cè)試覆蓋率是多少,無法顯示哪些語句或程序分支沒有測(cè)試到,從而無法有效地改進(jìn)測(cè)試覆蓋率。

        (2)源代碼插樁。在程序編譯之前直接在源代碼中插入記錄測(cè)試覆蓋率的語句,以達(dá)到記錄各程序分支或者組合條件的測(cè)試覆蓋率數(shù)據(jù)。優(yōu)點(diǎn)是程序執(zhí)行時(shí)的附加開銷很??;不僅能告知各模塊的測(cè)試覆蓋率是多少,還能顯示哪些語句或者程序分支和條件組合是否測(cè)試到,能有效提高測(cè)試覆蓋率。缺點(diǎn)是編譯時(shí)間較長(zhǎng),處理不同計(jì)算機(jī)語言需要不同的詞法語法分析器。本文采用基于源碼的白盒測(cè)試技術(shù),如果沒有源程序,即使通過目標(biāo)碼插樁方式進(jìn)行結(jié)構(gòu)測(cè)試,也無法顯示具體哪個(gè)語句或哪個(gè)分支被測(cè)試到,這就失去了測(cè)試價(jià)值。

        1.2 MC/DC測(cè)試覆蓋方法準(zhǔn)則

        MC/DC(修訂的條件/判定覆蓋,Modified Condition/Decision Coverage)準(zhǔn)則[4]是一種實(shí)用的軟件結(jié)構(gòu)覆蓋率測(cè)試準(zhǔn)則,廣泛應(yīng)用于軟件驗(yàn)證和測(cè)試過程中。

        MC/DC定義為在每個(gè)判定條件都曾獨(dú)立影響判定結(jié)果至少一次。 其中獨(dú)立影響意思是在其它條件不變的情況下,改變一個(gè)條件。根據(jù)DO-178B,MC/DC(Modified Condition/Decision Coverage)有如下要求:判定中每個(gè)條件的所有可能結(jié)果至少出現(xiàn)一次,每個(gè)判定本身的所有可能結(jié)果也至少出現(xiàn)一次,每個(gè)入口點(diǎn)和出口點(diǎn)至少要執(zhí)行一次,并且每個(gè)條件都能單獨(dú)影響判定結(jié)果。這里條件是指不含任何邏輯操作符的布爾表達(dá)式,由關(guān)系操作符構(gòu)成。判定是指包含邏輯操作符的布爾表達(dá)式。如果同一個(gè)布爾表達(dá)式在一個(gè)判定中出現(xiàn)多次,那么該表達(dá)式應(yīng)算作多個(gè)條件[5-6]。

        1.3 JDBC技術(shù)

        JDBC技術(shù)是Java DataBase Connectivity的縮寫,它是SUN公司提供的一種支持基本SQL功能的通用應(yīng)用程序接口(Application Programming Interface)。它由一組用Java語言編寫的類和接口組成。通過這些類和接口,程序開發(fā)人員可以在Java語言中方便地建立與數(shù)據(jù)庫(kù)的鏈接,通過執(zhí)行相應(yīng)SQL語句,完成對(duì)不同數(shù)據(jù)庫(kù)的訪問。

        JDBC能完成3件工作:①數(shù)據(jù)庫(kù)建立連接;②向數(shù)據(jù)庫(kù)建立連接;③處理數(shù)據(jù)庫(kù)返回結(jié)果。

        數(shù)據(jù)庫(kù)連接處理實(shí)現(xiàn)如下:

        //建立JDBC——ODBC

        sun.jdbc.odbc.JdbcOdbcDriver;

        //建立失敗時(shí)的錯(cuò)誤處理

        catch(ClassNotFoundException event){}

        //創(chuàng)建SQL查詢語句,將結(jié)果保存到rs對(duì)象中

        Con=建立JDBC——ODBC橋

        Sql=SQL查詢語句

        執(zhí)行查詢

        Rs=返回結(jié)果

        //SQL出錯(cuò)處理

        catch(SQLException e1){}

        1.4 XML文檔存儲(chǔ)數(shù)據(jù)

        可擴(kuò)展的標(biāo)識(shí)語言XML(Extensible Markup Language)是一種元標(biāo)注語言,即定義特定領(lǐng)域有關(guān)語義的、結(jié)構(gòu)化的標(biāo)記語言,這些標(biāo)記語言將文檔分成許多部件并對(duì)這些部件加以標(biāo)識(shí)[7]。

        2 設(shè)計(jì)思路

        2.1 技術(shù)路線

        具體如下:①利用插樁技術(shù),實(shí)現(xiàn)對(duì)Java文件基于源碼的插樁;

        ②利用MC/DC 準(zhǔn)則,設(shè)計(jì)實(shí)現(xiàn)算法流程,實(shí)現(xiàn)對(duì)Java文件中所有滿足MC/DC條件語句的測(cè)試覆蓋算法,并生成最小測(cè)試用例集;

        ③利用JDBC技術(shù),實(shí)現(xiàn)將測(cè)試用例集存儲(chǔ)到MYSQL中;

        ④利用XML技術(shù)實(shí)現(xiàn)對(duì)Java文件中的條件語句原型的相關(guān)信息存儲(chǔ),和存在數(shù)據(jù)庫(kù)中的測(cè)試用例集形成一個(gè)相互對(duì)應(yīng)的關(guān)系,以方便后續(xù)頁面顯示。

        2.2 基于源碼的條件插樁技術(shù)

        插樁點(diǎn)識(shí)別過程中的詞法、語法分析只需識(shí)別有限的程序結(jié)構(gòu)即可。而對(duì)程序中所有的詞法、語法進(jìn)行分析,是因?yàn)閺闹虚g代碼生成匯編代碼時(shí),需要以詞法、語法分析作為基礎(chǔ),識(shí)別出所有的程序結(jié)構(gòu)。插樁點(diǎn)識(shí)別程序的輸入為預(yù)處理后的源代碼文件,輸出是插樁后的源代碼文件,這樣只對(duì)有限的程序結(jié)構(gòu)進(jìn)行插樁,減少了膨脹性,提高了效率,如圖1所示。

        插樁具體過程:①對(duì)Java文件編譯,在語法分析過程中,找到需要的插樁點(diǎn),記錄下此位置的行號(hào)字節(jié)偏移量,并將這些信息存入設(shè)計(jì)的插樁結(jié)構(gòu)對(duì)象JInstru中;②語法分析結(jié)束后,將對(duì)象JInstru 中的信息即屬性值,寫入字節(jié)流DataOutputStream 中,并生成.map 文件;③從DataOutputStream 讀出需要插樁的信息,然后對(duì)數(shù)據(jù)進(jìn)行分析,根據(jù)需要插樁的行號(hào)、偏移量、插樁點(diǎn)種類,插入相應(yīng)的代碼,完成整個(gè)Java文件的插樁,最終生成插樁后文件,如圖2所示。

        2.3 MC/DC測(cè)試覆蓋方法

        ①?gòu)腏ava編譯器語法分析過程中分析條件語句里的布爾表達(dá)式和它對(duì)應(yīng)的抽象語法樹;②將抽象語法樹以逆波蘭表達(dá)式形式送入FirstProcess,形如AB||C&&,對(duì)其進(jìn)行整形和封裝,最終成為一個(gè)動(dòng)態(tài)的list;③從FirstProcess 接口輸出的list進(jìn)入SecondProcess接口,對(duì)其后序遍歷,判斷條件的前置條件和默認(rèn)用例值并封裝成對(duì)象,存儲(chǔ)到ArrayList 里,送入下一個(gè)接口;④從SecondProcess接口輸出的 ArrayList 進(jìn)入 ThirdProcess 接口,通過MC/DC 的相關(guān)原則輸出滿足表達(dá)式的最小測(cè)試用例。MC/DC測(cè)試覆蓋生成過程如圖3所示。

        2.4 存儲(chǔ)結(jié)構(gòu)

        MC/DC 的數(shù)據(jù)存儲(chǔ)分為兩部分:①?gòu)腏ava編譯器詞法分析結(jié)束后,要將每個(gè)條件語句的原型存儲(chǔ)起來生成一個(gè)XML文件,用這種標(biāo)記語言來將復(fù)雜的條件語句之間的關(guān)系和條件語句中各條件之間的關(guān)系作清晰的存儲(chǔ)和展現(xiàn);②每個(gè)條件語句對(duì)應(yīng)的最小測(cè)試用例集存入到數(shù)據(jù)庫(kù)中。這樣存儲(chǔ)既能保證存儲(chǔ)的可行性,又能保證以后界面化顯示數(shù)據(jù)時(shí),能方便調(diào)用到正確數(shù)據(jù)信息。數(shù)據(jù)分析存儲(chǔ)過程如圖4所示。

        2.5 條件原型存儲(chǔ)

        XML的存儲(chǔ)結(jié)構(gòu):

        例如: if(a){

        }

        while(a==2 || b >5){

        }

        設(shè)計(jì)的Xml結(jié)構(gòu)如下:

        0

        a

        0

        a == 2

        1

        b > 5

        Xml的根節(jié)點(diǎn)是ConditionBox,用來存儲(chǔ)分析Java文件中的所有條件語句的條件原型,里面包含了很多Expression節(jié)點(diǎn)。Expression 節(jié)點(diǎn)有兩個(gè)屬性:commit 是表達(dá)式的原型,例如 a 、 a == 2 這樣的整個(gè)表達(dá)式。index是指該表達(dá)式在Java文件中第幾個(gè)分析條件表達(dá)式,即為索引。而每一個(gè)Expression都有很多個(gè)Condition子節(jié)點(diǎn), Condition的子節(jié)點(diǎn)包括 ID 和 ConditionField 分別存儲(chǔ)在這個(gè)條件的表達(dá)式中(存入數(shù)據(jù)庫(kù)中的測(cè)試用例條件就是用該標(biāo)記存儲(chǔ)的)。這樣Xml里面的表達(dá)式原型和SQL里面的最小測(cè)試用例能一一對(duì)應(yīng)起來。

        元素內(nèi)容中的字符數(shù)據(jù)不能直接使用:< & > ‘ “,因?yàn)檫@些符號(hào)對(duì)XML分析器而言都有特殊意義。為了解決這些問題,可以使用字符引用來表達(dá)這些字符,如要表達(dá)這個(gè)標(biāo)簽:

        a <= 2,只能使用字符引用表達(dá)來完成存儲(chǔ)結(jié)構(gòu),如:

        a < = 2。

        XML預(yù)定義的實(shí)體引用如表1所示。

        2.6 測(cè)試用例存儲(chǔ)

        Java文件中有多少個(gè)表達(dá)式就有多少個(gè)Table,MC/DC 算法的每一個(gè)條件表達(dá)式形成一張存儲(chǔ)生成的測(cè)試用例表。

        3 結(jié)語

        全球信息化快速推動(dòng)了中國(guó)軟件產(chǎn)業(yè)的發(fā)展,極大地促進(jìn)了軟件測(cè)試業(yè)的發(fā)展。但目前中國(guó)在軟件測(cè)試認(rèn)識(shí)、軟件測(cè)試技術(shù)、軟件測(cè)試商業(yè)化等方面,與歐美還存在很大差距。具有高安全性要求的航空航天軟件尤其需要可靠、有效的軟件測(cè)試,錯(cuò)誤一旦發(fā)生,結(jié)果往往是災(zāi)難性的。MC/DC準(zhǔn)則是為了只經(jīng)過較少的測(cè)試就能達(dá)到完備測(cè)試相同的效果。本研究基于Java編譯器設(shè)計(jì)完成了MC/DC測(cè)試覆蓋方法,為后期進(jìn)一步實(shí)現(xiàn)覆蓋率統(tǒng)計(jì)打下了堅(jiān)實(shí)的基礎(chǔ)。

        參考文獻(xiàn):

        [1] 熊繼光.新一代軟件工程體系與實(shí)踐[M].北京:清華大學(xué)出版社,2008.

        [2] [美]APPEL A W.現(xiàn)代編譯器的Java實(shí)現(xiàn)[M].第2版.北京:電子工業(yè)出版社,2004.

        [3] [美]阿霍.編譯原理[M].北京:機(jī)械工業(yè)出版社,2003.

        [4] [美]DANIEL J MOSLEY , BRUCE A POSEY.軟件測(cè)試自動(dòng)化[M].北京:機(jī)械工業(yè)出版社,2003.

        [5] 朱少民.軟件測(cè)試方法和技術(shù)[M].北京:清華大學(xué)出版社,2005.

        [6] 張義德,王國(guó)慶,湯幼寧.更改的判定條件覆蓋測(cè)試技術(shù)研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2003(1):123-129.

        [7] 朱海燕,范輝,謝青松.測(cè)試用例排序的研究[J].計(jì)算機(jī)工程與科學(xué),2008(5):254-259.

        [8] 陳鑫,楊平.應(yīng)用MC/DC準(zhǔn)則時(shí)需考慮的問題及其改進(jìn)方法[J].計(jì)算機(jī)工程與設(shè)計(jì),2004(6):115-118.

        (責(zé)任編輯:杜能鋼)

        最新中文字幕av无码不卡| 久久青草国产免费观看| 国产精品天天看大片特色视频| 国产黄在线观看免费观看不卡| 亚洲精品乱码久久久久久蜜桃图片| 国产精品久久777777| 亚洲av永久无码精品古装片| 午夜被窝精品国产亚洲av香蕉| 精品含羞草免费视频观看| 成 人片 黄 色 大 片| 影音先锋色小姐| 无码人妻丰满熟妇片毛片| 亚洲人午夜射精精品日韩| 男ji大巴进入女人的视频小说| 中文 在线 日韩 亚洲 欧美| 人妻色综合网站| 久久久久久久性潮| 欧美成人a在线网站| 2021国产精品一区二区在线 | 99蜜桃在线观看免费视频网站| 亚洲av永久无码精品| 亚洲精品成人区在线观看| 国产精品对白刺激久久久| 久久精品视频在线看99| 无遮挡十八禁在线视频国产制服网站| 无码在线观看123| 男女搞黄在线观看视频| 亚洲素人日韩av中文字幕| 日本一区二区三区看片| 国产精品久久熟女吞精| 精品日韩av专区一区二区| 日本三区在线观看视频| 亚洲毛片一区二区在线| 亚洲中文字幕无码av永久| 久久亚洲中文字幕精品一区| 伊人久久大香线蕉av色| 99久久婷婷国产综合精品电影| 欧美性猛交xxxx乱大交丰满| 国产精品国产成人国产三级| 国产亚洲精品成人无码精品网站| 人妻无码人妻有码不卡|