RTI的软件测试
RTI 软件是许多关键任务的核心系统。我们的客户当然非常关心他们系统的可靠性和质量。因此,当我与客户会面并介绍 RTI 开发过程时,我们会讨论开发实践、我们使用的工具和 RTI IIoT 实验室。许多人对我们在 RTI 进行的软件测试以及我们使用的测试框架特别好奇。我总是喜欢这些谈话;我们为我们对测试的重视而感到自豪。这篇博文总结了我们执行的测试。
我们的开发流程和测试在整个 RTI Connext 产品套件中是通用的。 RTI Connext DDS CERT 是个例外,它针对需要安全认证并遵循不同开发流程的应用程序。在开发过程中,在 RTI 发布任何新软件之前,我们会执行大量测试以验证正确的功能并确保软件的性能和扩展性良好。
单元测试 验证各个功能是否按预期执行。单元测试被用作每个产品发布的关键回归测试机制。单元测试框架不仅仅是测试单个功能。它还允许进行一定级别的单节点功能测试。在最近的版本中,我们甚至将客户提供的服务质量 (QoS) 设置作为我们测试配置的一部分。我们的流程旨在确保在尽可能真实的环境中正常运行。
作为新功能开发的一部分,我们创建了一个功能测试计划并实施了一套端到端的功能测试 .这些测试是通过一组定制的测试实现的,或者在 Connext DDS Micro 的情况下,在新的分布式测试框架中实现。该测试环境使用许多在不同机器上执行测试的“测试运行器”和一个在测试运行器之间同步测试执行的“测试管理器”。开发了一种简单的 DDS 测试语言来描述测试,每个测试运行器执行一个脚本,发布结果(通过/失败)并等待下一个脚本执行。功能测试的主要重点是:
- 测试应用级 API 和 DDS QoS 策略(截止日期、活跃度等)
- 测试资源限制
- 测试交叉字节序
- 测试发现
- 测试性能
- 确保稳定性
我们执行各种级别的互操作性测试:
- 我们测试与其他 RTI 产品的互操作性 在开发和安装测试期间。我们开发了一套自动化的互操作性测试。例如,Connext 6 引入了 Connext DDS Micro 3.0 和 Connext DDS core 6.0 库之间的许多新功能。我们自动生成了数以千计的配置组合并验证了正确的行为。当我们在分析后确定存在破坏互操作性的风险时,就会测试与旧 RTI 版本的互操作性。 语言互操作性 是间接完成的,因为我们的一些工具是用 Java 或其他语言编写的。例如,当我们将 RTI 基于 Java 的工具(例如 RTI Admin Console)与其他语言的应用程序结合使用时,我们会测试与基于 Java 的应用程序的互操作性。
- 具有基本的与其他 DDS 供应商的互操作性 定期在对象管理组 (OMG) DDS 会议上完成。供应商协调更深入的测试集,以验证 DDS 安全性、可扩展类型和 DDS-RTPS 有线协议 (https://github.com/omg-dds)。
安装测试 捕获多个产品之间的集成和互操作性测试。这些测试既可以手动运行,也可以通过自动安装测试套件运行。 安装测试 涵盖各种集成和互操作性问题:
- 安装 - 是否正确安装了所有文件?
- 图形用户界面 (GUI) - 目前没有自动 GUI 测试。在手动安装测试期间,我们验证集成是否正常工作:例如,在 RTI Launcher 和 rtiddsgen 之间 , 或 rtiprototyper .
- 文档 - 是否提供了正确的文档?
- 基本功能测试 适用于使用随附示例的所有产品。对于某些产品,我们贯穿了整个入门指南。此测试在各种平台上重复进行。
- 基本产品和语言互操作性测试 .
为了加速和扩大这些测试,我们自动化安装测试 对于许多功能。当前测试涵盖:
- 安装 - 文件检查以确保正确安装文件。
- 运行实用程序,包括 rtiddsping , rtiddsspy 和 rtiprototyper。
- 使用静态/动态和发布/调试 DDS 库的组合,在 C、C++、C++03、C++11、C++ CLI、C# 和 Java 中运行 rtiddsgen 生成的示例。
- 使用静态/动态和发布/调试 DDS 库的组合运行交付的示例。
- C++ 和 Java 中的性能示例。
- TCP 提供的 C 语言示例。
这些测试在 80 种不同的架构上运行,包括 Windows、Linux、Solaris、Lynx、QNX、Darwin 和 VxWorks 平台。
我们有各种性能和内存分析测试。 创建有效且有意义的分布式性能测试极具挑战性。简单的方法无法处理甚至粗略地衡量缓冲区、吞吐量、延迟、实时交付、堆栈和操作系统方面的权衡。 RTI 在评估对实际系统最重要的性能指标方面拥有丰富的经验。
- 单元测试捕获特定功能的性能和内存信息。
- 我们使用我们的性能测试 (perfTest) 来表征 Connext DDS 的性能。我们对 perfTest 进行了大量投资,因此它可以进行实际测量。它可以与其他产品结合使用,例如路由服务。我们使用 PerfTest 来收集我们的公共延迟和吞吐量数据。性能结果可在 https://www.rti.com/products/dds/benchmarks.html 获得。
- memTest 旨在监控 Connext DDS Core 的内存占用。作为单元测试的一部分,Connext DDS Micro 会收集详细的内存占用信息。
- RTI Admin Console 和 RTI Recording Service 等其他应用程序具有内置的性能监控功能。
PerfTest 和 MemTest 的持续集成确保我们不会在 Connext DDS 产品中添加新功能时倒退(超过预设百分比)。
耐力测试 模拟长时间运行的场景。耐久性测试监控各种动态用例中的堆内存,例如创建和删除远程参与者或创建和删除远程端点。在随机更改 RTPS 数据包的模糊测试用例中,耐久性测试框架还与 RTI 安全插件一起运行。测试使用最新的通用版本 (GAR) 运行。
大规模和压力测试 作为新功能开发的一部分有目的地构建。例如,当我们引入传输移动性(也称为 IP 移动性)时,我们创建了一组测试来模拟与各种无线接入点的连接和断开连接。当我们增强发现实现时,我们创建了一个特殊的测试框架来模拟数千个端点并自动验证它们是否被每个应用程序发现。通常,这些测试不会在每个版本中重新运行,部分原因是设备和网络要求。当我们对发现实现进行更改时,会重新运行某些测试(例如,大规模发现测试)。
我们的产品功能强大且复杂,必须在一系列惊人的更复杂的应用程序中工作。所以,当然我们不能测试每一个场景或找到每一个可能的问题。但我们有信心,我们拥有业内最广泛的测试项目之一。通过这个严格且多方面的测试过程,我们知道我们的客户可以高度自信地开始使用最新的产品版本。
关于作者
Jan 于 2006 年加入 RTI,在 Sun Microsystems 和 VLSI Technology 等公司担任技术和面向客户的领导角色方面拥有超过 23 年的经验。他领导过专业的服务、支持和工程组织,并在中间件、网格应用和基础设施软件、操作系统设计以及设备驱动程序和网络芯片开发方面拥有丰富的经验。
Jan 来到 RTI 担任高级应用工程师,为使用 RTI Connext 软件的客户提供培训和咨询服务。接下来,Jan 开发了一个新的支持组织,实现了创纪录的 98% 的客户满意度。作为应用服务总监,Jan 带领一个应用服务工程师团队使用 RTI Connext 技术和中间件提供系统设计和定制实现。 Jan 目前担任工程副总裁,负责 RTI 的研发工作。他领导着一个由 60 多人组成的分布式工程团队,负责开发 RTI Connext 的软件,并负责软件开发流程和产品质量。
Jan 毕业于比利时吉尔的 KIHK,获得电子、数字通信硕士学位(以优异成绩)。
了解详情:
自动驾驶汽车生产»
什么是DDS? »
Connext DDS Pro »
物联网技术