• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于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ì)其條件語(yǔ)句進(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è)試工作日益重要,越來(lái)越多的公司使用自動(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)度高于語(yǔ)句、判定和條件覆蓋,覆蓋范圍大于條件判定組合覆蓋,測(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ǔ)上在程序中插入一些探針,通過(guò)探針的執(zhí)行并拋出程序運(yùn)行的特征數(shù)據(jù)。通過(guò)對(duì)這些數(shù)據(jù)的分析,可以獲得程序的控制流和數(shù)據(jù)流信息,進(jìn)而得到邏輯覆蓋等動(dòng)態(tài)信息,從而實(shí)現(xiàn)測(cè)試目的。

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

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

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

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

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

      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的縮寫(xiě),它是SUN公司提供的一種支持基本SQL功能的通用應(yīng)用程序接口(Application Programming Interface)。它由一組用Java語(yǔ)言編寫(xiě)的類和接口組成。通過(guò)這些類和接口,程序開(kāi)發(fā)人員可以在Java語(yǔ)言中方便地建立與數(shù)據(jù)庫(kù)的鏈接,通過(guò)執(zhí)行相應(yīng)SQL語(yǔ)句,完成對(duì)不同數(shù)據(jù)庫(kù)的訪問(wèn)。

      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查詢語(yǔ)句,將結(jié)果保存到rs對(duì)象中

      Con=建立JDBC——ODBC橋

      Sql=SQL查詢語(yǔ)句

      執(zhí)行查詢

      Rs=返回結(jié)果

      //SQL出錯(cuò)處理

      catch(SQLException e1){}

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

      可擴(kuò)展的標(biāo)識(shí)語(yǔ)言XML(Extensible Markup Language)是一種元標(biāo)注語(yǔ)言,即定義特定領(lǐng)域有關(guān)語(yǔ)義的、結(jié)構(gòu)化的標(biāo)記語(yǔ)言,這些標(biāo)記語(yǔ)言將文檔分成許多部件并對(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條件語(yǔ)句的測(cè)試覆蓋算法,并生成最小測(cè)試用例集;

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

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

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

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

      插樁具體過(guò)程:①對(duì)Java文件編譯,在語(yǔ)法分析過(guò)程中,找到需要的插樁點(diǎn),記錄下此位置的行號(hào)字節(jié)偏移量,并將這些信息存入設(shè)計(jì)的插樁結(jié)構(gòu)對(duì)象JInstru中;②語(yǔ)法分析結(jié)束后,將對(duì)象JInstru 中的信息即屬性值,寫(xiě)入字節(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編譯器語(yǔ)法分析過(guò)程中分析條件語(yǔ)句里的布爾表達(dá)式和它對(duì)應(yīng)的抽象語(yǔ)法樹(shù);②將抽象語(yǔ)法樹(shù)以逆波蘭表達(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 接口,通過(guò)MC/DC 的相關(guān)原則輸出滿足表達(dá)式的最小測(cè)試用例。MC/DC測(cè)試覆蓋生成過(guò)程如圖3所示。

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

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

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

      a <= 2,只能使用字符引用表達(dá)來(lái)完成存儲(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é)語(yǔ)

      全球信息化快速推動(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)過(guò)較少的測(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í)需考慮的問(wèn)題及其改進(jìn)方法[J].計(jì)算機(jī)工程與設(shè)計(jì),2004(6):115-118.

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

      化州市| 玉田县| 兴业县| 章丘市| 九龙县| 安丘市| 阜新| 聂荣县| 突泉县| 娄底市| 赤城县| 亳州市| 合江县| 永宁县| 绩溪县| 苗栗市| 阜城县| 瑞金市| 吉隆县| 兴化市| 诏安县| 宣恩县| 儋州市| 华阴市| 常熟市| 北碚区| 南岸区| 遂溪县| 登封市| 左权县| 定结县| 慈利县| 泸定县| 达日县| 漳州市| 南平市| 团风县| 巢湖市| 南投县| 昌黎县| 新平|