Want to see Parasoft in action? Sign up for our Monthly Demos! See Demos & Events >>

X
BLOG

充分发挥C/C++test的价值

充分发挥C/C++test的价值 Reading Time: 2 minutes

对于开发测试来说,最有效的环境就是能够深度集成到开发人员IDE中的统一测试解决方案。例如,团队可能会将测试工作集中在最近更新的、高风险的代码上,而Parasoft C/C++test这样的集成工具就是最合适的解决方案。

软件验证和确认(Verification &Validation)是软件开发的一个固有部分。投入到特定V&V项目中的工作和预算取决于许多因素。无论是因为什么原因,一个团队要去实施项目质量管理计划,生产安全、高质量的软件产品所需要的不仅仅是决心,选择合适的测试方案是重中之重,这也是非常具有挑战性的。如今,互联网技术正在快速发展,公司必须在开源产品和商业产品之间做出选择。

这篇文章解释了如何将静态分析、运行时内存监控、自动化单元测试和流分析等自动化测试技术相结合,以改进项目质量管理过程,并提出了实施统一测试解决方案的好处。

统一测试解决方案的价值

在讨论统一测试解决方案的价值之前,我们需要明确它能够提供什么帮助。在理想情况下,解决方案应该:

  • 支持多种测试技术
  • 易于使用
  • 检测功能问题和回归
  • 提供需求和测试用例的可追溯性
  • 度量代码的复杂性、可移植性和可维护性
  • 提供即时反馈来提高开发人员编写代码效率
  • 提供有关开发进度的信息
  • 结合不同环节的结果进行高级分析

一个统一和集成的测试解决方案有助于避免一些问题:

  • 使用带有不同界面的独立工具时,存在多种学习曲线和可用性问题
  • 分散开发人员的精力
  • 避免在工具链的不同部件之间交换信息

检测尽可能多的缺陷

软件缺陷属于不同的类别,因此不能期望通过一种测试技术识别所有缺陷。例如,手动系统级测试。要了解更多的信息,请观察下面的示例代码片段:
充分发挥C/C++test的价值
上面的几行代码包含了几个问题。具体来说,在第16行中,开发人员试图使用calculateIdx()函数中计算的索引值来初始化全局缓冲区,但他们无法验证该值是否在允许的范围内。即使运行了几十个手动测试用例,他们也可能不会发现这个问题,因为将整数值写入随机内存位置大概率不会立即产生惊人的效果。

在这个例子中,Parasoft的内存错误检测很容易就识别了问题:

充分发挥C/C++test的价值

静态分析的价值

静态分析可以检测到运行时内存监控无法识别的问题。例如,在下面的代码片段中,第27/28行出现空指针解引用的可能性。在person指针参数为null的情况下调用storePersonToFile 函数会导致错误,但只有当在retrivePersonFromDB函数返回null时才会发生错误。在系统测试期间,不太可能出现这种情况,因为数据库连接很可能按预期运行,因此运行时内存监控工具不会报告出问题。但是,静态分析工具中的流分析很容易检测到从该函数返回的空指针,并报告潜在的空指针解引用问题。
充分发挥C/C++test的价值

检测功能问题和回归

那些总是完美执行,但不符合需求的代码怎么办?静态和动态分析在识别这类问题时没有用处。检测预期结果和实际结果之间的差异需要将计算结果与预定义的期望值进行比较。实现这种检查有许多常见的方法,包括手动系统级测试、集成测试和单元测试。
统一的测试解决方案可以在许多方面促进单元测试过程。这些优势包括:

  • 提高开发人员在创建测试用例时的生产力,例如,通过提供用于创建、编辑和配置测试用例的图形向导。
  • 与Test Double框架集成,允许简单的模拟和打桩来模拟复杂的测试场景,而不涉及大型代码库。
  • 将测试用例与代码覆盖率报告关联起来,以评估测试的完整性。
  • 通过自动计算验证代码增量所需的最小测试用例集来优化测试。
  • 合并来自其他测试技术的代码覆盖率报告,例如手动/系统级测试或集成测试,来识别未测试的代码。
  • 将结果追溯到需求,以便更好地理解失败测试的影响。

统一测试解决方案的价值

通过让QA团队参与编写单元测试的过程,使用图形向导或编辑器创建测试可以提高整个组织的生产率,从而使他们积极地为开发过程做出贡献。对于QA团队成员来说,使用图形向导比在代码编辑器中编写测试代码更容易,因为使用输入表单(如下图所示)配置值不需要很强的编码能力,而且耗时更少,特别是在团队成员缺乏经验的情况下。例如,下面的图片显示了Parasoft C/C++test对C或者C++项目单元测试功能的示例:
充分发挥C/C++test的价值
使用统一测试解决方案的另一个好处是,它提供了关于测试完整性和关键业务需求健康状况的反馈。MC/DC覆盖率报告中的数字较低可能表明分支结构覆盖率不足,即使报表覆盖率报告显示高数值。这种类型的分析需要一个支持多种覆盖指标的工具链,允许团队从简单的东西开始,例如行或语句覆盖,并在改进测试用例的过程中进行更彻底的代码覆盖。

测试可追溯性的要求

单元测试和系统测试覆盖率报告是有关测试过程的重要信息来源,特别是当它们结合使用时,效果会更加显著。但如果测试结果与需求不相关,团队就会缺少一些关键信息。通过查看从测试到需求的可追溯性报告,您可以快速确定需求覆盖的状态。此类报告的示例如下所示:
充分发挥C/C++test的价值
将需求与不同类型测试的结果相对应的能力是使用统一的测试解决方案的一大好处。单元测试、系统测试、集成测试结果以及编码标准和代码度量结果可以相互关联,以提供有关关键和非关键需求健康状况的反馈。

结合不同技术的结果进行高级分析

当团队结合项目中使用的各种测试技术的数据时,我们可以获得二级指标和更复杂的分析。使用统一的测试解决方案使团队能够从一个全新的角度看待代码。失败的单元测试用例对开发人员来说具有不同的含义,这取决于它是否发生在代码度量分析中被评为高风险还是低风险的代码中。如果这些信息与来自源代码控制的统计数据进一步结合,并和需求相关联,团队就可以更好地决定何时以及如何纠正代码。

使用Parasoft工具套件,您可以利用基于变更的测试来提高团队生产力。基于变更的测试技术捕获源代码、测试用例和代码覆盖率结果之间的关系,以计算用于验证和确认特定代码增量的最佳测试用例集。实际上,团队可以通过只运行一小部分测试而不是完整的回归套件来限制他们的测试活动。这种只专注于测试活动,并且绝对需要的技术,可以显著节省成本,特别是对于中型或大型项目。

完美搭档:Parasoft C/C++test和DTP

上面讨论的所有测试技术都可以在Parasoft C/C++test和Parasoft DTP中使用。Parasoft C/C++test是针对C和C++项目的统一测试解决方案。C/C++test可作为流行的IDE的插件使用,如Eclipse和Visual Studio。与IDE的紧密集成可以避免上述问题。

开发人员可以在编写代码时立即运行编码标准合规性或执行单元测试。QA团队成员可以在监控应用程序的代码覆盖范围和运行时错误时执行手动测试场景。离线分析,如静态分析提供的流分析,可以在连续集成阶段进行。

通过命令行接口支持的传输功能将分析结果报告给Parasoft DTP, DTP汇总了来自开发环境的信息。Parasoft DTP提供了广泛的报告功能,包括集成来自第三方工具的数据、将测试结果以及高级分析数据到开发人员的IDE。在工作流程的每个阶段提供持续反馈,加速了敏捷开发,并降低了实现符合安全标准的成本。

这里讨论的质量保证流程和架构方法不仅限于C/C++项目。Parasoft为Java和C# /. net提供了类似的解决方案。
充分发挥C/C++test的价值

结论

软件质量改进不是一项同质化的努力,它需要不同的技术来消除不同类型的软件缺陷。关键的挑战是如何以有效和高效的方式做到这一点,避免破坏项目预算和开发人员的士气。

与开发人员的IDE深度集成的统一测试解决方案为开发测试提供了最高效的环境。Parasoft C/C++test等工具能够统一测试各个方面的指标和结果,允许团队将测试重点集中在高风险和最近修改的代码上,来提供了非常大的便捷。

Written by

Miroslaw Zielinski

作为Parasoft嵌入式测试解决方案的产品经理,Miroslaw的专长包括C/ C++、RTOSes、静态代码分析、单元测试、管理安全关键应用程序的软件质量,以及软件符合安全标准。

将最新的软件测试新闻和资源发送到您的电子邮箱。