色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

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

上海控安 ? 來源:上海控安 ? 作者:上海控安 ? 2023-08-25 11:50 ? 次閱讀

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

來源 |鑒源實驗室

社群 |添加微信號TICPShanghai”加入“上海控安51fusa安全社區”

引言:之前我們一直在講功能、性能、以及專項等相關的測試,這些測試主要集中在集成測試,系統驗證等階段,從本篇開始我們將深入到代碼層面,講解單元測試中的一項重要工作-軟件代碼測試。

01

代碼測試對功能安全的意義

在行業內功能安全越來越多地被提起,對于測試人員來說項目落地時的工作量是趨于增加的。單元測試的執行,在功能安全整體設計要求中是不可缺少的環節,而通常情況下測試工程師對單元測試階段的任務設計是相對較少和覆蓋不全面的。

功能安全標準ISO 26262-6中提供了不同Asil等級的零部件單元測試推薦使用驗證方法,同時也對不同安全等級要求代碼的結構化覆蓋測試給出不同的測試方法。如下圖所示:

wKgaomTjGICAJFkCAAC92dyDlrI376.png

ISO 26262-6:2018(E) Table 9

從本篇開始我們給大家介紹軟件功能安全代碼結構化覆蓋度量測試的3種方法,本篇將介紹語句覆蓋。

02

語句覆蓋測試能測試哪些東西

上一章節講的3種覆蓋方法(statement coverage、branch coverage、MC/DC)是從不同維度對被測試代碼進行測試設計。我們知道代碼是從第一行開始由上向下來執行的,在執行過程中遇到某些循環或者邏輯判斷時部分行會跳過,簡單理解語句覆蓋就是要求所有代碼被執行一遍,從這個維度做測試設計進行測試。

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

wKgaomTjGVWAb2FNAABcnFxfcw0447.png

這段代碼總共19行,我們可以看到輸入的變量a和b決定了輸出值y,對于這段代碼的語句覆蓋率計算是看我們的代碼執行到了哪一行,然后除以19得到的。如我們設計a=9,b=10,那么得到y=y+10=20,語句執行到第9行,跳到第19行結束,總共運行10行,這條測試用例的語句覆蓋率就是50%。

如果我們設計a=15,b=10,會執行到第10至第14行。所以我們再設計第三條測試用例令a=30,b=10的時候,這3條測試執行會覆蓋所有的語句,此時語句的覆蓋率就達到了100%。

在實際的工作測試中,我們碰到的代碼不可能這么簡單,當然通常我們也都是借助工具來進行代碼的測試工作,不會純人工來對代碼進行測試設計和手動測試。目前大多數測試工具都會自動生成一部分的用例來對代碼進行測試,但覆蓋率不會達到100%,此時就需要我們通過分析代碼以及已生成的覆蓋用例,手動添加完成剩余覆蓋。

03

使用工具來進行語句覆蓋測試

本章節我們使用SmartRocket TestGrid這款工具進行代碼的語句覆蓋測試分析,給大家介紹工具是如何生成測試用例完成測試任務的。工具的操作使用說明篇幅過大,且不屬于我們文章分享的目的,在此我們不做過多介紹。

3.1工具測試舉例

針對如下代碼:

wKgZomTjGZqALkgjAACT7AsX-1c927.png

這段代碼我們可以看到函數的形參有兩個,分別是lua_State *L、init op,代碼邏輯也較為簡單,當op!= LUA_OPUNM且op!= LUA_OPBNOT為真時執行api_checknelems(L, 2),判斷為假時執行其他操作。

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

wKgaomTjGdGAN-QbAAAqND_YW_8939.png

控制流圖可以幫助我們分析代碼復雜邏輯下執行的路徑情況,對于覆蓋統計有非常大的幫助。在本例中我們可以設計兩條測試用例分別覆蓋判讀邏輯為真和為假的情況,這樣就可以完成語句100%覆蓋。這兩天測試用例分別是1.op!= LUA_OPUNM為真,op!= LUA_OPBNOT為真,2.上述兩個判斷條件一真一假,或者兩個都是假。

我們通過查看項目頭文件可以得到LUA_OPUNM、LUA_OPBNOT兩個常量的值分別為12和13,下圖為工具自動生成的測試用例1:

wKgZomTjGhaASoB1AAFcWOUK8Ws307.png

我們主要看輸入形參的賦值和輸出指針目標的預期賦值,本函數中未編寫對判斷做出相應的返回值,只是針對不同判斷結果執行了一些操作,因此工具沒有對實際值和預期值分別進行賦值。本例中變量op賦值了14,所以這條測試用例覆蓋的是代碼中為真的分支語句。

下圖為測試用例2:

wKgaomTjGiWAfu2QAAFUCbxm9Ig238.png

本例中變量op賦值12,判斷條件一真一假,所以覆蓋的是代碼中判斷結果為假語句分支代碼。對于形參L的賦值,需要查看代碼中對于lua_State的定義,雖然這段代碼沒有返回值,但是兩個分支都執行了某些操作執行,這些執行都涉及到了形參L。

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

04

測試小結

在實際的代碼覆蓋度測試中,測試對象為軟件代碼,在代碼測試的層面我們有幾點總結跟大家分享,希望給大家帶來幫助。

1.工具自動生成的測試用例在某些情況下不能自動達到100%,此時就需要我們分析代碼,以及已有用例的覆蓋情況,對未覆蓋部分進行人工補充。

2.在代碼中有部分是天然達不到100%覆蓋的,這部分代碼有些是做了故意的設計,對系統在代碼層面做保護,對于這種情況需要手動補充說明,如設計中止函數自動退出此處代碼執行等。

3.使用測試工具的不同會遇到代碼測試統計結果上的差異,如代碼總行數會因為空行、注釋、頭文件等統計方法的不同,得到的最終代碼總行數不同,還有覆蓋率計算,有部分工具對于代碼中函數“{}”等的統計方法不同,會出現即使同樣測試語句覆蓋用例設計,但最終工具給出的統計結果不一樣。

4.使用工具自動測試過程中通常會提示各種錯誤,這些錯誤通常是由頭文件、宏定義、數組越界等問題導致,經過調整后會大大提升工具的自動測試覆蓋率。

5.既然測試對象是純代碼,所以嚴格意義上來說,對于測試人員代碼覆蓋度測試是沒有很大的行業壁壘劃分的。也就是我們的測試標準可以分為汽車行業軟件功能安全標準、軌交行業功能安全標準、航空行業軟件功能安全標準等等,但這些軟件可能都是基于C、C++語言編寫,對于測試人員只要是同一種語言編寫的軟件我們不會因為行業不同會遇到不同的測試技術上的問題,測試人員在代碼測試的跨行業通用性上特別有利。

6.測試行業在近幾年互聯網、計算機、軟件工程等專業爆火的同時得到了快速發展,功能測試、性能測試、自動化測試、兼容性測試、健壯性測試等等測試技術也日趨完善,測試期待著新的技術普及點。代碼測試以前在很多行業會省略這個驗證過程,或者是由開發人員自測,現在伴隨著功能安全乘勢而起,對于提高測試工程師個人能力也有極大的幫助,我們也希望通過本課程更大家帶來更多的提升。


參考資料

[1]ISO 26262-6-2018 Road vehicles - Functional safety - Part 6 Product development at the software

審核編輯 黃宇

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

    關注

    8

    文章

    5278

    瀏覽量

    126600
  • 軟件代碼
    +關注

    關注

    0

    文章

    9

    瀏覽量

    6341
收藏 人收藏

    評論

    相關推薦

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

    代碼覆蓋分析是一種白盒測試方法,因為覆蓋分析需要訪問測試代碼本身,且經常需要重新編譯程序,以程序
    的頭像 發表于 09-21 17:36 ?3708次閱讀
    <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 ?2964次閱讀
    <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>

    怎么設計基于路徑覆蓋的嵌入式軟件動態測試

    測試結果的有效性;而僅在目標機上進行測試,由于軟件運行的不可視性,又使得測試者難以知曉程序當前運行狀態,以及代碼
    發表于 08-26 07:45

    基于路徑覆蓋的嵌入式軟件動態該怎么測試

    測試結果的有效性;而僅在目標機上進行測試,由于軟件運行的不可視性,又使得測試者難以知曉程序當前運行狀態,以及代碼
    發表于 08-28 07:38

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

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

    覆蓋測試中的高效代碼插樁技術

      引言   在實現覆蓋測試的過程中,往往需要知道某些信息,如:程序中可執行語句被執行(即被覆
    發表于 12-22 10:15 ?3905次閱讀
    <b class='flag-5'>覆蓋</b><b class='flag-5'>測試</b>中的高效<b class='flag-5'>代碼</b>插樁技術

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

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

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

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

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

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

    代碼覆蓋工具的重要性

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

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

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

    代碼覆蓋率工具的重要性

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

    代碼覆蓋檢測

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

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

    本篇我們介紹分支覆蓋,從測試技術對代碼測試程度上來說,在復雜代碼中,分支覆蓋
    的頭像 發表于 09-01 11:34 ?670次閱讀
    <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>率記錄
    主站蜘蛛池模板: 破女在线观看视频| 国产午夜精品自在自线之la| 玉林天天论坛| 亚洲黄色免费在线观看| 呜呜别塞了啊抽插| 天美传媒色情原创精品| 日韩亚洲欧美中文在线| 欧美激情精品久久久久| 免费精品一区二区三区AA片| 做暖暖视频在线看片免费| 亚洲精品成人A8198A片漫画| 无人影院在线播放| 午夜A级理论片左线播放| 少妇两个奶头喷出奶水了怎么办| 日本高清二区| 蕾丝边娱乐网| 免费欧美大片| 免费精品国偷自产在线| 蜜芽手机在线观看| 免费无码又爽又黄又刺激网站| 美女强奷到抽搐在线播放| 伦理 电影在线观看| 蜜桃视频无码区在线观看| 免费无遮挡又黄又爽网站| 欧美一级黄色影院| 日日碰狠狠躁久久躁77777| 天堂在线亚洲精品专区| 午夜插插插| 一二三四在线观看高清电视剧 | 秋霞最新高清无码鲁丝片| 全黄h全肉短篇禁乱np| 色狠狠一区二区| 亚洲AV怡红院AV男人的天堂| 亚洲免费视频观看| 岳扒开让我添| seyeye在清在线| 国产精品久久久久久久久无码| 国产又黄又粗又爽又色的视频软件 | 内地同志男16china16| 日本护士在线观看| 午夜天堂一区人妻|