深圳創維-RGB電子有限公司 張 帆
Android智能電視開發技巧之提高BUG復現概率的方法
深圳創維-RGB電子有限公司 張 帆
解決軟件BUG是軟件工程師工作的一部分,對于目前越來越復雜的電子產品而言,在開發過程中遇到的BUG不僅數量上有所增加,BUG的復現難度也不斷增加,有些BUG需要操作好幾個步驟才能復現到,而往往測試人員只能靠記憶來復現BUG。本文提出了一種自動記錄測試過程中遙控按鍵的方法,并且可以自動發送按鍵,大大提高了BUG復現的概率。
Android;電視;BUG
本文主要涉及到兩個主要的軟件模塊:按鍵記錄模塊、自動發送虛擬按鍵模塊。
按鍵記錄模塊:該模塊需要以service的形式,添加到Android系統的init.rc文件中,確保開機會自動執行此模塊。開機該模塊被系統啟動后,首先需要保存電視機的當前狀態,以便出現問題時,從相同狀態開始發送記錄的按鍵,確保起點一致。其次,打開紅外的設備節點,例如:”/dev/input/event0”。隨后進入監聽事件的狀態,直到有按鍵事件的發生。接著讀取事件內容并解析,這里需要保存按鍵的鍵值、按鍵的屬性(是按下還是彈起)、距離上次按鍵的間隔、按鍵按下的時長,數據以文件形式按一定的規則保存到電視內部存儲空間,文件形式見表1。最后,再次進入監聽事件的狀態,具體流程見圖1。

圖1 按鍵記錄模塊

表1 按鍵數據保存形式
讀取按鍵鍵值可以參考以下示例程序。

測試人員發現隨機問題后,如果想要復現問題,可以啟動自動發送虛擬按鍵模塊,一步一步還原出問題時的操作。
自動發送虛擬按鍵模塊:首先,將備份的數據恢復到系統,并重啟機器。這樣機器可以恢復到記錄按鍵前的狀態。其次,初始化虛擬輸入設備,這里以”/dev/uinput”為例。注冊虛擬輸入設備的名稱、VENDOR_ID、PRODUCT_ID、及總線類型。隨后,打開按鍵保存模塊記錄的文件,并以表1規則依次讀取距離上次按鍵的間隔,并按具體數值作相應的延時,再將解析到的鍵值及按下按鍵的時長傳遞給發送模塊。最后,發送模塊按照按鍵的間隔發送按鍵到虛擬輸入設備,具體流程見圖2。

圖2 虛擬按鍵自動發送模塊
總結:本文利用純軟件的方式,解決了測試過程中遇到的隨機BUG很難復現的難題,無需投入硬件及人力成本。其創造性在于巧妙的利用了android系統中,紅外遙控的驅動及虛擬輸入設備驅動,實現了按鍵的自動記錄及自動發送的功能。