简单聊聊智能硬件的固件测试



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到的固件测试的知识还挺丰富的,不过测试的原理还是和软件测试相差无几,以上是我在固件测试过程中总结出的一点经验,还有许多考虑不周全的测试点,还需要在后续的测试中继续加强经验和总结。

免费领取验证码、内容安全、短信发送、直播点播体验包及云服务器等套餐

更多网易技术、产品、运营经验分享请访问网易云社区。


相关文章:
【推荐】 MySQL Bug剖析之Slave节点并行复制死锁
【推荐】 一个内部增长案例的分享

你可能感兴趣的:(简单聊聊智能硬件的固件测试)