针对“如何做嵌入式系统的测试?”做了一个系统性的思考和梳理,以供参考。
不同的测试对象,其测试关注点存在一些差异,可以称之为“特异性要素”。我认为嵌入式系统测试的特异性要素至少包括以下六种,即:系统时序控制逻辑、单个部件运动控制逻辑、产品可靠性测试、传感器与检测技术、嵌入式操作系统知识、产品可测试性。下面分别进行简要说明:
1、系统时序控制逻辑
嵌入式系统往往涉及机械部件的运动控制,以我在迈瑞公司时的生化分析仪测试为例,包括样本盘、试剂盘、样本针及注射器、试剂针及注射器、清洗机构、样本架传输机构、各种泵阀等。对于如此复杂的嵌入式系统,需要采用“中位机—下位机”的架构,中位机指控制单元,下位机指具体部件。中位机将复杂指令分解为各部件的时序动作(并行或串行),下位机完成动作执行。测试时需要验证中位机的指令分解、下位机的执行动作、异常处理逻辑(如撞针处理)。
2、单个部件运动控制逻辑
针对每一个部件,系统设计人员定义了运动控制算法。例如样本针,其运动过程是“静止—加速—匀速—减速—停止”,加减速过程中样本针的电机运动速度会呈现一个阶梯曲线,这样设计是避免由于突然的运动和停止引起电机失步。测试时需要用示波器抓取样本针的加减速阶梯曲线,验证其是否符合设计方案要求。普通小型示波器不支持此功能,我们当时是使用美国LeCroy(力科)示波器完成的测试。
这里有两点说明:
其一,每个部件运动场景很多,如何覆盖验证?根据测试设计中的边界分析方法,可以取极限场景进行测试。如果样本针最短、最长的运动路径测试正确,那么从逻辑上可以认为其他场景也是正确的。
其二,运动控制逻辑的测试包含两个层次。一是验证部件实际运动情况是否与系统设计方案一致(Do things right),二是验证系统设计方案本身是否合理、有无异常情况(Do right things)。
3、产品可靠性测试
嵌入式产品是软硬件一体的,其可靠性包含了软件可靠性和硬件可靠性。
最简单的可靠性测试方法是老化测试。即持续运行并观察产品能否满足一定的可靠性指标,然后针对问题失效机理改进设计和工艺,提升产品可靠性。
专业的可靠性测试,还需要在老化测试过程中施加各种环境应力(如温度、湿度、盐雾、电磁、外力等),以检测产品在各种环境下的失效情况。
这方面我目前只做过简单的老化测试,测试过程中发现了一些软硬件问题。完整的可靠性测试是一个专门学科,涉及到数学、物理学、质量工程的知识,还有待深入研究和实践。
4、传感器检测技术
嵌入式产品通常会用到多种传感器检测技术,因此测试人员需要了解传感器的原理和作用。例如:生化分析仪就用到了多种类型的传感器,如:对射传感器、反射传感器、液位传感器等。测试人员要模拟部件校准失败、传感器错误等场景,就需要根据传感器的工作原理来进行模拟操作,十分有趣。
5、嵌入式操作系统知识
操作系统是软硬件运行的基础,因此测试人员还必须熟悉嵌入式操作系统。测试过程中,测试人员需要了解程序的安装、配置、运行,需要查看程序的状态、日志和性能指标,这些都要通过与操作系统的交互来完成。
嵌入式操作系统种类繁多,而且在日新月异地发展中,对于新兴的华为HarmonyOS、谷歌Fuchsia OS等,都应该予以关注。我最近查看了一些HarmonyOS的技术资料,对系统的分层架构、多内核设计、分布式任务管理等技术有了一些了解。
6、产品可测试性
任何系统的测试都要关注可测试性,但在嵌入式系统测试中可测试性显得更加重要。可测试性指测试人员测试程序的容易程度,包括可操作、可观察、可控制、可分解等属性。嵌入式系统可能没有web应用、移动应用那样的图形界面,只能观察部件动作来做测试。那么,在没有部件的主板上能否执行测试?程序的运行状态信息是否提供了实时日志?程序的性能指标是否方便获取……这些点都应当在产品需求分析和方案设计时加以考虑并实现。
以上几点,就是我想到的嵌入式系统测试需要关注的特异性要素。
此外,嵌入式系统测试还要关注测试活动的通用性要素,如:产品业务需求分析、设计方案分析、测试方案与用例设计、测试策略与测试执行、功能/性能/稳定性测试、业务特性专项测试、自动化测试等,这里就不展开论述了。
源自公众号 软件测试启示录