嵌入式软件测试及固件测试

工作后有做过一些嵌入式软件的测试,会涉及到固件的一些测试,甚至一些招聘JD上会明确要求有firmware testing经验,或者嵌入式软件测试经验,我想从准备面试的角度来梳理下相关内容。
一、先来解释下嵌入式软件测试和固件测试的区别:
嵌入式软件测试和固件测试在某些方面有重叠,因为固件通常是嵌入在嵌入式系统中的软件。然而,它们之间存在一些区别:
(1) 范围:
嵌入式软件测试通常更广泛,涵盖了所有嵌入式系统中的软件,包括固件、操作系统、驱动程序、应用程序等。
固件测试专门针对固件这一层级的软件进行测试,着重于确保固件的功能性、稳定性和可靠性。
(2) 级别:
嵌入式软件测试可以涉及多个层次,包括单元测试、集成测试、系统测试等。
固件测试通常集中在系统级别,着重于整个固件的功能和性能。
(3) 测试对象:
嵌入式软件测试可能涉及到更多的软件组件,包括操作系统、应用程序等。
固件测试主要针对固件本身,通常是嵌入式系统中的基本软件模块。
(4) 测试方法:
嵌入式软件测试可能使用各种测试方法和技术,包括黑盒测试、白盒测试、自动化测试等。
固件测试可能更多地侧重于黑盒测试和集成测试,因为通常对固件的内部结构和实现细节了解较少。
(5)工具和环境:
嵌入式软件测试可能需要使用特定的嵌入式开发工具、仿真器、调试器等。
固件测试通常会涉及到与硬件设备进行交互,可能需要使用特殊的测试设备或硬件模拟器。
(6) 目标:
嵌入式软件测试的主要目标是确保整个嵌入式系统的功能和性能符合规格和用户需求。
固件测试的目标是确保固件的功能和性能达到预期,并在嵌入式系统中正常运行。
虽然嵌入式软件测试和固件测试之间存在一些区别,但它们通常是密切相关的,因为固件通常是嵌入式系统中的关键组成部分。因此,在实际项目中,这两种测试通常会结合起来,共同确保整个嵌入式系统的质量和稳定性。

二、所需技能:
固件测试对于软件工程师来说需要一些特定的技能和知识,包括但不限于以下几个方面:
(1) 嵌入式系统知识:软件工程师需要了解嵌入式系统的基本原理和架构,包括硬件和软件之间的交互、固件的功能和特性等。

(2) 编程能力:虽然固件测试通常不涉及直接修改固件代码,但软件工程师需要具备编程能力,以编写测试脚本、自动化测试用例等。

(3) 软件测试知识:软件工程师需要了解软件测试的基本原理、方法和技术,包括测试计划制定、测试用例设计、缺陷管理等。

(4) 调试和故障排查能力:固件测试可能涉及与硬件设备进行交互,软件工程师需要具备调试和故障排查能力,能够定位和解决固件测试中的问题。

(5) 硬件知识:尽管固件测试通常集中在软件层面,但软件工程师需要了解一些基本的硬件知识,如电路原理、传感器、执行器等基本硬件组件的工作原理。

(6) 测试工具和技术:软件工程师需要熟悉各种测试工具和技术,如仿真器、调试器、自动化测试工具等,以便进行固件测试。

(7) 沟通和协作能力:固件测试通常需要与硬件工程师、测试工程师、产品经理等不同团队成员进行合作,软件工程师需要具备良好的沟通和协作能力。

(8) 持续学习:固件技术不断发展和演进,软件工程师需要保持持续学习的态度,跟进最新的固件技术和测试方法。

三、我看一个比较有名气的医疗器械公司的JD总结出来需要的技能:
(1)固件测试经验和技能,包括功能测试和自动化测试
(2)具备缺陷定位、识别和跟踪的技能(测试常规技能)
(3)熟悉通信协议
(4)熟练使用示波器、信号发生器、数字电源、数字万用表等设备
(5)能理解电子硬件原理图
(6)Python编程能力

四、通信协议相关的测试
我在测试嵌入式软件时,接触到的通信协议主要有串口通信、CAN通信,Ethernet通信、RS232通信(属于串口的一种)。针对这些通信协议,我总结下之前遇到的测试场景或者测试方法:
1、串口通信:
(1)常见的测试内容:
a. 命令解析测试:
测试串口接收功能是否正常,能够正确解析接收到的命令和参数。
测试各种可能的命令格式,包括命令长度、参数类型和格式等。
b. 边界值测试:
测试在边界值附近修改阈值的情况下系统的响应情况。
将阈值设置为最大值、最小值、边界值附近的值等,验证系统是否正常工作。
c. 异常情况测试:
测试在接收到不支持的命令或参数时系统的响应情况。
测试串口通信超时、错误校验等异常情况下系统的行为。
d. 并发测试:
测试多个串口命令同时发出时系统的处理情况,验证系统的并发处理能力。
测试串口通信与其他系统功能(如定时器中断、传感器数据采集等)的并发工作情况。
e. 稳定性测试:
进行长时间运行测试,验证系统在持续工作时的稳定性和可靠性。
测试在连续发送大量命令时系统是否正常工作。
f. 错误处理测试:
测试在出现通信错误或无效命令时系统的错误处理能力,例如发送错误的校验和、无效的命令等。
g. 重启测试:
测试在重启后修改 ROM 中的阈值是否能够正确生效。
测试系统的重启功能是否正常,以确保 ROM 中的修改能够正确加载。
h.性能测试:
测试串口通信的性能,包括数据传输速率、响应时间等指标。
测试系统在不同数据量和频率下的性能表现。
通过执行以上测试,您可以全面评估系统的串口通信功能,确保其能够正常工作,并在各种场景下表现出稳定性和可靠性。

(2)场景描述:
我参与的项目是测试嵌入在STM32芯片中的固件程序,业务场景和逻辑其实算比较复杂的,因为涉及很多不同温度阈值的状态切换,及不同的温度控制处理。我主要使用串口去进行一些阈值的修改从而达到测试条件来校验系统响应是否符合预期。

(3)举例:
我要测试45°C-48°C之间系统的响应,不会像系统测试一样使用外部设备使温度正常到达45°C-48°C之间,方式一:修改系统的阈值范围,使其到常温方便在常温下触发系统反应;方式二:添加当前温度的读值接口,使其能够模拟设定一个目标温度查看系统反应。

(4) 实际应用:
因为我这个串口主要用于辅助测试的工具,并不是作为功能与其它模块产生通信,所以,第一块描述的测试项我觉得大部分都不适用,我关注的主要是我修改的变量值是否可以正常生效等功能。

2、CAN通信
(1)常见测试内容:
比如,测试上位机和下位机之间的通信协议(如CAN协议)需要考虑以下几个方面:
a.功能性测试:
确保上位机能够正确地发送CAN消息到下位机,并验证下位机能够正确地接收和解析这些消息。
验证下位机能够正确地响应上位机发送的请求,并返回预期的响应消息。
b.性能测试:
测试通信的延迟时间,确保消息能够在预期的时间内传输和处理。
测试通信的吞吐量,即单位时间内能够传输的消息数量,以确保系统能够满足性能要求。
c.稳定性测试:
进行长时间运行测试,以验证通信系统在持续运行时的稳定性和可靠性。
测试通信系统在异常情况下的恢复能力,如断电重启、通信中断等。
d.兼容性测试:
测试上位机和下位机之间的通信协议是否与硬件设备和其他软件系统兼容。
验证通信系统在不同操作系统和硬件平台上的运行情况。
e.安全性测试:
测试通信系统对于恶意攻击和异常输入的处理能力,以确保通信系统的安全性。
测试通信系统在数据传输过程中的加密和认证机制是否有效。
f.错误处理测试:
测试通信系统对于错误消息和异常情况的处理能力,包括错误码的识别和处理。
测试通信系统在出现错误情况时的自动恢复和错误日志记录机制
以上是一些常见的测试方面,根据具体的项目需求和系统特点,还可以进一步细化测试策略和测试用例。同时,使用专业的测试工具和设备(如CAN分析仪、仿真器等)可以更好地支持通信协议的测试工作。

(2) 场景描述
我参与的项目CAN通信主要用于上位机和下位机的通信,是非常重要的一个功能。对于通信协议的验证主要涉及以下方面:
消息传输和接收:
确保上位机能够成功发送CAN消息到下位机,下位机能够正确接收并解析这些消息。(根据功能验证)
测试不同类型的CAN消息,包括数据帧、远程帧和错误帧等,以确保通信协议的完整性和稳定性。

错误处理
测试上下位机在收发消息过程中的错误处理能力,包括错误帧的识别和处理、错误重传机制的触发等。
模拟各种错误情况,如消息丢失、消息损坏、网络故障等,以验证系统的健壮性和容错性。(有错误重传机制,扣卡功能需要尝试5次,都失败再报扣卡失败)

通信质量:
测试通信链路的质量和稳定性,包括信噪比、误码率、抗干扰能力等。
使用专业的测试设备和工具对CAN总线进行测试和分析,以评估通信质量和性能。
(当时的验证主要是通过老化测试,一直重复验证扣卡去查看扣卡成功及失败的次数)

3、EtherCAT通信
在EtherCAT网络中,每个EtherCAT从站设备通过专用的EtherCAT总线连接到EtherCAT主站设备上。主站设备负责向从站设备发送控制指令和接收数据,实现对工业控制系统的实时控制和监控。
通常,EtherCAT主站设备可以通过EtherCAT总线扫描功能来检测和识别网络中的从站设备,并分配每个从站设备一个唯一的站地址。然后,主站设备可以使用这些站地址来访问和控制对应的从站设备。
实际应用:
a.变量读写操作:我在实际应用时是通过EtherCAT的EtherCAT站地址(EtherCAT Station Address)和端口号来访问对应从站的,并梳理出对应的变量和变量类型,调用EtherCAT通信协议来对对应的变量进行读写。
b.验证触发对应通信异常是否会出现飞车等软件不受控制的异常。

  • 23
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值