Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Конференция «Технологии управления данными 2018»
СУБД, платформы, инструменты, реальные проекты.
29 ноября 2018 г.

II. Решения...

1. Quantify

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

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

Rational Quantify - позволяет решить описанные выше проблемы, как говорится, одним махом. Это простое, но в то же время мощное и гибкое средство учета производительности приложений - незаменимый инструмент для сбора и анализа информации о производительности созданного программного продукта.

Quantify генерирует в табличной форме список всех вызываемых в процессе работы приложения функций, указывая временные характеристики каждой из них.

Quantify предоставляет полную статистическую выкладку, невзирая на размеры тестируемого приложения и время тестирования. Сбор данных осуществляется посредством технологии OCI (Object Code Insertion). Суть способа состоит в подсчете всех машинных циклов путем вставки счетчиков в код для каждого функционального блока тестируемой программы (все циклы приложения просчитываются реально, а не при помощи произвольных выборок, как в большинстве пакетов тестирования). Уникальность данного подхода заключается в том, что, во-первых, тестируется не только сам исходный код, но и все используемые компоненты, (например: библиотеки DLL, системные вызовы), а во-вторых, для подобного анализа совсем необязательно иметь исходные тексты тестируемого приложения. Последнюю функцию я хотел бы выделить особо, поскольку, пользуясь Quantify, любой разработчик может подвергнуть тестированию произвольное приложение, написанное в любой среде, с использованием любого известного компилятора!

Рисунок 1

Гибкая система фильтров Quantify позволяет, не загромождая экран лишними выводами (например, системными вызовами), получать необходимую информацию только о внутренних, программных вызовах.

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

Рисунок 2

Попробуем рассмотреть работу Quantify на конкретном примере - например, используя стандартную программу "Clock" из состава Windows NT 4.0 выяснить, сколько и чего она вызывает. После загрузки необходимо под контролем Quantify исполнить "Clock", как в обыкновенном отладчике, с той лишь разницей, что здесь нельзя наблюдать дизассемблированный код программы. На рисунке 1 показан диалог запуска "подопытного" приложения.

Как видно, в данном диалоге нет никакой сложности. Quantify для работы необходимо знать только месторасположение программы и рабочий каталог.

Рисунок 2 выводит на экран сведения о собираемой статистике. В зависимости от количества подключаемых библиотек, количество строк также изменяется. Подобная информация собирается для всех подключаемых модулей.

Рисунок 3

К сожалению, "Clock" не имеет большого числа явно загружаемых модулей (точнее - ни одного), в отличие от программы "Paint", изображенной на рисунке 3.

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

Рисунок 4

После такой преамбулы запускается само тестируемое приложение, без каких бы то ни было видимых ограничений: все идет как обычно. Однако, работа Quantify на этом не заканчивается: программа продолжает контролировать тестируемое приложение, отслеживая и подсчитывая число обращений ко всем функциям, вызываемых "подопытной" программой. В любой момент времени можно получить слепок состояния (snapshot), показывающий общий список вызовов на данный момент работы, который впоследствии можно проанализировать. Вся статистика во время работы приложения отображается в специальном окне (рис. 4), где в наглядной форме демонстрируется временная диаграмма исполнения приложения. Здесь отображается временная характеристика (сколько приложение работало), демонстрируется (разноцветными квадратами), чем оно было занято в определенный момент времени и, самое важное, как завершилось. В закладках можно найти более детализованное описание как тестируемой программы, так и компьютера в целом.

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

Рисунок 5

Прервать процесс возможно в любой момент, закрыв тестируемое приложение (обратите внимание на рисунок 4. В конце диаграммы отображается черный квадрат, говорящий о том, что приложение завершилось). Здесь завершается механический этап сбора статистики и начинается творческий анализ.

Способов, предоставляемых Quantify для анализа, более чем достаточно: можно посмотреть и дерево вызовов (Call Graph), и список функций с точными замерами (Function List), а если Вы разрабатываете свои приложения в среде Visual Studio, то Quantify позволит вызывать исходные тексты тестируемых функций (в этом случае эффективность разработки повышается за счет интеграции Quantify с Visual Studio).

Рисунок 6

Начнем описание по порядку. На рисунке 5 показано дерево вызовов для приложения "Clock".

Двойное нажатие на любой функции вызовет либо поддерево (если функция разворачиваемая), либо статистическую выкладку по числу вызовов данной функции.

Следующий рисунок (№ 6) демонстрирует окно списка, где отображаются в табличном виде наименования всех функций со всеми характеристиками. Здесь можно, отсортировав список по определенному признаку, выяснить какие функции сколько раз вызывались и сколько времени заняли. Табличное представление позволяет сравнивать временные интервалы и вызовы нескольких функций (вызовов) для более глубокого сравнительного анализа.

Возвращаясь к рисунку 6, хочется обратить ваше внимание на то, какую детальную информацию представляет Quantify. Приглядевшись, можно заметить, что самая часто вызываемая функция это - "GetLocalTime", число вызовов составляет 5831. Соответственно, получив такую информацию, разработчик сам решит, стоит или нет заниматься ее оптимизацией.

Рисунок 7

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

К сожалению, объем статьи не позволяет более детально объяснить все аспекты применения Rational Quantify. Но это и не обязательно, так как хочется вызвать интерес как можно большего числа людей к программным продуктам компании Rational, которые пока еще недостаточно хорошо знакомы большинству российских разработчиков.

В заключение коротко рассмотрим возможности программы Quantify:

  • Выдает точную и детальную информацию о производительности приложения
  • Указывает на все узкие места в приложении (как в пользовательском коде, так и в системных вызовах)
  • Представляет комплексный дополнительный обзор данных по производительности (Call Graph, Function Lists, Function Detail)
  • Гибкая настройка по желаниям и потребностям пользователя
  • Позволяет многократно тестировать приложение (по ходу разработки), позволяя отслеживать изменения в количестве вызываемых функций
  • Интеграция с Visual C++ с возможностью вызова исходных текстов функций тестируемого приложения
  • Интегрируется с Rational Robot, ClearQuest и Visual Test
  • Поддерживает Visual C++, Visual Basic и Visual Java приложения

Назад | Вперед

 

Новости мира IT:

Архив новостей

Последние комментарии:

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 985 1945361
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2015 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...