PurifyPlus过滤管理器。第二种方式是使用每一种工具的图形用户界面所提供的过滤管理器功能。过滤管理器为测试的Java应用程序创建一个特殊的二进制过滤文件(请看图2A和图2B)。它可以在profiling或者覆盖数据收集到之后使用。
图2A: Rational Quantify 中的PurifyPlus过滤管理器主窗口
在列表中选中的class文件将被排除在报告外,但从它们收集到的数据仍将保持在总的结果中。(也就是图2A中右下角的"Time"选择框)。
图2B. 使用 Rational PureCoverage中的 Rationgal PurifyPlus过滤管理器
为了在PurifyPlus中运行Tomcat,我为各个PurifyPlus工具(Purify、Quantify、PureCoverage )推荐下列的预过滤器列表:
|
对于其他Java服务器应用程序,您需要创建其他的预过滤器。请看我的技术贴士:http://www.therationaledge.com/content/sep_01/t_techTips_gb.html,它说明了如何在BEA WebLogic和IBM WebSphere的Java 应用服务器上运行Rational PurifyPlus。
演示应用程序
这篇文档用到的Demo程序是一个叫做"Duke's BookStore"的网上书店。这个Web应用程序可以在Sun的网站上下载。它原本是作为一个创建和运行Java servlet的指南的一部分而开发的。它包括一系列的Web页面以及为这些页面创建内容的servlet。Rational PurifyPlus可以用来测试这整个的Web应用程序或者它的一部分(比如说单个的servlet)。
在Rational PurifyPlus中对Java Serlets和JavaServerPages进行运行测试
在编译了Java组件并为工具设定了必要的过滤器之后,您可以开始从Java servlet和JSP中收集行层次的分析和代码覆盖信息了。
对于第一步,我建议使用Rational PurifyPlus并收集执行时间分析数据。
用Ratioanl Quantify 分析应用程序执行时间
将值"_XrenPureJVMPI: Quantify"赋给环境变量_JAVA_OPTIONS会在Tomcat服务器启动时激活Quantify。当你浏览演示程序时,Quantify会自动记录执行Web页上触发的方法和代码行所花费的时间。在Tomcat初始化并启动之后,可以在浏览器中输入如下的网址来访问演示程序:
http://localhost:8080/bookstore/bookstore.html
在测试结束之后,关闭浏览器并停止Tomcat服务器应用程序。分析的结果可以在Quantify中以几种不同的视图显示。第一种是CallGraph视图,如图3所示:
图3. Rational Quantify一个Web应用程序的CallGraph视图
CallGraph视图高亮显示了执行时消耗时间最多的调用链。粗体线条突出了应用程序中最慢的部分并表示了执行高亮显示的方法时所耗费的时间在总运行时间中的百分比。
行层次的信息在所选方法的注释源视图(Annotated Source View)中包含,如图4所示:
图4: Rational Quantify 中Web应用程序中一个方法的注释源视图
更进一步的信息可以通过Quantify创建的其他视图得到,包括图5所示的函数细节视图(Function Detail view)。
图5. Web应用程序中一个方法的 Rational Quantify 函数细节视图
Quantify相对于其他一些传统的解决方案的优势在于它表达分析性数据的方式。Quantify可以使您直接发现所测试应用程序的性能瓶颈的关键所在。
使用Rational PureCoverage进行代码覆盖
如果我们将_JAVA_OPTIONS环境变量改为"-XrunPrueJVMPI:Coverage"并重复对样例Web应用程序的运行测试,PureCoverage就会记录那些测试到的方法和代码行,并高亮显示那些没有被测试到的部分。
如图6A和图6B所示,PureCoverage提供了关于所测试的Java servlets应用程序的method和line两种级别的信息。
图6A. Rational PureCoverage 对一个测试Web应用程序的方法覆盖
在方法级覆盖中,PureCoverage根据该方法所在的模块或定义它的源文件来分类并提供被测试的应用程序的方法的相关统计数据。
关于被测试的应用程序的代码行的信息显示在加注的源代码中;不同的颜色分别表示代码选中,丢失,废弃或部分选中。
图6B. 测试的Web应用程序的一个servlet方法的 Rational PureCoverage line 级覆盖
这类信息在设定运行时间测试的步骤或创建自动测试的脚本文件时非常有用。PureCoverage 同时也允许您合并对同一个应用程序历次测试的覆盖数据,从而提供对应用程序所实施的测试的质量的一个清晰的概观。
利用Rational Purify进行内存分析
使用Rational Purify来获取对所测试的Web应用程序的内存分析大体上类似于使用PureCoverage和Quantify。对运行中的应用程序进行内存使用情况的"快照"可以让您在运行的不同阶段对内存状态进行比较。这是检测内存泄漏的一个很有用的方法。
服务器应用程序(常常是全天候运行)的内存泄漏能很容易的使应用程序和系统同时崩溃,因为在运行过程中它会不断地消耗越来越多的内存。内存泄漏对应用程序性能的影响也是巨大的。通过Rational Purify记录的Java应用程序的内存状态可以使您更深入地分析内存的使用状况。
Purify在对Java Servlet和JSP进行测试时提供的报告类型和它在测试Java 应用程序与Java applets时是一样的。图7显示了一个Purify记录一个接受测试的JSP如何调用JavaBean 方法。
图7: Demo JSP的 Rational Purify Call Graph
如图8中所示,在方法列表中提供了更多有关JSP 会话的内存使用信息。
图8. JSP的 Rational Purify 函数列表
与Rational Purify引导用户发现应用程序中消耗最多执行时间的部分类似,Purify向用户指出了应用程序的内存瓶颈所在。通过对函数列表视图中的方法进行排序可以很容易找到那些消耗了过多内存的方法;Purify同时还提供了很多其他视图来帮助您做到这一点。
用最少的投入获得最大的产出
在服务器机器上部署Rational Quantfify来获得 Java 服务器侧应用程序的广泛分析和代码覆盖率的数据是非常轻松的。您不但可以将Rational PurifyPlus应用在商业性的Java server应用程序上,同时也可以在轻量级的免费Java Servlets和JSP引擎(比如Apache Tomcat)上使用它。