软件测试中的互操作性测试

⚡ 智能摘要

互操作性测试验证软件产品是否能与其他组件、设备和供应商系统正确交换数据,证明两个通信系统之间的端到端功能完全符合规定的要求。

  • 🔗 定义: 互操作性测试检查软件是否能与其他组件和设备通信而不会出现兼容性问题。
  • 🪜 四个级别: 物理互操作性、数据类型互操作性、规范级互操作性和语义互操作性描述了两个系统之间的一致性程度。
  • ⚠️ 规避的风险: 跳过操作会导致数据丢失、运行不可靠或错误以及维护性差等问题。ping 这些检查。
  • 🧭 六步流程: 启动项目,建立测试实验室,制定计划,执行测试,记录结果,然后释放资源。
  • 🧰 工具: 协议分析器、模拟器、服务虚拟化和 API 客户端是大多数现代互操作性实验室的驱动力。
  • 📐 标准: IEEE、ISO、IETF 和 HL7 FHIR 等领域规范定义了通过标准。
  • 🤖 AI支持: 机器学习可以对跨供应商故障进行分类,而 GitHub Copilot 可以加快测试脚本的编写速度。

软件测试中的互操作性测试

什么是互操作性测试?

兼容性测试 互操作性测试是一种软件测试类型,它检查软件是否能够与其他软件组件和系统交互。互操作性测试的目的是确保软件产品能够与其他组件或设备通信,而不会出现任何兼容性问题。

换句话说,互操作性测试是指验证两个通信系统之间的端到端功能是否符合需求规范。例如,智能手机和平板电脑之间会进行互操作性测试,以检查通过蓝牙进行的数据传输。

它被归类为一种形式 功能测试因为它回答的问题是行为问题:交换的信息是否完整到达,接收系统是否正确地对其采取行动?

不同级别的软件互操作性

两个系统可以在多个层面上相互协调一致。每一层都假定上一层已经正常运行。

  • 物理互操作性 — 连接本身是通过蓝牙、Wi-Fi、USB 或有线网络连接等方式建立的。
  • 数据类型互操作性 — 双方对相同的原始类型、字符集和字节顺序进行编码和解码。
  • 规范级别互操作性 — 双方都实现了规范中发布的相同消息格式和协议规则。
  • 语义互操作性 — 双方对交换的数据赋予相同的含义,因此像“温度”这样的字段在相同的单位和上下文中被解释。

为什么要进行互操作性测试

进行互操作性测试的原因是,

  • 它确保跨来自不同供应商的两种或多种产品提供端到端服务。
  • 该软件产品应能与其他组件或设备通信,而不会出现任何兼容性问题。

缺乏互操作性测试带来的风险包括:

  • 资料遗失
  • 性能不可靠
  • 运行不可靠
  • 操作错误
  • 可维护性低

如何进行互操作性测试

互操作性测试的测试过程包括以下步骤。

第四步:启动项目。

  • 明确并正式制定工作说明书,并建立项目管理基础设施。

第四步:设立测试实验室

  • 确保所有必要的技能和自动化工具都已设置完毕,以开展测试活动。
  • 使用自动化工具来减少测试用例并重用测试用例
  • 维护配置文件数据库
  • 记录和分析项目指标
  • 记录不成功测试的配置以供参考和分析

第四步:制定测试计划

  • 测试计划
  • 定义测试用例和程序
  • 设置必要的监控设备,用于维护测试日志。

第三步: 执行测试计划

  • 执行测试用例
  • 与测试团队合作,分析故障的根本原因

第四步:记录结果

  • 使用测试日志记录实施说明

第四步:释放资源并评估项目绩效,

  • 借助自动化工具分析测试结果

互操作性测试的示例测试用例

下图显示了一个典型的双厂商设置:来自不同制造商的设备相互连接,它们之间的每一次交换都成为一个测试用例。

互操作性测试的测试用例

互操作性测试的测试策略包括

  • 连接两个或多个来自不同供应商的设备
  • 检查设备之间的连通性
  • 检查设备之间是否可以相互发送和接收数据包或帧。
  • 检查网络层和设施层中的数据是否得到正确处理
  • 检查实施的算法是否正常工作
  • 结果正常:检查下一个结果
  • 结果不正确:请使用监控工具检测错误源。
  • 在测试报告工具中报告结果。

互操作性测试工具和技术

没有哪一款产品能够完全涵盖端到端的互操作性矩阵。大多数团队会结合数据包级视图、功能视图,以及一种替代实验室中不可用的合作伙伴系统的方法。

类别 典型工具 它能帮助你验证什么
协议和数据包分析器 Wiresharktcpdump、厂商协议嗅探器 消息是否以预期格式发出和接收,达到比特级精度。
API 和 Web 服务客户端 Postman, SoapUI 请求和响应trac不同供应商构建的服务之间的 ts
服务虚拟化、存根和模拟 WireMock,蒙特班克,供应商 SDK 存根 合作伙伴系统不可用、成本高昂或仍在开发中时的行为
设备模拟器和仿真器 供应商模拟器、智能家居和物联网平台模拟器 无需购买每个物理单元即可获得大型设备和固件矩阵
CI自动化 JenkinsGitLab CI, Azure 管道 每次构建后自动重新运行完整的组合矩阵

除了工具之外,还有三种技术反复出现:成对测试以保持供应商组合矩阵的可管理性,使用格式错误或版本过旧的消息进行负面测试,以及协议级日志记录以便能够发现故障。 trac编辑到损坏的确切框架。

互操作性测试最佳实践

互操作性缺陷代价高昂,因为它们往往在后期才显现出来,而且是在其他人的环境中。以下实践有助于控制这种缺陷。

  • 维护兼容性矩阵 列出范围内所有设备型号、固件版本和协议版本,并在每个版本发布时进行更新。
  • 测试向前和向后兼容性不仅仅是最新配对的那对。资历较老的同行们会在该领域工作多年。
  • Anchor 按照已发布的标准进行测试 例如 IEEE、ISO、IETF 或行业概况,因此“通过”意味着双方供应商都接受。
  • 自动化并持续运行 在 CI 管道内部,因为合作伙伴的更新可能会破坏昨天通过的配对。
  • 购买前先模拟 — 模拟器可以低成本地覆盖广泛的范围,然后由物理实验室确认风险最高的组合。
  • 对每个配置进行版本控制 这样就能完全重现失败的运行情况。
  • 测试降级条件 包括超时、丢包、消息不完整和版本不匹配等情况,而不仅仅是正常情况。
  • 尽早确定报告格式。 与合作伙伴供应商一起,双方都可以对缺陷采取相应措施。

互操作性测试与一致性测试

互操作性测试、一致性测试和兼容性测试经常被交替使用,但每个测试都回答了不同的问题。

方面 兼容性测试 一致性测试 兼容性测试
目的 它确保产品或软件能够与其他认证产品无缝互操作。 它确保产品符合所需的标准和规范。 它确保产品在特定环境(例如操作系统、浏览器或硬件配置)中正常运行。
问题已解答 这两个系统可以协同工作吗? 这个系统符合规则吗? 这个系统在这里运行正常吗?
参考点 另一家供应商的产品 已发布的标准 目标平台或环境
例如: 通过蓝牙在手机和平​​板电脑之间传输文件 根据规范验证协议消息。 在运行同一应用程序 Android Android 15和 Android 16

互操作性测试的缺点

互操作性测试的主要难点在于:

  • 确定缺陷的根本原因 — 故障可能发生在任一系统中,也可能发生在它们之间的网络中。
  • 准确的测量 — 结果取决于时间和负载,因此同一测试在连续运行中可能通过也可能失败。
  • 测试的可扩展性 — 每增加一家供应商,组合矩阵就会增大。
  • 网络复杂度 — 实际拓扑结构很少与简化的实验室设置相符。
  • 测试测试设备 — 分析器和模拟器需要进行自身验证,结果才能可信。
  • 记录测试结果和学习成果 — 研究结果必须能够被外部合作伙伴理解,而不仅仅是本地团队。
  • 要求不足 — 模糊的规范导致双方供应商在技术上都符合要求,但却无法沟通。

常见问题

它通常被归类为 功能测试因为它能根据要求验证行为。有些组织在以下情况下运行它: 非功能性测试 当关注点在于交易所的可靠性而不是功能本身时。

整合测试 它将您团队控制的单个产品内的各个模块连接起来。互操作性测试则将来自不同供应商的成品连接起来,您只能更改自己负责的那部分代码。

医疗保健、电信、银行和支付、汽车以及 IoT 他们最依赖这家公司,因为他们的产品是由许多竞争供应商提供的设备和服务组装而成的。

质量保证工程师和系统集成商负责运行测试,通常会与合作伙伴供应商一起进行。行业机构还会举办互操作性测试和认证实验室,让多家供应商在公正的环境下相互测试。

IEEE、ISO 和 IETF 发布通用协议标准。领域规范则添加具体细节——例如医疗保健领域的 HL7 FHIR、支付领域的 ISO 20022,以及互联设备领域的联盟规范,如 Matter 和 Bluetooth SIG。

机器学习有助于确定优先测试哪些供应商和固件组合,将重复出现的跨供应商故障归类为单一根本原因,并标记异常协议。 trac规则检查会通过。

是的。GitHub Copilot 可以快速生成请求构建器、解析器和断言样板代码。 Rev逐条检查建议是否符合实际规范,因为看似合理但违反标准的有效载荷会导致误判。

一旦各个组件通过,就开始了。 系统测试 并且存在稳定的接口。每次协议变更、固件发布或合作伙伴更新后,以及认证或上线前,都要重复此操作。

总结一下这篇文章: