亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

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

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

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

嵌入式需要單元測(cè)試嗎?

工程師 ? 來源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2020-10-23 16:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

嵌入式行業(yè)摸爬滾打這幾年,遇見有規(guī)范單元測(cè)試的項(xiàng)目寥寥無幾。歸根到底,無非是公司希望快速迭代出產(chǎn)品,有問題等客戶反饋再說。當(dāng)然,也有人認(rèn)為是嵌入式行業(yè)都是小而美的產(chǎn)品居多,沒有到一定量級(jí)之前,玩不起單元測(cè)試這種配置。正如做個(gè)蛋炒飯,并不需要安排主廚、二廚一般。

不過出于對(duì)代碼穩(wěn)定性的追求,我認(rèn)為還是應(yīng)該著手了解一下單元測(cè)試的。畢竟,這是有效提高代碼說服力的方式之一。

相信沒有真正體驗(yàn)過單元測(cè)試好處的讀者一看到“單元測(cè)試”這幾個(gè)字,可能會(huì)出現(xiàn)以下兩種反應(yīng)之一:

由于沒有單元測(cè)試的經(jīng)驗(yàn),因此對(duì)采用這一方法去保證軟件質(zhì)量很好奇,也迫切地想要了解這一方法在項(xiàng)目中的實(shí)施

曾經(jīng)使用單元測(cè)試但效果不好,因?yàn)樵谇度胧叫袠I(yè),時(shí)常要跟硬件打交道,單元測(cè)試很難檢測(cè)硬件問題,所以往往一看到“單元測(cè)試”這幾個(gè)字的反應(yīng)就是“沒用”

如果讀者是第一種反應(yīng)那很好,本文就是科普單元測(cè)試的基本要點(diǎn)。如果讀者是第二種反應(yīng),那可能是對(duì)單元測(cè)試存在偏見,本系列文章也會(huì)介紹mock測(cè)試、錯(cuò)誤注入等方式,使單元測(cè)試也能合理使用于嵌入式行業(yè)。

01

單元測(cè)試真的“無用”?

造成“單元測(cè)試無用論”的第一個(gè)原因是,運(yùn)用這一方法的時(shí)機(jī)不恰當(dāng)。不少項(xiàng)目在一開始真正關(guān)心質(zhì)量的人很少,更談不上采用一整套的方法論去保證質(zhì)量了。產(chǎn)品在開發(fā)出來后發(fā)現(xiàn)到處存在問題,只會(huì)拆西墻補(bǔ)東墻根本就不能阻止問題一而再,再而三地出現(xiàn)。于是,開始想起單元測(cè)試。一聲令下,整個(gè)項(xiàng)目開始做單元測(cè)試。單元測(cè)試以模塊為單位,需要先把項(xiàng)目拆分出來。如果你的項(xiàng)目代碼整體耦合程度較高的話,單元測(cè)試根本無從說起,拆分的工作會(huì)讓你痛苦不已。

單元測(cè)試是一項(xiàng)耗時(shí)的工作,但管理者卻往往希望在短期內(nèi)看到效果?;蛘邌卧獪y(cè)試還沒做到位管理層就等不及了,催你馬上開始下一步的開發(fā),結(jié)果只能是前功盡棄。正確的做法是:在項(xiàng)目的開始之初就引入單元測(cè)試。對(duì)于以前沒有部署單元測(cè)試的項(xiàng)目,先只對(duì)新增加的、相對(duì)獨(dú)立的模塊做單元測(cè)試、并逐漸覆蓋老代碼。

第二個(gè)導(dǎo)致“單元測(cè)試無用論”的原因是,方法沒有運(yùn)用到位。要保證單元測(cè)試的有效性一定要引入另一個(gè)概念--代碼覆蓋。關(guān)于代碼覆蓋,我以后會(huì)另外再寫一篇文章介紹。只有將單元測(cè)試和代碼覆蓋結(jié)合在一起,綜合使用才能保證單元測(cè)試的效果。

02

最原始的“單元測(cè)試”

這里給讀者展示一下,不使用任何單元測(cè)試框架時(shí),是怎么做單元測(cè)試的。

下面簡單以linux內(nèi)核鏈表為例:

struct list_head { struct list_head *next, *prev;};/*定義一個(gè)結(jié)構(gòu)體,只含有表示前驅(qū)和后繼的指針,它就是我們的主角了*/#define LIST_HEAD_INIT(name) { &(name), &(name) }/*靜態(tài)初始化*/#define LIST_HEAD(name) \ struct list_head name = LIST_HEAD_INIT(name)/*動(dòng)態(tài)初始化*/static inline void INIT_LIST_HEAD(struct list_head *list){ list-》next = list; list-》prev = list;}/*插入操作*//*刪除操作*//*合并操作*/。。.

完整代碼很長,這里沒有必要全部貼出,能起演示作用就足夠了。

現(xiàn)在就以INIT_LIST_HEAD函數(shù)為例,來考慮如何為這個(gè)函數(shù)設(shè)計(jì)測(cè)試用例。INIT_LIST_HEAD函數(shù)的實(shí)現(xiàn)是如此的簡單,以至于很容易讓人覺得為它設(shè)計(jì)單元測(cè)試是多余的。但是,從單元測(cè)試的角度看,只要不存在可行性問題就不應(yīng)考慮因?yàn)楹唵味粚?duì)其進(jìn)行驗(yàn)證。而且,放棄對(duì)之進(jìn)行驗(yàn)證,以后會(huì)降低代碼覆蓋率。

做單元測(cè)試需要通過編寫程序的方式來完成,所編寫的用于測(cè)試的代碼又稱為單元測(cè)試用例。

下面我們來簡單實(shí)現(xiàn)一個(gè)INIT_LIST_HEAD函數(shù)的測(cè)試用例:

int main(int argc,char **argv){ struct list_head list; /*避免函數(shù)沒有使用參數(shù)而引發(fā)waining*/ UNUSED(argc); UNUSED(argv); list.prev = (struct list_head*)0xaaaa; list.next = (struct list_head*)0xbbbb; INIT_LIST_HEAD(list); /*檢查前指針*/ if(list.prev != list){ return -1; } /*檢查后指針*/ if(list.next != list){ return -1; } return 0;}

這應(yīng)該是史上最簡單的測(cè)試用例,功能非常簡單,首先是故意將list結(jié)構(gòu)體中的各個(gè)指針變量初始化為一個(gè)隨機(jī)值。然后在調(diào)用完INIT_LIST_HEAD函數(shù)之后,檢查各成員是否被初始化為了list,以判斷INIT_LIST_HEAD函數(shù)是否正常工作了。注意:這個(gè)測(cè)試程序還有一個(gè)約定,返回-1代表測(cè)試失敗,返回0表示測(cè)試成功。

這個(gè)測(cè)試用例是基于我們對(duì)INIT_LIST_HEAD函數(shù)有足夠的了解之后編寫的,這種測(cè)試方法在軟件測(cè)試領(lǐng)域有個(gè)正兒八經(jīng)的名字,叫白盒測(cè)試。

相信通過這個(gè)NIT_LIST_HEAD函數(shù)的測(cè)試用例,你已經(jīng)初步建立起了對(duì)單元測(cè)試的印象。但是千萬不要以為單元測(cè)試僅此而已,這是我刻意簡化的結(jié)果。要完整地掌握單元測(cè)試,還要好好學(xué)習(xí)一段時(shí)間。

目前,對(duì)于這個(gè)小小的單元測(cè)試案例,還有很多的不足,下面簡單羅列了幾項(xiàng):

如果對(duì)于每一次檢查都采取直接寫if語句的形式,將造成大量的冗余代碼,并且測(cè)試用例的編寫效率也會(huì)很低。

通過觀察程序是否返回0或者是-1的方式來判斷所有的測(cè)試是否通過并不直觀,一旦出錯(cuò)也無法馬上判斷是那一步測(cè)試出了問題。毫無疑問,我們需要更加直觀的方式來展示哪一步成功或者哪一步失敗。

一份嚴(yán)謹(jǐn)?shù)臏y(cè)試用例,會(huì)有大量的判定。如果一個(gè)測(cè)試程序存在100次判定,其中出現(xiàn)了3次失敗,那最終顯示一個(gè)百分比的測(cè)試通過率會(huì)比較直觀,比如可以顯示97%的測(cè)試成功了。

后面會(huì)進(jìn)一步介紹如何自己搭建一個(gè)簡單實(shí)用的單元測(cè)試框架,來解決上面這些問題。也會(huì)陸續(xù)展開介紹mock方法、打樁、錯(cuò)誤注入、代碼覆蓋、動(dòng)態(tài)分析、靜態(tài)分析、性能優(yōu)化等內(nèi)容。

03

總結(jié)

正如很多其他技巧,比如打桌球、滑雪一樣,測(cè)試驅(qū)動(dòng)開發(fā)也要花費(fèi)相當(dāng)長時(shí)間來練習(xí)。許多開發(fā)者已經(jīng)接受了這種技術(shù),而且再也不想回到從前“后期調(diào)試式編程”的方式去了。

它會(huì)使你的代碼:

產(chǎn)生的bug更少

調(diào)試時(shí)間更短

完全可以通過提交你的單元測(cè)試案例,來證明你的項(xiàng)目可靠性。

責(zé)任編輯:haq

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

    關(guān)注

    8

    文章

    5936

    瀏覽量

    130434
  • 嵌入式
    +關(guān)注

    關(guān)注

    5178

    文章

    20028

    瀏覽量

    326061
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4928

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    嵌入式C/C++回歸測(cè)試四大最佳實(shí)踐(附自動(dòng)化測(cè)試工具TESSY使用教程)

    嵌入式開發(fā)中,一次微小的代碼改動(dòng)都可能引發(fā)“蝴蝶效應(yīng)”,如何守護(hù)系統(tǒng)的穩(wěn)健?推薦專業(yè)的自動(dòng)化測(cè)試工具#TESSY,源自戴姆勒-奔馳,是嵌入式C/C++單元/集成
    的頭像 發(fā)表于 10-31 14:21 ?23次閱讀
    <b class='flag-5'>嵌入式</b>C/C++回歸<b class='flag-5'>測(cè)試</b>四大最佳實(shí)踐(附自動(dòng)化<b class='flag-5'>測(cè)試</b>工具TESSY使用教程)

    嵌入式軟件測(cè)試與專業(yè)測(cè)試工具的必要性深度解析

    嵌入式系統(tǒng)作為控制、監(jiān)視或輔助裝置運(yùn)行的專用計(jì)算機(jī)系統(tǒng),其軟件測(cè)試面臨著獨(dú)特的挑戰(zhàn)和嚴(yán)格的要求。專業(yè)測(cè)試工具在嵌入式軟件開發(fā)過程中發(fā)揮著不可替代的作用,是確保系統(tǒng)可靠性和安全性的關(guān)鍵保
    發(fā)表于 09-28 17:42

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

    上海磐時(shí)PANSHI“磐時(shí),做汽車企業(yè)的安全智庫”軟件單元測(cè)試的設(shè)計(jì)方法寫在前面:軟件單元測(cè)試的設(shè)計(jì)是一個(gè)系統(tǒng)化的過程,旨在驗(yàn)證代碼的最小可測(cè)試部分(通常是函數(shù)或方法)是否按預(yù)期工作。軟件單元
    的頭像 發(fā)表于 09-05 16:18 ?2304次閱讀
    邊聊安全 | 軟件<b class='flag-5'>單元測(cè)試</b>的設(shè)計(jì)方法

    HarmonyOSAI編程單元測(cè)試用例

    根據(jù)選中的ArkTS方法名稱,CodeGenie支持自動(dòng)生成對(duì)應(yīng)單元測(cè)試用例,提升測(cè)試覆蓋率。 在ArkTS文檔中,光標(biāo)放置于方法名稱上或框選完整的待測(cè)試方法代碼塊,右鍵選擇CodeGenie
    發(fā)表于 08-27 14:33

    單元測(cè)試工具TESSY現(xiàn)已支持ABIX HiperSIM,助力MELEXIS MLX16 汽車嵌入式系統(tǒng)的軟件驗(yàn)證

    TESSY現(xiàn)已支持ABIX HiperSIM,為基于MELEXIS MLX16架構(gòu)的汽車嵌入式系統(tǒng)提供高效、可靠的軟件驗(yàn)證解決方案。自動(dòng)化測(cè)試+高保真仿真,助力提升軟件質(zhì)量與開發(fā)效率。
    的頭像 發(fā)表于 07-17 13:39 ?592次閱讀
    <b class='flag-5'>單元測(cè)試</b>工具TESSY現(xiàn)已支持ABIX HiperSIM,助力MELEXIS MLX16 汽車<b class='flag-5'>嵌入式</b>系統(tǒng)的軟件驗(yàn)證

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

    ?第一部分:新能源車軟件單元測(cè)試的戰(zhàn)略重要性 ?汽車電子架構(gòu)的范式轉(zhuǎn)變? 隨著新能源車的普及,汽車電子架構(gòu)從傳統(tǒng)的分布ECU(電子控制單元)向集中式域控制器(Domain Controller
    發(fā)表于 05-12 15:59

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

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

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

    1.?單元測(cè)試概述 ?定義與核心目標(biāo)? 單元測(cè)試是軟件開發(fā)過程中針對(duì)程序模塊(如函數(shù)、類或組件)的最小可測(cè)試單元進(jìn)行的驗(yàn)證活動(dòng)。其核心目標(biāo)在于隔離代碼片段,驗(yàn)證其功能是否符合設(shè)計(jì)預(yù)期,
    的頭像 發(fā)表于 04-11 14:31 ?653次閱讀

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

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

    如何成為嵌入式開發(fā)工程師?

    如何成為嵌入式開發(fā)工程師? 成為嵌入式開發(fā)工程師通常需要掌握一系列技能和知識(shí),并且在實(shí)踐中不斷積累經(jīng)驗(yàn)。以下是一些基本步驟和建議: 1. 基礎(chǔ)教育:- 獲取電子工程、計(jì)算機(jī)科學(xué)或相關(guān)領(lǐng)域的學(xué)位
    發(fā)表于 02-19 10:39

    如何提高嵌入式代碼質(zhì)量?

    技術(shù) 現(xiàn)代的嵌入式開發(fā)工具和測(cè)試技術(shù)可以極大地提升代碼質(zhì)量和開發(fā)效率: 1. 靜態(tài)分析工具:如Coverity、Lint等,能夠幫助發(fā)現(xiàn)潛在的代碼缺陷和安全漏洞。 2. 單元測(cè)試和集成測(cè)試
    發(fā)表于 01-15 10:48

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

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

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

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

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

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

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

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