翻译|使用教程|编辑:李显亮|2021-07-28 10:29:08.227|阅读 236 次
概述:C/C++test 运行时库是一组由源代码检测使用的辅助函数和服务,用于在应用程序运行时发出覆盖率信息。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
Parasoft C/C++test针对C/C++开发的专业白盒自动化测试方案,能有效提高软件开发效率和代码质量。C++test 可以进行静态分析,全面代码审查,运行时错误检测,并在单元测试和组件测试中集成覆盖率分析。
Parasoft C/C++test 运行时库是一组由源代码检测使用的辅助函数和服务,用于在应用程序运行时发出覆盖率信息。没有库就无法链接已检测的应用程序。根据测试的项目类型,运行时库可以通过多种方式链接到最终的可测试二进制文件。
除了为插装代码提供基本服务外,该库还用于使代码覆盖解决方案适应特定的开发环境,例如支持测试嵌入式设备和开发主机之间的覆盖结果的非标准传输。
C/C++test 附带运行时库的预构建版本,它们适合在安装 CCE 的同一平台上使用。在大多数情况下,从本地开发的应用程序(即 MS Windows 或 Linux x86 和 x86-64)收集代码覆盖率信息可以使用运行时库的预构建版本。
所有开发跨平台应用程序的用户都需要使用合适的交叉编译器和可能的链接器准备运行时库的自定义构建。代码覆盖运行时库的源代码随 CCE 一起提供。
准备运行时库自定义构建的过程通常仅限于运行时库源代码的编译。在某些情况下,您可能需要安装一些源代码片段以使代码覆盖率适应特定的开发平台。此过程将在以下部分中描述。
C/C++test 包含以下二进制文件:
Windows(x86 和 x86-64)
文件
|
描述
|
---|---|
<INSTALL_DIR>/runtime/lib/cpptest.a | 与 Cygwin GNU GCC 编译器一起使用的 32 位静态存档。要添加到链接命令行 |
<INSTALL_DIR>/runtime/lib/cpptest.lib | 与 Microsoft CL 编译器一起使用的 32 位导入库。要添加到链接命令行 |
<INSTALL_DIR>/runtime/lib/cpptes64.lib | 与 Microsoft CL 编译器一起使用的 64 位导入库。要添加到链接命令行 |
<INSTALL_DIR>/bin/cpptest.dll | 与 Microsoft CL 编译器一起使用的 32 位动态链接库。[INSTALL_DIR]/bin应该添加到 PATH 环境变量中 |
<INSTALL_DIR>/bin/cpptest64.dll | 与 Microsoft CL 编译器一起使用的 64 位动态链接库。[INSTALL_DIR]/bin应该添加到 PATH 环境变量中 |
Linux(x86 和 x86-64)
文件
|
描述
|
---|---|
<INSTALL_DIR>/runtime/lib/libcpptest.so | 32 位共享库。要添加链接命令行。[INSTALL_DIR]/runtime/lib应该添加到 LD_LIBRARY_PATH |
<INSTALL_DIR>/runtime/lib/libcpptest64.so | 64 位共享库。要添加链接命令行。[INSTALL_DIR]/runtime/lib应该添加到 LD_LIBRARY_PATH |
如果您需要以未作为开箱即用解决方案提供的形式使用运行时库,请准备与特定开发环境要求相匹配的运行时库的自定义构建。有关更多详细信息,请参阅 自定义运行时库。
将 C/C++test 运行时库与经过测试的应用程序链接过程集成通常需要修改链接器命令行,在某些情况下,还需要修改执行环境。本节介绍如何在使用 C/C++test 附带的预构建版本时修改链接过程。
Windows Cygwin GNU GCC 编译器的静态库:
MS CL 编译器的动态链接库:
修改构建脚本,以便在链接器命令行中的某处指定覆盖运行时库——最好在所有目标文件之后。例如:
$ (LXX) $ (PRODUCT_OBJ) $ (OFLAG_EXE) $ (PROJ_EXECUTABLE) $ (LXXFLAGS) $ (SYSLIB) $ (EXECUTABLE_LIB_LXX_OPTS) <安装> /runtime/lib/cpptest.lib
确保将该[INSTALL_DIR]/bin目录添加到您的 PATH 环境变量中,以便在启动测试程序时可以找到该库。您还可以考虑将文件复制cpptest.dll(或cpptest64.dll)到与可执行文件相同的目录中,或者复制到在测试应用程序启动期间扫描动态链接库的其他位置。
Linux GNU GCC 编译器的共享库:
修改构建脚本,以便在链接器命令行中的某处指定覆盖运行时库——最好在所有目标文件之后。例如:
$(LXX)$(PRODUCT_OBJ)$(OFLAG_EXE)$(PROJ_EXECUTABLE)$(LXXFLAGS)$(SYSLIB)$(EXECUTABLE_LIB_LXX_OPTS)-L<INSTALL>/runtime/lib-lcpptest
请注意添加了 -L [INSTALL_DIR]/runtime/lib和-lcpptest选项。
由于以下情况,您可能需要自定义运行时库:
运行时库源代码随[INSTALL_DIR]/runtime目录中的 C/C++test 一起提供。下表描述了结构:
成分
|
描述
|
---|---|
include |
包含库包含文件的目录。 |
src |
包含库源代码的目录。 |
Makefile | 为构建运行时库提供的基本 Makefile。 |
target | 包含一组 Makefile 的目录包含带有编译器特定选项的文件,用于为大多数流行的开发环境准备运行时库构建。 |
channel | 包含一组 Makefile 的目录包含具有支持的通信通道配置的文件。 |
运行时库支持通过各种通信渠道收集数据。使用的通信渠道取决于开发环境。在大多数情况下,将结果存储在一个或多个文件中是合适的,但在其他 TCP/IP 套接字或 RS232 传输中可能需要。通过在cpptest.c库源文件编译期间将值设置为专用宏,可以启用特定的通信通道。将 -D<MACRO> 添加到编译命令行以设置值。下表提供了通信通道控制宏的完整列表:
渠道
|
描述
|
---|---|
CPPTEST_NULL_COMMUNICATION | 空执行。如果启用,则不会发送任何结果。适用于初始测试构建和调试。 |
CPPTEST_FILE_COMMUNICATION |
基于文件的实现。使用 ANSI C 文件 I/O 接口。如果启用,结果将写入本地驱动器文件。 还提供了以下附加配置宏: CPPTEST_LOG_FILE_NAME:结果文件的名称;默认cpptest_results.clog CPPTEST_LOG_FILE_APPEND:创建新的结果文件或附加到现有的。默认值为1 -> append,替代0 -> create new |
CPPTEST_SPLIT_FILE_COMMUNICATION |
基于文件的实现。使用 ANSI C 文件 I/O 接口。如果启用,结果将写入一系列本地驱动器文件。 您可以使用以下宏配置此通道: CPPTEST_LOG_FILE_NAME: 系列中第一个结果文件的名称;默认为cpptest_results.clog. 其他文件将依次命名,例如cpptest_results.clog.0001. 要将系列传递给cpptestcli,请确保系列中的所有文件都位于同一目录中,并且仅提供第一个文件的名称作为输入。当您运行该cpptestcli命令时,其他文件将与系列中的第一个文件合并并从目录中删除。 CPPTEST_MAX_ALLOWED_NUMBER_OF_BYTES_PER_FILE: 指定系列中一个文件的最大大小;默认 2000000000 字节 (2 GB)。 |
CPPTEST_UNIX_SOCKET_COMMUNICATION |
基于 TCP/IP 套接字的实现。使用 POSIX API。如果启用,结果将发送到指定的 TCP/IP 端口。提供了以下附加配置宏: CPPTEST_LOG_SOCKET_HOST: 指定主机 IP 地址字符串 CPPTEST_LOG_SOCKET_PORT: 指定端口号 CPPTEST_GETHOSTBYNAME_ENABLED: 如果设置为1,可以通过域名指定主机(需要gethostbyname函数存在) |
CPPTEST_WIN_SOCKET_COMMUNICATION | 如上所述,使用了 MS Windows API。 |
CPPTEST_UNIX_SOCKET_UDP_COMMUNICATION | 如上,基于UDP的实现。 |
CPPTEST_RS232_UNIX_COMMUNICATION |
基于 RS232 的实现。使用 POSIX API。如果启用,则结果将通过指定的 RS232 系统设备发送。提供了以下附加配置宏: CPPTEST_RS232_DEVICE_NAME: 系统设备名称 CPPTEST_RS232_BAUD_RATE: 传输波特率 CPPTEST_RS232_BYTE_SIZE: 字节大小 CPPTEST_RS232_PARITY: 奇偶校验控制 CPPTEST_RS232_STOP_BIT: 停止位使用 CPPTEST_RS232_TIMEOUT: 传输超时值 |
CPPTEST_RS232_WIN_COMMUNICATION | 如上。使用 MS Windows API。 |
CPPTEST_RS232_STM32F103ZE_COMMUNICATION | 基于 STM32F103x USART 的实现。使用STM Cortex库接口(ST/STM32F10x/stm32f10x.h需要头文件) |
CPPTEST_HEW_SIMIO_COMMUNICATION | 瑞萨 HEW 模拟器特定实现。 |
CPPTEST_LAUTERBACH_FDX_COMMUNICATION | 基于劳特巴赫 TRACE32 的实现(使用 FDX) |
CPPTEST_ITM_COMMUNICATION | 基于 ARM CoreSight ITM 单元的通信。需要 CMSIS 头文件。 |
CPPTEST_CUSTOM_COMMUNICATION | 为自定义实现启用空模板 |
如果使用提供的 Makefile 构建运行时库,则[INSTALL_DIR]/runtime/channel可以使用目录中提供的 make 配置文件之一。有关详细信息,请参阅 与基于 Make 的构建系统集成。
如果没有任何通信通道实现适合您的开发环境,则可以提供自定义实现。以下说明描述了如何自定义运行时库,以便它使用通信通道的自定义实现:
找到第 1.13 节“自定义通信实现。
自定义通信实现部分包含四种不同方法的空模板:
功能
|
描述
|
---|---|
void cpptestInitializeStream(void) | 该函数负责初始化通信通道,例如创建并连接到套接字或初始化 UART 设备。 |
void cpptestFinalizeStream(void) | 该函数负责最终确定通信通道。例如,它可能负责关闭 TCP/IP 套接字。 |
int cpptestSendData(const char *data, unsigned size) |
该函数负责从数据缓冲区发送大小字节。 |
void cpptestFlushData(void) | 该函数负责刷新数据。它的含义取决于特定的传输类型。它在某些实现中可能具有有限的应用。在这种情况下,它应该留空。 |
运行时库包含对多线程应用程序的支持。支持 POSIX、MS Windows 和 VxWorks API。您可以通过-D<MACRO>在编译期间添加到编译命令行来启用对特定多线程 API 的支持cpptest.c。下表描述了多线程 API 支持控制宏的完整列表:
宏
|
描述
|
---|---|
CPPTEST_NO_THREADS | 空执行。Coverage 运行时不准备与多线程应用程序一起使用 |
CPPTEST_WINDOWS_THREADS | MS Windows 多线程 API 实现 |
CPPTEST_UNIX_THREADS | POSIX 多线程 API 实现 |
CPPTEST_VXWORKS_THREADS | VxWorks 多线程 API 实现 |
如果您将 C/C++test 与不使用受支持的多线程 API 的多线程应用程序一起使用,您可以自定义运行时库以使用您的多线程 API。需要以下步骤:
找到第 2.5 节“自定义多线程实现”
自定义多线程实现部分包含两种不同方法的空模板:
功能
|
描述
|
---|---|
static int cpptestLock(void) | 此函数可确保覆盖工具运行时库内的同步操作。如果一个线程锁定了对运行时库服务的访问,则意味着正在进行原子操作,并且没有其他线程可以使用运行时库服务。一旦锁定被释放,其他线程就可以使用运行时库服务 |
static int cpptestUnlock(void) | 释放对运行时库服务的锁定。 |
提供与您的环境要求相匹配的方法的实现。
编译cpptest.c与添加到编译命令行下面的宏:
"-DCPPTEST_CUSTOM_THREADS"
如果生成的目标文件不足,您可以进一步处理该文件以满足您的需要(例如,创建共享库)。
C/C++test 附带一个简单的 Makefile(请参阅库源代码结构),它简化了构建运行时库的过程。但是,在许多情况下,不需要提供的 make 文件,因为源代码已经针对构建过程进行了优化。始终需要的唯一步骤是编译主cpptest.c源文件。对生成的目标文件的任何额外处理将取决于特定的开发环境及其要求,例如提供运行时库作为共享库。
如果需要修改编译标志(例如,添加特定的特定交叉编译器或定义以强制执行运行时库重新配置),请在目标子目录中提供一个新的 make 配置文件。为方便起见,复制现有的目标配置文件之一并修改其内容以满足您的需要。
调用以下命令行以创建build包含单个对象的子目录,该对象cpptest.<OBJ_EXT>可用于与检测的应用程序链接。
make TARGET_CFG=<目标配置文件名> CHANNEL_FILE=<通道配置文件名>
您的命令行可能类似于以下内容:
make TARGET_CFG=gcc-static.mk CHANNEL_FILE=channel/unix-socket.mk
或者,您可以提供频道类型:
make TARGET_CFG=gcc-static.mk CHANNEL_TYPE=unix-socket
要设置覆盖工具运行时库的用户构建,请执行以下步骤:
Parasoft是一家专门提供软件测试解决方案的公司,帮助企业打造无缺陷的软件。
从开发到质量检查,Parasoft的技术通过集成静态和运行时分析,单元、功能和API测试,以及服务虚拟化,在不牺牲质量和安全性的情况下加快软件交付,节约交付成本。
强大的报告和分析功能可帮助用户快速查明有风险的代码区域,并了解新代码更改如何影响其软件质量,而突破性的技术将人工智能和机器学习添加到软件测试中,使组织更容易采用和扩展跨开发和测试团队的有效的软件测试实践。
Parasoft针对C/C++、Java、.NET和嵌入式的开发测试都有着30多年的深入研究,很多全国500强企业使用Parasoft的产品实现了软件快速、高质量的交付。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn