日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
嵌入式軟件測試淺談

嵌入式軟件測試與普通軟件測試的目的一樣,都是為了發(fā)現(xiàn)軟件缺陷,而后修正缺陷以提高軟件的可靠性。嵌入式系統(tǒng)安全性的失效可能會導(dǎo)致災(zāi)難性后果,即使非安全性失效,由于其應(yīng)用場合特殊也會導(dǎo)致重大經(jīng)濟損失。因此,往往嵌入式軟件對可靠性的要求比普通軟件高。這就要求對嵌入式軟件進行嚴格的測試、確認和驗證,以提高產(chǎn)品的可靠性。

阿圖什ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

不過由于嵌入式軟件的多樣性,基于的操作系統(tǒng),使用的開發(fā)環(huán)境,微控制器都是日益繁多,完整規(guī)范的測試實現(xiàn)起來比較困難,一般企業(yè)都是直接進行系統(tǒng)測試。單元測試,集成測試由于測試執(zhí)行的運行環(huán)境建立困難,執(zhí)行效率低下,或者維護困難就往往被忽略。

實際上,只要時間上做好安排,確立測試方案,根據(jù)情況建立單元測試環(huán)境,還是可以順利實施單元測試,盡早發(fā)現(xiàn)軟件缺陷,整體上獲得時效,提高了系統(tǒng)可靠性。文中筆者就根據(jù)多年工作實踐,將嵌入式軟件單元測試相關(guān)的一些經(jīng)驗與大家分享,同時拋磚引玉。

測試環(huán)境

單元測試首先需要動態(tài)運行代碼的環(huán)境,嵌入式軟件開發(fā)環(huán)境往往是交叉開發(fā)環(huán)境,我們希望將代碼移植到開發(fā)主機上運行(比如Windows系統(tǒng)),這樣做有幾個好處:

1 可以利用高速的主機提高代碼運行效率;

2 有利于測試管理,便于測試用例輸入和形成測試結(jié)果報表和維護;

3 充分利用Windows系統(tǒng)的測試工具,實現(xiàn)自動化測試。

不過移植代碼至Windows系統(tǒng)需要將嵌入式軟件的API都移植到Windows,形成虛擬系統(tǒng)接口層,這種方法往往是長期使用這一嵌入式系統(tǒng),一勞永逸的長遠性方案。

當(dāng)然還可以通過購買使用一些商用的工具,比如CodeTest,VcTester,使用這些工具在嵌入式系統(tǒng)上直接開展單元測試工作。

這兩種方案對于一些中小企業(yè)來說,由于不愿投入這么大人力物力,不能建立長期有效的開發(fā)方案而無法實施。對于這種條件還可以采用一種投入較小的短時方案,直接在程序中加入測試代碼,直接在目標板上運行查看結(jié)果,測試用例也可以直接在代碼中,或者通過接口從主機獲得測試輸入及輸出測試結(jié)果。這一方案對于測試硬件驅(qū)動也是相當(dāng)適用的,比如測試某設(shè)備讀寫做了以下c語言代碼(詳見本刊網(wǎng)站):

在實際平臺上運行該代碼執(zhí)行測試,這種方法主要用于單元的功能測試。雖然需要在單元測試階段編寫額外的代碼,但是由上面例子可見,被測單元接口定義清晰,測試代碼很容易完成,至于測試用例的編寫是無法避免的。正式發(fā)布代碼時通過條件編譯將這些代碼屏蔽即可。

測試策略 

從測試效果上看,當(dāng)然是花費越多的時間、人力,發(fā)現(xiàn)的問題越多,產(chǎn)品的質(zhì)量控制得更好。但實際上,徹底做好軟件單元測試幾乎是不可能的,我們需要綜合考慮成本和效率,這是實際產(chǎn)品開發(fā)中經(jīng)常遇到的問題,都面對這樣兩難的境地——上市時間延誤而沒有及時占領(lǐng)市場;或是時間上搶先,不過測試不充分導(dǎo)致出廠的產(chǎn)品質(zhì)量不高。如果測試時間不充足,如何在限定時間內(nèi)更好地完成測試工作呢?

1 我們需要強調(diào)對隱藏缺陷多的模塊進行測試:問題是怎么在測試計劃之前確定哪些模塊缺陷多,容易出錯呢?根據(jù)經(jīng)驗,出錯率大的地方往往是以下幾種情況:

1)時間壓力大的情況下完成的模塊;

2)經(jīng)驗不足的員工編寫的模塊;

3)前期發(fā)現(xiàn)過大量bug的模塊;

4)接口關(guān)系復(fù)雜的模塊;

5)技術(shù)難度大,處于行業(yè)領(lǐng)先地位的模塊;

6)從未做過測試或缺乏底層測試的模塊。

2 對于重要的模塊加強測試:“重要”這個概念在這里往往也不是輕易評估的,實際實施中應(yīng)該需要測試評審小組商議決定。這里就根據(jù)經(jīng)驗列出以下幾點作為參考:

1)和安全相關(guān)的模塊,比如產(chǎn)生輻射,高溫,高壓等威脅人身安全的模塊,這是最為關(guān)鍵的一點;

2)從經(jīng)濟利益角度考慮,出現(xiàn)故障將造成較大經(jīng)濟損失的模塊;

3)從使用角度看,用戶操作的模塊優(yōu)先級要高于服務(wù)操作模塊,因為用戶的優(yōu)先級高于客服人員;

4)基本功能模塊優(yōu)先級高于擴展功能模塊,試想基本功能都不能使用,那擴展功能豈不是空中樓閣;

5)執(zhí)行概率高的模塊,因為執(zhí)行概率高的代碼在運行中暴露缺陷的幾率也大。

編碼注意事項 

以上是從測試角度討論如何建立單元測試執(zhí)行環(huán)境的幾種方案和測試策略的制定,不過,為單元測試的實施奠定堅實的基礎(chǔ)的還是良好的程序設(shè)計。接下來從代碼編寫角度列舉提高嵌入式軟件的可測性的幾點經(jīng)驗教訓(xùn):

1 與硬件設(shè)備操作相關(guān)的需要與硬件操作無關(guān)的代碼分離,這樣與硬件操作相關(guān)的驅(qū)動代碼可以獨立在目標板上測試,當(dāng)然邏輯簡單也可不作測試;大部分與硬件操作無關(guān)的代碼就容易實現(xiàn)跨平臺移植測試。

2 中斷響應(yīng)函數(shù)功能盡量簡單,這是因為中斷響應(yīng)相對不好測試,如果代碼復(fù)雜,也不易定位錯誤,因為很多的開發(fā)環(huán)境或操作系統(tǒng)難以支持中斷響應(yīng)函數(shù)的斷點調(diào)試。

3 系統(tǒng)調(diào)用及操作系統(tǒng)相關(guān)的操作做到與應(yīng)用層分離,可以通過中間函數(shù)實現(xiàn),比如虛擬操作系統(tǒng)函數(shù),這樣跨平臺移植測試的時候只需將這些中間層函數(shù)修改就可以實現(xiàn)。

4對數(shù)據(jù)類型的差異性也可通過宏定義來實現(xiàn)統(tǒng)一,對于庫文件的差異也通過宏定義來實現(xiàn)上層代碼的一致性。

5 使用靜態(tài)代碼檢測工具,比如PC-Lint,以盡早發(fā)現(xiàn)代碼缺陷。PC-Lint是在代碼產(chǎn)生初期靜態(tài)查找代碼缺陷,更有利用錯誤定位和修改,因為軟件開發(fā)階段越早發(fā)現(xiàn)問題,解決問題花費的代價越小。因此,一般應(yīng)該是靜態(tài)檢查通過后再實施動態(tài)測試。

嵌入式軟件單元測試也是基于普通軟件單元測試的理論,仍需遵守,以上是對嵌入式軟件單元測試特別之處的經(jīng)驗總結(jié),希望能對初涉嵌入式軟件開發(fā)的朋友有所幫助,重視軟件質(zhì)量,提高嵌入式系統(tǒng)的可靠性。

 
 
 
  1. {     
  2. typedef struct _TEST_CASE // 測試用例結(jié)構(gòu)體     
  3. {     
  4. UINT8* pBuf; //讀寫緩沖區(qū)指針     
  5. int len; //讀寫數(shù)據(jù)長度     
  6. STATUS result; // 測試結(jié)果,OK或ERROR     
  7. } TESTCASE;     
  8. #define TEST_NUM 4 // 測試用例數(shù)     
  9. UINT8* rBuf;     
  10. TESTCASE testCase[TEST_NUM]={     
  11. {0,DATA_MAX_LEN+1,ERROR}, // DATA_MAX_LEN指允許讀寫的***長度     
  12. {"a",1,OK},     
  13. {"12",2,OK},     
  14. {0,DATA_MAX_LEN,OK}     
  15. };     
  16. for (int i=0;i< TEST_NUM;i++)     
  17. {     
  18. if(write(testCase[i].pBuf,testCase[i].len) != testCase[i].result) // 寫測試     
  19. LOG ("test write failed!");     
  20. if(read(rBuf,testCase[i].len) != testCase[i].result) // 讀測試     
  21. LOG ("test read failed! ");     
  22. if(bcmp(testCase[i].pBuf,rBuf,testCase[i].len) != 0) // 比較讀寫數(shù)據(jù)     
  23. LOG ("compare data failed! ");     
  24. }     
  25. }  

其實大多數(shù)軟件測試方法都可以直接或間接地用于嵌入式軟件的測試,但是由于操作系統(tǒng)的實時和嵌入式特性,嵌入式軟件測試也面臨一些特殊的問題。雖然日前已經(jīng)有一些針對嵌入式軟件的測試和調(diào)試工具,但是在有些方面仍存在不足,包括許多任務(wù)操作系統(tǒng)的并發(fā)、非侵入式的測試和凋試、嵌入式系統(tǒng)的軟件抽象等。對于嵌入式軟件測試技術(shù)的研究人選測試工具有待開發(fā),仍須要做很多進一步的工作。

【編輯推薦】

  1. 嵌入式軟件測試的十大秘訣
  2. 軟件測試中排錯的基本方法
  3. 軟件自動化測試在功能測試中的應(yīng)用
  4. 軟件評測師:軟件測試中白盒測試方面的總結(jié)

當(dāng)前名稱:嵌入式軟件測試淺談
文章源于:http://www.dlmjj.cn/article/coiicdc.html