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

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

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

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

MATLAB ? 來(lái)源:djl ? 作者:oopmatlab ? 2019-09-17 17:26 ? 次閱讀

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

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

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

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

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

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

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

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

命名規(guī)則如下:

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

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

如下所示:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

我們?cè)偬砑右粋€(gè)負(fù)面測(cè)試,回憶第一版的函數(shù)getArea不支持單個(gè)參數(shù),如下:

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

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

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

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

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

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

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

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

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

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

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

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

測(cè)試方法論和以測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(Test-Driven Development)

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

    關(guān)注

    1

    文章

    585

    瀏覽量

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

    關(guān)注

    3

    文章

    4344

    瀏覽量

    62835
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

    汽車軟件單元測(cè)試的重要性

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

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

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

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

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

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

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

    matlab神經(jīng)網(wǎng)絡(luò)工具箱結(jié)果分析

    MATLAB神經(jīng)網(wǎng)絡(luò)工具箱的使用和結(jié)果分析MATLAB神經(jīng)網(wǎng)絡(luò)工具箱概述 MATLAB神經(jīng)網(wǎng)絡(luò)工具箱提供了一系列的函數(shù)和工具,用于構(gòu)建、
    的頭像 發(fā)表于 07-03 10:32 ?663次閱讀

    單元測(cè)試、集成測(cè)試自動(dòng)化工具

    機(jī)能安全I(xiàn)SO26262軟件工具的認(rèn)證 產(chǎn)品概要 [Coverage master winAMS]是以嵌入式軟件的函數(shù)為單位,實(shí)施模塊單元測(cè)試以及C
    的頭像 發(fā)表于 06-26 13:41 ?479次閱讀
    <b class='flag-5'>單元測(cè)試</b>、集成<b class='flag-5'>測(cè)試</b>自動(dòng)化工具

    接口測(cè)試的工具有哪些種類

    單元測(cè)試框架 單元測(cè)試框架主要用于測(cè)試單個(gè)模塊或函數(shù)的功能。雖然它們主要用于開(kāi)發(fā)階段,但也可以用于接口測(cè)試。 1.1 JUnit (Java) JUnit 是 Java 語(yǔ)言的
    的頭像 發(fā)表于 05-30 15:07 ?784次閱讀

    影響氣密性測(cè)試結(jié)果的原因分析及解決方案分享

    影響氣密性測(cè)試結(jié)果的原因分析及解決方案分享現(xiàn)在的制造業(yè),對(duì)產(chǎn)品的氣密性能都是要求很高的,通過(guò)氣密性測(cè)試能檢測(cè)出產(chǎn)品在使用時(shí)是否會(huì)出現(xiàn)滲漏、漏氣等質(zhì)量問(wèn)題,確保產(chǎn)品的可靠性和安全性。不過(guò)
    的頭像 發(fā)表于 05-30 08:30 ?1973次閱讀
    影響氣密性<b class='flag-5'>測(cè)試</b><b class='flag-5'>結(jié)果</b>的原因<b class='flag-5'>分析</b>及解決方案分享

    嵌入軟件單元測(cè)試工具的作用

    嵌入軟件單元測(cè)試工具是現(xiàn)代軟件開(kāi)發(fā)過(guò)程中不可或缺的一環(huán)。它的作用在于幫助開(kāi)發(fā)人員對(duì)軟件中的各個(gè)單元進(jìn)行測(cè)試,以確保其功能的正確性和穩(wěn)定性。單元測(cè)試
    的頭像 發(fā)表于 04-23 15:31 ?451次閱讀
    嵌入軟件<b class='flag-5'>單元測(cè)試</b>工具的作用

    LitePoint推出其最新的5G O-RAN無(wú)線電單元測(cè)試技術(shù)

    無(wú)線測(cè)試解決方案先進(jìn)供應(yīng)商LitePoint宣布將參加于4月12日在臺(tái)北舉行的2024年D Forum移動(dòng)通信論壇,展示其最新的5G O-RAN無(wú)線電單元測(cè)試技術(shù)。
    的頭像 發(fā)表于 04-11 15:26 ?537次閱讀

    鴻蒙OS開(kāi)發(fā)實(shí)戰(zhàn):【自動(dòng)化測(cè)試框架】使用指南

    為支撐HarmonyOS操作系統(tǒng)的自動(dòng)化測(cè)試活動(dòng)開(kāi)展,我們提供了支持JS/TS語(yǔ)言的單元及UI測(cè)試框架,支持開(kāi)發(fā)者針對(duì)應(yīng)用接口進(jìn)行單元測(cè)試,并且可基于UI操作進(jìn)行UI自動(dòng)化腳本的編寫(xiě)。
    的頭像 發(fā)表于 04-08 14:49 ?1495次閱讀
    鴻蒙OS開(kāi)發(fā)實(shí)戰(zhàn):【自動(dòng)化<b class='flag-5'>測(cè)試</b>框架】使用指南

    單元/集成測(cè)試服務(wù)

    單元/集成測(cè)試旨在證明被測(cè)軟件實(shí)現(xiàn)其單元/架構(gòu)設(shè)計(jì)規(guī)范、證明被測(cè)軟件不包含非預(yù)期功能。經(jīng)緯恒潤(rùn)測(cè)試團(tuán)隊(duì)擁有豐富的研發(fā)經(jīng)驗(yàn)、嚴(yán)格的流程管控,依據(jù)ISO26262/ASPICE等開(kāi)展符合要
    的頭像 發(fā)表于 02-29 13:27 ?408次閱讀
    <b class='flag-5'>單元</b>/集成<b class='flag-5'>測(cè)試</b>服務(wù)