Loading
0

Parasoft C/C++test 针对 CMake 项目的自动化测试配置

Parasoft C/C++test是一款强大的软件测试工具,专门为C和C++语言开发提供全面的代码质量保障解决方案。它集成了静态分析、单元测试、覆盖率分析等多种测试技术,帮助开发团队在软件开发早期发现和修复缺陷,提高代码质量和可靠性。对于使用CMake构建系统的项目,C/C++test从2020.1版本开始提供了专门的支持,简化了测试配置流程,使开发人员能够更高效地集成自动化测试到他们的开发工作流中。

>>点击获取Parasoft C/C++test试用

在之前,我们都是使用的CMake自带的命令,先生成Makefile文件,然后使用cpptesttrace.exe跟着make命令生成BDF文件。但是这样生成的BDF文件里不仅包含项目中的文件,还包含CMake自动生成的文件,有时还会出现文件重复的问题(一般因为项目编译时,文件被拷贝到build文件夹下)。

使用条件

C/C++test2020.1版本以上。

具体使用

具体使用只有导入项目方式跟其他项目有些区别,导入项目有两种方式:

  • 生成json文件方式
  • 修改CMakeLists.txt文件方式

前者使用简单,仅适用于静态分析,因为生成的json文件中没有包含link信息,而这是所单元测试需要的。后者相对要麻烦,但是支持单元测试。

生成json文件方式

这种方式使用的是CMake自带的功能,主要方式是修改CMAKE_EXPORT_COMPILE_COMMANDS选项。两种方式:

1.在CMakeLists.txt文件中将CMAKE_EXPORT_COMPILE_COMMANDS选项设置为ON;

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

2.生成构建脚本时,将其添加到cmake的命令行调用中。

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 <path_to_src>

修改CMakeLists.txt文件方式

1.修改主CMakeLists.txt文件,将<INSTALL_DIR>/integration/cmake/cpptest-project.cmakeinclude进来(大部分情况下,其实不需要修改这个cpptest-project.cmake文件);

2.根据情况加上cpptest_add_executable(),具体下面说明;

3.运行CMake的时候设置CPPTEST_PROJECT=ON,实际命令可能是cmake -DCPPTEST_PROJECT=ON ..;

4.使用import projects的方式,将项目导入到workspace中,命令行就使用-import参数替代-bdf参数,这里导入项目的文件地址一般就是项目文件夹,如果找不到,可以在项目下搜索 .parasoft文件;

5.后面就是基本的静态分析和单元测试的步骤了。

cpptest_add_executable()的详细说明

其实这个部分,我们不仅仅是要添加cpptest_add_executable(),如果有需要,我们还需要添加target_include_directories()和target_link_libraries(),否则可能缺少链接信息等。

添加的原则是遇到add_executable()添加cpptest_add_executable(),遇到target_include_directories()添加target_include_directories(),遇到target_link_libraries()添加target_link_libraries()。一般情况下,这些都在各个模块的CMakeLists.txt文件中出现。

cpptest_add_executable部分

按照用户手册中提到的,cpptest_add_executable部分组成如下:

cpptest_add_executable(
<target_name>
[CPPTEST_COMPILER_ID <compiler_id>]
[CPPTEST_PROJECT_NAME <test_project_name>]
[CPPTEST_PROJECT_LOC <test_project_location>]
[CPPTEST_PROJECT_FOLDERS <name1=location1> <name2=location2> ...]
[EXCLUDE_FROM_ALL]
SOURCES <src1.cpp> <src2.cpp> ... | TARGETS <target1> <target2> ...
)

这里详细说明一下几个必需要设置的参数:

<target_name>:这个必需要设置,内容随意,推荐在原项目名后加_cpptest,但是这个参数会关系到其他地方的设置。另外如果是一个大项目下面包含的多个模块,那么各个模块的<target_name>需要设置成不同的;

SOURCES:这个与TARGETS是二选一,后面跟需要跟踪编译信息的文件,有的时候,我们能够从CMakeLists.txt文件中找到相关的变量,而不需要将涉及的源文件一一列出来;

TARGETS:推荐使用TARGETS,比如CMakeLists.txt文件中有project(xxx),那么我们就可以设置TARGETS xxx;

target_link_libraries/target_link_libraries部分

这部分的设置参照原本的target_link_libraries就行,但是其中的<target_name>需要跟上面的对应起来。

比如,原本的是

target_link_libraries(main mod1 mod2 mod3)

那么我们就需要再添加

target_link_libraries(main_cpptest mod1 mod2 mod3)

通过Parasoft C/C++test对CMake项目的针对性支持,开发团队能够更加高效地实施全面的软件质量保障策略。这一集成不仅帮助实现了早期缺陷检测、代码规范符合性验证以及单元测试自动化,还支持持续集成环境的无缝集成。

Parasoft C/C++test特别适用于航空航天、汽车电子、医疗设备、工业控制等高可靠性要求的行业,帮助这些行业解决功能安全标准合规性问题,确保软件系统的高度可靠性和安全性。通过将质量保障左移,C/C++test使团队能够在开发初期发现和修复问题,大幅降低后期修复成本,加速产品上市时间,同时确保交付高质量的软件产品。

关于慧都

慧都是一家行业数字化解决方案公司,专注于软件、石油与工业领域,以深入的业务理解和行业经验,帮助企业实现智能化转型与持续竞争优势。在软件工程领域,我们提供开发控件、研发管理、代码开发、部署运维等软件开发全链路所需的产品,提供正版授权采购、技术选型、个性化维保等服务,帮助客户实现技术合规、降本增效与风险可控。

慧都科技作为Parasoft公司在中国区的官方授权合作伙伴,为国内企业提供Parasoft C/C++test产品的正版授权、定制化部署与全生命周期技术支持与服务。我们致力于助力客户精准贯彻功能安全标准、全面提升软件开发效率、有效管控项目风险,最终构建符合国际标准的高质量软件体系。