СТАТЬЯ
05.02.02

Часть 1

Тестирование приложений J2EE с помощью Rational PurifyPlus (Часть 2)

 © Горан Бегик (Goran Begic), Rational Software
Переведено БНТП по заказу Interface Ltd.

Демо-приложение

Демо-приложение, используемое в этой статье, представляет собой электронный книжный магазин, называющийся "Duke's Bookstore." Это web-приложение может быть загружено с web-сайта компании Sun. Первоначально оно было создано как часть учебного пособия по созданию и выполнению сервлетов Java. Приложение состоит из ряда web-страниц и сервлетов, создающих контент для этих страниц. PurifyPlus может применяться для тестирования либо всего Web-приложения, либо любой его части (например, индивидуальных сервлетов).

Тестирование сервлетов и серверных страниц Java во время их выполнения с помощью Rational PurifyPlus

После компиляции Java-компонента с помещением в результирующий файл отладочной информации, и установки необходимых фильтров для инструментов PurifyPlus, можно начинать сбор информации по профилированию строк кода и покрытию кода, поступающую от сервлетов и серверных страниц Java.

В качестве первого шага, я советую запустить Rational Quantify и собрать информацию по анализу времени выполнения.

Профилирование времени выполнения приложения с помощью Rational Quantify

Присвоение значения -XrunPureJVMPI:Quantify переменной среды _JAVA_OPTIONS приведет к запуску Quantify при старте сервера Tomcat. По мере того, как вы работаете с демо-приложением, Quantify будет фиксировать время, затрачиваемое на выполнение каждого метода и строки кода, которые будут вызываться на web-странице. После того, как Tomcat инициализирован и запущен, доступ к тестовому приложению можно получить, указав в браузере следующий URL:

http://localhost:8080/bookstore/bookstore.html

После того, как вы завершили тестовое приложение, закройте браузер и остановите сервер Tomcat. В Quantify результаты профилирования будут отображены в виде нескольких различных представлений. Первым является представление CallGraph, показанное на рис. 3.


Рис. 3. Диаграмма вызовов Rational Quantify для web-приложения

 Диаграмма вызовов отображает цепочки вызовов, наиболее длительных по времени выполнения. Более толстые линии отображают более медленные части приложения, и представляют собой процент времени, затраченного на выполнение подсвеченного метода, по отношению ко всему времени выполнения.

Информация по выполнению строк для выбранных методов включается в представление Annotated Source, как показано на рис. 4:

Рис. 4. Представление Annotated Source для One Method в web-приложении

Дальнейшая информация может быть получена из других представлений, создаваемых Quantify, включая представления Function Detail, показанные на рис. 5:

Рис. 5. Представление Function Detail для One Method в web-приложении

Преимуществом использования Quantify по сравнению с другими решениями является способ представления данных профилирования. Quantify позволяет вам заглянуть непосредственно в саму основу критических мест производительности тестируемого приложения.

Покрытие кода с помощью Rational PureCoverage

Если теперь мы изменим значение переменной среды _JAVA_OPTIONS на XrunPureJVMPI:Coverage и снова запустим на выполнение наше тестовое web-приложение, PureCoverage запишет протестированные методы и строки кода, и высветит нетестированные части приложения.

Как показано на рис. 6A и 6B, PureCoverage выдает как информацию по методам, так и по строкам кода, показывая покрытие тестируемого сервлета Java:

Рис. 6A. Представление Method Coverage в Rational PureCoverage для тестирования web-приложения

Для покрытия на уровне методов, PureCoverage выдает статистику для методов тестированного приложения, отсортированную по модулям, в которых находятся эти методы, или же отсортированную по файлам исходного кода, в которых определены эти методы.

Информация о покрытии строк кода тестируемого приложения представляется на уровне аннотированного исходного кода; разные цвета обозначают, что код уже оттестирован, пропущен, пока не достигнут или протестирован лишь частично.

Рис. 6B. Покрытие кода по строкам Rational PureCoverage для One Servlet Method из тестируемого web-приложения

Этот вид информации особенно полезен при определении шагов тестирования во время выполнения, или создания скриптов для автоматизации процесса тестирования. Кроме того, PureCoverage позволяет объединять данные покрытия для нескольких различных тестов одного и того же приложения, давая тем самым явное представление о качестве тестирования разработанного приложения.

Профилирование использования памяти с помощью Rational Purify

Использование Rational Purify для получения профиля использования памяти тестируемого web-приложения сходно с использованием PureCoverage и Quantify. Снятие "мгновенных снимков" памяти обеспечивает возможность сравнения картины использования памяти на различных этапах выполнения приложения. Подобная процедура служит весьма эффективным методом определения утечек памяти.

Утечки памяти в серверном приложении (которое зачастую предназначено для круглосуточной работы) может привести к отказу, как самого приложения, так и всей системы, вследствие постоянно увеливающегося количества захваченной памяти по мере работы приложения. Влияние утечек памяти на производительность приложения также является очень важным моментом. Карта использования памяти, которую вы можете записать для Java-приложения с помощью Rational Purify, позволяет проводить подробный анализ ее использования.

При анализе сервлетов и серверных страниц Java, Purify генерирует тот же набор отчетов, что и в случае анализа Java-приложений и Java-апплетов. На рис. 7 показано то, что записывает Purify при анализе серверных страниц Java с вызываемыми методами JavaBean.

Рис. 7. Диаграмма вызовов Rational Purify для серверной страницы Demo

Список методов предоставляет больше информации об использовании памяти для этой сессии JSP, как показано на рис. 8.

Рис. 8. Список функций Rational Purify для JSP

Точно так же, как Rational Quantify предоставляет пользователям информацию об участках приложения с наибольшим временем выполнения, Purify выдает данные об узких местах использования памяти. Отсортировав методы в представлении Function List, легко определить те, которые захватывают слишком много памяти; Purify также обеспечивает ряд других представлений для проведения подобного анализа.

Максимальный результат при минимальных усилиях

При необходимости можно легко развернуть Rational PurifyPlus на серверном компьютере для получения развернутой информации о профилировании и покрытии кода для Java-приложений, выполняемых на стороне сервера. Естественно, вы можете использовать Rational PurifyPlus не только с коммерческими серверами приложений Java, но также и с более легкими – и бесплатными – обработчиками Java-сервлетов и JSP, такими как Apache Tomcat.

Ссылки
  1. Спецификации серверных страниц Java
  2. Khawar Ahmed and Loïc Julien, "Enterprise Java and Rational Rose - Part II." The Rational Edge, February 2001.
  3. Goran Begic, "Memory Profiling in Java." The Rational Edge, Январь 2001 г.
  4. Goran Begic, "Monitoring Object Creation in Java Application Profiling with Rational PurifyPlus." The Rational Edge, Июнь 2001 г.
  5. Руководство программиста по работе с сервлетами в Netscape Enterprise Server 4.0
  6. Пример сервлета Bookstore

Дополнительная информация

Дополнительную информацию Вы можете получить в компании Interface Ltd.

Обсудить на форуме Rational Software
Отправить ссылку на страницу по e-mail


Interface Ltd.
Тel/Fax: +7(095) 105-0049 (многоканальный)
Отправить E-Mail
http://www.interface.ru
Ваши замечания и предложения отправляйте автору
По техническим вопросам обращайтесь к вебмастеру
Документ опубликован: 05.02.02