www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > 嵌入式大雜燴
[導(dǎo)讀]嵌入式行業(yè)摸爬滾打這幾年,遇見有規(guī)范單元測試的項目寥寥無幾。歸根到底,無非是公司希望快速迭代出產(chǎn)品,有問題等客戶反饋再說。當(dāng)然,也有人認(rèn)為是嵌入式行業(yè)都是小而美的產(chǎn)品居多,沒有到一定量級之前,玩不起單元測試這種配置。不過,出于對代碼穩(wěn)定性的追求,我認(rèn)為還是應(yīng)該著手了解一下單元測試的。畢竟,這是有效提高代碼說服力的方式之一。


前言

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

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

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

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

  • 曾經(jīng)使用單元測試但效果不好,因為在嵌入式行業(yè),時常要跟硬件打交道,單元測試很難檢測硬件問題,所以往往一看到"單元測試"這幾個字的反應(yīng)就是"沒用"

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



01

單元測試真的"無用"?



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

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

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

02

最原始的"單元測試"



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

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

struct list_head { struct list_head *next, *prev;};/*定義一個結(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)/*動態(tài)初始化*/static inline void INIT_LIST_HEAD(struct list_head *list){ list->next = list; list->prev = list;}/*插入操作*//*刪除操作*//*合并操作*/...

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

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

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

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

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

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

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

目前,對于這個小小的單元測試案例,還有很多的不足,下面簡單羅列了幾項:

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

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

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

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

03

總結(jié)


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

它會使你的代碼:

  • ?產(chǎn)生的bug更少

  • 調(diào)試時間更短

  • 完全可以通過提交你的單元測試案例,來證明你的項目可靠性。



猜你喜歡

干貨 | 函數(shù)宏的三種封裝方式

你寫的程序很健壯?不妨測一下?


1024G 嵌入式資源大放送!包括但不限于C/C++、單片機、Linux等。在公眾號聊天界面回復(fù)1024,即可免費獲??!

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉