当前位置:首页 > 嵌入式 > 嵌入式分享
[导读]近年来,我看到了嵌入式开发人员在使用单元测试和测试驱动开发(TDD)方面的兴趣显著提高。测试驱动开发有可能降低时间到市场和成本,同时提高整体产品质量。使用TDD的开发人员通常编写测试,使其失败,然后只编写生产代码使测试通过。失败的测试驱动代码开发。

近年来,我看到了嵌入式开发人员在使用单元测试和测试驱动开发(TDD)方面的兴趣显著提高。测试驱动开发有可能降低时间到市场和成本,同时提高整体产品质量。使用TDD的开发人员通常编写测试,使其失败,然后只编写生产代码使测试通过。失败的测试驱动代码开发。

嵌入式开发人员通常在应用程序级别上采用TDS。单元测试用于驱动特性开发和构建可以用于回归测试的测试,以确保没有问题。你有没有想过为什么我们把TDD限制在单元测试上?为什么团队不从系统层面开始他们的TDD之旅?

我怀疑原因是嵌入式开发人员通常从硬件上思考。它们从驱动程序、中间件和应用程序代码开始。在那一点上,他们编写所有的系统测试(是的,我经常看到集成测试被完全跳过!)。现代嵌入式系统有一个复杂的层次,需要从上到下的思考,从应用到硬件。人们常说,系统的数据提供了价值,而不是收集数据的硬件。如果是这样的话,我会认为我们在嵌入式系统中对TDD的方法是有缺陷的。这是自下而上的,不是自上而下的!

如果你想开发一个能够利用现代技术如敏捷、开发等的产品,你可以考虑采用一个系统级的TDD方法。从最关键的用户特性入手,编写系统测试,使其失败,然后编写代码,使系统级测试通过。在这个过程中,您将编写需要单元和集成测试的组件。您编写的系统级测试将记录您的需求,并编写到能够驱动开发,并可用于系统级回归测试。

系统级TDD可能对您没有吸引力,但如果是,这里有三个提示可以考虑启动。

提示1-拥抱模拟和仿真

在系统级TDD流程之后,嵌入式开发人员可以接受模拟和仿真。在大多数嵌入式的情况下,软件团队在项目启动时无法访问硬件;如果是,项目已经落后于计划了。因此,开发人员可以通过使用模拟器、模拟器或主机环境编写满足所需行为的系统级测试和应用程序代码来拥抱TDD。

模拟器可以帮助开发人员证明应用程序的业务逻辑是正确的,即使它还没有与硬件挂钩。这有几个好处:

· 系统级测试可以在硬件可用之前编写并执行

· 用户可以与模拟器进行互动,以确保系统能更早地满足他们的需求。

· 该应用程序可以开发、测试和证明独立于硬件

模拟可以为开发人员提供一个灵活的架构,使应用程序能够在具有不同组件的多个环境中执行。一般而言,你会发现所产生的软件和体系结构更具有可伸缩性、灵活性和更高的质量。在某些情况下,我甚至将较低的硬件级别与网络协议联系起来,然后通过这些协议来驱动Guis来可视化系统正在做什么。如果使用得当,具有系统级TDD的模拟可以成为嵌入式产品团队的有力工具。

提示2-使用自动测试框架

有很多很棒的测试工具,开发人员可以用来编写嵌入式软件的单元测试。然而,在系统层面,开发人员必须超越其单元测试工具,转向自动化测试框架。

自动化测试框架是一套工具,它提供了创建、执行和管理自动化测试的结构化方法。该框架可包括编写和一致进行测试的指南、标准和程序。此外,开发人员通常可以使用这个框架来开发报告和收集测试覆盖度指标。

有几个系统级自动测试框架,您可以考虑。例如,CMAR构建系统包括CTET,允许团队运行系统级测试,包括测试发现、执行和测试结果报告。近三分之二的软件行业已经在使用C制造,这使它成为一个令人兴奋的选择。另一个选择是PYTET,这是一个基于金字塔的测试框架。

存在其他自动化测试框架,但您必须评估和选择最适合您的开发需求的框架。例如,您可以使用自动测试框架编写测试用例、收集遥测、强制故障条件等。

提示#3-您仍然可以使用TDD周期

在他的书中,肯特·贝克以例子为例,将TDD周期定义如下:

· 再加一个测试

· 做完所有的测试

· 改变一下

· 做测试并成功

· 还原器删除重复

这个过程可以在一个带有一点警告的系统级别上使用;一个系统级别的测试可能会产生一系列的单元和集成测试。TDD背后的想法是,您正在进行小的增量测试,以构建您的软件。在系统层面,像发送命令和接收响应这样的小测试可能需要大量的底层基础设施。然而,开发人员仍然可以从小规模的测试开始,并"在被迫做之前将其伪造"。当它被强迫,即。开发人员将使用单元测试来创建支持应用程序模块和集成测试来测试这些模块。

一开始,系统级的TDD可能会感到有点尴尬,因为你从高水平开始,向下工作到最低水平的硬件。实际上,这是很尴尬的,因为你有可能在不同的测试工具和工具之间切换,以成功完成测试。然而,这种方法可以帮助您专注于首先实现客户和产品最关键的特性。为了使系统级测试通过,您可以使用仿真和模拟,这将帮助您更快地推进应用程序,即使在没有硬件的情况下。

结论

测试驱动开发彻底改变了我编写嵌入式软件的方式。TDD帮助提高了软件质量,并帮助我更快地编写代码。在系统级别应用TDD可以在系统级别上提供同样多的价值(如果不是更多的话)。系统级测试可以根据用户的基本特性记录需求和驱动软件开发。通常,嵌入式开发人员首先关注的是他们最感兴趣的软件部件。这些可能是也可能不是在关键路径上,也可能是价值的一部分。

当一个新项目开始时,编写Gpio驱动程序是否是用户或客户最需要的增值产品?我想没有。系统级别的TDD可以帮助团队根据客户需求和交互设定优先级。此外,系统级测试可以从一开始就集成到CI/CD管道中,确保新代码不会破坏用户正在与之交互的内容。一个系统级的TDD方法还可以帮助嵌入式开发人员思考自上而下的问题,并利用模拟和仿真来代替依赖硬件。

我希望这篇文章对你关于嵌入式系统开发的一些想法提出了质疑。我们已经研究了一些将TDD提升到下一个层次的想法。因此,好好想想,想象一下,一个系统级的TDD方法可以为您和您的客户做什么。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭