Parasoft C/C++ test 自动化用户指南(二十一):与基于 Make 的构建系统集成
Parasoft C/C++test针对C/C++开发的专业白盒自动化测试方案,能有效提高软件开发效率和代码质量。C++test 可以进行静态分析,全面代码审查,运行时错误检测,并在单元测试和组件测试中集成覆盖率分析。
将Parasoft C/C++test 与基于 GNU Make 或类似构建工具的项目集成通常需要修改构建脚本。在大多数情况下,编译和链接规则调用的命令行应该被改变。这可能需要您修改 make 变量,或者在某些情况下,需要修改编译和链接规则定义。
与 Make 编译规则集成
使用cpptestcc命令包装器为编译器命令行添加前缀以与 Make 编译规则集成。要确定最佳方法,首先要分析构建脚本并找到编译规则的定义。在某些情况下,特定文件有不同的规则,例如处理 C 或 C++ 文件的规则。以下示例显示了如何定义编译规则:
$(PRODUCT_OBJ_ROOT)/%$(EXT_OBJ) : %$(EXT_CXX)
$(CXX) $(CXXFLAGS) $(CXXSTATICFLAGS) -DAPPNAME=product
|
在这个例子中,编译器被一个 CXX make 变量引用。有两种选择:
- 将前缀变量添加到编译规则中,或者
- 覆盖编译器变量
以下部分描述了如何继续使用这两种方法。
将前缀变量添加到编译规则
通过在引用编译器的变量前添加一个附加变量来修改编译规则:
$(PRODUCT_OBJ_ROOT)/%$(EXT_OBJ) : %$(EXT_CXX)
$(COV_TOOL) $(CXX) $(CXXFLAGS) $(CXXSTATICFLAGS) -
DAPPNAME=product
|
此外,COV_TOOL在 Make 调用时(示例 a)或在构建脚本(示例 b)中为添加的变量 ( )赋值:
例子一
make COV_TOOL="cpptestcc -compiler gcc_3_4 -line-coverage -workspace /home/test/proj/cov -- "
|
示例 b
在此选项中,变量可能位于依赖于附加变量的条件内:
ifeq (COV_BUILD,$(BUILD_TYPE))
COV_TOOL="cpptestcc -compiler gcc_3_4 -line-coverage
-workspace /home/test/proj/cov -- "
endif
|
覆盖编译器变量
在这种方法中,编译器变量用于指定覆盖工具命令行。这可以在 Make 调用时(示例 c)或在CXX指定变量的原始值之后的构建脚本(示例 d)中完成(以避免使用原始编译器覆盖覆盖工具命令)。
示例 c
如果你的构建脚本对不同类型的文件有不同的编译规则,你可能需要覆盖多个变量,例如CCand CXX:
make CXX="cpptestcc -compiler gcc_3_4 -line-coverage -workspace /home/test/proj/cov -- g++"
|
例 d
在此选项中,变量可能位于依赖于附加变量的条件内:
ifeq (COV_BUILD,$(BUILD_TYPE))
CXX="cpptestcc -compiler gcc_3_4 -line-coverage -workspace /home/test/proj/cov -- g++"
endif
|
与 Make Linking Rule 集成
修改链接规则以包含代码检测所需的附加库。cpptestcc根据具体的项目需求,工具库可以有不同的形式。它可以是共享/动态库、静态库或目标文件。在所有情况下,特定的链接器选项可能具有不同的形式,但无论情况如何,修改 Makefile 的方式都非常相似。
本节重点介绍在类 Make 环境中修改链接器命令行的一般方法。
要找到合适的修改位置,首先要分析构建脚本并找到链接规则的定义。以下示例显示了如何定义链接规则:
$(PROJ_EXECUTABLE): $(PRODUCT_OBJ)
$(LXX) $(PRODUCT_OBJ) $(OFLAG_EXE)$(PROJ_EXECUTABLE) $(LXXFLAGS) $(SYSLIB) $(EXECUTABLE_LIB_LXX_OPTS)
|
您可以添加一个特殊变量来表示cpptestcc工具库,或者将覆盖率库附加到链接规则中已使用的变量之一。
添加一个变量来表示 Coverage 工具库
以下示例显示了修改后的规则可能是什么样子:
$(PROJ_EXECUTABLE): $(PRODUCT_OBJ)
$(LXX) $(PRODUCT_OBJ) $(OFLAG_EXE)$(PROJ_EXECUTABLE) $(LXXFLAGS) $(SYSLIB) $(EXECUTABLE_LIB_LXX_OPTS) $(COV_LIB)
|
此外,为添加的变量赋值(COV_LIB)在 Make 调用时(示例 e)或在构建脚本中(示例 f):
例子e
make COV_LIB="<COV_TOOL_INSTALLATION>/runtime/lib/cpptest.a "
|
示例 f
在此选项中,变量可能位于依赖于附加变量的条件内:
ifeq (COV_BUILD,$(BUILD_TYPE))
COV_LIB="<COV_TOOL_INSTALLATION>/runtime/lib/cpptest.a"
endif
|
将覆盖库附加到链接规则中的现有变量
ifeq (COV_BUILD,$(BUILD_TYPE))
LXXFLAGS+="<COV_TOOL_INSTALLATION>/bin/engine/lib/cpptest.a"
endif
|
Parasoft——领先的自动化测试工具,满足绝大多数行业标准
Parasoft是一家专门提供软件测试解决方案的公司,帮助企业打造无缺陷的软件。
从开发到质量检查,Parasoft的技术通过集成静态和运行时分析,单元、功能和API测试,以及服务虚拟化,在不牺牲质量和安全性的情况下加快软件交付,节约交付成本。
强大的报告和分析功能可帮助用户快速查明有风险的代码区域,并了解新代码更改如何影响其软件质量,而突破性的技术将人工智能和机器学习添加到软件测试中,使组织更容易采用和扩展跨开发和测试团队的有效的软件测试实践。
Parasoft针对C/C++、Java、.NET和嵌入式的开发测试都有着30多年的深入研究,很多全国500强企业使用Parasoft的产品实现了软件快速、高质量的交付。
获取Parasoft资料或申请试用可加QQ:2867205852