999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

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

周睿

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

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

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

1 核心技術(shù)

1.1 插樁技術(shù)

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

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

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

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

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

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

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

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

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ù)庫的鏈接,通過執(zhí)行相應(yīng)SQL語句,完成對(duì)不同數(shù)據(jù)庫的訪問。

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

數(shù)據(jù)庫連接處理實(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條件語句的測試覆蓋算法,并生成最小測試用例集;

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

④利用XML技術(shù)實(shí)現(xiàn)對(duì)Java文件中的條件語句原型的相關(guān)信息存儲(chǔ),和存在數(shù)據(jù)庫中的測試用例集形成一個(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測試覆蓋方法

①從Java編譯器語法分析過程中分析條件語句里的布爾表達(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á)式的最小測試用例。MC/DC測試覆蓋生成過程如圖3所示。

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

MC/DC 的數(shù)據(jù)存儲(chǔ)分為兩部分:①從Java編譯器詞法分析結(jié)束后,要將每個(gè)條件語句的原型存儲(chǔ)起來生成一個(gè)XML文件,用這種標(biāo)記語言來將復(fù)雜的條件語句之間的關(guān)系和條件語句中各條件之間的關(guān)系作清晰的存儲(chǔ)和展現(xiàn);②每個(gè)條件語句對(duì)應(yīng)的最小測試用例集存入到數(shù)據(jù)庫中。這樣存儲(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ù)庫中的測試用例條件就是用該標(biāo)記存儲(chǔ)的)。這樣Xml里面的表達(dá)式原型和SQL里面的最小測試用例能一一對(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 測試用例存儲(chǔ)

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

3 結(jié)語

全球信息化快速推動(dòng)了中國軟件產(chǎn)業(yè)的發(fā)展,極大地促進(jìn)了軟件測試業(yè)的發(fā)展。但目前中國在軟件測試認(rèn)識(shí)、軟件測試技術(shù)、軟件測試商業(yè)化等方面,與歐美還存在很大差距。具有高安全性要求的航空航天軟件尤其需要可靠、有效的軟件測試,錯(cuò)誤一旦發(fā)生,結(jié)果往往是災(zāi)難性的。MC/DC準(zhǔn)則是為了只經(jīng)過較少的測試就能達(dá)到完備測試相同的效果。本研究基于Java編譯器設(shè)計(jì)完成了MC/DC測試覆蓋方法,為后期進(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.軟件測試自動(dòng)化[M].北京:機(jī)械工業(yè)出版社,2003.

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

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

[7] 朱海燕,范輝,謝青松.測試用例排序的研究[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é)任編輯:杜能鋼)

主站蜘蛛池模板: 在线日韩日本国产亚洲| 999精品免费视频| 亚洲精品大秀视频| 欧美精品色视频| 国产综合亚洲欧洲区精品无码| 久久伊人操| 亚洲高清资源| 日韩欧美中文在线| 久久久国产精品免费视频| 亚洲综合一区国产精品| AV片亚洲国产男人的天堂| 国产真实自在自线免费精品| 亚洲欧美成aⅴ人在线观看| 日本精品视频一区二区| 国产打屁股免费区网站| 丁香五月婷婷激情基地| 国产菊爆视频在线观看| 波多野结衣视频网站| 中文一级毛片| 欧洲成人免费视频| a级毛片免费网站| 国产在线视频导航| 国产亚洲欧美在线中文bt天堂 | 国产成人一区在线播放| 亚洲无码37.| 最新国产高清在线| 97狠狠操| 高清无码不卡视频| 亚洲AV一二三区无码AV蜜桃| 九九热精品视频在线| 久久久久国产精品熟女影院| 亚洲精品日产精品乱码不卡| 亚洲欧美激情小说另类| 日本一本在线视频| 久久久久国产精品嫩草影院| 欧美不卡视频在线观看| 亚洲综合九九| 凹凸精品免费精品视频| 欧美日本不卡| 重口调教一区二区视频| 国产尤物视频在线| 国产精品亚洲精品爽爽| 亚洲色精品国产一区二区三区| 国产一在线| 日韩二区三区无| 日本精品视频| 久久永久视频| 麻豆精品久久久久久久99蜜桃| 国产男人的天堂| 永久天堂网Av| 97视频免费在线观看| h视频在线播放| 精品国产成人三级在线观看| 在线人成精品免费视频| 精品一区二区无码av| 伊人久久精品亚洲午夜| 91精品国产一区自在线拍| 国产成人精品三级| 欧美翘臀一区二区三区| 国产精品免费露脸视频| 欧美日韩精品综合在线一区| 亚洲最黄视频| 色综合婷婷| 2019年国产精品自拍不卡| 亚洲欧洲一区二区三区| 亚洲浓毛av| 波多野结衣AV无码久久一区| 婷婷综合色| 婷婷亚洲最大| 国产在线观看第二页| 99视频只有精品| 国产精品流白浆在线观看| 国产香蕉97碰碰视频VA碰碰看| 91久久青青草原精品国产| 国产h视频免费观看| 国产亚洲视频播放9000| 亚洲最新地址| 亚洲国产成人麻豆精品| 欧美一区二区福利视频| 国产毛片高清一级国语| 伊人久综合| 精品久久高清|