99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

關(guān)于MATLAB單元測試的過程以及結(jié)果分析

MATLAB ? 來源:djl ? 作者:oopmatlab ? 2019-09-17 17:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在inputParser章節(jié)中,我們通過不斷改進(jìn)getArea函數(shù)對輸入?yún)?shù)的處理方法,引入這樣一個觀點(diǎn):一個可靠的科學(xué)工程計(jì)算項(xiàng)目必須有一套測試系統(tǒng),才能防止開發(fā)的過程中算法退化,工程項(xiàng)目的推進(jìn)必須在算法開發(fā)和算法測試之間不斷迭代完。在inputParser章節(jié)的最后,還根據(jù)直覺提出了一個測試系統(tǒng)所應(yīng)該有的基本功能。在本章中,我們將學(xué)習(xí)MATLAB提供的測試解決方案:MATLAB單元測試(MATLAB Unit Test)。

基于函數(shù)的(Function-Based)單元測試的構(gòu)造

MATLAB基于函數(shù)的單元測試構(gòu)造很簡單,如圖1所示:用戶通過一個主測試函數(shù)和若干局部測試函數(shù)(也叫做測試點(diǎn),Local Function)來組織各個測試。而測試的運(yùn)行則交給MATLAB的單元測試架構(gòu)(以下簡稱Framework)去完成。

關(guān)于MATLAB單元測試的過程以及結(jié)果分析

圖1 單元測試Framework和測試函數(shù)

主測試函數(shù)和局部測試函數(shù)看上去和普通的MATLAB函數(shù)沒有區(qū)別,其結(jié)構(gòu)如圖2所示,只是命名上有一些規(guī)定而已,這些特殊的規(guī)定是為了Framework可以和測試函數(shù)契合而規(guī)定的。

關(guān)于MATLAB單元測試的過程以及結(jié)果分析

圖2 簡單的主測試函數(shù)和若干局部的測試函數(shù)構(gòu)成的一個單元測試

命名規(guī)則如下:

主函數(shù)的名稱由用戶任意指定,和其他的MATLAB函數(shù)文件一樣,該文件的名稱需要和函數(shù)的名稱的相同(如果主函數(shù)的名稱是testmainfunc,該文件名稱則是testmainfunc.m)

在主函數(shù)中,必須調(diào)用一個叫做functiontests的函數(shù),搜集該函數(shù)中的所有局部函數(shù),產(chǎn)生一個包含這些局部函數(shù)的函數(shù)局部的測試矩陣并返回給Framework

如下所示:

關(guān)于MATLAB單元測試的過程以及結(jié)果分析

其中l(wèi)ocalfunctions是一個MATLAB函數(shù),用來返回所有局部函數(shù)的函數(shù)句柄。局部函數(shù)的命名必須以test開頭,局部函數(shù)只接受一個輸入?yún)?shù),即測試對象,即下面例子中的形參testCase:

關(guān)于MATLAB單元測試的過程以及結(jié)果分析

其中testCase由單元測試Framework提供,即Framework將自動的調(diào)用該函數(shù),并且提供testCase參數(shù)。按照規(guī)定,要運(yùn)行單元測試中的所有測試,必須調(diào)用runtests函數(shù):

關(guān)于MATLAB單元測試的過程以及結(jié)果分析

下面用我們用基于函數(shù)的單元測試來給getArea函數(shù)的構(gòu)造其單元測試。

getArea函數(shù)的單元測試:版本 I

首先給主測試文件起個名字叫做testGetArea,該名字是任意的,為了便于理解名字里面通常包含test,并包含要測試的主要函數(shù)的名字:

關(guān)于MATLAB單元測試的過程以及結(jié)果分析

在該主函數(shù)中,localfunctions將搜集所有的局部函數(shù),構(gòu)造函數(shù)句柄數(shù)組并返回測試矩陣。這里自然會有一個問題,這個tests句柄數(shù)組將返回給誰,這就要了解Framework是如何和測試相互作用的。如圖3所示,整個測試從runtests('testmainfunc.m')命令開始, 命令函數(shù),F(xiàn)ramework將首先調(diào)用testGetArea的主函數(shù),得到所有的局部函數(shù)的函數(shù)句柄,如空心箭頭線段所示,然后Framework再負(fù)責(zé)調(diào)用每一個測試局部函數(shù),并且把testCase當(dāng)做參數(shù)提供給每個局部函數(shù),如虛線線段所示。我們可以把Framework想象成一個流水線,用戶只需要通過runtests('testmainfunc.m')把“testmainfunc.m”放到流水線上并且“打開開關(guān)”就可以了。它是MATLAB的類matlab.unittest.FunctionTestCase的對象。

關(guān)于MATLAB單元測試的過程以及結(jié)果分析

圖3 單元測試Framework和測試函數(shù)的相互作用

返回的testCase是類matlab.unittest.FunctionTestCase的對象,有很多成員驗(yàn)證方法可以提供給用戶調(diào)用,我們的第一版的getArea函數(shù)如下, 要求函數(shù)接受兩個參數(shù),并且都是數(shù)值類型:

關(guān)于MATLAB單元測試的過程以及結(jié)果分析

我們先給這個getArea寫第一個測試點(diǎn),確保測試getArea函數(shù)在接受兩個參數(shù)的時候,能給出正確的答案:

關(guān)于MATLAB單元測試的過程以及結(jié)果分析

我們給testGetArea.m添加一個局部函數(shù)叫做testTwoInputs,按照規(guī)定,該局部函數(shù)的名字要以test開頭,后面的名字要能夠盡量反應(yīng)該測試點(diǎn)的實(shí)際測試的內(nèi)容。verifyTrue是一個testCase對象所支持的方法,它用來驗(yàn)證其第一個參數(shù),作為一個表達(dá)式,是否為真。verifyTrue的第二個參數(shù)接受字符串,在測試失敗時提供診斷提示。一個很常見的問題是:getArea是一個極其簡單的函數(shù),內(nèi)部的工作就是把兩個輸入相乘,在這里驗(yàn)證getArea(10,22) == 220真的有必要嗎?請讀者記住這個問題,它是理解單元測試的精要之一。下面我們來運(yùn)行這個測試:

關(guān)于MATLAB單元測試的過程以及結(jié)果分析

測試返回一個matlab.unittest.TestResult對象,其中包括運(yùn)行測試的結(jié)果,不出意料我們的函數(shù)通過了這輪簡單的測試。如果函數(shù)沒有通過測試,比如我們故意要驗(yàn)證一個錯誤的結(jié)果:getArea(10,22) ==0。

關(guān)于MATLAB單元測試的過程以及結(jié)果分析

Framework將給出詳盡的錯誤報(bào)告, 其中Test Diagnostic欄目中報(bào)告的就是verifyTrue函數(shù)中的第二個參數(shù)所提供的診斷信息。

關(guān)于MATLAB單元測試的過程以及結(jié)果分析

我們再添加一個負(fù)面測試,回憶第一版的函數(shù)getArea不支持單個參數(shù),如下:

關(guān)于MATLAB單元測試的過程以及結(jié)果分析

我們可以利用lasterr函數(shù)得到了這個錯誤的Error ID,這個Error ID將在負(fù)面測試中用到。下面是這個負(fù)面測試,驗(yàn)證在只有一個輸入的情況下,getArea函數(shù)能夠如預(yù)期報(bào)錯。我們給測試添加一個新的測試點(diǎn),叫做testTwoInputsInvalid。

關(guān)于MATLAB單元測試的過程以及結(jié)果分析

在testTwoInputsInvalid中,我們使用了測試對象的verifyError成員函數(shù),它的第一個參數(shù)是函數(shù)句柄,即要執(zhí)行的語言(會出錯的語句),第二個參數(shù)是要驗(yàn)證的MATLAB錯誤的Error ID, 就是我們前面用lasterr函數(shù)得到的信息。verifyError內(nèi)部還有try和catch,可以運(yùn)行函數(shù)句柄,捕捉到錯誤,并且把Error ID和第二個參數(shù)做比較。再舉一個例子,我們先在getArea函數(shù)中規(guī)定所有的輸入必須是數(shù)值類型,所以如果輸入的是字符串,getArea將報(bào)錯,先再命令行中實(shí)驗(yàn)一下,以便得到Error ID:

關(guān)于MATLAB單元測試的過程以及結(jié)果分析

然后再把這個負(fù)面測試添加到testGetArea中去:

關(guān)于MATLAB單元測試的過程以及結(jié)果分析

運(yùn)行一遍,一個正面測試,一個負(fù)面測試都全部通過。

關(guān)于MATLAB單元測試的過程以及結(jié)果分析

getArea函數(shù)的單元測試: 版本II & III

測試的準(zhǔn)備和清理工作: Tests Fixtures

驗(yàn)證方法: Types of Qualification

測試方法論和以測試驅(qū)動開發(fā)(Test-Driven Development)

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

    關(guān)注

    1

    文章

    590

    瀏覽量

    22310
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4381

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    HarmonyOS AI輔助編程工具(CodeGenie)代碼測試

    本功能從DevEco Studio 5.1.0 Release版本開始支持。 根據(jù)選中的ArkTS方法名稱,CodeGenie支持自動生成對應(yīng)單元測試用例,提升測試覆蓋率。 在ArkTS文檔中,光標(biāo)
    發(fā)表于 07-14 17:33

    新能源車軟件單元測試深度解析:自動駕駛系統(tǒng)視角

    分之一以下。 ? 案例分析: ? 2022年某車企因電機(jī)控制算法中的整數(shù)溢出未在單元測試中發(fā)現(xiàn),導(dǎo)致車輛在高速行駛時突然動力中斷,引發(fā)大規(guī)模召回。該事件凸顯了單元測試在預(yù)防系統(tǒng)性故障中的核心作用
    發(fā)表于 05-12 15:59

    新能源車背后的隱形守護(hù)者:軟件單元測試的生死較量?

    。這個教科書級的避讓動作背后,是超過8000萬行代碼的精密協(xié)作,而確保這些代碼絕對可靠的秘密武器,正是我們今天要揭秘的軟件單元測試。 ?一、代碼世界的顯微鏡:單元測試為何重要? 如果把整車軟件比作一座摩天大樓,單元測試就是檢查
    的頭像 發(fā)表于 05-12 11:00 ?211次閱讀

    電機(jī)瞬態(tài)過程分析MATLAB建模與仿真

    時均可引起電機(jī)的瞬態(tài)過程。例如,變壓器的空載合閘、電動機(jī)的啟動、制動、調(diào)速,發(fā)電機(jī)的勵磁調(diào)節(jié),電機(jī)正常運(yùn)行時的負(fù)載改變以及突然不正常運(yùn)行等。電機(jī)的瞬態(tài)過程一般來說持續(xù)時間很短,但在不利的情況下,可能導(dǎo)致
    發(fā)表于 04-29 16:29

    單元測試在嵌入式軟件中的關(guān)鍵作用及winAMS工具的卓越貢獻(xiàn)

    1.?單元測試概述 ?定義與核心目標(biāo)? 單元測試是軟件開發(fā)過程中針對程序模塊(如函數(shù)、類或組件)的最小可測試單元進(jìn)行的驗(yàn)證活動。其核心目標(biāo)在
    的頭像 發(fā)表于 04-11 14:31 ?325次閱讀

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

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

    功率分析儀測量結(jié)果的影響因素

    在使用功率分析儀進(jìn)行測試過程中,有時雖然面對同樣的信號,因使用設(shè)備的不同測量結(jié)果會出現(xiàn)較大偏差,即使更換同一品牌功率分析儀,也可能出現(xiàn)一些差異,這些時候,往往是現(xiàn)場
    的頭像 發(fā)表于 03-14 10:22 ?233次閱讀
    功率<b class='flag-5'>分析</b>儀測量<b class='flag-5'>結(jié)果</b>的影響因素

    在橡膠體積表面電阻率測試過程中,電磁干擾對測試結(jié)果的影響,如何有效屏蔽

    在使用體積表面電阻率測試儀對橡膠進(jìn)行電學(xué)性能測試時,電磁干擾是一個不容忽視的關(guān)鍵因素。測試儀的工作原理基于對通過橡膠試樣的電流進(jìn)行精準(zhǔn)測量,進(jìn)而推算出電阻值。然而,電磁干擾會對這一過程
    的頭像 發(fā)表于 03-13 13:14 ?351次閱讀
    在橡膠體積表面電阻率<b class='flag-5'>測試過程</b>中,電磁干擾對<b class='flag-5'>測試</b><b class='flag-5'>結(jié)果</b>的影響,如何有效屏蔽

    嵌入式系統(tǒng)開發(fā)中的測試方法 嵌入式系統(tǒng)開發(fā)與AI結(jié)合應(yīng)用

    嵌入式系統(tǒng)開發(fā)中的測試方法 嵌入式系統(tǒng)開發(fā)是一個復(fù)雜的過程,涉及到硬件和軟件的緊密結(jié)合。測試是確保系統(tǒng)可靠性和性能的關(guān)鍵步驟。以下是一些常用的測試方法:
    的頭像 發(fā)表于 12-09 10:22 ?1371次閱讀

    開發(fā)者必讀!CircleCI?組件測試單元測試全解析

    在軟件開發(fā)中,測試是保證軟件質(zhì)量和可靠性的關(guān)鍵環(huán)節(jié)。作為領(lǐng)先的 CI/CD 平臺,CircleCI 提供了支持自動化測試的強(qiáng)大工具。其中,單元測試和組件測試是兩種重要的
    的頭像 發(fā)表于 12-03 09:18 ?625次閱讀

    汽車軟件單元測試的重要性

    測試不充分密切相關(guān),這引發(fā)了社會各界對汽車軟件健壯性的重要性進(jìn)行深入思考。本文將探討汽車軟件的測試,尤其是單元測試的重要性,以及WinAMS單元測
    的頭像 發(fā)表于 11-29 10:57 ?520次閱讀

    嚴(yán)格的單元測試造就完美的軟件

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

    嵌入軟件單元/集成測試工具專業(yè)分析

    引言 在現(xiàn)代軟件開發(fā)過程中,單元測試作為確保代碼質(zhì)量的重要環(huán)節(jié),得到了廣泛的關(guān)注和應(yīng)用。隨著嵌入式系統(tǒng)的復(fù)雜性日益增加,對高效、可靠的單元測試工具的需求也愈加迫切。WinAMS作為一款專為嵌入
    的頭像 發(fā)表于 11-19 16:41 ?673次閱讀

    ESD HBM測試差異較大的結(jié)果分析

    ESD HBM測試結(jié)果差異較大的原因,通常包括設(shè)備/儀器差異、?校準(zhǔn)和維護(hù)水平不同、?環(huán)境條件差異、?測試樣本差異、?測試操作員技能和經(jīng)驗(yàn)差異以及
    的頭像 發(fā)表于 11-18 15:17 ?1244次閱讀
    ESD HBM<b class='flag-5'>測試</b>差異較大的<b class='flag-5'>結(jié)果</b><b class='flag-5'>分析</b>