簡單聊聊智能硬件的固件測試




1 前言

去年10月份開始,有幸加入智能硬件團隊,參與設備固件端測試,主要涉及的測試類型有移動端sdk測試,設備端固件測試,sdk與設備之間的藍牙測試以及基於業務實際場景的功能測試。對於我這樣一個固件測試新手來說,剛開始的時候難免會有點不知所措,因此我寫下自己對固件測試的一點經驗和總結,以便后期回顧。

2 簡化后的大致框架

簡化一下所要測試的對象模型,大致框架圖如下圖,手機app下發命令給智能設備,智能設備反饋各個操作細節的信息給app,app與硬件之間的交互通過藍牙傳輸;手機通過網絡傳輸將收到的必要信息存儲至服務器。

圖1 簡化的測試對象
圖1 簡化的測試對象

固件測試主要工作是對移動端sdk和固件端sdk的測試。移動端sdk可理解為移動app與設備交互部分的api,包括安卓和ios,是交付給app開發人員使用的。固件端sdk是運行在智能設備上的軟件。移動端sdk和固件端sdk之間使用藍牙協議進行交互。sdk所在的位置標出,如下圖:

圖2 固件的測試范圍
圖2 固件的測試范圍

3 移動端sdk測試

移動端sdk測試,可實施的測試有功能測試,異常測試,api測試,壓力測試等。

功能測試

功能測試主要結合智能硬件的使用場景,利用sdk下發各種命令以及命令的組合,前提是將sdk命令寫成可視化界面,輸入命令參數,點擊發送命令即可使用。

異常測試

異常測試主要移動端sdk和設備交互過程中模擬藍牙斷開連接,移動端斷網斷電等,設備斷電重啟等各種中斷異常。

sdk api測試

sdk api測試顯而易見就是針對sdk的接口測試,幫助測試接口邊界值以及回歸時起輔助作用。

壓力測試

壓力測試是設置sdk向設備下發的指令條數,做到不斷地讓設備執行各種指令,包括單指令和多指令的組合,觀察移動端sdk運行的情況。

4 固件端sdk測試

固件端sdk測試,可實施的測試有功能測試,異常測試,api測試,壓力測試等。

功能測試

功能測試主要包括硬件聲光交互測試,功能按鍵測試以及結合智能硬件使用場景的功能點測試。

異常測試

異常測試主要測試設備工作過程中各種異常中斷導致設備停止工作或設備斷電重啟,保證異常動作結束后,設備可恢復工作,以及設備異常時可進入相應的異常處理分支。

固件api測試

固件api測試是針對設備sdk的主要接口做測試,固件代碼完全由C語言編碼實現,接口測試沒有框架可以利用,寫起來難度比較大,只能由固件開發引出幾個重要的接口,並在他們工程里配置的接口測試主函數里編寫測試函數和測試用例。

壓力測試

壓力測試是設置設備執行指令條數,並做到不斷地讓設備執行各種指令,包括單指令和多指令的組合,觀察設備運行的情況,通過的最基本條件是設備不掛機。此外,可以配合做一些功耗測試,需要利用到專業的設備,如萬用表和示波器燈。

靜態代碼檢查

固件代碼完全由c語言編寫,代碼量大,很容易出現代碼缺陷,因此必須引入靜態代碼檢查,有效規避內存泄漏,空指針等問題。采用cppcheck和oclint這兩個成熟的c語言檢查工具來做靜態代碼檢查,cppcheck不檢測代碼中的語法錯誤,只檢測那些編譯器通常無法檢測到的bug類型,目的是只檢測代碼中真正的錯誤。而oclint檢查包含了大量語法錯誤的規則,以cppcheck為主,oclint為輔,二者互補,相得益彰。

固件端排查問題:

在智能硬件跑測試代碼的時候,可以讓它輸出串口的調試信息,將所有的運行的調試信息都保存下來,方便后面定位問題。
1、在測試代碼中懷疑可能有問題的地方添加串口打印信息,輸出一些變量的值,大致可以判斷出來是什么地方有問題,然后深度排查;
2、特殊的調試工具,使用示波器看看引腳輸出的波形是不是正常的,抓高低電平的波形;萬用表查看板子上的硬件電路連接是否正常,測電壓電流值,然后分析出來,可能是什么地方有問題。

5 藍牙測試

藍牙傳輸屬於移動端sdk和固件sdk之間下發指令和傳輸數據的橋梁,藍牙傳輸速率和性能可靠性影響着固件測試結果。藍牙測試可從以下幾方面入手:

藍牙協議棧最大的手機匹配數

最開始我們采用的藍牙協議是ble,ble是低功耗但傳輸速率慢。后來我們改用了spp藍牙傳輸協議(特定的藍牙廠商提供),它的優點就是傳輸速率快,但存在藍牙配對溢出的問題。ios端的溢出表現為n台手機與一台設備連接配對,當n超過藍牙協議棧的最大連接數(10個)時,第11台以后的手機與設備非首次連接時,需要將原有的配對信息先忽略掉,才能成功連上設備。
后來我們聯系藍牙廠商,將規則改為采用FIFO(先進先出)的隊列規則存儲第10台以后連接的手機,移除隊列第一台配對的手機,保證最近連接的手機非首次連接是正常的。ble沒發現此類問題,這個測試點僅供參考。


圖3 協議棧隊列示意圖



圖3 協議棧隊列示意圖


針對性測試手機藍牙模塊的數據收發情況

用特殊藍牙工具(藍牙廠商提供,包括pc端和移動端),測試較長時間內(1-2個小時)pc端向移動端不斷發送發送數據包,發包間隔可調整,發包間隔影響數據發送速率,測試不同間隔下的數據收發情況,選擇最佳發包間隔。

藍牙斷開重連等異常情況

主要圍繞多台藍牙涉筆信號干擾、遠距離藍牙自動斷開、斷電重啟導致藍牙斷開等。

6 總結

在接觸固件測試的短短半年時間內,自我感覺get到的固件測試的知識還挺豐富的,不過測試的原理還是和軟件測試相差無幾,以上是我在固件測試過程中總結出的一點經驗,還有許多考慮不周全的測試點,還需要在后續的測試中繼續加強經驗和總結。

免費領取驗證碼、內容安全、短信發送、直播點播體驗包及雲服務器等套餐

更多網易技術、產品、運營經驗分享請訪問網易雲社區


相關文章:
【推薦】 試水新的Angular4HTTPAPI
【推薦】 從用戶端到后台系統,嚴選分銷教會我這些事
【推薦】 網易易盾驗證碼的安全策略


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM