Parasoft C/C++ test 自动化用户指南(十七):运行静态分析
Parasoft C/C++test针对C/C++开发的专业白盒自动化测试方案,能有效提高软件开发效率和代码质量。C++test 可以进行静态分析,全面代码审查,运行时错误检测,并在单元测试和组件测试中集成覆盖率分析。
先决条件
在分析代码之前,必须将 C/C++test 配置为与特定的 C 和 C++ 编译器和版本一起使用。配置应反映用于构建被测代码的原始编译器和版本。原始编译器可执行文件必须在 $PATH 上可用(除非使用完整路径指定)。
使用-compiler开关指定编译器配置标识符:
cpptestcli -config "builtin://Recommended Rules" -compiler gcc_4_5 -input cpptest.bdf
或者,您可以cpptest.compiler.family在自定义配置文件中配置该属性:
cpptest.compiler.family=gcc_4_5
如果您使用单个编译器和版本进行所有测试,则cpptestcli.properties 可以在 [INSTALL_DIR] 或 [USER_HOME] 目录中的全局配置文件中指定编译器标识符。
执行以下操作之一以查找编译器的配置:
-
使用-detect-compiler开关自动检测配置:
cpptestcli -detect-compiler gcc
-
使用-list-compilers开关在所有支持的编译器列表中查找配置:
cpptestcli -list-compilers
分析单个文件
运行分析并使用--开关(分隔符)指定原始编译器命令。
cpptestcli -config "builtin://Recommended Rules" -compiler gcc_4_5 -- gcc -I include Bank.cxx
C/C++test 将使用原始编译器可执行文件和编译器选项分析 Bank.cxx 文件,并向输出控制台报告检测到的违规。
只会分析指定的源文件。源文件中包含的头文件将被排除在分析之外。要扩大测试文件的范围,包括头文件。
您还可以使用该-fail选项在分析报告静态分析结果时生成非零退出代码。
分析基于 Makefile 的项目
运行代码分析和指定原始构建命令与-trace开关。
cpptestcli -config "builtin://Recommended Rules" -compiler gcc_4_5 -trace make clean all
C/C++test 将执行以下任务:
- 运行原始构建(make clean all)
- 检测要测试的文件
- 对这些文件运行分析
- 向输出控制台报告结果
- 将所有构建信息存储在 cpptest.bdf 文件中以供将来运行。
只有在运行构建命令时编译了该文件,C/C++test 才会检测用于测试的源文件。只会分析来自 Makefile 的源文件。源文件中包含的头文件将被排除在分析之外。
关于构建数据文件
构建数据文件存储构建信息,例如工作目录、编译的命令行选项以及原始构建的链接过程。指定 .bdf 文件的路径使您无需重新构建即可分析项目。
您可以使用 -trace开关创建 .bdf 或使用位于. 中的独立cpptestscan或cpptesttrace实用程序[INSTALL_DIR]/bin directory。
以下示例是来自构建数据文件的片段:
working_dir=/home/place/project/hypnos/pscom project_name=pscom arg=g++ arg=-c arg=src/io/Path.cc arg=-Iinclude arg=-I. arg=-o arg=/home/place/project/hypnos/product/pscom/shared/io/Path.o
使用 cpptestscan和cpptesttrace实用程序
该cpptestscan实用程序在正常构建期间用作编译器和/或链接器的包装器。要cpptestscan与现有构建一起使用,请cpptestscan在构建代码库时为编译器/链接器可执行文件添加前缀。这可以通过两种方式完成:
- 修改构建命令行以cpptestscan用作编译器/链接器可执行文件的包装器
- 如果您无法在命令行上覆盖编译器变量,请嵌入cpptestscan实际的 make 文件或构建脚本。
要cpptesttrace与现有构建一起使用,请cpptesttrace在构建代码库时为整个构建命令添加前缀。cpptesttrace将跟踪构建期间执行的编译器和链接器进程,并将它们存储在构建数据文件中。
在这两种情况下,您都必须在 PATH 环境变量中指定任一实用程序的完整路径。下表总结了cpptestscan和 的其他选项cpptesttrace。可以直接为cpptestscan命令或通过环境变量设置选项。大多数选项都可以应用于cpptestscan或cpptesttrace 通过更改命令行中的前缀。
cpptestscan 的基本用法:
- 视窗: cpptestscan.exe [options] [compile/link command]
- Linux: cpptestscan [options] [compile/link command]
基本的 cpptesttrace 用法:
- 视窗: cpptesttrace.exe [options] [build command]
- Linux: cpptesttrace [options] [build command]
选项
|
环境变量
|
描述
|
默认
|
---|---|---|---|
--cpptestscanOutput-File=<OUTPUT_FILE> --cpptesttraceOutput-File=<OUTPUT_FILE> |
CPPTEST_SCAN_OUTPUT_FILE | 定义要附加构建信息的文件。 | cpptestscan.bdf |
--cpptestscanProject-Name=<PROJECT_NAME> --cpptesttraceProject-Name=<PROJECT_NAME> |
CPPTEST_SCAN_PROJECT_NAME | 定义 C++test 项目的建议名称。 | 当前工作目录的名称 |
--cpptestscanRun-OrigCmd=[yes|no] --cpptesttraceRun-OrigCmd=[yes|no] |
CPPTEST_SCAN_RUN_ORIG_CMD | 如果设置为“是”,将执行原始命令行。 | 是的 |
--cpptestscanQuoteCmdLineMode=[all|sq|none] --cpptesttraceQuoteCmdLineMode=[all|sq|none] |
CPPTEST_SCAN_QUOTE_CMD_LINE_MODE |
确定在准备 cmd 行运行时 C++test 引用参数的方式。 all: 所有参数都将被引用 none: 不会引用任何参数 sq: 只有带有空格或引号字符的参数才会被引用 Linux 不支持 cpptestscanQuoteCmdLineMode |
全部 |
--cpptestscanCmd-LinePrefix=<PREFIX> |
CPPTEST_SCAN_CMD_LINE_PREFIX | 如果非空且正在运行的原始可执行文件被打开,则指定的命令将作为原始命令行的前缀。 | [空的] |
--cpptestscanEnvInOutput=[yes|no] --cpptesttraceEnvInOutput=[yes|no] |
CPPTEST_SCAN_ENV_IN_OUTPUT | 启用会转储选定的环境变量和输出文件的命令行参数。对于高级设置,请使用 --cpptestscanEnvFile 和 --cpptestscanEnvars 选项 | 不 |
--cpptestscanEnv-File=<ENV_FILE> --cpptesttraceEnv-File=<ENV_FILE> |
CPPTEST_SCAN_ENV_FILE | 如果启用,指定的文件会保留所有构建命令的公共环境变量;主输出文件只会保留差异。使用此选项可减小主输出文件的大小。在启用 --cpptestscanEnvInOutput 的情况下使用此选项 | [空的] |
在不重新构建的情况下重新分析项目
运行代码分析并使用-input开关指定现有构建数据文件的路径。例如:
cpptestcli -config "builtin://Recommended Rules" -compiler gcc_4_5 -input cpptest.bdf
C/C++test 将执行以下任务:
- 从现有的 cpptest.bdf 文件中阅读有关要测试哪些文件的信息。
- 对这些文件运行分析
- 将结果报告给输出控制台。
不会执行原来的构建命令。
您可以使用多个-input开关指定多个文件:
cpptestcli -config "builtin://Recommended Rules" -compiler gcc_4_5 -input project1.bdf -input project2.bdf
分析基于 CMake 的项目
分析基于 CMake 的项目:
- 确保您的 CMake 构建可以输出 JSON 格式的编译命令文件(您可以将 CMake 配置为使用CMAKE_EXPORT_COMPILE_COMMANDS变量输出文件。)
-
更新 C/C++test 命令行以包含-input <PATH_TO_COMPILE_COMMANDS_JSON>传递编译命令文件的位置。您的命令行可能类似于以下内容:
cpptestcli -config "builtin://Recommended Rules" -compiler gcc_4_5 -input compile_commands.json
C/C++test 将执行以下任务:
- 从compile_commands.json文件中读取有关分析范围和构建选项的信息 。
- 对范围内的文件运行分析。
- 报告结果。
C/C++test 只会分析编译命令文件中定义的源文件。源文件中包含的头文件将被排除在分析之外。
分析 Microsoft Visual Studio 项目或解决方案
C/C++test 可以读取 Visual Studio 项目和解决方案文件,并分析项目或解决方案中的所有源文件和包含的头文件。使用-input开关指定 Visual Studio 项目或解决方案文件:
cpptestcli -config "builtin://Recommended Rules" -input MyProject.vcproj
您可以指定在分析项目或解决方案期间要使用的构建配置和平台。将配置和平台名称附加到解决方案或项目文件名。您的命令可能类似于以下内容:
cpptestcli -config "builtin://Recommended Rules" -input MyProject.vcproj@Debug|x64
或者,您可以使用以下属性来指定在分析所有 Visual Studio 解决方案和项目期间要使用的构建配置和平台:
cpptest.input.msvc.config=Debug cpptest.input.msvc.platform=x64
指定 C/C++test 数据位置
.cpptest需要对该目录的独占访问权限。默认情况下,该目录在当前工作目录中创建,该目录是存储某些特定于运行的数据的位置。因此,一次只能在一个目录中运行一个 C/C++test 实例。您可以使用该-workspace开关更改 .cpptest 目录的位置。
-workspace <WORKSPACE_LOCATION>
Parasoft——领先的自动化测试工具,满足绝大多数行业标准
Parasoft是一家专门提供软件测试解决方案的公司,帮助企业打造无缺陷的软件。
从开发到质量检查,Parasoft的技术通过集成静态和运行时分析,单元、功能和API测试,以及服务虚拟化,在不牺牲质量和安全性的情况下加快软件交付,节约交付成本。
强大的报告和分析功能可帮助用户快速查明有风险的代码区域,并了解新代码更改如何影响其软件质量,而突破性的技术将人工智能和机器学习添加到软件测试中,使组织更容易采用和扩展跨开发和测试团队的有效的软件测试实践。
Parasoft针对C/C++、Java、.NET和嵌入式的开发测试都有着30多年的深入研究,很多全国500强企业使用Parasoft的产品实现了软件快速、高质量的交付。
获取Parasoft资料或申请试用可加QQ:2867205852