那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

上??匕?/a> ? 來源:上??匕?/span> ? 作者:上??匕?/span> ? 2023-09-01 11:34 ? 次閱讀

作者 |李偉 上海控安安全測評部總監

來源 |鑒源實驗室

社群 |添加微信號TICPShanghai”加入“上??匕?1fusa安全社區”

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

01

關于定義

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

02

分支覆蓋測試的舉例

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

wKgaomTxW8uAIw73AABErXYC5tE096.jpg

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

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

wKgZomTxW8uAbVhoAAAdr5PILNY156.jpg

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

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

wKgaomTxW8uAcHACAAASnIQxQ1E489.png

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

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

03

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

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

3.1工具測試舉例

針對如下代碼:

wKgZomTxW8yAbsDOAAA_7UbaBkI087.png

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

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

wKgaomTxW8yAS4x8AAAi4Zjw-Fw702.png

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

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

wKgZomTxW82AF5wPAADwTUvg-jg608.png

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

下圖為測試用例2:

wKgaomTxW82AOJaXAADw5LZvUO4972.png

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

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

04

測試小結

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

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

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

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

審核編輯 黃宇


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 測試
    +關注

    關注

    8

    文章

    5382

    瀏覽量

    127076
  • 代碼
    +關注

    關注

    30

    文章

    4828

    瀏覽量

    69063
收藏 人收藏

    評論

    相關推薦

    代碼覆蓋測試工具BullseyeCoverage在嵌入式軟件系統中的應用研究

    代碼覆蓋分析是一種白盒測試方法,因為覆蓋分析需要訪問測試代碼本身,且經常需要重新編譯程序,以程序
    的頭像 發表于 09-21 17:36 ?3810次閱讀
    <b class='flag-5'>代碼</b><b class='flag-5'>覆蓋</b>率<b class='flag-5'>測試</b>工具BullseyeCoverage在嵌入式<b class='flag-5'>軟件</b>系統中的應用研究

    軟件代碼結構化覆蓋測試-MC/DC覆蓋

    MC/DC的全稱是Modified Condition/Decision Coverage,修正條件判定覆蓋率。很多文章對于定義的解釋都比較專業,通常也會讓人感覺理解困難,本文我們用通俗易懂的說明給大家做介紹。
    的頭像 發表于 12-15 15:22 ?3056次閱讀
    <b class='flag-5'>軟件</b><b class='flag-5'>代碼</b><b class='flag-5'>結構化</b><b class='flag-5'>覆蓋</b><b class='flag-5'>測試</b>-MC/DC<b class='flag-5'>覆蓋</b>

    如何對嵌入式軟件進行覆蓋測試?

    嵌入式軟件覆蓋測試原理是什么?嵌入式實時操作系統的覆蓋測試工具是什么?Logiscope在嵌入式操作系統DeltaCORE
    發表于 05-13 07:30

    嵌入式仿真平臺SkyEye的覆蓋率分析相關資料下載

    隨著嵌入式系統也越來越復雜,功能迭代越來越多,代碼中就可能就會存在部分無用代碼,或者在執行過程中無法測試覆蓋分支,這可能就會給
    發表于 12-17 07:27

    匯編程序覆蓋測試分支路徑數的計算

    說明了覆蓋測試軟件測試中的重要方法,是軟件動態測試的基本手段。并提出通過基本塊存儲矩陣和鄰接表
    發表于 04-26 18:30 ?13次下載

    結構化P2P覆蓋網絡通信協議研究

    針對各種基于流言機制的通信協議在構造非結構化P2P覆蓋網絡中,其適用范圍缺乏廣泛的實證問題,提出了一個通用的協議框架--基于流言機制的節點采樣服務,以執行高效和可靠的節
    發表于 03-22 00:36 ?26次下載

    基于分支覆蓋的回歸測試路徑選擇

    測試數據。從而降低了回歸測試的效率.研究了回歸測試分支覆蓋問題,通過利用已有測試數據的路徑
    發表于 01-15 11:08 ?0次下載

    嵌入式代碼覆蓋率統計方法和經驗

    代碼覆蓋率是衡量軟件測試完成情況的指標,通常基于測試過程中已檢查的程序源代碼比例計算得出。
    的頭像 發表于 01-06 15:06 ?3224次閱讀
    嵌入式<b class='flag-5'>代碼</b><b class='flag-5'>覆蓋</b>率統計方法和經驗

    統計嵌入式代碼覆蓋率的方法和經驗

    代碼覆蓋率是衡量軟件測試完成情況的指標,通常基于測試過程中已檢查的程序源代碼比例計算得出。
    的頭像 發表于 03-29 11:58 ?1998次閱讀
    統計嵌入式<b class='flag-5'>代碼</b><b class='flag-5'>覆蓋</b>率的方法和經驗

    代碼覆蓋工具的重要性

      它支持語句覆蓋分支覆蓋和圈復雜度。它提供了分別選擇低、中、高和完整級別的代碼覆蓋率的規定。它非常易于使用和快速,也可用于開源和商業許可
    的頭像 發表于 06-30 10:36 ?928次閱讀
    <b class='flag-5'>代碼</b><b class='flag-5'>覆蓋</b>工具的重要性

    選擇代碼覆蓋工具的 10 個標準

    為了開發安全可靠的軟件,測試是質量保證不可或缺的一部分。如果沒有充分的記錄測試,就不可能確定軟件是否安全且功能是否正確。在這種情況下,代碼
    的頭像 發表于 07-20 18:06 ?1410次閱讀
    選擇<b class='flag-5'>代碼</b><b class='flag-5'>覆蓋</b>工具的 10 個標準

    代碼覆蓋率工具的重要性

    測試覆蓋率是軟件質量的重要指標,也是軟件維護的重要組成部分。它通過提供不同承保項目的數據來幫助評估測試的有效性。這種洞察力允許通過為未經
    的頭像 發表于 12-08 15:13 ?1517次閱讀
    <b class='flag-5'>代碼</b><b class='flag-5'>覆蓋</b>率工具的重要性

    代碼覆蓋檢測

    1 代碼覆蓋率概述 覆蓋率(code coverage rate)是反映測試用例對被測軟件覆蓋
    的頭像 發表于 05-12 22:26 ?3052次閱讀
    <b class='flag-5'>代碼</b><b class='flag-5'>覆蓋</b>檢測

    軟件代碼結構化覆蓋測試-語句覆蓋

    本篇將深入到代碼層面,講解單元測試中的一項重要工作-軟件代碼測試
    的頭像 發表于 08-25 11:50 ?692次閱讀
    <b class='flag-5'>軟件</b><b class='flag-5'>代碼</b><b class='flag-5'>結構化</b><b class='flag-5'>覆蓋</b><b class='flag-5'>測試</b>-語句<b class='flag-5'>覆蓋</b>

    代碼覆蓋率記錄

    為確保具體的產品(例如,醫療或航空電子市場)質量合格, 通常需要提供語句覆蓋與判定覆蓋認證證明。對于各種嵌 入式系統,規范要求高度優化的代碼需要實時測試。禁止
    發表于 11-03 11:02 ?0次下載
    <b class='flag-5'>代碼</b><b class='flag-5'>覆蓋</b>率記錄
    百家乐官网模拟投注器| 百家乐官网庄不连的概率| 个体老板做生意的风水| 网络足球投注| 公海百家乐的玩法技巧和规则| 澳门百家乐官网真人斗地主| 英皇国际娱乐| 百家乐桌| 真人百家乐官网赌场娱乐网规则| 金赞| 全讯网纯净版| 百家乐娱乐天上人间| 百家乐官网游戏机在哪有| 澳门百家乐在线| 金盾百家乐官网网址| 太阳城娱乐网站| 大发888游戏官方| 百家乐顶路| 百家乐视频打麻将| 百家乐官网智能系统| 百家乐官网庄闲必赢| 博彩e族| 大发888设置| 法拉利百家乐的玩法技巧和规则 | 百家乐官网注册赠分| sz新全讯网网站112| 百家乐在线赌场娱乐网规则| 百家乐2棋牌作弊软件| 谁会玩百家乐官网的玩法技巧和规则 | 波克棋牌游戏大厅| 大发888真钱游戏玩法| 鑫鑫百家乐的玩法技巧和规则| 百家乐桌布橡胶| 网上赌百家乐正规吗| 百家乐游戏机出千| 中骏百家乐官网的玩法技巧和规则| 百家乐官网规则澳门| 乐山市| 榆社县| 百家乐官网投注窍门| 百家乐官网大西洋城v|