对于嵌入式或本地解决方案来说,软件测试似乎是一件令人头疼的事情,但事实并非如此!
当然软件测试也有挑战。时间和资源的限制会限制测试的级别,而且测试很难模拟所有真实世界的场景和极端情况,这可能导致缺陷在发布后修复成本最高的阶段被发现。
测试是向市场交付功能齐全且可靠的解决方案的关键步骤,因此建立和维护测试制度可能非常耗时、复杂、昂贵,这是合理的。不幸的是,业务压力可能意味着测试被简化,或者不被重视,这只会把问题推到未来。
一个全面的软件测试解决方案的好处是显而易见的。首先,良好的测试方法有助于及时发现和修复代码中的错误。消除错误可以避免现场的功能故障,并减少产生安全漏洞的风险。更重要的是,它可以帮助避免产品负面评论。
从开发团队的角度来看,软件测试确保交付指定的功能,并最终帮助我们向市场交付可靠的产品。
测试的类型
单元测试:单独测试软件的各个组件或单元,以确保正确性和功能。这些单元可以是单个函数或更复杂的算法,但通常会在开发周期中随着时间的推移而构建。指令模拟器或在线调试器可以通过与MCU外设交互实现单元测试。对于计算功能,可以使用指令集模拟器,如SEGGER emSim。
集成测试:随着开发开始构建,我们进入集成测试阶段,需要测试更复杂的多功能算法。可以使用与单元测试类似的原理,但随着对MCU外设功能的访问变得至关重要,转向在线测试(如J-Link commander)更为常见。
功能测试:这种类型的测试评估软件是否满足指定的功能需求。它包括测试发布软件的不同特性和功能,可以根据用户界面的复杂程度自动完成。
回归测试:回归测试确保对软件的更改或更新不会对现有功能产生不利影响。它可以包括上述所有方法。
用户验收测试(UAT):UAT包括终端用户对软件进行测试,以确保软件满足他们的需求和期望。
快速看一下单元测试
实施有效的单元测试,应该遵循某些最佳实践。测试用例应该涵盖一系列场景,包括典型用例和边缘用例。测试应该是自动化的,使它们能够在没有人工干预的情况下频繁地执行。
如前所述,使用指令集模拟器(如SEGGER emSim)可以在嵌入式体系结构上进行测试,而不是依赖于可能隐藏诸如可变大小和库约束等问题的PC应用。
如何使用emSim设置一个简单的单元测试
首先需要下载并安装最新版本的Embedded Studio,它包含了一个完整的开发套件(编辑器、编译器等)以及emSim。Embedded Studio可以在Windows、macOS和Linux平台上进行评估,针对商业用途提供了灵活的许可模式。
接下来,我们编写要测试的功能,并将其封装在单元测试中。下面是一个非常简单的例子,增加一个字符并测试返回值。我们可能期望这对函数的所有输入都有效,但当输入超过8位字符值时,逻辑将失败。
其中function_to_test()是要测试的代码,其参数test_val从命令行传递到测试单元中。然后对返回值ret进行测试,在本例中是传递给测试函数的变量的增量。
一旦单元测试按预期工作,下一步就是准备一个脚本来测试一系列输入值。下面是一个例子,但是这也可以被内置到单元测试中:
它返回以下内容,可以根据需要进行进一步处理。
如果您希望在实际目标硬件上集成单元测试,那么最后一步是通过脚本化的emSim测试配置(J-Run),基于J-Link调试器访问芯片和部外设。
还可以通过设置断点来退出测试并生成指令跟踪输出来扩展测试。
emSim是作为SEGGER Embedded Studio的一部分提供的,运行在Windows、MAC和Linux平台上,支持各种ARM架构的,包括ARM64、v4t、v5te、v6、v6m、v7m、v7em、v7r、v7a、v8a、v8r、v8m_baseline、v8m_mainline、v8.1m_mainline,可以通过在命令行中添加-arch来配置。
使用emSim可以基于最适合您需求的主机平台和目标体系结构,开始单元测试。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !