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

代碼覆蓋率測試工具Istanbul的應(yīng)用

2020-05-13 14:15:23史蓓娜
電腦知識與技術(shù) 2020年8期

摘要:在互聯(lián)網(wǎng)時(shí)代,隨著業(yè)務(wù)增長,前端需求激增,軟件產(chǎn)品功能迭代加快,前端代碼質(zhì)量越來越受到重視,如何在有限時(shí)間內(nèi)保證前端代碼質(zhì)量。就此問題將介紹前端JavaScript代碼覆蓋率工具Istanbul,分析lstanbul的四種代碼覆蓋率測量指標(biāo),并通過具體實(shí)例闡述lstanbul在前端單元測試中的應(yīng)用。應(yīng)用結(jié)果表明lstanbul能快速定位未被測試覆蓋的代碼,以此完善測試用例,提升軟件產(chǎn)品質(zhì)量。

關(guān)鍵詞:軟件測試;單元測試;代碼覆蓋率;lstanbul

中圖分類號:TP319 文獻(xiàn)標(biāo)識碼:A

文章編號:1009-3044(2020)08-0059-03

1 背景

軟件測試是軟件工程中重要一環(huán),用于驗(yàn)證產(chǎn)品代碼按照預(yù)期工作,是保障軟件產(chǎn)品質(zhì)量的重要手段。其中,單元測試是對軟件最小執(zhí)行單元的測試活動(dòng),能盡早發(fā)現(xiàn)軟件缺陷,是軟件測試的基礎(chǔ)。以往單元測試只針對服務(wù)器端語言,隨著web業(yè)務(wù)的發(fā)展,前端代碼日趨復(fù)雜,使得對JavaScript進(jìn)行單元測試尤為重要。

代碼覆蓋率是軟件測試的度量指標(biāo),反映測試用例對被測軟件代碼的覆蓋程度,量化測試工作。通過代碼覆蓋率測試能及時(shí)確認(rèn)未被測試用例執(zhí)行的代碼,提前發(fā)現(xiàn)代碼邏輯分支不合理之處,提升產(chǎn)品代碼的可靠性和穩(wěn)定性。

2 Istanbul介紹

Istanbul是前端JavaScript常用的代碼覆蓋率測試工具,以土耳其名城伊斯坦布爾命名,它可以靜態(tài)直接統(tǒng)計(jì)JavaScript文件,也可以結(jié)合測試框架在單元測試中對JavaScript文件進(jìn)行覆蓋率統(tǒng)計(jì)。

Istanbul提供了四種代碼覆蓋率測量指標(biāo)。語句覆蓋率(statement coverage)統(tǒng)計(jì)代碼中所有可執(zhí)行語句的執(zhí)行率。分支覆蓋率(branch coverage)統(tǒng)計(jì)代碼中所有分支的執(zhí)行率,即判斷的取真分支和取假分支是否都被執(zhí)行了。函數(shù)覆蓋率(func-tion coverage)統(tǒng)計(jì)代碼中所有函數(shù)的被調(diào)用率。行覆蓋率(linecoverage)統(tǒng)計(jì)代碼中所有有效代碼行的執(zhí)行率,其與語句覆蓋率類似,在代碼規(guī)范的情況下,行覆蓋率和語句覆蓋率應(yīng)該是一致的。以上四種測量指標(biāo)是Istanbul的輸出結(jié)果,每個(gè)指標(biāo)均列出了覆蓋的數(shù)量和比例,其中分支覆蓋率能深入發(fā)現(xiàn)代碼邏輯中的缺陷,是四種覆蓋中最強(qiáng)的覆蓋。

運(yùn)行npm install istanbul-g將Istanbul安裝為全局模塊,安裝成功后運(yùn)行istanbul help可查看其幫助信息。

3 Istanbul收集覆蓋率信息

下面來看一個(gè)使用Istanbul收集覆蓋率信息的簡單實(shí)例,測試文件simple.js見圖1。

運(yùn)行istanbul cover simple.js,得到4個(gè)覆蓋率測量指標(biāo)結(jié)果見圖2。

以上結(jié)果顯示,simple.js有4個(gè)語句,執(zhí)行了3個(gè),因此語句覆蓋率為75%;有2個(gè)分支,執(zhí)行了1個(gè),因此分支覆蓋率為50%;有0個(gè)函數(shù),調(diào)用了0個(gè),因此函數(shù)覆蓋率為100%;有4行代碼,執(zhí)行了3行,因此行覆蓋率為75%。

Istanbul會(huì)在coverage/lcov-report目錄下生成HTML報(bào)告,可直觀查看到覆蓋率詳細(xì)信息,定位沒有被覆蓋到的代碼。打開coverage/lcov-report/index.html文件,頁面中展示各文件夾下文件的代碼覆蓋率見圖3。

點(diǎn)擊相應(yīng)文件夾,可見該文件的代碼覆蓋率統(tǒng)計(jì)情況見圖4。

綠色部分表示該行代碼被完整執(zhí)行,紅色部分表示該行代碼沒有被執(zhí)行,即未覆蓋a= false的情況。

4 Istanbul代碼覆蓋率標(biāo)準(zhǔn)檢查

Istanbul除了收集覆蓋率信息,還可根據(jù)測試要求設(shè)定滿意的代碼覆蓋率標(biāo)準(zhǔn),來檢查覆蓋率是否達(dá)到設(shè)定的指標(biāo),如果未達(dá)標(biāo)則打印錯(cuò)誤信息。

4.1 百分比標(biāo)準(zhǔn)

對測試文件simple.js運(yùn)行istanbul check-coverage -state-ment 85

該命令設(shè)置語句覆蓋率標(biāo)準(zhǔn)為85%,運(yùn)行結(jié)果見圖6。

因測試文件simple.js的語句覆蓋率為75%,未達(dá)到設(shè)定的語句覆蓋率標(biāo)準(zhǔn)85%,故報(bào)錯(cuò)提示語句覆蓋率未達(dá)標(biāo)。

4.2 絕對值標(biāo)準(zhǔn)

對測試文件simple.JS運(yùn)行istanbul check-coverage -branch一1

該命令設(shè)置允許有1個(gè)分支未被覆蓋,運(yùn)行結(jié)果見圖7。

因測試文件simple.js有1個(gè)分支未被執(zhí)行,符合設(shè)定的分支覆蓋率標(biāo)準(zhǔn),故通過了覆蓋率測試,運(yùn)行結(jié)果無報(bào)錯(cuò)。

4.3 百分比標(biāo)準(zhǔn)和絕對值標(biāo)準(zhǔn)結(jié)合使用

百分比標(biāo)準(zhǔn)和絕對值標(biāo)準(zhǔn)可結(jié)合使用,對測試文件simple.js運(yùn)行istanbul check-coverage -statement 85 -branch—l -functionl00 -line一1

該命令共設(shè)置了4個(gè)覆蓋率標(biāo)準(zhǔn):語句覆蓋率標(biāo)準(zhǔn)為85%,允許1個(gè)分支未被執(zhí)行,函數(shù)覆蓋率標(biāo)準(zhǔn)為100%,允許1行代碼未被執(zhí)行。這4個(gè)標(biāo)準(zhǔn)間是“與”的關(guān)系,即只要1個(gè)標(biāo)準(zhǔn)未達(dá)標(biāo),則報(bào)錯(cuò)。運(yùn)行結(jié)果見圖8。

因測試文件simple.js語句覆蓋率為75%,未達(dá)到設(shè)定的語句覆蓋率標(biāo)準(zhǔn)85%,故報(bào)錯(cuò)提示語句覆蓋率未達(dá)標(biāo)。

5 Istanbul結(jié)合Mocha測試框架

測試框架提供腳本運(yùn)行的環(huán)境,是運(yùn)行測試的工具。實(shí)際應(yīng)用中,Istanbul總是與測試框架結(jié)合使用,Mocha是一款流行的JavaScript單元測試框架,適用于瀏覽器和Node.js環(huán)境。Mo-cha用describe塊和it塊來進(jìn)行測試用例分組,測試腳本中包含一個(gè)或多個(gè)describe塊,每個(gè)describe塊包含一個(gè)或多個(gè)it塊。describe為測試套件testsuite,表示一組相關(guān)的測試,該函數(shù)包含兩個(gè)參數(shù),第一個(gè)參數(shù)是測試套件名稱(在測試報(bào)告中顯示的描述),第二個(gè)參數(shù)是實(shí)際執(zhí)行的函數(shù)。it塊為單個(gè)測試用例testcase,表示一個(gè)獨(dú)立的測試,它是真正執(zhí)行的部分,該函數(shù)包含兩個(gè)參數(shù),第一個(gè)參數(shù)是測試用例名稱(在測試報(bào)告中顯示的描述),第二個(gè)參數(shù)是實(shí)際執(zhí)行的函數(shù)。運(yùn)行npm install mo-cha—g將Mocha安裝為全局模塊,安裝成功后運(yùn)行mocha -help可查看其幫助信息。

斷言可判斷源代碼的執(zhí)行結(jié)果與預(yù)期結(jié)果是否一致,若不一致則拋出錯(cuò)誤。Mocha不提供斷言,可搭配Chai使用。Chai是流行的JavaScript測試斷言庫,適用于Node.JS和瀏覽器的行為驅(qū)動(dòng)測試以及測試驅(qū)動(dòng)測試,能搭配測試框架一起使用。運(yùn)行npm install chai—g將Chai安裝為全局模塊。

以下為判斷輸入是否為數(shù)字的腳本文件。定義srtP為正則表達(dá)式,使用test0方法,將輸入值與srtP進(jìn)行匹配,若不匹配說明輸入包含非數(shù)字,返回false。若匹配,說明輸入均為數(shù)字,返回true。腳本文件my.Js見圖9。

修改my.Js文件,把模塊中希望被外界訪問的內(nèi)容定義到exports對象中,以便在測試腳本中使用(require引用該模塊),修改后文件isNum.js見圖10。

編寫單元測試腳本testNum.js見圖11,測試用例包含1個(gè)測試單元,若輸人數(shù)字4則得到true。將測試腳本放在test目錄下。

運(yùn)行istanbul cover node—global/ node—modules/ mocha/ bin/_mocha,進(jìn)行代碼覆蓋率檢查,結(jié)果見圖12。結(jié)果顯示1個(gè)測試用例成功通過,函數(shù)覆蓋率為100%,但語句覆蓋率、分支覆蓋率、行覆蓋率未達(dá)到100%。

查看coverage/lcov-report下HTML報(bào)告見圖13,可知num為false的分支未覆蓋,需添加新的測試用例來覆蓋缺失的測試場景。

完善測試用例,測試腳本testNum.js見圖14,測試用例分為2個(gè)測試單元,若輸入數(shù)字4則得到true,若輸入字母d則得到false。

再運(yùn)行istanbul cover node_global/node_modules/mocha/bin/_mocha進(jìn)行代碼覆蓋率檢查,結(jié)果見圖15。結(jié)果顯示2個(gè)測試用例都成功通過了,語句覆蓋率、分支覆蓋率、函數(shù)覆蓋率、行覆蓋率均為100%。

查看coverage/lcov-report下HTML報(bào)告見圖16.顯示已覆蓋num為false的分支。

6 結(jié)束語

代碼覆蓋率測試能發(fā)現(xiàn)未被覆蓋的代碼,這部分代碼出現(xiàn)不可預(yù)知行為的機(jī)率較大,有存在問題的風(fēng)險(xiǎn),影響代碼質(zhì)量,應(yīng)引起足夠重視。Istanbul能從語句、分支、函數(shù)、行四種測量維度提供覆蓋率信息,幫助迅速定位未被執(zhí)行的代碼,指導(dǎo)有針對性地補(bǔ)充測試用例,盡可能地發(fā)現(xiàn)更多潛在代碼缺陷,提高代碼質(zhì)量,為用戶提供穩(wěn)定可靠的軟件產(chǎn)品。

參考文獻(xiàn):

[1]陳衛(wèi)俊,趙璨,周磊,互聯(lián)網(wǎng)單元測試及實(shí)踐[M].北京:電子工業(yè)出版社,2008.

[2]王飛,向螈.C++Test在核電數(shù)據(jù)庫軟件單元測試中的應(yīng)用研究[J].電腦知識與技術(shù),2019,15(12):1-3.

[3]褚悅,代碼覆蓋率驅(qū)動(dòng)的測試用例管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].西安:西安電子科技大學(xué),2017.

[4]尤嘉.Node.js進(jìn)階之路[Ml.北京:清華大學(xué)出版社,2017.

【通聯(lián)編輯:謝媛媛】

收稿日期:2020-01-25

基金項(xiàng)目:2017年國家重點(diǎn)研發(fā)計(jì)劃(項(xiàng)目編號:2017YFB0802300)

作者簡介:史蓓娜(1986-),女,江蘇常州人,研究實(shí)習(xí)員,學(xué)士,研究方向?yàn)橛?jì)算機(jī)應(yīng)用。

主站蜘蛛池模板: 91精品啪在线观看国产91九色| 在线免费看片a| 久久6免费视频| 国产精品无码AV片在线观看播放| 熟妇丰满人妻av无码区| 亚洲区欧美区| 中文字幕 欧美日韩| 欧美视频在线不卡| 国产成人1024精品下载| 热伊人99re久久精品最新地| 特级毛片免费视频| 香蕉综合在线视频91| 亚洲婷婷丁香| 亚洲最新地址| 久久香蕉欧美精品| 伊人AV天堂| 久久综合五月| 国产毛片高清一级国语 | 1024国产在线| 性色生活片在线观看| 国产浮力第一页永久地址| 婷婷综合在线观看丁香| 永久天堂网Av| 久久毛片基地| 免费在线视频a| 国产色网站| 久久夜色精品国产嚕嚕亚洲av| 欧美色视频在线| 欧美一级在线| 日本少妇又色又爽又高潮| 亚洲一区网站| 天堂中文在线资源| 国产网友愉拍精品| 免费A∨中文乱码专区| 久久精品中文字幕免费| 中文字幕一区二区人妻电影| 日韩精品一区二区深田咏美| 欧美中文一区| 精品少妇人妻av无码久久| 国产精品99在线观看| 亚洲欧美日韩中文字幕一区二区三区| 国产9191精品免费观看| 国产成人精品亚洲日本对白优播| 青青草原国产精品啪啪视频| 四虎永久免费地址在线网站| 在线看AV天堂| 韩国v欧美v亚洲v日本v| 免费jizz在线播放| 国产男女免费视频| 日韩免费中文字幕| 免费欧美一级| 亚洲日韩精品欧美中文字幕| 亚洲久悠悠色悠在线播放| 2021精品国产自在现线看| v天堂中文在线| 操国产美女| 国产一区免费在线观看| 精品综合久久久久久97| 国产极品美女在线播放| 亚洲va欧美ⅴa国产va影院| 性69交片免费看| 午夜福利无码一区二区| 激情六月丁香婷婷四房播| 亚洲无线一二三四区男男| 99热这里只有精品在线观看| 亚洲AV免费一区二区三区| 免费人成视频在线观看网站| 国产精品无码影视久久久久久久| 亚洲成人播放| 日韩高清在线观看不卡一区二区| 成人字幕网视频在线观看| 国产自在自线午夜精品视频| 国产激爽大片高清在线观看| aa级毛片毛片免费观看久| 新SSS无码手机在线观看| 国产第一福利影院| 欧美精品亚洲精品日韩专| 四虎影视无码永久免费观看| 欧美精品二区| 色综合久久无码网| 精品无码专区亚洲| 国产成人亚洲精品蜜芽影院|