Parasoft C/C++ test 自动化用户指南(十四):配置测试范围
Parasoft C/C++test针对C/C++开发的专业白盒自动化测试方案,能有效提高软件开发效率和代码质量。C++test 可以进行静态分析,全面代码审查,运行时错误检测,并在单元测试和组件测试中集成覆盖率分析。
输入范围定义了 C 和 C++ 源文件以使用 C/C++test 进行测试。输入范围还提供有关编译器选项和环境的全套信息,因此 C/C++test 可以重新创建原始构建环境以提供准确的测试结果。
- 分析单个文件
- 分析基于 Makefile 的项目
使用现有构建数据分析代码
只会分析构建数据文件中定义的源文件。源文件中包含的头文件将被排除在分析之外。有关其他信息,请参阅以下部分:
- .bdf 的概念以及如何创建它的描述,请参阅 运行静态分析。
- 使用 .bdf 进行分析的步骤说明,请参阅运行静态分析。
- 有关如何扩大测试文件范围的说明,包括头文件。
定义源文件结构(模块)
C/C++test 将输入范围视为一组不相关的源文件。定义模块允许您引入定义良好的源文件结构并将其他文件(例如头文件)添加到输入范围中。
模块是通过指定其名称和根目录来定义的。位于根目录或其子目录中的所有测试文件都属于该模块。被测试源文件包含的位于根目录或其子目录中的所有头文件也将属于该模块,并与源文件一起进行分析。
对于模块中的所有文件,“模块相对路径”将可用。项目相对路径被计算为从模块根到实际文件位置的相对路径。在大多数情况下,模块相对路径独立于机器,因此可以轻松地在不同机器之间共享测试结果。
模块结构示例
第一段代码描述了一个简单的目录/文件结构。在第二段代码中,描述了文件和模块根目录之间的关系,以及将分析哪些文件:
/home/devel_1/project/src/foo.cp | tested file defined in bdf will be analyzed |
/home/devel_1/project/includes/foo.h | #included by foo.cpp |
/home/devel_1/project/includes/other.h | not #included by foo.cpp |
/home/devel_1/common/common.h | #included by foo.cpp |
假设模块MyApp是用/home/devel_1/project rootlocation定义的,以下文件将作为模块的一部分进行测试:
/home/devel_1/project/src/foo.cpp | belongs to MyApp as MyApp/src/foo.cpp; will be analyzed |
/home/devel_1/project/includes/foo.h | belongs to MyApp as MyApp/includes/foo.h; will be analyzed |
/home/devel_1/project/includes/other.h | not #included; will not be analyzed |
/home/devel_1/common/common.h | does not belong to MyApp; will not be analyzed |
定义基本模块结构
使用 -[=]开关定义模块。如果未指定名称,将使用根目录的名称:
-module MyApp=/home/devel_1/project -module /home/devel_1/project -module MyModule=../projects/module1 -module .
或者,可以使用以下cpptest.scope.module.=属性在自定义配置文件中定义模块结构:
cpptest.scope.module.MyApp=/home/devel_1/project cpptest.scope.module.MyModule=../projects/module1
定义具有多个根位置的模块
添加指向适当根位置的模块名称的逻辑路径以定义多个非重叠位置:
-module MyApp/module1=/home/devel_1/project -module MyApp/module2=/home/external/module2/src cpptest.scope.module.MyApp/module1=/home/devel_1/project cpptest.scope.module.MyApp/module2=/home/external/module2/src
微调输入范围
使用 -resource开关指定一个或一组文件进行测试。
-resource /home/cpptest/examples/ATM/ATM.cxx -resource /home/cpptest/examples/ATM -resource ATM.cxx
可以在路径中指定以下资源:
- 文件路径(只测试选定的文件)
- 目录路径(仅测试选定目录中的文件)
- 文件名(仅测试选定名称的文件)
使用 -include 和 -exclude 开关将其他过滤器应用于范围:
- 文件路径(只测试选定的文件)
- -include指示 C/C++test 只测试与文件系统路径匹配的文件;跳过所有其他文件。
- -exclude 指示 C/C++test 测试所有文件,除了那些与文件系统路径匹配的文件。
根据源代码管理数据定义文件过滤器
可以通过设置其他文件过滤器将分析范围限制为本地修改的文件或在当前工作分支上修改的文件。这使您可以在源代码控制系统中检查代码或与主要开发流合并之前专注于识别和修复由最近的代码更改引入的错误。
先决条件
-
必须正确配置与支持的源码控制系统的连接(见连接到源码控制和源码控制设置)。
- scope.scontrol=true设置必须被配置为根据你的源码控制系统启用计算作者资格(见范围和作者资格设置)。
分析本地修改的文件
要将分析范围缩小到本地修改的文件,请在.properties配置文件中添加以下选项:
scope.scontrol.files.filter.mode=local
分析在当前工作分支上修改的文件
要将分析范围缩小到当前工作分支上与主要集成流不同的文件,例如“master”或“trunk”,请在.properties配置文件中添加以下选项:
scope.scontrol.files.filter.mode=branch
|
如果要将您的工作分支与另一个分支或特定修订版而不是主要集成流进行比较,则需要提供要用作参考的分支或修订版的名称或 ID。以下配置将分析范围缩小到当前工作分支上与自定义分支/修订版不同的文件:
scope.scontrol.files.filter.mode=branch
scope.scontrol.ref.branch=[name/ID of the custom reference branch/revision]
|
在测试范围中包含头文件
C/C++test 不直接分析头文件。这意味着只有在被测试的源文件中包含头文件时才会分析头文件。如果通过应用文件过滤器从分析中排除未修改的源文件,则该源文件使用的所有头文件也将被排除 - 即使它们已被修改。
为了确保分析修改后的头文件,即使包含它们的源文件保持不变,请cpptest.scope.adjuster.cu.enabled 在包含高级范围选项的.properties文件中启用该 选项。这将能够分析与已修改文件属于同一编译单元的所有文件。
例子
scope.scontrol.files.filter.mode=local
cpptest.scope.adjuster.cu.enabled=true
|
scope.scontrol.files.filter.mode=branch
scope.scontrol.ref.branch=[name/ID of the custom reference branch/revision]
cpptest.scope.adjuster.cu.enabled=true
|
Parasoft——领先的自动化测试工具,满足绝大多数行业标准
Parasoft是一家专门提供软件测试解决方案的公司,帮助企业打造无缺陷的软件。
从开发到质量检查,Parasoft的技术通过集成静态和运行时分析,单元、功能和API测试,以及服务虚拟化,在不牺牲质量和安全性的情况下加快软件交付,节约交付成本。
强大的报告和分析功能可帮助用户快速查明有风险的代码区域,并了解新代码更改如何影响其软件质量,而突破性的技术将人工智能和机器学习添加到软件测试中,使组织更容易采用和扩展跨开发和测试团队的有效的软件测试实践。
Parasoft针对C/C++、Java、.NET和嵌入式的开发测试都有着30多年的深入研究,很多全国500强企业使用Parasoft的产品实现了软件快速、高质量的交付。