加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

嵌入式,可測試性軟件設(shè)計!

01/17 11:50
2350
閱讀需 7 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

大家好,我是雜燴君。

本次我們來介紹嵌入式可測試軟件設(shè)計。

什么是可測試性?就是你這個軟件模塊/函數(shù)接口寫完之后,可以較為方便、較為全面地進行自測?。

舉個簡單的例子來認識可測試性軟件。

有一個計算函數(shù)cal_func,其計算依賴于存在flash里的數(shù)據(jù)a,與一個外部輸入的數(shù)據(jù)b。

此時,有如下兩種實現(xiàn)方法:

方法一:

int?get_a_from_flash(void)
{
?int?a?=?0;
?flash_read(&a,?sizeof(int));
?
?return?a;
}

int?cal_func(int?b)
{
?int?res?=?0;
?int?a?=?get_a_from_flash();
?
?res?=?a?+?b;
?
?return?res;
}

//?調(diào)用
cal_func(5);

方法二:

int?get_a_from_flash(void)
{
?int?a?=?0;
?flash_read(&a,?sizeof(int));
?
?return?a;
}

int?cal_func(int?a,?int?b)
{
?int?res?=?0;
?
?res?=?a?+?b;
?
?return?res;
}

//?調(diào)用
cal_func(get_a_from_flash(),?5);

這種類似場景,實際開發(fā)中應(yīng)該有不少,大家平時都是按照方式一寫代碼還是方式二寫代碼呢?

從可測試性的角度來看, 方法二的實現(xiàn),更具備可測試性 。

方式一,因為有一個數(shù)據(jù)是在函數(shù)內(nèi)部從flash中讀取的,所以這個數(shù)據(jù)我們不太方便進行控制,而能控制的只有參數(shù)b。那么,這樣子,我們在調(diào)用測試時,測得就不是很全,也不能靈活地控制測試路徑。

方式二,計算所依賴的數(shù)據(jù)都通過函數(shù)參數(shù)留出來了,我們可以很方便地對函數(shù)進行測試,可以很方便地輸入不同的數(shù)據(jù)組合。

并且,一般地,我們會引入一些 單元測試框架 ,用來統(tǒng)一管理我們的測試例子。

嵌入式中,常用的測試框架:

    Unity:https://github.com/ThrowTheSwitch/Unity/releasescutest:https://sourceforge.net/projects/cutest/embunit :https://sourceforge.net/projects/embunitgoogletest:https://github.com/google/googletest/releases

使用測試框架之后,針對cal_func函數(shù)設(shè)計的測試代碼如:

int?ut_cal_func(int?argc,?char?*argv[])
{
????if?(argc?!=?3)
????{
????????printf("Param?num?errn");
????????return?USAGE;
????}

????//?預(yù)期結(jié)果
????int?expected_res?=?atoi(argv[2]);?
????//?實際結(jié)果??????????????????
?int?res?=?cal_func(atoi(argv[0]),?atoi(argv[1]));???

????if?(expected_res?==?res)
????{
????????printf("input?%d,?%d,?test?pass!n",?atoi(argv[0]),?atoi(argv[1]));
????}
????else
????{
????????printf("input?%d,?%d,?test?failed!n",?atoi(argv[0]),?atoi(argv[1]));
????}

?return?0;
}

我們封裝成串口測試指令:

//?測試路徑1
ut?app?ut_cal_func?1?2?3
????
//?測試路徑2
ut?app?ut_cal_func?2?3?5
????
//?...

輸出:

input?1,?2,?test?pass!
input?2,?3,?test?pass!

這就是一個可測試性軟件設(shè)計的一個小例子,通過這個小例子大家應(yīng)該認識到可測試性軟件的好處了吧?

所以,之后寫代碼,寫之前,有必要先想清楚,這個模塊最后要怎么進行自測?要測哪些地方?

設(shè)計的軟件可測試性強,我們就能在開發(fā)階段進行充分地測試,在開發(fā)階段盡可能多地解決一些邏輯上的問題,從而保證更高質(zhì)量地軟件交付。

以上就是本次的分享,歡迎收藏、轉(zhuǎn)發(fā)!

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
SN74LVC1G08DCKT 1 Rochester Electronics LLC LVC/LCX/Z SERIES, 2-INPUT AND GATE, PDSO5, GREEN, PLASTIC, SC-70, 5 PIN
$0.94 查看
ASFL1-12.000MHZ-ERS-T 1 Abracon Corporation XTAL OSC XO 12.0000MHZ HCMOS TTL
$1.28 查看
ECS-.327-12.5-12QS-TR 1 ECS International Inc Parallel - Fundamental Quartz Crystal, 0.032768MHz Nom, SMD, 2 PIN

ECAD模型

下載ECAD模型
$1.31 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

本公眾號專注于嵌入式技術(shù),包括但不限于C/C++、嵌入式、物聯(lián)網(wǎng)、Linux等編程學(xué)習(xí)筆記,同時,公眾號內(nèi)包含大量的學(xué)習(xí)資源。歡迎關(guān)注,一同交流學(xué)習(xí),共同進步!