使用 IBM Rational PurifyPlus
上一篇 / 下一篇 2008-04-07 13:25:38 / 个人分类:IBM Rational
IBM® Rational® PurifyPlus™是一套测试工具集合,拥有三个工具-- PureCoverage、 Quantifyis 和 Purify,您可以用这套工具完成对代码覆盖率、性能和内存分析的运行时分析。它可以加强自动化测试工作,改善产品性能和质量。51Testing软件测试网o^n:A:b(Z$e[(E
引言51Testing软件测试网 u&G:PC1[{
51Testing软件测试网I'n@S7W!VT随着质量工程变得要求越来越高,能够使用更新的工具和方法对任何软件进行测试已经成为当务之急。
!S)MU7j:vD051Testing软件测试网"P {~;V;Pi对很多团队来说,测试自动化已经成为他们的测试工作的核心。然而,即使在存在稳定的自动化测试时,您仍然需要对它进行维护:增加新的测试、修改现有的测试以及调整测试脚本以跟上产品的变更。但是对于寻找如何能够得到更好的回报来说,所有这些努力是值得的。
_CBz+K0)^ gCo4bq}0软件系统的规模和复杂性在持续增加,测试自动化也有相同的趋势。测试装备也要变得更大,能够进行更多的维护工作和更密切的监视工作,以便能够进行快速、可靠和更精确的测试。为了做到这些,您需要正确的工具。51Testing软件测试网R2H&F&upY
g9X7c!{T4Q1O0IBM Rational PurifyPlus 是三种工具:IBM Rational PureCoverage®、IBM Rational Quantify®和 IBM Rational Purify®的集合。这些产品非常适合测试人员(和开发人员)在软件测试期间使用。
DMb#]\1G051Testing软件测试网,H$qM'Rn)Q@ g6J;d'a不只是测试自动化51Testing软件测试网:k$O Z*sDbGOD
{n\N a9UN0只完成测试自动化工作是不能下产品可以发布的结论的,您仍然需要在测试装备的设计、评审和维护方面进行合适的投资,否则您的客户仍然会找到那些漏到产品中的难以发现的缺陷。
;tlfi+h051Testing软件测试网UH1u*eY$ksEW当给您(作为测试人员或者质量管理人员)安排一个测试任务时,您最好问自己以下的问题,以便更好地理解测试任务。51Testing软件测试网+o.a"K ]2Sqv.A
- 我在这里做什么工作?
- 有什么可用资源可以帮助我完成这个任务?
- 如果我运行了所有针对应用程序计划的测试以后,则个任务是否就算完成了?
- 自动化的测试是否包括了大多数的应用?
- 有什么东西能够帮助我更彻底地测试,以便我能完成测试任务?
理解应用程序在测试时的行为,以及收集有关自动化测试运行时的有价值的信息,能够极大地改善测试的效率。这也有助于减少遗漏到您的用户手里的缺陷的数量。51Testing软件测试网EGtv*Wm'M+Ut K
;zu*]&^jB:aN0在进行测试时,您应该集中在寻找最多的缺陷以便提高产品质量,而仅仅是完成测试任务。
2Yx'J|$clme9D0!DQv;Wa p&Re_0这就是运行时分析:分析运行的程序并收集数据,用来帮助您理解软件的行为和软件不同部件之间的关系。
X.l G7u k3f051Testing软件测试网$TMgh#BJ运行时分析51Testing软件测试网MA{C$`(`
'[0tp"]z0在软件开发期间可以把运行时分析作为一项高级调试和测试技术来考虑。
@!C }:y7A051Testing软件测试网K0n:L)p(iCZg在运行应用程序期间,您可以收集和研究以下运行时数据:51Testing软件测试网&F-sbE_B"\r a
- 代码覆盖率
- 性能瓶颈
- 线程问题
- 执行路径
- 运行时跟踪
- 内存错误和内存泄漏
- 不正确的内存使用
下面是有关 PurifyPlus 的组件是如何设计以帮助您的一些细节:51Testing软件测试网iS.{H%bIC
- PureCoverage 用来进行代码覆盖率分析:它测量在所有测试用例中多少代码运行了,多少代码没有运行
- Quantify 用来进行性能分析:它帮助分析应用程序的性能瓶颈
- Purify 用来进行内存分析:它帮助寻找应用程序的内存泄漏和错误的内存使用,这些有可能导致应用程序崩溃。
EJpoqyVN0PurifyPlus for Microsoft® Windows® 可以用来分析 C++、Java™或者托管代码。它也可以集成在 Microsoft® Visual Studio® .NET IDE 中。51Testing软件测试网 N$EFDf+k HoFA
51Testing软件测试网|yaw(rO-oPurifyPlus for Linux® 和 UNIX® 可以用来分析 C/C++ 和 Java 应用程序,这些程序构建在 Red Hat、SUSE、Solaris™、HP-UX 和 AIX 平台。但是本文只介绍 Windows 平台的测试自动化和分析。
pL.Q?}Y051Testing软件测试网!T3Q,B0N j r3I`:JN&]%K$mN051Testing软件测试网NdWi0q?假设您已经为需求规格说明书中的每个功能点写了测试用例,并在一个稳定的自动化环境中运行了这些用例,结果是令人鼓舞的。然而,用户仍然报告出测试用例中没有发现的问题。这时代码覆盖率分析就有用了,它可以扩展您的视野。代码覆盖率分析可以针对您的测试用例的有效性给出有价值的反馈。
rD9w l}P#q0-t!{#GY6Fy'S7m,A0Q'}0没有测试的代码
8T8r_Tp1eZA051Testing软件测试网,joA,X0t{)|)W即使有大量的自动化测试,总会有测试不到的代码路径。这就产生了用户发现问题的危险,而您却很容易地发现有问题的部分已经在测试中"覆盖"到了。这在引入了一些没有合适文档化、从而没有建立测试用例的特性时是有可能的。另一个可能性是新的代码可能引入了一些行为变更。51Testing软件测试网#t-Xr2Z G8P
51Testing软件测试网^-V#U2T(_ @*LzP(]w进行代码覆盖率分析的主要步骤为:
_s;PH(j"|^~0- 自动化运行由 PureCoverage 处理过的应用程序
- 收集覆盖率数据
- 分析数据,找到哪些代码没有运行
- 增加测试用例,尽可能地覆盖没有运行的代码
- 运行增加了测试用例的自动化测试
- 确认增加的用例改善了您的覆盖率
这里有一个使用 PureCoverage 运行 Java 自动化测试的例子。ClassicsJava 是一个示例程序,功能是对数据库中的音乐 CD 进行排序。这个程序是 IBM Rational Functional Tester 中的一个示例程序。首先使用以下命令由 PureCoverage 对程序进行处理:51Testing软件测试网 y].@no
Coverage/java java.exe –jar ClassicsJavaA.jar
51Testing软件测试网3YOFc6P,Y+D然后运行这个程序的自动化测试脚本。完成排序后,中止程序。在图1中,被覆盖的方法加上了Hit标签,没有覆盖的则加上Missed标签。
N1P.[.wn2c3[7z?0^8] c-gaf9_0图1:PureCoverage 显示自动化测试程序的 hits 和 misses
*CC0SX2I;\T,D w051Testing软件测试网!UF/{"lI%t ].F
51Testing软件测试网RFu;Y#V ^ o$An:z6S-wGfAm051Testing软件测试网&Ii*O*O[-oPy
覆盖率分析也可以帮您找到测试用例是否有冗余:测试在代码的同一路径下反复运行,导致了不必要的时间延迟。另外它也可以帮助您确认测试数据。例如,一个新引进的代码变更需要您运行自动化测试以进行回归确认。这时您就需要检查覆盖率分析的数据,以帮您确定哪些自动化测试的子集需要运行,这样就可以让您在更短的时间内验证新的代码。
s'y-S+OB u#u00LV3`sL0为了深入到特定的方法内部,可以使用 PureCoverage 的 Annotated Source 特性。为了查看 Annotated Source 视图,双击方法。为了让这个特性工作,源代码必须可用。一种处理方法是使用开发人员的工作环境和软件,这样所有的源代码路径都可很容易地访问。图2显示出方法 Annotated Source 视图。正如同图1显示的那样,这个方法被遗漏了,因此代码行用红色字体显示。
,n?ND*?gA~0!z3y/W.B'q4E:x,`O2U&c0图2:PureCoverage 显示方法
getCustomerNames()
的注释源视图51Testing软件测试网%F(X
J
UX+oHRH#oP0`0]\ eY&^051Testing软件测试网 nuCz6W:R}
性能分析51Testing软件测试网 E8ZI*@'l$JN
\ @vV v?8gkj0性能分析是另外一种技术,它与 test harness 关联,给出有关应用程序的启发式的结果。在新 Build 的自动化测试明显变慢时,找到源代码内部发生了什么是至关重要的。导致变慢的原因是什么?这里有几个可能的原因:
QTIM4Gs9G0- 源代码中引入的变更:可能有不必要的模块导致了运行变慢,也可能是算法的改变影响了性能。
- 测试代码的变更:您增加的用来改善代码覆盖率的测试用例可能导致变慢,也有可能这部分代码特别容易影响速度。
- 测试数据的变更:大量的测试数据(或者不常见的数据)可能对代码产生压力,导致瓶颈。
- 环境的改变或者连接问题:如果网络变慢,可能是您的硬件需要升级了。
您不应该依赖于简单的“注意到”测试 运行了很长时间后才报告性能问题。建立一种测量性能的方法是有意义的。有多种方法来发现性能问题:51Testing软件测试网)e!qlYf:H;l
- 在自动化测试时记录时间信息
- 在测试脚本中生成记录时间的日志
- 写专门的测试用来测量性能
- 使用与测试协同工作的性能监控工具
PurifyPlus 中的 Quantify 部件是一个性能监控的工具,您可以用它来收集性能数据。图3给出使用 Quantify 进行测试的 ClassicsJava 程序的一个例子。程序已经预先处理过,然后运行自动化测试(与 PureCoverage 的技术类似)。
M;rQ(SP O051Testing软件测试网 Ahlyh3b/F*S,g R图3:Quantify生成的Callgraph显示出最花时间的方法51Testing软件测试网%jk:}1^"Dtv
51Testing软件测试网5_b._ My{p/d9Aj'^
51Testing软件测试网/A-G7p)iJ_;C
Quantify 收集有关哪些方法是调用者还是子调用者,以及这些调用花费了多长时间的信息。您可以检查这些信息以确定是否有可以优化的地方。51Testing软件测试网7f9X0wM-c8FY)m
Dn+w!VAiF&Jq$S0在使用 Quantify 之前使用合适的过滤器是很重要的,否则将收集到太多的数据,很难进行分析。