1. 程式人生 > >簡單聊聊智慧硬體的韌體測試

簡單聊聊智慧硬體的韌體測試



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到的韌體測試的知識還挺豐富的,不過測試的原理還是和軟體測試相差無幾,以上是我在韌體測試過程中總結出的一點經驗,還有許多考慮不周全的測試點,還需要在後續的測試中繼續加強經驗和總結。

免費領取驗證碼、內容安全、簡訊傳送、直播點播體驗包及雲伺服器等套餐

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


相關文章:
【推薦】 Foxman,基於微核架構的Mock解決方案
【推薦】 Google準實時資料倉庫Mesa(一)