软件测试


网站首页 | 软件测试论坛 | 软件测试培训 | 软件测试博客 | 软件测试杂志 | 软件测试沙龙 | 软件测试下载 | 软件测试顾问
业界新闻 | 软件测试人才 | 软件测试技术 | 软件测试工具 | 行业软件测试 | 软件测试管理 | 软件质量专栏 | 软件开发专栏
当前位置:首页>>软件测试工具>>Rational>>正文
使用 Rational PureCoverage 诊断 C/C++ 程序覆盖信息和用户环境的集成
文章出处:www-128.ibm.com 作者:高伟斌 发布时间:2005-10-27

 

高伟斌 , IBM 中国软件开发中心软件工程师

2005 年 9 月

Rational PureCoverage 是专门进行自动化运行分析代码覆盖信息的工具,是一个单独的产品,也是 Rational PurifyPlus 家族中的一员。可用于改善应用程序可靠性和性能。在 Linux、UNIX 和 Windows 上都可使用和集成,PureCoverage 支持 C/C++、Java、.NET、Visual Basic 和 HTML。它可以实时诊断出应用程序覆盖的函数或方法(包括调用次数)和代码行信息。

1 概述

Rational PureCoverage 是专门进行自动化运行分析代码覆盖信息的工具,是一个单独的产品,也是 Rational PurifyPlus 家族中的一员。可用于改善应用程序可靠性和性能。在 Linux、UNIX 和 Windows 上都可使用和集成,PureCoverage 支持 C/C++、Java、.NET、Visual Basic 和 HTML。它可以实时诊断出应用程序覆盖的函数或方法(包括调用次数)和代码行信息。

PureCoverage 产品除了有自己专门的用户界面外,也可以和 Rational ClearQuest、Rational Robot、Rational Purify、IBM WebSphere Studio、Microsoft Visual Studio .NET、Microsoft Visual Studio 6 和 Microsoft Visual Basic 等无缝的集成,还可以用强大的命令行接口。所有通过图形界面的 PureCoverage 功能都可用命令行来完成,此外 PureCoverage 还为命令行提供了更多的选项和功能。

本文分别介绍了在 Linux / UNIX 和 Windows 上如何利用 PureCoverage 图形界面和通过命令行工具分析 C/C++ 程序,对分析结果的整理和报告,以及和用户环境的集成达到自动诊断和测试的目的。



2 收集覆盖信息数据

2.1 在 Linux 或 UNIX 下收集覆盖信息数据

Linux 或 UNIX 下用 PureCoverage 要用 purecov 命令 Build 用户程序,如果用户还想通过 PureCoverage 获得调用所有代码行的信息,那么用户程序还需要 Build 成 Debug 版本(如用 -g 选项)。用 purecov 封装 Build 就是在执行 cc 或 gcc, g++ 前加 purecov 即可,例如:




% purecov cc -g admetadata.cpp
PureCoverage 2003a.06.15 Solaris 2 (32-bit) (c) Copyright IBM Corp. 1992, 2005 All rights reserved.
Instrumenting: crti.o crt1.o values-xa.o admetadata.o libCstd.a... 
libC_mtstubs.a. libcx.a... crtn.o Linking

然后运行封装好的可执行程序就可生成此程序所覆盖的数据,例如:




  % ./a.out
****  PureCoverage instrumented a.out (pid 8480 at Mon Aug 31 04:25:00 2005)
  * PureCoverage 2003a.06.15 Solaris 2 (32-bit) (c) Copyright IBM Corp. 1992, 2005 All rights reserved.
  * For contact information type: "purecov -help"
  * Options settings: -purecov \
    -purecov-home=/usr/local/pure/releases/purecov.sol.2003a.06.15 \
    -cache-dir=/usr/local/pure/releases/purecov.sol.2003a.06.15/cache
  * License successfully checked out.
  * Command-line: ./a.out
Hello, World

****  PureCoverage instrumented a.out (pid 8480)  ****
  * Preparing coverage data.. Please note this might take some time..
  * Saving coverage data to /net/ma-homes/homes/gaowb/a.out.pcv.
  * To view results type: purecov -view /net/ma-homes/homes/gaowb/a.out.pcv
  

运行完后 PureCoverage 会保存覆盖信息到一个扩展名为 pcv 的二进制文件,如果此文件已经存在, PureCoverage 缺省会更新合并此文件中的覆盖信息。

Windows 下用 PureCoverage 前先要 Build 好用户程序,如果用户还想通过 PureCoverage 获得调用所有函数和代码行的信息,那么用户程序需要 Build 成 Debug 版本。Build 好用户程序之后就可以用 PureCoverage 图形界面工具或 coverage 命令行工具加参数生成覆盖信息数据,PureCoverage 是一个实时诊断工具,所以在生成覆盖信息数据时它会执行用户程序。

2.2 在 Windows 下用 PureCoverage 图形界面收集覆盖信息数据

启动"Rational PureCoverage"后,在欢迎界面点击"Run"按钮或从文件菜单或工具条选择"Run"开始一个诊断程序,如图1:


图1 PureCoverage 开始运行对话框
图1 PureCoverage 开始运行对话框

在运行过程中 PureCoverage 会首先显示一个包含当前状态程序覆盖情况的概要窗口,如图2:


图2 PureCoverage 概要窗口
图2 PureCoverage 概要窗口

2.3 在 Windows 下用其他开发工具集成调用 PureCoverage 收集和查看覆盖信息数据

为方便用户开发和测试代码,PureCoverage 可以集成到Microsoft Visual Studio 6,Microsoft Visual Studio .NET,Microsoft Visual Basic,Rational Robot,Rational ClearQuest 和 IBM WebSphere Studio 等开发工具。要在这些集成开发环境中使用 PureCoverage 请确保安装 PureCoverage 时正确安装了和这些开发工具的集成。下面的例图3 是用 Microsoft Visual Studio 6 调用 PureCoverage 收集覆盖信息数据:


图3 在 Microsoft Visual Studio 6 中调用 PureCoverage 来收集和查看覆盖信息数据
图3 在 Microsoft Visual Studio 6 中调用 PureCoverage 来收集和查看覆盖信息数据

2.4 在 Windows 下用命令行工具收集覆盖信息数据

命令行工具用法如下:

coverage [] []

例如:

coverage /SaveTextData="C:\pamsglib.txt" pamsglib.exe arg1 arg2 arg3

下面是生成的结果实例:




comment	PureCoverage text data file:
comment	Data fields are separated by tabs.
comment	Data appears in the following sections:
comment	   Comment - These lines plus overall information about the run
comment	   CoverageData - A spreadsheet-compatible table of tab-separated coverage results
comment	   SourceLines - A table for each source file showing line numbers with line coverage
comment	   (SourceLines is only available when at least one module is instrumented in line mode).

comment	Program Name	S:\bugbert\nt_i386\pvtinstall\tests\admetadata.exe
comment	Program Arguments	util miscthrow
comment	Working Directory	S:\bugbert\test\admetadata\harness\util
comment	User Name	gaowb
comment	Program Version	2003.06.03 5352
comment	Host Name	QWIN154
comment	Machine Type	Intel Pentium 4 Model 3 Stepping 4
comment	O/S Version	Windows NT 5.1.2600 Service Pack 2
comment	#Processors	1
comment	Physical Memory (MBytes)	2038
comment	PID	0x1564
comment	Language	C
comment	Start Time	08/31/05 09:00:41
comment	Stop Time	08/31/05 09:00:43
comment	Dataset Size (bytes)	10313728
comment	Elapsed Time (milliseconds)	12767979643649

comment	CaseInsensitive	DeleteModule	Enabled	*MFC*.dll
comment	CaseInsensitive	DeleteModule	Enabled	*MSVC*RT*.dll
comment	CaseInsensitive	DeleteModule	Enabled	*MFC*.dll
comment	CaseInsensitive	DeleteModule	Enabled	*MSVC*RT*.dll
comment	CaseInsensitive	DeleteFile	Enabled	*Unknown Directory*
comment	CaseInsensitive	DeleteFile	Enabled	*Unknown File*
comment	CaseInsensitive	DeleteFile	Enabled	*pure_api.c
comment	CaseInsensitive	DeleteFile	Enabled	*\\crt\\src*
comment	CaseInsensitive	DeleteFile	Enabled	sys*
comment	CaseInsensitive	DeleteFile	Enabled	intel*
comment	CaseInsensitive	DeleteFile	Enabled	*Unknown Directory*
comment	CaseInsensitive	DeleteFile	Enabled	*Unknown File*
comment	CaseInsensitive	DeleteFile	Enabled	*pure_api.c
comment	CaseInsensitive	DeleteFile	Enabled	*\\crt\\src*
comment	CaseInsensitive	DeleteFile	Enabled	sys*
comment	CaseInsensitive	DeleteFile	Enabled	intel*
comment	CaseInsensitive	HideFunction	Disabled	*unknown_function*
comment	CaseInsensitive	DeleteFunction	Enabled	SwitchToFiber
comment	CaseInsensitive	DeleteFunction	Enabled	UnnamedFunction*
comment	CaseInsensitive	DeleteFunction	Enabled	_*
comment	CaseInsensitive	DeleteFunction	Enabled	$E*
comment	CaseInsensitive	HideFunction	Disabled	*unknown_function*
comment	CaseInsensitive	DeleteFunction	Enabled	SwitchToFiber
comment	CaseInsensitive	DeleteFunction	Enabled	UnnamedFunction*
comment	CaseInsensitive	DeleteFunction	Enabled	_*
comment	CaseInsensitive	DeleteFunction	Enabled	$E*

CoverageData	Name	Type	ParentSource	ParentModule	
FunctionsUnused	FunctionsUsed	TotalFunctions	FunctionsPercent	
LinesUnused	LinesUsed	TotalLines	LinesPercent	SourceLine	NumberOfCalls
CoverageData	ThisRun	Run			10137	303	10440	      
2.90	77049	838	77887	      1.08		21931797
CoverageData	S:\bugbert\nt_i386\pvtinstall\tests\admetadata.exe	Module	
		98	49	147	     33.33	243	260	503	     51.69		17283342
CoverageData	S:\bugbert\nt_i386\pvtinstall\clearquest\CQPACKAGELIB.DLL	Module	
		99	7	106	      6.60	192	15	207	      7.25		8478
... ...
CoverageData	(Unknown Directory)	Directory	
S:\bugbert\nt_i386\pvtinstall\tests\admetadata.exe	0	0	0	      
0.00	0	0	0	      0.00		0
CoverageData	\sys_nt\MSVC\common\include	Directory	
S:\bugbert\nt_i386\pvtinstall\tests\admetadata.exe	3	1	4	     
25.00	5	1	6	     16.67		2134067
... ...
CoverageData	\bugbert\src\include\pamessage.h	SourceFile	\bugbert\src\include
S:\bugbert\nt_i386\pvtinstall\tests\admetadata.exe	25	0	25	      
0.00	25	0	25	      0.00		0
CoverageData	\sys_nt\MSVC\common\mfc\include\afx.inl	SourceFile	
\sys_nt\MSVC\common\mfc\include	S:\bugbert\nt_i386\pvtinstall\tests\admetadata.exe	
9	7	16	     43.75	9	7	16	     43.75		6412263
... ...
CoverageData	CGXGridRangeNameImp::GetRangeName(CGXGridCore *,char const*,CGXRange&)	
Function	src\gxcrgnam.cpp	S:\bugbert\nt_i386\pvtinstall\clearquest\OG701CQAS.DLL	
1	0	1	0.0	4	0	4	      0.00	119	0
CoverageData	CGXGridRangeNameImp::DeleteRangeName
(CGXGridCore *,char const*,CObject *,GXCmdType)	Function	
src\gxcrgnam.cpp	S:\bugbert\nt_i386\pvtinstall\clearquest\OG701CQAS.DLL	
1	0	1	0.0	16	0	16	      0.00	126	0
... ...

SourceLines	\bugbert\src\include\pamessage.h	
S:\bugbert\nt_i386\pvtinstall\tests\pamsglib.exe
	LineNumber	LineCoverage
	108.1	0
	... ...
	153.1	1
	... ...
... ...



3 查看和过滤覆盖信息数据

3.1 在 Linux 或 UNIX 下用 PureCoverage 查看器查看和过滤生成的覆盖信息数据

用 purecov -view 命令打开 PureCoverage 查看器可以显示覆盖信息,例如:




% purecov -view a.out.pcv

此命令将打开 PureCoverage 查看器图形窗口,如图4:


图4 PureCoverage 查看器
图4 PureCoverage 查看器

如果在 Build 的时候有 -g 调试选项,就可以点击 Annotated Source 按钮或从 Actions 菜单选 Show annotated source 打开源程序行覆盖信息,如图5:


图5 PureCoverage 源程序查看器
图5 PureCoverage 源程序查看器

PureCoverage 会高亮度显示未调用的行。

PureCoverage 查看器还提供了几个常用的报告脚本工具,可以从菜单 File -> Run script 来选择使用。例如:

pc_annote:生成一个源程序分析结果的文本文件

pc_below:报告低级覆盖信息

pc_build_diff:比较一个程序新旧版本的 PureCoverage 数据

pc_diff:列出新旧覆盖数据改变的文件

pc_covdiff:比较统计输出改变源代码后的覆盖信息

pc_email:给最近编辑覆盖数据的人发送邮件报告

pc_select:识别改变源代码测试的子集

pc_ssheet:生成一个数据表格式的概要

pc_summary:生成一个制表格式的全部概要

3.2 在 Linux 或 UNIX 下用导出的文本文件查看和过滤生成的覆盖信息数据

用 purecov -export 命令可以将生成的覆盖信息数据导出到一个文本文件,例如:

% purecov -export=purecov.txt a.out.pcv

下面是导出结果的结果实例:




###############################################################################
# This is a PureCoverage export file, created 23-Aug-2005 08:39:12 AM         #
# Coverage data type: adjusted.                                               #
#                                                                             #
# Summary of keys and field meanings:                                         #
#                                                                             #
# to unused-blocks blocks unused-lines lines unused-funcs funcs files dirs    #
# di name unused-blocks blocks unused-lines lines unused-funcs funcs files    #
# fi name unused-blocks blocks unused-lines lines unused-funcs funcs sessions #
# fu name unused-blocks blocks unused-lines lines calls                       #
# li line_no hits                                                             #
# bl line_no hits                                                             #
# efu name                                                                    #
# efi name                                                                    #
# edi name                                                                    #
#                                                                             #
# In all of these entries, the character separating the values is a TAB, not  #
# a space.                                                                    #
#                                                                             #
# Values for hits, calls, and sessions stop accumulating once they reach      #
# 10000, so a value of 10000 should be taken as 10000 or greater.             #
#                                                                             #
# 'to'  -- Total coverage summary.                                            #
# 'di'  -- Coverage summary for one directory, followed by the files in the   #
#          directory.  Repeated for each directory.                           #
# 'edi' -- End of information for named directory.                            #
# 'fi'  -- Coverage summary for one file, followed by the functions in the    #
#          file.  Repeated for each file within a directory.                  #
# 'efi' -- End of information for named file.                                 #
# 'fu'  -- Coverage summary for one function, followed by line and block      #
#          coverage information for the function.  Repeated for each function #
#          within the file.                                                   #
# 'efu' -- End of information for named function.                             #
# 'li'  -- Use count for the indicated line.  Repeated for each line in the   #
#          function.  If coverage adjustments are NOT applied, then the       #
#          hits figure is the true hits figure for the line.  If coverage     #
#          adjustments ARE applied, then inspected and tested lines will      #
#          indicate INSP or TEST as appropriate, while other used and unused  #
#          lines will indicate their counts.  Deadcode lines do not appear    #
#          in export format when adjustments are applied.                     #
# 'bl'  -- Use count for the basic block.  Repeated for each block in the     #
#          function.  Note that a single line may contain multiple blocks,    #
#          and that a single block may span multiple lines.                   #
###############################################################################
to	3	9	3	8	1	3	1	1
di	/net/ma-homes/homes/gaowb/	3	9	3	8	1	3	1
fi	admetadata.cpp	3	9	3	8	1	3	1
fu	void display_message(char*)	2	2	2	2	0
bl	19	0
bl	20	0
li	19	0
li	20	0
efu	void display_message(char*)
fu	main	1	5	1	4	1
bl	6	1
bl	7	1
bl	9	0
bl	10	1
bl	10	1
li	6	1
li	7	1
li	9	0
li	10	1
efu	main
fu	void display_hello_world()	0	2	0	2	1
bl	14	1
bl	15	1
li	14	1
li	15	1
efu	void display_hello_world()
efi	admetadata.cpp
edi	/net/ma-homes/homes/gaowb/

在 PureCoverage 导出的结果中,# 开头的行表示注释,包含文件描述、数据类型和结构介绍等。

to 开头的表示覆盖结果统计信息,各字段分别是未使用块、总块数、未执行行数、总行数、未调用函数或方法的个数、总函数或方法的个数、文件数和目录数。

di 开头的表示一个目录总的覆盖信息,各字段分别是目录名、未使用块、总块数、未执行行数、总行数、未调用函数或方法的个数、总函数或方法的个数和文件数。

fi 开头的表示一个文件总的覆盖信息,各字段分别是文件名、未使用块、总块数、未执行行数、总行数、未调用函数或方法的个数、总函数或方法的个数和会话数。

fu 开头的表示一个函数或方法的覆盖信息,各字段分别是函数或方法名、未使用块、总块数、未执行行数、总行数和被调用的次数。

li 开头的表示源文件中行的覆盖信息,各字段分别是行号和执行的次数。

bi 开头的表示基本块的覆盖信息,各字段分别是行号和执行的次数。

efu、efi 和 edi 分别表示该函数或方法、文件和目录信息结束。

如果用户觉得 PureCoverage 导出的结果信息太多,可以根据自己需要再过滤,如只想得到调用过的函数或方法,可以用下面的 Perl 语句:




if ( @ARGV != 1 ) {  # Specify file name as command line argument
    die "Usage: $0 \n";
}

open iFH, $ARGV[0] or die "Can not open PureCoverage exported file $ARGV[0]: $!";

while (  ) {
    if ( /^fu\t.*\t0$/ ) {  # Skip not calls function(s)
        next;
    } elsif ( /^fu\t(.*)\t\d+\t\d+\t\d+\t\d+\t\d+$/ ) {  # Get called function(s)
        print "$1\n";
    }
}

3.3 在 Windows 下用 PureCoverage 图形界面查看和过滤数据

用 PureCoverage 运行完用户程序以后,选择 Coverage 浏览器窗口可以分等级按源文件显示覆盖信息数据,如图6:


图6 PureCoverage 浏览器窗口
图6 PureCoverage 浏览器窗口

选择 Coverage 函数列表窗口可以显示整个程序中函数或方法的覆盖信息数据,如图7:


图7 PureCoverage 函数列表窗口
图7 PureCoverage 函数列表窗口

缺省 PureCoverage 会过滤掉它认为一般用户不关心的数据,如操作系统模块,但用户也可以根据自己的实际需要定制过滤器,PureCoverage 提供了一个图形化的过滤管理器。从 View 菜单中选择 Filter Manager 或点击 Filter Manager 工具条打开过滤管理器窗口,如图8:


图8 PureCoverage 过滤管理器
图8 PureCoverage 过滤管理器

PureCoverage 可以在源代码中一行一行的识别覆盖情况,双击一个函数或方法,就会打开源程序查看器窗口,如图9:


图9 PureCoverage 源程序查看器
图9 PureCoverage 源程序查看器

缺省 PureCoverage 未测到的行用红色表示,已测到的行用蓝色表示,固定行用黑色表示,在多块行中部分测到用粉色表示,总报告用绿色表示。用户可根据自己的喜好定制颜色。

3.4 在 Windows 下查看和过滤用命令行工具生成的覆盖信息数据

在 PureCoverage 命令行工具生成的结果中,comment 开头的行表示注释,包含文件结构简单介绍、用户程序信息、工作路径、PureCoverage 版本信息、运行机器信息、运行时间统计、数据集大小、过滤器信息等。

CoverageData 开头的表示覆盖结果信息,CoverageData 第一行说明各字段含义,用 Tab 字符隔开;第二行是总的统计报告,包括未使用和使用的函数或方法、总函数或方法、使用函数或方法的百分比、未使用和使用的代码行数、总行数、使用行数百分比和总调用次数等;从第三行开始是具体收集到的模块、目录、源文件和函数或方法等信息,每行都有名称、类型、父源代码、父模块、未使用和使用的函数或方法、总函数或方法、使用函数或方法的百分比、未使用和使用的代码行数、总行数、使用行数百分比、源代码行号和总调用次数等。

SourceLines 开头的表示源程序中行号的覆盖信息。

如果用户觉得 PureCoverage 生成的结果信息太多,可以根据自己需要再过滤,如只想得到调用过的函数或方法,可以用下面的 Perl 语句:




if ( @ARGV != 1 ) {  # Specify file name as command line argument
    die "Usage: $0 \n";
}

open iFH, $ARGV[0] or die "Can not open PureCoverage text data file $ARGV[0]: $!";

while (  ) {
    if ( /^CoverageData\t.*\t0$/ ) {  # Skip not calls function(s)
        next;
    } elsif ( /^CoverageData\t(.*)\tFunction\t.*/ ) {  # Get called function(s)
        print "$1\n";
    }
}



4 集成

4.1 在 Linux 或 UNIX 下和用户环境的集成

只需要将 "purecov " 添加到编译器 cc、gcc 或 g++ 命令的前面即可。或增加一个 Build 规则在 Makefile 中,例如:




pc_relink:
	admetadata.o: admetadata.cpp
		purecov cc admetadata.cpp

如果用户环境中可执行程序被调用多次或指定程序不同的参数,PureCoverage 会自动合并生成的结果。

再用"purecov -export"命令将 .pcv 文件批量转换成覆盖信息数据文本文件,也可再进一步过滤得出恰当的结果。

4.2 在 Windows 下和用户环境的集成

只需要将 "coverage /SaveTextData " 添加到可执行程序的前面即可。如果用户环境中可执行程序被调用多次或指定程序不同的参数,那么用户可以用 /SaveMergeTextData 代替 /SaveTextData 选项来合并生成的结果。

可再进一步过滤得出恰当的结果。



注释

1) 本文所述的 Linux 或 UNIX 是指只要支持任何一个标准 cc、gcc 或 g++ 编译器的任何 Linux 或 UNIX。

2) 查看所有命令行选项可用 purecov -help(Linux/UNIX)或 coverage /help(Windows)命令。

3) PureCoverage 缺省监听级别是最详细的代码行级,也可以用-purecov-granularity=function 或者/CollectionGranularity=function 定制到函数或方法级或其他级别以收集到更精简或符合用户需要的数据。

4) 如果用户不能获得想要的函数或代码行,请确认程序是 Debug 版,即 Linux/UNIX 下 Build 的时候用了 -g 编译选项,如果用户用的是 MFC,请确认有 /ZI 编译选项。

5) 如果用户觉得缺省的 filter 不太合适,可以用 /FilterFiles 选项自己定制 filter。

6) PureCoverage 有自动调节行覆盖功能,例如在某些情况下不想统计某些行,用此功能可能更满足客户的需求。

7) Windows 下 coverage 是在 Rational/common 目录下,如果不能执行请检查此目录是否在 PATH 环境变量里。

8) 如果想在 Windows 下查看 Linux 或 UNIX 上生成的覆盖信息数据,可用 -view-file-format 选项生成 Windows PureCoverage 可识别的 .cfy 覆盖信息数据文件,但要注意 Linux 或 UNIX 下不会合并 .cfy 文件。



参考资料



关于作者

高伟斌,IBM 中国软件开发中心软件工程师。参与过 IBM 软件开发和 WebSphere、Java 和 Rational 等的软件测试,熟悉Globalization、数据库等技术,最近主要从事 Rational 产品的 Globalization 开发。感谢杨晓斌、吴嘉、蔡林、田明君等同事和家人的支持。


站内搜索
相关文章
◎Rational XDE tester使用指南
◎Rational 完成自动化功能测试
◎定制ClearQuest以通过所有者、角色或组来分隔记录
热门文章
◎IBM Rational Robot
◎Rational 完成自动化功能测试
◎Rational系列产品大概的介绍
◎Robot压力测试实例
◎Rational ClearQuest介绍
◎用Rational Functional Tester创建随需应变的自动测试脚本
◎robot函数实例讲解(一)
◎Robot手工编写GUI脚本如何获取对象识别方法和属性
◎关于Rational与软件质量保证
◎IBM Rational 助您轻松完成自动化功能测试
◎IBM Rational XDE tester使用指南
◎robot函数实例讲解(二)
◎rational对象脚本命令
◎GUI录制回放测试方法缺点
◎IBM Rational ClearCase 视图全攻略
◎使用IBM Rational的测试理念成功打造测试团队
◎数据池(DATAPOOL)专题
◎详解 Rational ClearCase中的lost+found目录
◎IBM Rational助您轻松完成基于J2EE的Web应用系统的性能测试和性能优化
◎Base ClearCase与ClearQuest的集成
◎理解Rational分析三层结构观点
◎浅谈ClearQuest 2002.05 建库指南
◎使用IBM Rational PurifyPlus测试J2EE应用程序
◎Rational中DataPool的介绍与实际应用
◎使用Rational的测试理念
◎Robot GUI脚本操作SQL SERVER数据库
◎ClearCase迁移中的一些经验
◎Rational中DataPool的介绍与实际应用-续(2)
◎Rational Robot 常用语句
◎Rational robot 识别对象的方法
◎使用Rational Robot测试含有数据关联的Web应用
◎Rational中DataPool的介绍与实际应用-续(1)
◎定制ClearQuest以通过所有者、角色或组来分隔记录
◎Rational XDE tester使用指南
◎浅谈RFT
◎解决Grid自动化测试的思路
◎Robot如何测试帮助c++程序员识别自定义或第三方控件
◎Rational Robot项目移植
◎用Robot写Java代理(一)
◎Rational 识别 Delphi TDBGrid的解决方法
◎如何在Robot脚本中使用Object Data
◎用Robot写Java代理(二)
◎在VU脚本中使用HTTP连接
◎使用Robot连接SQL的例子
◎使用Robot输入清单
◎Robot进行数据库的并发测试
◎使用自定义代码对数据池进行随机访问

Google提供的广告