• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

硬件测试的思考和改进:有道词典笔的高效测试探索

互联网 diligentman 4小时前 3次浏览

作者/ 刘哲
编辑/ Ryan
来源/ 有道技术团队(ID: youdaotech)

引言

当我们提到智能硬件的高效测试时,通常会考虑使用自动化测试的方案,提升产品的测试效率和质量。

由于智能硬件的使用过程中,包括了大量和用户的行为交互,这就导致在测试方案上,传统的软件自动化测试很难完全模拟用户的完整使用行为。

因此,我们除了要考虑借鉴和使用软件测试的思路之外,还要考虑如何实现硬件测试自动化。

一、背 景

有道词典笔 2.0 是网易有道自研的学习型智能硬件。

有道词典笔搭载了有道自研的 OCR、NMT、TTS 技术,为用户提供了一扫查词、中英文互译、语音助手、触屏、离线等功能。

当我们拿到词典笔 2.0 第一个版本的时候,首先看到的是它的硬件外观:

硬件测试的思考和改进:有道词典笔的高效测试探索

从硬件层面来看——

它包括了一块可触摸的屏幕,接口方面使用了 Type-C 方案,在下方有一个摄像头,背面有喇叭可以发音,按键方面有开关机、功能键和笔的触头。

同时在设备的内部还内置蓝牙和无线模块。

这个产品如何使用呢?用户的典型使用场景是:

手持有道词典笔,向下按压笔头开启补光灯和摄像头,在文字上方滑动,实现对文字的拍照。之后图片合成,进入 OCR 模型,识别出文字后,进入 NMT 模型,最后翻译结果展示出来,进入 TTS 服务。

所以,简单来说,它是以扫描识别行为为基础操作,实现若干功能的一款硬件产品。

现在我们知道软件方面的能力了,这时候就可以结合硬件一起来考虑,有道词典笔的高效测试要怎么做。

二、让硬件动起来

我们对一款产品做自动化测试,首先要找到用户的主要使用路径。

用户花了最多的时间使用的行为,就是我们需要花精力去考虑如何模拟的行为。

很明显,在这里用户的扫描行为引发的查词和翻译学习结果。

那我们就来看看,用户的实际操作是如何的。

我们对用户扫描的场景模拟,可以分成两个部分。

一个部分是对词典笔的控制,稳定的握持,另外一部分是对笔的移动。
硬件测试的思考和改进:有道词典笔的高效测试探索
在考虑实现这样的方案时,我们考虑过市面上现有的自动化方案,来实现对笔的固定和移动。

但是碍于成本和可复制性并不合适,所以没有采用。

让词典笔从左向右移动起来这件事情,是整个行为的难点。

那是否可以让词典笔不动,也实现一样的扫描效果呢?

我们决定换个思路。

我们让笔不动,文字从右向左移动,从而模拟笔从左向右移动的效果。
硬件测试的思考和改进:有道词典笔的高效测试探索
为了可以持续的测试,还需要文字再从左向右回来,然后再次从右向左。

当它成为一个循环的时候,就实现了持续的文字移动。

大家看这样运动的文字像是什么?

我们的第一反应就是传送带,就是工厂里见到的流水线上的移动,所以我们做了第一套方案。
硬件测试的思考和改进:有道词典笔的高效测试探索
我们把文字固定在传送带上,然后用电机驱动传送带,实现了文字的持续移动。

当文字可以稳定移动之后,我们通过 shell 去控制词典笔的扫描行为,包括了开关笔头灯、开关扫描行为等等。

然后我们可以把设定时间内的扫描内容传送到笔内的翻译引擎中,进入后续的翻译和发音流程。

硬件测试的思考和改进:有道词典笔的高效测试探索

文字动起来了,那让词典笔固定就相对容易一些。

我们做的第一个尝试是使用市面上已经有的支架,把词典笔固定在支架上方,大家可以看下视频。

可以把笔夹住,直接固定在传送带上。
硬件测试的思考和改进:有道词典笔的高效测试探索

但是我们也发现了一个问题,支架每次只能固定一只笔,而且稳定性并不佳。

我们看这个视频也能看出来,一直在晃,这个效果只能说是能用。

而且我们刚才也提到了,在测试的过程当中,通常是需要让多支笔固定的。

所以我们尝试自己做了一个支架,把N支笔固定在传送带上方,这样,我们就可以实现用户扫描行为的完整模拟了。

这是我们对词典笔高效测试的第一次尝试,就是让硬件动了起来。

三、让方案更稳定

接下来我们要解决的问题是,让方案更稳定。

为什么有这样的需求呢?

在很长一段时间,我们都在使用上面提到的方案。

我们通过这套方案实现了功能稳定性的测试,对功耗以及电池曲线等都做了上百次的验证。

但是随着我们测试版本的增加,我们迭代的加快,自动化测试的需求更加频繁了。

在使用过程中,我们看到影响文字移动的稳定性,也就是传送带的稳定性因素是挺多的。

比如说电机老化,传动轴稳定性了,组装的精密程度,都可能会造成它文字转动时快时慢,甚至有的时候会停下来。

另外我们的前期一次可以去测试6支笔,但是到了后期,我们的测试版本的增加同时要测试的笔可能接近20支。

这个方案的改进就提上了日程。

我们还是分成文字的移动,以及笔的支撑两个部分来改进。

文字在垂直往复运动,这个方案我们使用的是传送带。

如果文字在水平方向往复运动呢?

我们观察了生活中很多的物品,最后发现小朋友喜欢的钓鱼玩具是一个不错的选择。

就是这个。

硬件测试的思考和改进:有道词典笔的高效测试探索

首先它的转速是恒定的,它在设计决定了影响它速度的因素,只是电机本身。

另外它的性价比比较高,这就使得我们可以快速的复制和扩充测试能力。

如果我们把文字在转盘边缘排列,然后允许运动,是不是就可以形成类似移动的效果呢?

为此,我们在文案上进行了一定的设计和改进。

硬件测试的思考和改进:有道词典笔的高效测试探索

我们把文字做了弧形的排版,固定在转盘上,在转盘的边缘固定测试笔,继续使用之前的自动化脚本。

这样就实现了用转盘的方案来实现扫描的行为模拟。
硬件测试的思考和改进:有道词典笔的高效测试探索

虽然它整体是个弧形的样子,但是得益于词典笔的算法优化,我们实际的拼图效果还是比较优秀的,对于测试测试没有什么影响。

最后我们去改装了它的供电方式为电源供电,这样它就可以长时间的做一个测试了。

接下来我们要解决的就是词典笔的支撑改进。

最开始是用硬纸来制作的简易的支架,这依旧是个扩展性不佳的方案。

随着我们的后期的调整和改进,我们在设计的同时帮助下,做了一个支架的改良版,通过建模和 3D 打印的方式就把它生产出来了。

这样的话它足够精密,同时它支撑10支笔的测试,而且他可以快速的复制,扩充给其他需要测试的场所。

硬件测试的思考和改进:有道词典笔的高效测试探索

这是我们实际 3D 打印出来之后的产品:

硬件测试的思考和改进:有道词典笔的高效测试探索

这就是我们在目前测试使用的方案,到这里我们看到整体硬件自动化已经比较稳定了。

四、让控制可远程

现在我们要考虑的事情,就是让控制可以远程。

我们在硬件测试上做的方案,原本都是在公司进行的,测试的设备也都是 QA 内部团队在用。

但是今年年初的疫情改变了我们的工作方式,在很长一段时间里我们都是在远程办公。

为了方便让开发人员更方便去调试,也为了让方便异地工作的同事们可以随时的进行测试,还有就是希望我们的测试方案的可控性更强,我们开始在做一些可控性方面的探索。

整体来说让控制可以远程这件事,我们分成了5个目标。

硬件测试的思考和改进:有道词典笔的高效测试探索

首先,是我们的测试脚本可以远程开启和关闭。

第二,是我们需要能够控制硬件的开关,主要是转盘的开关和供电系统的控制。

比如在静止的时候就可以开启转盘,测完之后就可以关闭转盘。测试功耗之前给词典笔充电,测试开始要断开供电。

第三,是需要满足开发人员在家进行远程调试的这样一个需求。

在家办公的时候,我们和开发不是同一个网络,甚至不是同一个城市,那开发如何快速进入词典笔内部进行调试呢?

第四,我们希望整个测试过程是可以被看到的,我们可以通过视频的监控来确定它的测试状态。

最后,由于测试自动化完成了大多数的项目后,我们需要对测试过程中的数据进行跟踪,测试过程中的数据保存与展示也不可获取。

所以基于这5个目标,我们设计了下面这套测试框架。

大家可以看到整个系统架构如下。

硬件测试的思考和改进:有道词典笔的高效测试探索

首先我们引入了一个主机或者叫控制系统,这里是用树莓派 4b 来做的。

在树莓派上我们连接了一个摄像机,采用了 mjpg-streamer 的方案,开了一个 web 的监控服务,这样测试人员可以随时去观察我们的词典测试的运行情况。

然后在树莓派的 GPIO 上,连了一个 L298n 的一个芯片,通过 python 我们可以使用芯片对电机开关和速度进进行控制。

硬件测试的思考和改进:有道词典笔的高效测试探索

之后我们又连接了一套继电器,用来对词典笔的通断电进行控制。

为了实现内网转发穿透的能力,我们搭建了一个 ngrok 服务,然后在测验词典笔启动它里面去,这样就可以从任何位置 ssh 到词典笔内部。

为了方便我们去观察数据和判断结果,我们使用了 influxdb 来保存测试中产生的数据,使用 grafana 来展示结果。

硬件测试的思考和改进:有道词典笔的高效测试探索

所以有了这样一套服务之后,开发产品和测试都可以实时的去用它。

这里我们有一个简单的演示视频。

我们外网通过 ngrok 服务远程,开启测试服务,然后开启转盘运转,这时测试开始。

测试中的视频就是通过树莓派的摄像头传输回来的。

当测试结束后,通过同样的方式,我们可以关闭或者继续进行其他的测试。

我们做了第三部分,让控制可以远程之后,我们基本上实现了一套框架。这套框架把我们用户最核心的操作,也就是扫描,变得可以自动化,可以远程控制,它可以稳定的远程控制。

五、让功能自动化

最后我们我们再来说说功能自动化的事情。

为了提升部分测试用例的自动化程度,我们还尝试做了一件事情,就是让功能自动化。

因为我们的产品是基于 Linux加QT 的架构实现的,为了提升它的测试效率,我们希望可以把核心软件功能自动化。

但是经过调研,市面上目前并没有足够成熟稳定的自动化测试方案适合我们。

我们通常说的自动化,大概的流程是先做控件的识别、再对控件做操作,然后对控件做校验。

在没有比较好的方案的前提下,我们用了一个“曲线救国”的自动化方案。

硬件测试的思考和改进:有道词典笔的高效测试探索

有道智云提供的 OCR 服务,可以针对图片上的文字进行识别。

它可以提取图片上的文字,并给出对应的坐标。

所以我们做的是:

01

用截屏加有道智云的 OCR 识别功能,实现了对文字的定位,代替了对控件的识别,例如“查词”,给出是否存在以及坐标位置。

02

用系统的操作,针对上面定位的坐标去点击、滑动等,实现了类似对控件的操作,例如点击“查词”的坐标。

03

最后我们还是用截屏,加上智云 OCR 识别,对页面的内容进行判断,例如对查词结果的验证。

这样就实现了基本的元素操作和控制。

我们就这样,把用户行为的自动化,设计并实现出来了。

硬件测试的思考和改进:有道词典笔的高效测试探索

下面的视频演示了我们采用该方案,全自动进行OTA升级测试的过程。

正常情况下,OTA测试需要一名全职测试工作8小时,来完成30轮次升级的验证。

有了自动化的方案,这个过程实现了无人值守测试,每晚可以实现50-100轮次的验证,第二天测试人员只需要检查测试过程的记录即可。

六、总结

经过上面的这些步骤,我们基本上对有道词典笔 2.0 的用户最核心操作——扫描后划词翻译,实现了软件和硬件方面的自动化。

通过硬件和软件结合的自动化方案,我们得到的收益巨大:

>>大幅提升了测试效率:

单个版本需要120+小时的测试数据,包括但不限于功能测试、主功能稳定性测试、随机稳定性测试、功耗测试、充放电电池曲线测试、耳机稳定性测试、耳机兼容性测试、OTA 测试等等;这些测试85%可以通过以上的测试框架来自动测试,我们单个版本的测试只需要2-3天,1-2人即可完成。

>>明确了产品质量:

我们针对每一项测试设计了不同的质量指标(例如功耗分成12种场景,测试时在不同场景下进行验证),得出的结果和之前版本或者竞品进行对比,从而判断我们产品的质量好坏。一个版本会有上百个指标,而这些指标就告诉了我们产品是否可以上线,产品的质量到底如何。

>>帮助发现硬件生产过程中的质量问题:

某个版本在两个批次的硬件测试中,同样的测试脚本和测试方案,测试出来的数据差异明显。通过多轮次的验证,对硬件的拆解等判断,最终定位某电阻混件造成了差异,由于我们提早发现了这个问题,尚未完成生产的产线停工,避免了更大的损失。

—— END ——


喜欢 (0)