单元测试中的打桩为何能改进集成测试

我们有一个客户,正在根据IEC 61508 功能安全标准开发一个安全关键型项目,他与我们联系。要求我们提供指导,通过进一步减少单元测试产生的干扰来提高开发人员的生产力,这些干扰就是由于缺乏打桩而产生的。

我们了解到,客户进行单元测试的方式更接近于集成测试。在他们的过程中,要测试的单元没有与其依赖组件(项目中的其他文件或功能)隔离开来,单元测试用例是针对大多数已完成的应用程序执行的。

这种方法不是典型的单元测试。它通常被称为集成级测试。集成测试在证明功能性和非功能性要求的良好测试覆盖率方面非常有效。如果启用了结构代码覆盖,它还可以提供出色的测试覆盖率。试中的打桩为何能改进集成测试

测试中的打桩是什么?

单元测试的做法通常是隔离功能、方法或程序。这种隔离是通过剔除依赖性和强制执行特定的执行路径来完成的。

打桩取代了依赖于本函数外的代码。它还为开发人员或测试人员提供了操纵打桩响应或结果的能力,以便以各种方式和各种目的运用该单元,例如,确保该单元性能可靠,安全,并且在某些情况下,也没有安全漏洞。

为什么要使用打桩?

解释为什么要使用打桩及其带来的价值的最佳方法是通过一个用例逐步说明。例如,看看下面的代码:

图片

在函数的开头,有一个if语句,用于测试样本缓冲区是否成功分配。这个函数的大多数测试用例都是在没有任何打桩的情况下实现的,因为它们关注的是常规的控制流,除了测试用例,它在缓冲区分配失败时检查函数的行为。这个测试用例要allocateSampleBuffer 函数的打桩来模拟故障。

一旦添加了打桩,它将被一致地应用到测试代码中。在处理“分配失败”测试用例的用户将有一个简单的方法将一个特殊的回调函数安装到打桩中,这将模拟预期的效果:分配失败或什么都不做,因为在默认情况下打桩返回一个空指针,这是测试用例的预期。但所有其他测试用例现在都需要注意,因为必须为它们添加一个打桩配置,以避免控制流中不必要的更改。

当然,开发人员可以返回并重新配置他们的测试用例来解决打桩,但这意味着要花额外的时间分析失败的原因,为打桩准备专用的回调函数,并消除测试过程中的干扰,这是客户联系我们时的主要关心的问题。

此外,医疗设备软件开发中的风险管理还需要深入了解医疗软件缺陷可能造成的危害程度。这可以通过风险索引来完成,风险索引根据风险的严重程度对风险进行分类。

在医疗设备软件方面,建立风险指数有助于确定风险管理指标,例如在软件发布使用之前应进行的所需测试、验证和确认级别。它还可以帮助为确保软件持续安全性和有效性所需的持续测试、监控和维护定下基调。

在单元测试C和C++代码中使用打桩

Parasoft C/C++test让自动生成桩或手动创建桩变得更加容易。该选项在两个地方可用:

1.对于自动生成的打桩

测试配置->执行->符号(tab)

图片

2.对于用户打桩和自动打桩:

打桩视图的打桩设置面板

图片

选中“插入对原始函数的调用”选项后,Parasoft C/C++test会更改打桩的默认生成方式。使用新选项生成的打桩将充当代理并调用原始函数定义,除非用户提供一个特定于测试用例的回调函数来执行替代活动。

在默认情况下,不使用新选项生成的桩(包括遗留打桩)不会尝试调用原始符号。如果没有安装特定于测试用例的回调函数,打桩将什么都不做,只是返回一个默认值,例如空指针或零数值。

何时使用打桩?

为了确保差异是明确的,让我们将情况与用户未提供专用回调时启用和未启用的“插入对原始函数的调用”选项进行比较。

这是为goo函数打的桩,不启用“插入对原始函数的调用”选项。它的工作方式如下:

图片

以下是启用“插入对原始函数的调用”选项后为goo函数生成的相同打桩的查找方式:

图片

正如我们所见,使用新选项添加的打桩对测试代码是透明的。它们只是对原始定义执行代理调用,除非有人提供需替代操作的回调代码。

打桩限制和难点

在打桩函数没有原始定义的情况下,会发生什么呢?如果没有定义替代行为的回调,打桩会如何出现什么情况?

C/C++test的巧妙之处在于它会自动检测这种情况。在测试构建期间,打桩好的函数,即用户桩将重新配置自己。当没有安装回调函数时,它不会调用原始定义,并将返回一个安全的默认值。

集成测试中的打桩:示例和总结

在这种半集成测试中,同时处理测试用例时,C/C++test 极大地减少了不同团队成员之间的干扰。开发人员A添加的打桩代码不会改变开发人员B添加的测试用例的测试代码的行为。

如果开发人员B决定他们需要为其中一个测试用例的打桩函数配置替代操作,他们可以创建一个特定于测试用例的回调函数,为打桩函数实现所需的替代逻辑,并将该回调函数作为测试用例配置的一部分安装在现有的打桩中。

这就避免了不同人员有着不同测试需求的难题了。如果您对以上内容感兴趣,请持续关注我们,

猜你喜欢

转载自blog.csdn.net/m0_67129275/article/details/132686623
今日推荐