彩票走势图

logo Parasoft C/C++ test 自动化用户指南
文档彩票走势图>>Parasoft C/C++ test 自动化用户指南>>Parasoft C/C++ test 自动化用户指南(二十):检测和构建检测源代码

Parasoft C/C++ test 自动化用户指南(二十):检测和构建检测源代码


Parasoft C/C++test针对C/C++开发的专业白盒自动化测试方案,能有效提高软件开发效率和代码质量。C++test 可以进行静态分析,全面代码审查,运行时错误检测,并在单元测试和组件测试中集成覆盖率分析。

Parasoft C/C++test申请免费试用


Parasoft C/C++test 可以从单元测试、功能测试以及其他类型的应用程序执行中收集覆盖率信息。C/C++test 支持一系列覆盖指标,可用于本机和跨应用程序开发。本文介绍其中的第一个阶段——检测和构建检测源代码。

在此阶段执行三个步骤:

  1. 源代码被检测。
  2. 检测的源代码被编译为目标文件。
  3. 所有检测和非检测对象都链接到代码覆盖工具库,以及形成最终可测试二进制工件所需的任何其他库。

这些步骤通常在构建过程中执行,并且要求覆盖工具与用户构建系统集成。cpptestcc工具检测源代码并将其编译为目标文件。cpptestcc被设计为用作汇编命令行编译器前缀。

原始编译命令行: 

cc -I app/includes -D defines -c source.cpp

覆盖模式编译命令行:  

cpptestcc -compiler gcc_3_4 -line-coverage -workspace /home/test/proj/cov -- cc -I app/includes -D defines -c source.cpp

当覆盖模式编译命令行执行时,cpptestcc执行以下操作:

  • 编译命令行分析提取源文件信息
  • 对所有检测到的源文件进行解析和检测以获取覆盖率指标
  • 使用-workspace开关在指定位置重建插装文件还存储了有关报告生成期间使用的代码结构的附加信息
  • 编译命令行修改,原始源文件替换为插装版本
  • 执行编译命令行,在与原始命令行相同的位置创建对象文件

您可以将[INSTALL_DIR]/bin目录添加到 PATH 变量中,这样在指定cpptestcc命令时就不必使用完整路径 本文档中的所有示例均假设已完成此操作。

以下模式描述了覆盖检测的语法:

cpptestcc -compiler <compiler configuration> <coverage metric specification> -workspace <workspace directory> -- <compilation command line>
  • <compiler configuration>指支持的编译器配置,例如 gcc_3_4;有关支持的编译器 列表,请参阅支持的编译器。
  • <coverage metric specification>“覆盖”指的是支持的覆盖度量,例如,线路覆盖。有关支持的覆盖率指标列表,请参阅cpptestcc 的命令行参考
  • cpptestcc命令行从与编译器命令行分离--隔板。

链接检测代码

必须修改原始链接器命令以包含代码覆盖率检测所需的附加库。以下示例显示了这通常是如何完成的:

原始编译命令行:  

lxx -L app/lib app/source.o -lsomelib -o app.exe

覆盖模式编译命令行: 

lxx -L app/lib app/source.o somelib.lib <coverage tool>/runtime/lib/cpptest.lib -o app.exe

执行检测代码 

执行环境的细节取决于应用程序的细节,但覆盖工具对执行施加了以下有限的依赖:

  • 如果覆盖工具库被链接为共享(动态加载)库,那么您必须确保在启动检测的应用程序时可以加载该库。在 Windows 上,这通常需要将[INSTALL_DIR]/bin目录添加到 PATH 环境变量中。在 Linux 系统上,添加[INSTALL_DIR]/runtime/lib到 LD_LIBRARY_PATH 变量。
  • 如果覆盖结果传输信道被修改,则必须满足由修改产生的所有要求。例如,如果结果是通过 TCP/IP 套接字或 rs232 发送的,则需要在检测的应用程序执行之前启动适当的侦听代理。

在检测的应用程序完成执行后,收集的结果必须存储在将用于生成报告的文件中。

生成报告

最终覆盖率报告由两种类型的信息生成:

  • cpptestcc构建过程中生成的代码结构信息(存储在workspace中)
  • 通过检测代码执行获得的覆盖结果

覆盖率报告可以 HTML 格式生成或发送到 DTP 服务器。以下示例显示了用于生成报告的命令:

cpptestcli -config builtin://Coverage -input cpptest_results.clog -workspace /home/test/proj/cov

为了在 DTP 中正确合并覆盖数据,您必须在命令行或 .properties 设置文件中指定一个或多个覆盖图像标签。覆盖图像会自动发送到连接的 DTP 服务器,在那里它可以与过滤器相关联。

您可以指定一组最多三个标签,这些标签可用于在 DTP 服务器中使用以下report.coverage.images属性创建覆盖图像

report.coverage.images=[tag1; tag2; tag3]

在报告中心管理页面(管理> 项目> 过滤器> [单击过滤器]中的 DTP 中关联覆盖图像

您还可以使用该report.coverage.limit属性指定较低的覆盖阈值:

report.coverage.limit=[value]

低于此值的覆盖率结果在报告中突出显示。默认值为40。 

使用示例

在此示例中,以下代码来自名为 的 c++ 源文件main.c: 

#include <iostream>
 
int main(int argc, char ** argv) {
   if (argc > 1) {
      std::cout << "Thank you for arguments" << std::endl;
   } else {
      std::cout << "Provide some arguments please !" << std::endl;
   }
   return 0;
}

正常的文件编译命令是gcc: 

g++ -c main.c -o main.o

要检测此文件并将检测后的代码编译为目标文件,编译命令行必须包含cpptestcc命令前缀: 

cpptestcc -compiler gcc_3_4 -line-coverage -workspace /home/test/proj/cov -- g++ -c main.c -o main.o

作为 cpptestcc 命令调用的结果,创建了两个工件:

  • 带有检测代码的对象
  • 代码结构信息存储在 -workspace选项指定的目录中

一旦源文件被检测并编译成目标文件,它就可以链接起来形成最终的可执行文件。通常这个简单的例子将与以下命令链接:

g++ main.o -o app.exe

覆盖率检测需要额外的库,因此链接命令行需要如下所示:

g++ main.o <coverage tool install dir>/runtime/lib/cpptest.a -o app.exe

在此示例中,使用了覆盖库的静态版本。还提供了动态/共享版本以及源代码,用于构建自定义版本。

一旦应用程序被链接,就可以执行它来收集有关代码覆盖率的信息。运行以下命令:

./app.exe

应用程序将cpptest_results.clog在当前工作目录中输出默认命名的覆盖率日志文件

最后,使用以下命令生成报告:  

cpptestcli -config builtin://Coverage -workspace /home/test/proj/cov -input cpptest_results.clog -report report_dir

将创建一个报告目录,其中包含带有代码覆盖率信息的 HTML 报告。


Parasoft——领先的自动化测试工具,满足绝大多数行业标准

Parasoft是一家专门提供软件测试解决方案的公司,帮助企业打造无缺陷的软件。

从开发到质量检查,Parasoft的技术通过集成静态和运行时分析,单元、功能和API测试,以及服务虚拟化,在不牺牲质量和安全性的情况下加快软件交付,节约交付成本。

强大的报告和分析功能可帮助用户快速查明有风险的代码区域,并了解新代码更改如何影响其软件质量,而突破性的技术将人工智能和机器学习添加到软件测试中,使组织更容易采用和扩展跨开发和测试团队的有效的软件测试实践。

Parasoft针对C/C++、Java、.NET和嵌入式的开发测试都有着30多年的深入研究,很多全国500强企业使用Parasoft的产品实现了软件快速、高质量的交付。

    获取Parasoft资料或申请试用可加QQ:2867205852

扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP