巨大黑人XXXXX高潮女子小便,特大黑人巨交吊性XXXX,《黑人性奴2》免费观看,被黑人的巨茎日出白浆,欧美性受XXXX黑人XYX性爽,双腿张开被9个黑人调教影片

鑒源實驗室

Jianyuan Lab

軟件代碼結構化覆蓋測試-分支覆蓋

發(fā)布時間:2023-09-08 作者:上海工業(yè)控制安全創(chuàng)新科技有限公司 點擊次數(shù):

作者 | 李偉 上海控安安全測評部總監(jiān)
來源 | 鑒源實驗室
社群 | 添加微信號“TICPShanghai”加入“上海控安51fusa安全社區(qū)”




引言: 上一篇開始我們介紹白盒的代碼結構覆蓋率測試,已經完成了語句覆蓋測試的講解,本篇我們介紹分支覆蓋。


01

關于定義


從測試技術對代碼的測試程度上來說,在復雜代碼中,分支覆蓋比語句覆蓋效果要好。很多時候分支覆蓋也被叫做判定覆蓋。語句覆蓋是要求設計的測試用例可以讓所有的語句都能夠被執(zhí)行測試。分支覆蓋是要求設計用例對代碼中所有的邏輯判定分支都被執(zhí)行測試,也就是每次判定邏輯上真假兩種的分支執(zhí)行情況都覆蓋。從定義上我們就可以看出兩種方法的測試度量角度是不一樣的。計算方法上,語句覆蓋的分母是代碼總行數(shù),分支覆蓋的分母是代碼中所有判斷的分支總數(shù)。


02

分支覆蓋測試的舉例


我們使用下面一段簡單代碼來舉例說明:

這段代碼總共11行,一個邏輯判斷的條件,即x<10為真或假,我們可以看到輸入的變量a和b決定了輸出值y。對于這段代碼的分支覆蓋測試設計,我們令a=5或a=15,對應x<10為真或假兩種情況。a=5時x<10為真,測試用例執(zhí)行了代碼的第1-6行進入了邏輯真的分支,a=15時x<10為假,代碼執(zhí)行了第1、2和8至11行,執(zhí)行了邏輯為假的分支。這兩條測試用例覆蓋全部的兩個判定分支,分支覆蓋率為100%。

這上面這段代碼中,我們針對分支覆蓋設計了兩條測試用例,達到了覆蓋率100%,我們可以發(fā)現(xiàn)同樣是這兩條測試設計,語句覆蓋率一樣達到了100%,那語句覆蓋跟分支覆蓋的區(qū)別如何體現(xiàn)呢,同樣是這段代碼我們實際中很多時候是用下面的習慣編寫,如:

這段代碼的效果跟前面舉例中代碼的效果是一樣的,對于分支覆蓋設計也是一樣,因為同樣只有一個判定條件,需要分別測試x<10為真或假的兩種分支情況,但是語句覆蓋設計就不一樣了,語句覆蓋設計只需要設計一條用例,令a=5即可以覆蓋所有的代碼語句。這里我們就可以看出分支覆蓋的結構化程度高于語句覆蓋。

上面的例子相對簡單,我們把這段代碼稍微變動,來深入探討一下分支覆蓋。示例代碼如下:

我們可以看到這段代碼的邏輯判斷了一次,代碼同樣有兩個分支,針對分支覆蓋測試我們只需要針對x < 10 && y > 10 == 0 為真或假兩種情況,即我們可以令a=15或b=5時代碼判斷進入條件真的分支,令a=5且b=15代碼判斷進入條件假的分支。

上面的例子我們也可以看出,分支覆蓋測試我們僅在if后面的整體判定語句上取了真和假兩種情況,并未深入到該行代碼語句中每個判定條件來取真假。


03

使用工具來進行分支覆蓋測試


本章節(jié)我們繼續(xù)使用SmartRocket TestGrid這款工具進行代碼的分支覆蓋測試分析,給大家介紹工具是如何生成測試用例完成測試任務的。

3.1 工具測試舉例

針對如下代碼:

這段代碼我們可以看到函數(shù)的形參有兩個,分別是lua_State *L、init idx,代碼邏輯也較為簡單,當more為真時執(zhí)行api_incr_top(L),為假時執(zhí)行L->top -= 1。more為代碼塊中定義的局部變量,被賦值為luaH_next(L, hvalue(t), L->top - 1)。

工具自動分析后會生產控制流圖如下:

控制流圖可以直觀地看到在本例中兩條分支情況,我們可以設計測試用例令more分別為真和假,分別覆蓋兩條分支,這樣就可以完成分支100%覆蓋。

我們通過查看項目頭文件可以得到函數(shù)luaH_next()的形參hvalue(t)已有定義,通過宏替換變?yōu)閘uaH_next (L, ((&((((union GCUnion *)((((t)->value_).gc))))->h))), L->top - 1),可以通過工具來生成用例中的樁函數(shù),下圖為工具自動生成的測試用例1:


本條用例中樁函數(shù)的返回值控制了判斷條件的真或假,本條測試用例覆蓋的是代碼中為真的分支語句。代碼中函數(shù)的最終返回值也是由more變量決定,我們在用例的輸出也可以看到實際返回值跟樁函數(shù)的返回值是一樣的。

下圖為測試用例2:


本例中樁函數(shù)luaH_next()的返回值設置為0,所以覆蓋的是代碼中判斷結果為假語句分支代碼。對于用例中的輸入形參,在執(zhí)行過程中影響了樁函數(shù)和執(zhí)行語句,間接影響本例中的判斷條件取值。

我們可以看到工具通過這兩條測試用例分別覆蓋了兩個判斷的分支,所以這段代碼的測試分支覆蓋率就是100%。


04

測試小結


在執(zhí)行分支覆蓋測試時我們有以下建議供大家參考。

1. 通常sil等級不同要求執(zhí)行的結構覆蓋方法會不一樣,但是語句覆蓋通常會和分支覆蓋一起出現(xiàn)在低sil等級的測試要求中。

2. 語句覆蓋和分支覆蓋的覆蓋率統(tǒng)計維度是不一樣的,語句覆蓋是以代碼行數(shù)為分母,分支覆蓋是以代碼中邏輯判斷的分支總數(shù)為分母。

3. 在合并執(zhí)行語句覆蓋和分支覆蓋時測試用例是可以復用的,我們可以在語句覆蓋的基礎上疊加用例來完成未被測試的分支部分覆蓋。


閱讀原文

欢迎光临: 苍梧县| 增城市| 扶沟县| 榆树市| 农安县| 富民县| 青浦区| 郓城县| 台安县| 金门县| 铅山县| 华阴市| 曲松县| 天门市| 龙川县| 阳春市| 柳河县| 苍溪县| 永和县| 湄潭县| 怀宁县| 漳州市| 牙克石市| 瑞安市| 江北区| 陆河县| 常山县| 松溪县| 碌曲县| 酉阳| 崇仁县| 潼关县| 大关县| 屏东县| 平昌县| 托克托县| 南宁市| 和田县| 拜泉县| 吴桥县| 阿鲁科尔沁旗|