翻譯|使用教程|編輯:李顯亮|2021-07-28 10:29:08.227|閱讀 328 次
概述: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@fc6vip.cn