原創(chuàng)|使用教程|編輯:龔雪|2015-12-11 14:25:51.000|閱讀 745 次
概述:關(guān)于Parasoft C / C ++test的嵌入式單元測試實(shí)踐,本文主要介紹了單元測試的結(jié)果傳輸和解決目標(biāo)局限性
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
<Parasoft C / C ++test產(chǎn)品詳情>
配置結(jié)果傳輸需要在C++test runtime library中選擇一個(gè)合適的通信信道。 MDK-ARM 4.1和ULINKPro運(yùn)行測試的默認(rèn)設(shè)置是基于指令跟蹤宏單元(Instrumentation Trace Macrocell)的通信(是ARM CoreSight debug和跟蹤技術(shù)的一部分)。在這種模式下,C++test將測試信息直接寫入ITM端口,ULINKPro確保數(shù)據(jù)傳輸?shù)街鳈C(jī)。然后,uVision IDE捕獲這些內(nèi)容并存儲(chǔ)到文件中,以便C++test進(jìn)行分析。
這種開發(fā)環(huán)境中目標(biāo)到主機(jī)(target-to-host)的通信信道是Parasoft C++test所獨(dú)有的。它有著出色的頻帶寬度,并且比傳統(tǒng)的UART connections配置起來簡單的多。此外,由于是專用信道,因此與測試程序和測試框架生成的通信鏈路不沖突。C++test已經(jīng)將ITM預(yù)先配置好了,無需再進(jìn)行配置。
這里需要再次強(qiáng)調(diào)文章開頭所說的,單元測試并不是一件簡單的事情,尤其當(dāng)同時(shí)遇到測試和開發(fā)平臺限制的時(shí)候。開發(fā)平臺的限制越多,需要做的額外工作就越多。以下就是在目標(biāo)設(shè)備上測試時(shí)可能遇到的問題:
嵌入式項(xiàng)目往往是建立在免費(fèi)的棧和堆內(nèi)存上的。如果沒有可用的堆和棧,那么測試框架將不能繼續(xù)執(zhí)行測試了。最壞的情況是,我們可能連一個(gè)測試用例都完成不了。最簡單的解決方法當(dāng)然是增加堆和棧的數(shù)量。但大多數(shù)時(shí)候,這是不可能的。一般情況下,我們都選擇停止硬件的運(yùn)作來獲得更多的內(nèi)存。或者重新配置測試框架使內(nèi)存消耗變少。你若是選擇放棄在測試案例中使用外部數(shù)據(jù)資源,使用DCPPTEST_DATA_SOURCES_ENABLED = 0將限制堆使用。你若是選擇測試執(zhí)行問題的堆棧跟蹤報(bào)告,使用-DCPPTEST_ STACKTRACE_ENABLED = 0(禁用“stack traces reporting”)將減少內(nèi)存的消耗。另一種方法是,對測試斷言的消息發(fā)出設(shè)置一個(gè)下限值。默認(rèn)的值為1024b,可以通過-DCPPTEST_MAX_MESSAGE_SIZE=512進(jìn)行設(shè)置,但是值的設(shè)定不能超過規(guī)定范圍。
以下是導(dǎo)致測試可執(zhí)行文件增大的因素:
C++test運(yùn)行庫是一個(gè)輔助例程的集合,并且可以進(jìn)行配置。我們可以去掉一些功能來減少占用空間。通常,可以禁用運(yùn)行庫的一些非核心功能來減少程序內(nèi)存消耗。非核心功能的選擇要取決于測試和用戶的要求。C++test用戶手冊中,可以通過運(yùn)行庫宏列表進(jìn)程啟用/禁用操作。
通過在C++test中添加原始的源代碼,來收集測試過程和控制測試執(zhí)行的各種信息。為了限制由此所產(chǎn)生的消耗,用戶可以禁用或去掉一些功能。設(shè)置界面中可以同時(shí)進(jìn)行這兩種設(shè)置。界面如下圖所示。
這些是測試過程中產(chǎn)生的內(nèi)部代碼片段。測試用例/存根的數(shù)量會(huì)影響測試可執(zhí)行文件的內(nèi)存使用。當(dāng)大量的測試用例(成百甚至上千)同時(shí)運(yùn)行時(shí)會(huì)產(chǎn)生問題。將這些測試用例分開運(yùn)行,可以降低維護(hù)成本和內(nèi)存使用。
這主要包括源代碼測試和后續(xù)C++test運(yùn)行庫的調(diào)用。測試執(zhí)行中添加的粘合代碼是可以忽略的。我們不能把執(zhí)行時(shí)間僅僅看做是測試功能/方法的問題。這樣想的后果就是,我們只需運(yùn)行功能,然后等待結(jié)果并驗(yàn)證。你也許覺得這樣沒有什么不好,只是等待的時(shí)候久了點(diǎn)。但是,這些問題在集成測試的時(shí)候就會(huì)暴露出來了。因此,我們不能只是孤立地考慮單個(gè)功能,還要看它與其他模塊的協(xié)作。否則,可能會(huì)出現(xiàn)以下的問題。假設(shè)代碼測試設(shè)計(jì)要在xxx處停止,但是2*xxx已經(jīng)執(zhí)行了。結(jié)果,其他的代碼無法在規(guī)定時(shí)間內(nèi)執(zhí)行,打破了整個(gè)模塊的時(shí)間相關(guān)性,導(dǎo)致了測試失敗。這個(gè)問題可以這樣解決。在前文提到C++test提供了一個(gè)用戶接口。用戶可以指定哪些部分要測試,哪些測試功能要用到。
通信信道的選擇主要是由開發(fā)平臺和目標(biāo)設(shè)備決定的。結(jié)果可以通過TCP/IP sockets、RS232進(jìn)行發(fā)送,或存儲(chǔ)在文件系統(tǒng)或閃存中。每一種方式都有它自己的優(yōu)缺點(diǎn)。我們還可以對通信信道進(jìn)行自定義。用戶只需實(shí)現(xiàn)以下幾個(gè)簡單的功能:initializeCommunicaiton, sendByte, finalizeCommunication。以下是常見問題:
①通信信道的緩慢導(dǎo)致執(zhí)行時(shí)間的增加(如串行線路的傳輸速率低下)
②通信信道訪問沖突(被測程序有時(shí)也需要訪問通信信道)
若結(jié)果發(fā)送缺少通信則返回主機(jī)。
多數(shù)時(shí)候,由于開發(fā)環(huán)境中通信信道的限制會(huì)讓我們束手束腳。因此,選擇一個(gè)好的測試功能是非常重要的。下圖中展示了UART和ITM分別發(fā)送一個(gè)字節(jié)所消耗的時(shí)間對比。
購買最新正版授權(quán)Parasoft贈(zèng)送Macbook!""
慧都年終盛典火爆開啟,一年僅一次的最強(qiáng)促銷,破冰鉅惠不容錯(cuò)過(12.01~12.31)!!優(yōu)惠詳情點(diǎn)擊查看>>
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn