成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

編程語言中單元測(cè)試代碼覆蓋率的示例分析-創(chuàng)新互聯(lián)

小編給大家分享一下編程語言中單元測(cè)試代碼覆蓋率的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比大通網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式大通網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋大通地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴。

首先,讓我們先來了解一下所謂的“代碼覆蓋率”。我找來了所謂的定義:

代碼覆蓋率 = 代碼的覆蓋程度,一種度量方式。

上面簡短精悍的文字非常準(zhǔn)確的描述了代碼覆蓋率的含義。而代碼覆蓋程度的度量方式是有很多種的,這里介紹一下最常用的幾種:

1. 語句覆蓋(StatementCoverage)

又稱行覆蓋(LineCoverage),段覆蓋(SegmentCoverage),基本塊覆蓋(BasicBlockCoverage),這是最常用也是最常見的一種覆蓋方式,就是度量被測(cè)代碼中每個(gè)可執(zhí)行語句是否被執(zhí)行到了。這里說的是“可執(zhí)行語句”,因此就不會(huì)包括像C++的頭文件聲明,代碼注釋,空行,等等。非常好理解,只統(tǒng)計(jì)能夠執(zhí)行的代碼被執(zhí)行了多少行。

需要注意的是,單獨(dú)一行的花括號(hào){} 也常常被統(tǒng)計(jì)進(jìn)去。語句覆蓋常常被人指責(zé)為“最弱的覆蓋”,它只管覆蓋代碼中的執(zhí)行語句,卻不考慮各種分支的組合等等。

假如你的上司只要求你達(dá)到語句覆蓋,那么你可以省下很多功夫,但是,換來的確實(shí)測(cè)試效果的不明顯,很難更多地發(fā)現(xiàn)代碼中的問題。

這里舉一個(gè)不能再簡單的例子,我們看下面的被測(cè)試代碼:

int foo(int a, int b)
{
 return a / b;
}

假如我們的測(cè)試人員編寫如下測(cè)試案例:

TeseCase: a = 10, b = 5

測(cè)試人員的測(cè)試結(jié)果會(huì)告訴你,他的代碼覆蓋率達(dá)到了100%,并且所有測(cè)試案例都通過了。然而遺憾的是,我們的語句覆蓋率達(dá)到了所謂的100%,但是卻沒有發(fā)現(xiàn)最簡單的Bug,比如,當(dāng)我讓b=0時(shí),會(huì)拋出一個(gè)除零異常。

正因如此,假如上面只要求測(cè)試人員語句覆蓋率達(dá)到多少的話,測(cè)試人員只要鉆鉆空子,專門針對(duì)如何覆蓋代碼行編寫測(cè)試案例,就很容易達(dá)到主管的要求。當(dāng)然了,這同時(shí)說明了幾個(gè)問題:

1.主管只使用語句覆蓋率來考核測(cè)試人員本身就有問題。

2.測(cè)試人員的目的是為了測(cè)好代碼,鉆如此的空子是缺乏職業(yè)道德的。

3.是否應(yīng)該采用更好的考核方式來考核測(cè)試人員的工作?

為了尋求更好的考核標(biāo)準(zhǔn),我們必須先了解完代碼覆蓋率到底還有哪些,如果你的主管只知道語句覆蓋,行覆蓋,那么你應(yīng)該主動(dòng)向他介紹還有更多的覆蓋方式。比如:

2. 判定覆蓋(DecisionCoverage)

又稱分支覆蓋(BranchCoverage),所有邊界覆蓋(All-EdgesCoverage),基本路徑覆蓋(BasicPathCoverage),判定路徑覆蓋(Decision-Decision-Path)。它度量程序中每一個(gè)判定的分支是否都被測(cè)試到了。這句話是需要進(jìn)一步理解的,應(yīng)該非常容易和下面說到的條件覆蓋混淆。因此我們直接介紹第三種覆蓋方式,然后和判定覆蓋一起來對(duì)比,就明白兩者是怎么回事了。

3. 條件覆蓋(ConditionCoverage)

它度量判定中的每個(gè)子表達(dá)式結(jié)果true和false是否被測(cè)試到了。為了說明判定覆蓋和條件覆蓋的區(qū)別,我們來舉一個(gè)例子,假如我們的被測(cè)代碼如下:

int foo(int a, int b)
{
 if (a < 10 || b < 10) // 判定
 {
 return 0; // 分支一
 }
 else
 {
 return 1; // 分支二
 }
}

設(shè)計(jì)判定覆蓋案例時(shí),我們只需要考慮判定結(jié)果為true和false兩種情況,因此,我們?cè)O(shè)計(jì)如下的案例就能達(dá)到判定覆蓋率100%:

TestCaes1: a = 5, b = 任意數(shù)字 覆蓋了分支一
TestCaes2: a = 15, b = 15 覆蓋了分支二

設(shè)計(jì)條件覆蓋案例時(shí),我們需要考慮判定中的每個(gè)條件表達(dá)式結(jié)果,為了覆蓋率達(dá)到100%,我們?cè)O(shè)計(jì)了如下的案例:

TestCase1: a = 5, b = 5 true, true
TestCase4: a = 15, b = 15 false, false

通過上面的例子,我們應(yīng)該很清楚了判定覆蓋和條件覆蓋的區(qū)別。需要特別注意的是:條件覆蓋不是將判定中的每個(gè)條件表達(dá)式的結(jié)果進(jìn)行排列組合,而是只要每個(gè)條件表達(dá)式的結(jié)果true和false測(cè)試到了就OK了。因此,我們可以這樣推論:完全的條件覆蓋并不能保證完全的判定覆蓋。比如上面的例子,假如我設(shè)計(jì)的案例為:

TestCase1: a = 5, b = 15 true, false 分支一
TestCase1: a = 15, b = 5 false, true 分支一

我們看到,雖然我們完整的做到了條件覆蓋,但是我們卻沒有做到完整的判定覆蓋,我們只覆蓋了分支一。上面的例子也可以看出,這兩種覆蓋方式看起來似乎都不咋滴。我們接下來看看第四種覆蓋方式。

4. 路徑覆蓋(PathCoverage)

又稱斷言覆蓋(PredicateCoverage)。它度量了是否函數(shù)的每一個(gè)分支都被執(zhí)行了。 這句話也非常好理解,就是所有可能的分支都執(zhí)行一遍,有多個(gè)分支嵌套時(shí),需要對(duì)多個(gè)分支進(jìn)行排列組合,可想而知,測(cè)試路徑隨著分支的數(shù)量指數(shù)級(jí)別增加。比如下面的測(cè)試代碼中有兩個(gè)判定分支:

int foo(int a, int b)
{
 int nReturn = 0;
 if (a < 10)
 {// 分支一
 nReturn += 1;
 }
 if (b < 10)
 {// 分支二
 nReturn += 10;
 }
 return nReturn;
}

對(duì)上面的代碼,我們分別針對(duì)我們前三種覆蓋方式來設(shè)計(jì)測(cè)試案例:

a. 語句覆蓋

TestCase a = 5, b = 5 nReturn = 11

語句覆蓋率100%

b. 判定覆蓋

TestCase1 a = 5, b = 5  nReturn = 11
TestCase2 a = 15, b = 15 nReturn = 0

判定覆蓋率100%

c. 條件覆蓋

TestCase1 a = 5, b = 15 nReturn = 1
TestCase2 a = 15, b = 5  nReturn = 10

條件覆蓋率100%

我們看到,上面三種覆蓋率結(jié)果看起來都很酷!都達(dá)到了100%!主管可能會(huì)非常的開心,但是,讓我們?cè)偃プ屑?xì)的看看,上面被測(cè)代碼中,nReturn的結(jié)果一共有四種可能的返回值:0,1,10,11,而我們上面的針對(duì)每種覆蓋率設(shè)計(jì)的測(cè)試案例只覆蓋了部分返回值,因此,可以說使用上面任一覆蓋方式,雖然覆蓋率達(dá)到了100%,但是并沒有測(cè)試完全。接下來我們來看看針對(duì)路徑覆蓋設(shè)計(jì)出來的測(cè)試案例:

TestCase1 a = 5,  b = 5   nReturn = 0
TestCase2 a = 15, b = 5   nReturn = 1
TestCase3 a = 5,  b = 15  nReturn = 10
TestCase4 a = 15, b = 15  nReturn = 11

路徑覆蓋率100%

太棒了!路徑覆蓋將所有可能的返回值都測(cè)試到了。這也正是它被很多人認(rèn)為是“最強(qiáng)的覆蓋”的原因了。

還有一些其他的覆蓋方式,如:循環(huán)覆蓋(LoopCoverage),它度量是否對(duì)循環(huán)體執(zhí)行了零次,一次和多余一次循環(huán)。剩下一些其他覆蓋方式就不介紹了。

以上是“編程語言中單元測(cè)試代碼覆蓋率的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站jinyejixie.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)頁標(biāo)題:編程語言中單元測(cè)試代碼覆蓋率的示例分析-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://jinyejixie.com/article8/coeoop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、軟件開發(fā)網(wǎng)站策劃、網(wǎng)站營銷、品牌網(wǎng)站設(shè)計(jì)、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)
灌云县| 独山县| 龙里县| 阳谷县| 成安县| 中西区| 礼泉县| 商洛市| 色达县| 孟州市| 霞浦县| 屏东市| 伊宁市| 肥城市| 平乡县| 昆明市| 安泽县| 临澧县| 华亭县| 嵊州市| 桐柏县| 拉萨市| 台南市| 乐亭县| 漳州市| 百色市| 华池县| 当雄县| 岫岩| 贺兰县| 新巴尔虎右旗| 博客| 新乐市| 高平市| 天津市| 会宁县| 迁安市| 连平县| 古田县| 永平县| 新余市|