Quantfy
Любой разработчик рано или поздно сталкивается с проблемой необходимости увеличения производительности собственного приложения, в сжатые сроки и с максимально возможной эффективностью. Проблема достаточно нетривиальна сама по себе, поскольку, не имея необходимого инструментария, вручную придется замерять скоростные характеристики разрабатываемых приложений, дописывая для этого килобайты отладочных функций и циклов вызова. А если недосуг набивать горы новых тест-функций, придется обзавестись таймером, замеряя фрагменты кода с точностью до секунды. Естественно, что при такой "продуктивной" работе не может быть и речи о каком бы то ни было приемлемом качественном уровне создаваемого программного продукта, поскольку составление списка вызовов функций превращается в рутину, отрицательно сказывающуюся на скорости разработки.
Такой уровень автоматизации можно сравнить с каменным веком - но к сожалению, подобная практика все еще имеет место быть, и никто ее не отменял.
Rational Quantify - позволяет решить описанные выше проблемы, как говорится, одним махом. Это простое, но в то же время мощное и гибкое средство учета производительности приложений - незаменимый инструмент для сбора и анализа информации о производительности созданного программного продукта.
Quantify генерирует в табличной форме список всех вызываемых в процессе работы приложения функций, указывая временные характеристики каждой из них.
Quantify предоставляет полную статистическую выкладку, невзирая на размеры тестируемого приложения и время тестирования. Сбор данных осуществляется посредством технологии OCI (Object Code Insertion). Суть способа состоит в подсчете всех машинных циклов путем вставки счетчиков в код для каждого функционального блока тестируемой программы (все циклы приложения просчитываются реально, а не при помощи произвольных выборок, как в большинстве пакетов тестирования). Уникальность данного подхода заключается в том, что, во-первых, тестируется не только сам исходный код, но и все используемые компоненты, (например: библиотеки DLL, системные вызовы), а во-вторых, для подобного анализа совсем необязательно иметь исходные тексты тестируемого приложения.
Последнюю функцию я хотел бы выделить особо, поскольку, пользуясь Quantify, любой разработчик может подвергнуть тестированию произвольное приложение, написанное в любой среде, с использованием любого известного компилятора!
![](test2000-01.gif)
![](test2000-02.gif)
![](test2000-03.gif)
![](test2000-04.gif)
Рисунок 4 После такой преамбулы запускается само тестируемое приложение, без каких бы то ни было видимых ограничений: все идет как обычно. Однако, работа Quantify на этом не заканчивается: программа продолжает контролировать тестируемое приложение, отслеживая и подсчитывая число обращений ко всем функциям, вызываемых "подопытной" программой.
В любой момент времени можно получить слепок состояния (snapshot), показывающий общий список вызовов на данный момент работы, который впоследствии можно проанализировать. Вся статистика во время работы приложения отображается в специальном окне (рис. 4), где в наглядной форме демонстрируется временная диаграмма исполнения приложения. Здесь отображается временная характеристика (сколько приложение работало), демонстрируется (разноцветными квадратами), чем оно было занято в определенный момент времени и, самое важное, как завершилось. В закладках можно найти более детализованное описание как тестируемой программы, так и компьютера в целом. Еще один любопытный момент: во время сбора разработчик может работать со своим продуктом как обычно: нажимать на кнопки, заходить в меню и пр. Естественно, при этом вызываются явным образом определенные функции в тестируемой программе, которые тут же попадают в статистику Quantify.
![](test2000-05.gif)
![](test2000-06.gif)
Здесь можно, отсортировав список по определенному признаку, выяснить какие функции сколько раз вызывались и сколько времени заняли. Табличное представление позволяет сравнивать временные интервалы и вызовы нескольких функций (вызовов) для более глубокого сравнительного анализа. Возвращаясь к рисунку 6, хочется обратить ваше внимание на то, какую детальную информацию представляет Quantify. Приглядевшись, можно заметить, что самая часто вызываемая функция это - "GetLocalTime", число вызовов составляет 5831. Соответственно, получив такую информацию, разработчик сам решит, стоит или нет заниматься ее оптимизацией.
![](test2000-07.gif)
- Выдает точную и детальную информацию о производительности приложения
- Указывает на все узкие места в приложении (как в пользовательском коде, так и в системных вызовах)
- Представляет комплексный дополнительный обзор данных по производительности (Call Graph, Function Lists, Function Detail)
- Гибкая настройка по желаниям и потребностям пользователя
- Позволяет многократно тестировать приложение (по ходу разработки), позволяя отслеживать изменения в количестве вызываемых функций
- Интеграция с Visual C++ с возможностью вызова исходных текстов функций тестируемого приложения
- Интегрируется с Rational Robot, ClearQuest и Visual Test
- Поддерживает Visual C++, Visual Basic и Visual Java приложения