Android智能电视开发技巧之提高BUG复现概率的方法
【摘 要】 解决软件BUG是软件工程师工作的一部分,对于目前越来越复杂的电子产品而言,在开发过程中遇到的BUG不仅数量上有所增加,BUG的复现难度也不断增加,有些BUG需要操作好几个步骤才能复现到,而往往测试人员只能靠记忆来复现BUG。本文提出了一种自动记录测试过程中遥控按键的方法,并且可以自动发送按键,大大提高了BUG复现的概率。
【关键词】 Android 电视 BUG
本文主要涉及到两个主要的软件模块:按键记录模块、自动发送虚拟按键模块。
按键记录模块:该模块需要以service的形式,添加到Android系统的init.rc文件中,确保开机会自动执行此模块。开机该模块被系统启动后,首先需要保存电视机的当前状态,以便出现问题时,从相同状态开始发送记录的按键,确保起点一致。其次,打开红外的设备节点,例如:"/dev/input/event0"。随后进入监听事件的状态,直到有按键事件的发生。接着读取事件内容并解析,这里需要保存按键的键值、按键的属性(是按下还是弹起)、距离上次按键的间隔、按键按下的时长,数据以文件形式按一定的规则保存到电视内部存储空间,文件形式见表1。最后,再次进入监听事件的状态,具体流程见图1。读取按键键值可以参考以下示例程序。
距上次按键间隔 单位:100us |
键值 |
按键名称 |
按下时长 单位:us |
0, |
102, |
HOME, |
290278 |
27393, |
106, |
DPAD_RIGHT, |
180630 |
13440, |
28, |
DPAD_CENTER, |
185930 |
表1 按键数据保存形式
测试人员发现随机问题后,如果想要复现问题,可以启动自动发送虚拟按键模块,一步一步还原出问题时的操作。
自动发送虚拟按键模块:首先,将备份的数据恢复到系统,并重启机器。这样机器可以恢复到记录按键前的状态。其次,初始化虚拟输入设备,这里以"/dev/uinput"为例。注册虚拟输入设备的名称、VENDOR_ID、PRODUCT_ID、及总线类型。随后,打开按键保存模块记录的文件,并以表1规则依次读取距离上次按键的间隔,并按具体数值作相应的延时,再将解析到的键值及按下按键的时长传递给发送模块。最后,发送模块按照按键的间隔发送按键到虚拟输入设备,具体流程见图2。
【总结】 本文利用纯软件的方式,解决了测试过程中遇到的随机BUG很难复现的难题,无需投入硬件及人力成本。其创造性在于巧妙的利用了android系统中,红外遥控的驱动及虚拟输入设备驱动,实现了按键的自动记录及自动发送的功能。