chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內(nèi)不再提示

邊聊安全 | 軟件單元測試的設(shè)計方法

上海磐時 ? 2025-09-05 16:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

軟件單元測試的設(shè)計方法

寫在前面:

軟件單元測試的設(shè)計是一個系統(tǒng)化的過程,旨在驗證代碼的最小可測試部分(通常是函數(shù)或方法)是否按預期工作。軟件單元測試的設(shè)計是確保代碼正確性和可靠性的關(guān)鍵步驟。在軟件單元測試中,等價類測試是一種很重要的測試設(shè)計方法,它通過將輸入數(shù)據(jù)劃分為若干個等價類,并從每個等價類中選取代表性的數(shù)據(jù)進行測試,以提高測試的全面性和效率。

01.

等價類劃分法

在設(shè)計測試用例的時候,我們通常采用等價類劃分法。等價類劃分法的原理就是將無窮多數(shù)據(jù)縮減到有限個等價區(qū)域中,通過測試等價區(qū)域完成窮盡測試。

等價類劃分要滿足3個原則:

1. 互斥性:各個等價類之間應該是互斥的,即沒有交集,確保每個輸入數(shù)據(jù)只屬于一個等價類。

2. 全面性:所有等價類的并集仍然是原始的輸入域,即所有劃分的等價類應該覆蓋所有可能的輸入條件,確保沒有遺漏。

3. 以一代全:任意一個等價類中,所有數(shù)據(jù)相互“等價”,指一組輸入數(shù)據(jù),這些數(shù)據(jù)在程序的某個特定功能上被認為是等價的,即它們對程序的執(zhí)行結(jié)果產(chǎn)生的影響是相同的。

等價類分為有效等價類和無效等價類

有效等價類:指那些在正常操作條件下預期程序能夠正確處理的輸入數(shù)據(jù)集合,對應有效輸入域的數(shù)據(jù),用以檢測被測系統(tǒng)能否正確完成指定功能。

無效等價類:指那些預期程序無法正確處理或應該拒絕的輸入數(shù)據(jù)集合,對應無效輸入域中的數(shù)據(jù),用以考察被測系統(tǒng)的容錯性。

02.

如何劃分等價類

那么如何劃分等價類呢?

1. 識別輸入條件:確定軟件的輸入條件,包括用戶輸入、系統(tǒng)參數(shù)、外部接口等。

2. 確定輸入域:對于數(shù)值型輸入,確定其取值范圍;對于枚舉型輸入,列出所有可能的枚舉值。

3. 劃分有效等價類:識別那些符合軟件規(guī)格說明的輸入條件,這些構(gòu)成了有效等價類。根據(jù)業(yè)務(wù)邏輯和規(guī)則,將輸入條件分組,每組構(gòu)成一個有效等價類。

4. 劃分無效等價類:識別那些不符合軟件規(guī)格說明的輸入條件,這些構(gòu)成了無效等價類??紤]軟件如何處理錯誤輸入,例如空值、非法字符、超出范圍的數(shù)值等。

5. 考慮邊界值:對于每個等價類,特別是處于邊界的等價類,識別邊界值。這些值往往是錯誤發(fā)生的高發(fā)區(qū)。

如輸入條件規(guī)定了取值范圍時,應劃分一個有效等價類和兩個無效等價類(一個低于范圍,一個高于范圍)。如果輸入條件是一個布爾量,可以劃分一個有效等價類(真)和一個無效等價類(假)。當輸入數(shù)據(jù)有多個可能的值時,為每個值劃分一個有效等價類,并考慮一個無效等價類來覆蓋不符合任何有效值的輸入。

例如Year變量需滿足條件:1920<=year<=2012,范圍內(nèi)數(shù)值為有效等價類,<1920為一個無效等價類,>2012為一個無效等價類。

e3daf968-8a30-11f0-8ce9-92fbcf53809c.png

為有效等價類設(shè)計測試用例:

e3fa536c-8a30-11f0-8ce9-92fbcf53809c.png

為無效等價類設(shè)計測試用例:

e408624a-8a30-11f0-8ce9-92fbcf53809c.png

03.

邊界值分析

在許多情況下,邊界值往往是錯誤容易發(fā)生的地方,因此應特別注意邊界條件的處理。對于每個等價類,特別是有效等價類,考慮其邊界值,并可能將其視為單獨的測試用例。

在進行邊界值分析的時候,首先要確定邊界值。根據(jù)需求規(guī)格,識別所有可能的邊界條件,如最大值、最小值、上界、下界等,確定每個輸入或輸出參數(shù)的邊界值。對于數(shù)值型數(shù)據(jù),通常需要考慮其最大值、最小值和緊鄰這些值的幾個點。對于非數(shù)值型數(shù)據(jù)(如字符串長度、顏色選擇等),也要確定其邊界條件。

在設(shè)計測試用例的時候,要針對每個邊界值,設(shè)計相應的測試用例。測試用例應包括正常范圍內(nèi)的值、剛好在邊界上的值以及稍微超出邊界的值。特別注意那些“剛好”達到邊界條件的情況,因為這些問題在實際應用中往往更容易出現(xiàn)。

按照設(shè)計的測試用例執(zhí)行測試,觀察系統(tǒng)在邊界條件下的行為是否符合預期,是否存在錯誤、異常或性能下降等問題。

通過遵循這些步驟,可以在軟件單元測試中有效地應用等價類測試方法,以確保軟件的功能安全性能得到充分驗證。

04.

軟件單元測試環(huán)境

在軟件單元測試中,常見的測試環(huán)境有SIL、MIL、PIL和HIL,它們分別對應不同的測試階段和目的:

1. MIL(Model in the Loop)模型在環(huán)測試

MIL測試是在模型開發(fā)階段進行的,通過純軟件仿真的形式驗證控制模型是否滿足功能需求。它通常發(fā)生在系統(tǒng)工程師為了驗證算法,使用控制算法模型控制被控對象模型的場景下,或者軟件工程師做模型級別的集成測試。

2. SIL(Software in the Loop)軟件在環(huán)測試

SIL測試是在MIL之后進行的,目的是驗證自動生成的代碼與算法模型的一致性。它使用與MIL相同的測試用例,檢查自動生成的代碼的輸出是否與MIL階段的模型輸出一致。SIL測試通過運行系統(tǒng)環(huán)境中的車輛模型和虛擬ECU中的I/O模型來模擬控制器所需的各種傳感器信號,并能接收臺架傳感器的信號和虛擬ECU發(fā)出的控制信號。

3. PIL(Processor in the Loop)處理器在環(huán)測試

PIL測試是將自動生成的代碼編譯為目標處理器需要的形式,并下載到目標處理器上運行,以防止編譯過程引入新的錯誤。PIL測試也是等效性測試,其方式與SIL類似,不同之處是編譯好的算法運行在目標處理器上,而SIL測試是在算法開發(fā)環(huán)境進行的。

4. HIL(Hardware in the Loop)硬件在環(huán)測試

HIL測試通常在開發(fā)出完整的控制器后進行,有時被控對象(如整車)還未完成開發(fā),或者使用真實被控對象進行測試太危險或成本高。在HIL測試中,采用真實控制控制器和虛擬被控對象,以進行全面的功能驗證和性能評估。HIL測試尤其適用于那些對實時響應、外部設(shè)備交互要求嚴苛的嵌入式系統(tǒng),它能真實反映出軟件在實際運行條件下的表現(xiàn),有效暴露系統(tǒng)在軟硬件集成層面可能出現(xiàn)的問題。

這四種測試方法各自的特點如下:

◆ MIL關(guān)注模型層面的功能實現(xiàn)及測試覆蓋度情況。

◆ SIL關(guān)注的是生成的代碼與模型間的一致性。

◆ PIL關(guān)注的是代碼在目標處理器上的運行情況。

◆ HIL關(guān)注的是軟硬件集成后的整體系統(tǒng)表現(xiàn)。

05.

軟件單元測試覆蓋率

ISO26262 part6的表9—軟件單元級別的結(jié)構(gòu)覆蓋度指標如下表所示:

e41b7ea2-8a30-11f0-8ce9-92fbcf53809c.png

1. 語句覆蓋:它關(guān)注的是程序中每個可執(zhí)行語句是否至少被執(zhí)行過一次。這是代碼覆蓋率分析中最基本的形式,其目的是確保測試用例能夠覆蓋到程序中的所有代碼行。

由于其簡單性,語句覆蓋通常容易實現(xiàn)和維護。語句覆蓋并不保證程序的邏輯路徑被完全測試。例如,它不能保證所有的條件分支都被測試,或者所有的循環(huán)邊界都被觸及。為了達到100%的語句覆蓋,測試用例需要設(shè)計得能夠觸發(fā)程序中的每一個語句。語句覆蓋并不保證程序的質(zhì)量,因為即使所有語句都被執(zhí)行,也可能存在邏輯錯誤未被發(fā)現(xiàn)。

例:

e4282d00-8a30-11f0-8ce9-92fbcf53809c.pnge43efc56-8a30-11f0-8ce9-92fbcf53809c.png

2. 分支覆蓋:它要求測試用例能夠覆蓋程序中所有可能的分支路徑。分支覆蓋關(guān)注的是程序中的控制流,特別是條件語句(如 if, else, switch 等)的真假分支是否都被執(zhí)行過至少一次。

分支覆蓋是路徑覆蓋的一個子集,它確保了程序中的每個分支都被測試。通過確保每個分支都被測試,分支覆蓋有助于發(fā)現(xiàn)那些只在特定條件下才會觸發(fā)的缺陷。為了達到分支覆蓋,測試用例需要設(shè)計得能夠觸發(fā)每個分支的真假條件。分支覆蓋比語句覆蓋更嚴格,因為它要求測試每個條件的真假分支。分支覆蓋并不保證所有可能的執(zhí)行路徑都被測試,特別是當存在多個條件時。

3. MC/DC覆蓋:要求測試用例能夠覆蓋程序中所有可能的條件組合,并且每個條件都能獨立影響決策的結(jié)果。這是一種高級的白盒測試技術(shù),主要用于驗證軟件中的邏輯條件和決策路徑。

MC/DC要求每個條件在決策中都能獨立地影響決策的結(jié)果。這意味著,當改變一個條件的值時,決策的結(jié)果也會隨之改變,而其他條件保持不變。MC/DC覆蓋了所有條件的所有可能結(jié)果,以及每個決策的所有可能結(jié)果。實現(xiàn)MC/DC可能需要更多的測試用例,因為每個條件都需要獨立地影響決策的結(jié)果。

MC/DC與其他覆蓋標準的區(qū)別:

與語句覆蓋的區(qū)別:語句覆蓋關(guān)注于代碼的行,而MC/DC關(guān)注于條件和決策的獨立影響。

與分支覆蓋的區(qū)別:

分支覆蓋要求測試每個分支的真假路徑,而MC/DC進一步要求每個條件都能獨立地影響決策的結(jié)果。

讓我們通過一個具體的C語言函數(shù)例子來展示如何為語句覆蓋、分支覆蓋和MC/DC覆蓋設(shè)計測試用例。假設(shè)我們有以下函數(shù):

e45132d6-8a30-11f0-8ce9-92fbcf53809c.png

語句覆蓋測試用例:

語句覆蓋要求覆蓋函數(shù)中的每個語句至少一次。我們需要以下測試用例:

1. get_value(1,1)——覆蓋語句1(x和y都大于0)。

2. get_value(1,-1)——覆蓋語句2(x大于0,y小于等于0)

3. get_value(-1,1)——覆蓋語句3(x小于等于0,y大于0)。

分支覆蓋測試用例:

分支覆蓋要求覆蓋每個條件的每個可能分支。我們需要以下測試用例:

1. get_value(1,1)——條件1真,條件2真。

2. get_value(1,-1)——條件1真,條件2假。

3. get_value(-1,1)——條件1假,條件2不可達(因為我們已經(jīng)知道x小于等于0,所以不會檢查y)

4. get_value(-1,-1)——條件1假,條件2假。

MC/DC覆蓋測試用例:

MC/DC覆蓋要求每個條件在決策中都能獨立地影響決策的結(jié)果。我們需要以下測試用例:

1. get_value(1,1)——條件1真,條件2真,覆蓋語句1。

2. get_value(1,-1)——條件1真,條件2假,覆蓋語句2。

3. get_value(-1,1)——條件1假,條件2不可達,覆蓋語句3。

4. get_value(-1,-1)——條件1假,條件2假,再次覆蓋語句3,但這次是為了證明條件1的獨立影響。

為了滿足MC/DC的要求,我們需要確保改變?nèi)魏我粋€條件的值都能獨立地影響函數(shù)的返回值。這意味著我們需要額外的測試用例來證明條件1和條件2可以獨立地影響決策:

5. get_value(2, 0)——條件1真,條件2真,但y的值改變不影響決策,因為x大于0。

6. get_value(0, 1)——條件1假,條件2真,但x的值改變不影響決策,因為x不大于0。

通過這些測試用例,我們可以看到MC/DC覆蓋比語句覆蓋和分支覆蓋更為嚴格,它要求每個條件都能獨立地影響決策的結(jié)果。這有助于發(fā)現(xiàn)那些可能在條件組合中被隱藏的錯誤。

許多現(xiàn)代的集成開發(fā)環(huán)境(IDE)和測試工具都支持語句覆蓋和分支覆蓋,可以自動收集和報告覆蓋率數(shù)據(jù)。一些自動化測試工具可以輔助實現(xiàn)MC/DC,通過分析代碼邏輯并生成相應的測試用例。

e468d648-8a30-11f0-8ce9-92fbcf53809c.png

作者

邊俊

磐時創(chuàng)始人/首席安全專家

汽車安全社區(qū)SASETECH發(fā)起人;智能網(wǎng)聯(lián)預期功能安全工作組核心成員;國內(nèi)最早從事汽車功能安全、預期功能安全的專家之一

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

    關(guān)注

    8

    文章

    5898

    瀏覽量

    130257
  • 軟件
    +關(guān)注

    關(guān)注

    69

    文章

    5240

    瀏覽量

    90318
  • 汽車安全
    +關(guān)注

    關(guān)注

    4

    文章

    319

    瀏覽量

    35296
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    ISO26262汽車功能安全-單元測試軟件

    嵌入式軟件單元測試/集成測試工具-WINAMS
    發(fā)表于 04-18 14:45

    MCU進行單元測試方法

    背景MCU軟件不同于常規(guī)的PC機或基于SOC的嵌入式軟件,其一般情況下,與底層硬件耦合度高,資源有限,如何進行單元測試的問題困擾我很久。解決方案根據(jù)目前已知如下3種類型的方案:在目標板上運行此方案下,在程序代碼中加入
    發(fā)表于 11-01 06:58

    單元測試/集成測試自動化工具--WinAMS

    為單位的自動化單元測試工具作為能夠檢驗出僅憑系統(tǒng)測試以及整體測試無法發(fā)現(xiàn)的[潛在錯誤]的檢測方法,[單元測試]在嵌入式開發(fā)領(lǐng)域受到廣泛重視。
    發(fā)表于 06-17 18:26

    如何提高嵌入式軟件單元測試效率

    在本指南中,您將學習如何通過在更短的時間內(nèi)運行更多的測試來增加您的單元測試吞吐量。 這種效率的提高來自于使用虛擬平臺而不是物理硬件作為開發(fā)平臺。 本指南對任何開發(fā)或運行嵌入式軟件單元測試
    發(fā)表于 08-28 06:31

    系統(tǒng)測試、單元測試、集成測試、驗收測試、回歸測試

    系統(tǒng)測試、單元測試、集成測試、驗收測試、回歸測試 單元測試
    發(fā)表于 10-22 12:38 ?1994次閱讀

    單元測試常用的方法

    單元測試,是指對軟件中的最小可測試單元進行檢查和驗證。對于單元測試單元的含義,一般來說,要根據(jù)
    發(fā)表于 12-21 10:17 ?3.8w次閱讀
    <b class='flag-5'>單元測試</b>常用的<b class='flag-5'>方法</b>

    什么是單元測試_單元測試的目的是什么

    工廠在組裝一臺電視機之前,會對每個元件都進行測試,這,就是單元測試單元測試是開發(fā)者編寫的一小段代碼,用于檢驗被測代碼的一個很小的、很明確的功能是否正確。通常而言,一個單元測試是用于判
    發(fā)表于 12-21 13:44 ?3.4w次閱讀

    java單元測試的好處

    單元測試是編寫測試代碼,應該準確、快速地保證程序基本模塊的正確性。好的單元測試的標準,JUnit是Java單元測試框架,已經(jīng)在Eclipse中默認安裝。許多開發(fā)者都有個習慣,常常不樂意
    發(fā)表于 12-21 14:24 ?4171次閱讀

    什么是單元測試,為什么要做單元測試

    。 什么是單元測試? 單元測試(unit testing),是指對軟件中的最小可測試單元進行檢查和驗證。通常而言,一個
    的頭像 發(fā)表于 04-28 17:21 ?1.1w次閱讀

    MCU如何進行單元測試

    背景MCU軟件不同于常規(guī)的PC機或基于SOC的嵌入式軟件,其一般情況下,與底層硬件耦合度高,資源有限,如何進行單元測試的問題困擾我很久。解決方案根據(jù)目前已知如下3種類型的方案:在目標板上運行此方案下,在程序代碼中加入
    發(fā)表于 10-26 10:06 ?35次下載
    MCU如何進行<b class='flag-5'>單元測試</b>

    RT-Thread上的單元測試:什么是單元測試?單元測試的作用是什么?

    RT-Thread上的單元測試:什么是單元測試單元測試的作用是什么? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 16:06 ?2147次閱讀
    RT-Thread上的<b class='flag-5'>單元測試</b>:什么是<b class='flag-5'>單元測試</b>?<b class='flag-5'>單元測試</b>的作用是什么?

    軟件單元測試真的有必要嗎?(上)

    本文著重探討單元測試的重要性及其正面臨的困境,并介紹功能安全標準中羅列的單元測試方法。
    的頭像 發(fā)表于 11-03 14:58 ?1404次閱讀
    <b class='flag-5'>軟件</b><b class='flag-5'>單元測試</b>真的有必要嗎?(上)

    嵌入軟件單元測試工具的作用

    嵌入軟件單元測試工具是現(xiàn)代軟件開發(fā)過程中不可或缺的一環(huán)。它的作用在于幫助開發(fā)人員對軟件中的各個單元進行
    的頭像 發(fā)表于 04-23 15:31 ?834次閱讀
    嵌入<b class='flag-5'>軟件</b><b class='flag-5'>單元測試</b>工具的作用

    嚴格的單元測試造就完美的軟件

    關(guān)鍵系統(tǒng)時,更是對軟件質(zhì)量提出了極高的要求。而單元測試作為軟件開發(fā)過程中的核心環(huán)節(jié),其重要性不言而喻。 單元測試的作用 單元測試是指對
    的頭像 發(fā)表于 11-26 13:22 ?665次閱讀

    嵌入式軟件單元測試的必要性、核心方法及工具深度解析

    一、為什么嵌入式軟件必須重視單元測試? ?嵌入式系統(tǒng)的特殊性? 在汽車 ECU、醫(yī)療設(shè)備控制器等場景中,軟件直接操控硬件,?單比特錯誤可能導致剎車失靈或呼吸機故障?。不同于 PC?軟件
    的頭像 發(fā)表于 03-21 14:53 ?758次閱讀