最新的Parasoft C / C ++ test 10.4.3版本中引入了存根这一小小的增强功能,此功能具有很多的优点,让我们来看看吧。
几个月前,我们的一位大型客户正在从事一项根据IEC 61508开发的安全关键项目,与我们联系以寻求帮助以优化开发人员的生产率。客户面临的问题是由于开发人员同时处理单元测试用例并根据其特定测试场景的需要配置存根而在测试结果中产生的大量噪声。
我们了解到,客户执行单元测试的方式更接近于集成测试。在他们的过程中,被测试的单元没有与相关组件(项目中的其他文件)隔离开来,并且单元测试用例是针对几乎完整的应用程序执行的,因此项目中各个功能之间的所有调用在单元测试期间的连接方式都完全相同。如在生产版本中。
这种方法不是“经典的”单元测试,因为它从集成级别测试中借鉴了很多东西。尽管如此,它对于说明需求和源代码的良好测试覆盖范围还是非常有效的。
在此过程中,仅在必须模拟特定的测试方案(通常是故障注入)时才添加存根。以下面的代码为例:

在该函数的开头,有一个if语句,用于测试是否成功分配了样本缓冲区。此功能的大多数测试用例都是在没有存根的情况下实现的,因为它们专注于“常规”控制流,测试用例除外,该用例会在缓冲区分配失败时检查功能的行为。此测试用例需要对allocateSampleBuffer函数使用存根来模拟故障。
一旦添加了存根,它将被一致地应用于测试的代码。现在,使用“分配失败”测试用例的用户将有一种简单的方法,可以在存根中安装特殊的回调函数,这将模拟所需的效果(分配失败,或者不执行任何操作,因为存根默认返回空指针,预期用于测试用例)。但是现在所有其他测试用例都需要引起注意,因为必须为其添加一个存根配置,以避免控制流中发生不必要的更改。
当然,开发人员可以返回并重新配置他们的测试用例以解决存根,但这意味着要花费更多的时间来分析失败的原因,为存根准备专用的回调函数以及消除测试过程中的噪音–客户与我们联系时的主要顾虑。
因此,我们在Parasoft C / C ++ test的10.4.3版本中为存根添加了一个特殊选项,使生成自动存根或用户存根更加容易。新选项在两个地方可用:
- 对于自动生成的存根:测试配置->执行->符 (选项卡)

- 对于用户存根(以及自动存根):存根视图的“存根设置”面板


选中“插入对原始函数的调用”选项后,Parasoft C / C ++ test会更改存根的默认生成方式。没有安装回叫时,此更改是存根行为。使用new选项生成的存根将充当代理并调用原始函数定义,除非用户提供特定于测试用例的回叫函数以执行替代活动。没有新选项的情况下生成的存根(包括旧存根)在默认情况下将不会尝试调用原始符 ,并且如果未安装特定于测试用例的回调函数,则存根将不执行任何操作,仅返回“默认” ”值,例如空指针或零数值。
为确保区别清楚,让我快速比较一下启用和未启用“插入原始功能的插入”选项的情况,以供用户未提供专用回调的情况:
- 这是为goo函数生成的存根,没有“插入对原始函数的插入”选项。它的工作方式如下:

- 下面是它的外观为生成相同的存根咕功能,但这次用的“插入调用原始功能”选项选中:

如您所见,添加了new选项的存根对于测试的代码是透明的,并且它们仅执行对原始定义的代理调用,除非有人提供实现所需替代操作的回调。
一个有经验的工程师可能会在这里问一个问题,例如,“好吧,但是如果没有适用于存根函数的原始定义,将会发生什么我不提供定义替代行为的回调并且我没有原始定义可用时,存根在这种情况下的行为如何
好吧,这项新功能的优点在于可以自动检测到这种情况,并且存根将在测试工具构建时重新配置自身,而不是在未安装回叫时调用原始定义,而是返回一个安全的默认值值。
当在这种“半集成”测试中同时处理测试用例时,此新功能极大地减少了不同团队成员之间的干扰。开发人员A添加的存根不会更改开发人员B添加的测试用例的已测试代码的行为。如果开发人员B决定需要为其中一个测试用例的存根函数配置替代操作,则只需创建一个特定于测试用例的回调函数,该函数为存根函数实现所需的替代逻辑,并将此回调安装在现有存根中,作为测试用例配置的一部分。
在我们最新的Parasoft C / C ++ test10.4.3版本中引入了这一小增强功能。在这里了解更多有关最新版本的信息!
想要了解Parasoft、Parasoft SOAtest、Parasoft Virtualize更多信息或资源的朋友,请点击这里~
与解决方案专家联系,以了解如何在组织中部署Parasoft的自动化软件测试解决方案。
标签:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!