| 30.09.2009 13:00 | |
Аннотация
В статье рассказывается о проведении сравнительного анализа инструментов оценки покрытия кода с целью выявления сильных и слабых сторон, а также сравнения их с прототипом Intel Code Coverage Tool. В ходе данной работы был подобран список приложений для тестов, список инструментов оценки покрытия кода, проведено тестирование и подведены итоги, а также даны рекомендации по улучшению прототипа Intel Code Coverage Tool.
Используемые понятия
Для начала определим, что же такое покрытие кода, зачем его измерять и что называется инструментом оценки покрытия кода. Ниже приведены выдержки из википедии:
Покрытие кода - мера, используемая при тестировании программного обеспечения. Она показывает процент, насколько исходный код программы был протестирован
Существует несколько различных способов измерения покрытия, основные из них:
- Покрытие операторов — каждая ли строка исходного кода была выполнена и протестирована
- Покрытие условий — каждая ли точка решения (вычисления истинно ли или ложно выражение) была выполнена и протестирована?
- Покрытие путей — все ли возможные пути через заданную часть кода были выполнены и протестированы?
- Покрытие функций — каждая ли функция программы была выполнена
- Покрытие вход/выход — все ли вызовы функций и возвраты из них были выполнены
Почему же так важно покрытие кода?
Покрытие кода является очень важным показателем при тестировании, так как от того какие участки кода были протестированы напрямую зависит качество тестирования. Чтобы избежать ошибок, при тестировании надо стремиться сделать покрытие кода тестами как можно больше.
Когда программа небольшая, покрытие можно посчитать вручную, но когда в программе несколько тысяч строк, пару сотен функций и еще много всего интересного, то вычислить покрытие кода тестами - это уже не тривиальная задача. Чтобы с ней справиться используют специальные Инструменты Оценки Покрытия Кода.
Постановка задачи
Компания Intel выпустила набор продуктов Intel Parallel Studio, который является незаменимым инструментом при проектировании, построении и отладке многопоточных программ:

Один из компонентов этого набора - Intel Parallel Inspector - позволяет проверять параллельные программы на корректность исполнения. В одной из будущих версий этого продукта планируется представить инструмент оценки покрытия кода.
Подобных инструментов на рынке уже достаточно много, поэтому перед добавлением в Intel Parallel Studio своего инструмента оценки покрытия кода, необходимо провести сравнительный анализ уже существующих, найти их сильные и слабые стороны и сделать вывод каким же должен быть Intel Code Coverage Tool, чтобы стать конкурентоспособным.
Этапы выполнения работы
- Составление списка програм для тестирования на них различных инструментов оценки покрытия кода.
- Выбор инструментов оценки покрытия кода для сравнения функциональности.
- Проведение тестирования, заполнение сводной таблицы результатов.
- Подведение итогов.
Список програм для тестирования
- GLPK - математический пакет
- Emps - программа для распаковки (декомпрессии) пакетов для GLPK
- Murk - многопоточная программа для просчета игры шахматы
- SQLite - движок для баз данных MySql
- Tachyon - параллельная многопоточная рейтрейсинговая система для моделирования 3-d сцен
GLPK - GNU Linear Programming Kit
Мощный математический пакет в котором реализованы многие алгоритмы, такие как:
- прямой симплекс-метод;
- двойственный симплекс-метод;
- метод ветвей и границ;
- и многие другие математические методы.
Исходные данные подаются ввиде пакетов в формате .mps, который позволяет запрограммировать практически любую математическую задачу.
Данную программу интересно тестировать на покрытие кода, так как в ней содержится много различных возможностей и покрыть все их одним тестом невозможно.
Для работы с этой программой было выбрано несколько файлов с заданиями и из них были отобраны те, на выполнение которых уходило наибольшее количество времени.
Является распаковщиком файлов для GLPK.
Обычно все файлы с заданиями для GLPK хранятся в запакованном виде, чтобы их распоковать используется данная программа.
В работе она интересна как представитель програм-архиваторов.
Cвободно распространяемая реляционная база данных.
В работе представляет интерес, как движок базы данных
Tachyon Parallel / Multiprocessor Ray Tracing System
Многопоточная рейтрейсинговая система для просчета 3d сцен.
Для нее было найдено большое количество 3d сцен, был написан скрипт для запуска и оценки времени просчета всех сцен.
Затем были выбраны наиболее сложные сцены, которые потом использовались в тестах на покрытие кода.
Данная программа представляет интерес, как представитель графических программ.
После подбора всех программ для тестов (каждая программа была найдена с исходным кодом и скомпилирована) был проведен обзор существующих программ для оценки покрытия кода.
Выбор программ для оценки покрытия кода
Для выбора программ были сформулированы следующие условия:
- Инструмент оценки покрытия кода должен выполнять анализ покрытия кода без перекомпиляции
- Иструмент должен работать с native С++ кодом
- У программы должна быть пробная версия
- Программа имеет интересные особенности (например, оригинальный пользовательский интерфейс), которые было бы интересно проанализировать

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

Инструмент для повышения производительности и улучшения качества 32-битных и 64-битных Windows и .NET-соединенных приложений.
AQtime можно интегрировать в Microsoft Visual Studio или запускать отдельно. С помощью AQtime можно определить, где проблема, и что послужило ее причиной.
AQtime - это разработанный компанией AutomatedQA, отмеченный неоднократными наградами инструмент для повышения производительности отладки памяти и ресурсов для компиляторов Microsoft, Borland, Intel, Compaq и GNU.
В последнюю версию AQtime, AQtime 6, включены десятки инструментов, которые позволяют легко и просто вычислить все проблемы производительности и утечки памяти/ресурсов в коде, путем создания подробных и обширных отчетов для .NET и Windows приложений. AQtime поддерживает .NET 1.0, 1.1 и 2.0 приложения и Windows 32- и 64-битные приложения.

Несмотря на отсутствие возможности работы с native С++ кодом, данный продукт был оставлен для сравнения, поскольку имеет оригинальный интерфейс.
Rational PurifyPlus - это полный набор инструментов автоматизированного динамического анализа для повышения надежности и производительности приложений на платформах Windows, Linux и UNIX. Предназначен для разработки на языках Java, C/C++, Visual C/C++, Visual Basic и в среде VS.NET (включая языки C# и VB.NET).
Позволяет добиться ускорения разработки и великолепной производительности приложений на всем диапазоне платформ на базе процессоров Intel® с компилятором Intel® Compiler Professional Edition. Версия Professional Edition обеспечивает широкие возможности дополнительной оптимизации, многопоточность и процессорную поддержку, которая включает автоматическое планирование процессоров, векторизацию и развертывание циклов. Кроме того, она включают библиотеки для оптимизации производительности многопоточных приложений.
Включает в себя инструментальное средство Code Coverage Tool, которое и представляет интерес для данной работы, однако для измерения покрытия кода требует перекомпиляции, поэтому под требования подходит "условно".
Группы сравнения
Вот какие группы для сравнения были выделены:
- Поддерживаемое оборудывание.
- Пользовательский интерфейс.
- Возможности оценки покрытия кода и дополнительные функции.
- Оверхед (Overhead) - во сколько раз увеличивается время выполнения программы при оценке покрытия кода по отношению к стандартному выполнению.
Полученные результаты
В ходе сравнения были составлены достаточно большие таблицы сравнения (всего более 50-ти полей сравнения), из которых можно наглядно увидеть сильные и слабые стороны той или иной программы оценки покрытия кода.
Поддерживаемое оборудывание
По первой группе сравнения все программные продукты оказались примерно на одном уровне, отдельно можно выделить AQTime 6 и Intel Complier, за поддержку языка Fortran. В остальном сильных отличий нет.
Пользовательский интерфейс
По общим впечатлениям наиболее удобным оказался интерфейс AQTime 6, расположение элементов интуитивно понятно, всегда можно видеть шаги, актуальные в данный момент, в файлах помощи много полезной информации и представлена она удобным образом. Неудобным оказалось только отсутсвие отображения вывода командной строки после выполнения приложения.
Отдельно стоит отметить интерфейс NCover: красиво отрисованы кнопки и элементы, расположение окошек тоже приятное. Видно, что разработчики следят за внешним видом своих продуктов и своих сайтов. Также в Интернете при поиске инструментов по оценке покрытия кода достаточно часто можно видеть рекламные ссылки NCover. После получения пробной версии идет активная работа с клиентом, различные предложения оставить отзыв и получить полный платный продукт.
Интерфейс Intel Compiler тоже на достойном уровне, файлы помощи и расположение элементов понятное и удобное. По отношению к остальным продуктам не хватает только поддержки ввода аргументов коммандной строки в визуальном интерфейсе.
IBM Rational PurifyPlus имеет интерфейс с меньшими возможностями, в отличие от остальных данная программа не отображает наиболее непокрытые участки кода или функции, не показывает используемые системные библиотеки, не имеет возможности сделать отчет в формате HTML и не имеет кнопок навигации "Вперед" / "Назад". Файлов помощи с программой поставляется достаточно мало, в основном все инструкции и описания находятся в Интернете.
Возможности оценки покрытия кода, дополнительные функции и Overhead
AQTime 6 имеет интересные профили оценки покрытия кода: Standart и Lite, в каждом профиле оценку можно вести by lines и by routines. При этом в Lite профиле производится полноценная оценка, и Overhead средний, а в Standart профиле идет более глубокая оценка покрытия с очень большим увеличением времени работы - примерно в 1,000 раз, что в большистве случаев непримелимо (приложение, которое выполняется 1 секунду будет выполняться почти 20 минут). Поэтому данный профиль может понадобиться в редких случаях. Как и у всех остальных продуктов есть возможность запуска из коммандной строки, достаточно много поддерживаемых форматов экспорта результатов: HTML, XML, XLS, text. IDE интеграция в Microsoft Visual Studio, Borland Developer Studio CodeGear RAD Studio. Есть возможность работать с приложениями, написанными на языке Fortran. Есть инструменты для сравнения результатов различных запусков.
NCover не работает с приложениями, написанными на native C++, поэтому у нее свои уровни оценки покрытия кода: By symbols, Cyclomatic complexity, Branch point coverage, Method Coverage. В данном инструменте также есть возможность создания собственных профилей. Из интересных возможностей стоит отметить встроенный генератор построения скриптов для запуска приложений из командной строки, подобной возможности нет больше ни у одного инструмента. Формат для экспорта только xml. Есть инструменты для сравнения результатов различных запусков.
IBM Rational PurifyPlus не имеет профилей оценки покрытия кода, но имеет возможность выбора оценки покрытия By functions или By lines. Экспорт результатов возможен только в полной версии программы, в текстовый или бинарный формат. Имеется IDE интеграция в Microsoft Visual Studio. Инструменты для сравнения результатов различных запусков тоже имеются.
Intel Compiler единственный продукт, который работает как на Windows так и на Linux и единственный, кто поддерживает бинарные файлы Intel64. Оценка покрытия кода возможна по By functions, By source files, By basic blocks. Есть поддержка Fortran. IDE интеграция в Microsoft Visual Studio. Форматы экспорта HTML, xml, text.
Результаты тестирования
По результатам тестирования можно сказать, что с GLPK полностью справился только Intel Compiler Code Coverage Tool, AQTime 6 выдала ошибку на стадии проверки .pdb файла, IBM Rational PurifyPlus полностью выполнила приложение, причем с приличным Overhead, но результаты собрать не смогла и выдала ошибку на стадии обработки результатов. Такая же картина у PurifyPlus была и на Tachyon, в то время как все остальные справились с ним нормально. С остальными приложениями все в среднем справились нормально.
Выводы
В данный момент на рынке присутствует достаточно много интересных и разнообразных решений для измерения покрытия кода, что говорит о востребованности такого вида измерений. С другой стороны, почти каждый такой продукт имеет свои недостатки, поэтому новому продукту есть где выступить и завоевать, возможно, свой сегмент рынка.
Направления для развития работы
В ближайшее время планируется провести еще несколько тестов, а в качестве развития работы в случае согласия ментора, выступление перед заинетерсованными людьми в Intel.
Впечатления о Летней школе Intel 2009
В целом впечатления о днях проведенных в Летней Школе Intel 2009 очень хорошие!
После Летней Школы я устроился на работу в Intel на должность Cross Product Validation intern и то, что я был в Летней Школе мне очень помогло. Сейчас я знаком с большиством продуктов Intel с которыми мне предстоит не раз столкнуться.
Жалею, что пропустил некоторые лекции в Летней Школе, так как они были бы полезными в работе, но зато остались презентации и материалы занятий, которые в любом случае помогут, за них отдельное, спасибо!
Мне кажется, что некоторые тренинги, обязательные для новых сотрудников, можно проводить и летним школьникам, например "Performing to Values", потому что это то, чем живет Intel и очень хорошо помогает глубже понять, что же такое Intel.
Неплохо было бы если летняя школа проводилась в здании Intel, а не в восьмом корпусе ННГУ. Скорее всего это бы позволило чуть-чуть более продуктивно работать.
Спасибо организаторам за все их усилия, интересные экскурсии и массу новых впечатлений!
Список материалов и литературы
- Определения понятий - Wikipedia.org
- Intel Parallel Studio
- Intel Parallel Inspector
- GLPK - GNU Linear Programming Kit
- Emps
- SQLite
- Tachyon Parallel / Multiprocessor Ray Tracing System
- AQTime 6
- NCover
- IBM Rational PurifyPlus
- Intel Compiler
Об авторе
Тришин Илья, студент механико-математического факультета ННГУ. В одиннадцатом классе выступал на конференции Юниор - 2006 с докладом "Алгоритмы и программы управления компьютером в азартных играх, созданные на основе теории нечётких множеств". Работа была отмечена ценными призами от Microsoft и других организаторов конкурса. Продолжением данной работы является курсовая работа, в которой для управления компьютером была применена теория нейронных сетей и был реализован самообучающийся алгоритм игры компьютера в карточной игре "Дурак". Данная работа развивается и планируется усложнять структуру нейронной сети, а также применение этого подхода к другим моделям.
В 2009 году прошел стажировку в Летней Школе Intel 2009, под руководством Игоря Лопатина
Пожалуйста, обратитесь к странице Уведомление об оптимизации для более подробной информации относительно производительности и оптимизации в программных продуктах компании Intel.
Комментарии (9) 
| 02.10.2009 03:20
Илья Тришин
|
Немного уточню, так как из статьи возможно не понятно: в составе Intel Compiler есть Code Coverage Tool, но он требует перекомпиляции приложений, что не всегда удобно. Сейчас Intel готовит Code Coverage Tool, который не будет требовать перекомпиляции, и будет частью Intel Parallel Inspector, рассказать именно про этот прототип в статье было нельзя, поэтому было рассказано про сравнение всех существующих продуктов между собой. 1. По поводу цен - согласен, важное замечание, хотя основной целью было рассмотрение и сравнительный анализ функционала продуктов, а не стоимости. Нужно было найти сильные и слабые стороны, а не самое бюджетное решение. 2. Это опять же про недостатки Code Coverage Tool, включенного в состав компилятора, а не про прототип. Было принято решение не публиковать полных таблиц сравнения, а акцентировать внимание на каких-то интересных особенностях, а не на незначительных моментах. |
| 13.10.2009 22:33
spaun2002
|
А что за Bounds Checker был выкинут из сравнения из-за анализа только управляемого кода? Последний Bounds Checker, который мне известен, об управляемом коде вообще ничего не знал и был предназначен для поиска ошибок работы с памятью. Его разработка была свернута и сейчас эту нишу, насколько мне известно, занимает лишь Parallel Inspector. Я говорю о Bounds Checker'e от разработчиков SoftIce, вроде это еще Nu-Mega была. |
| 14.10.2009 02:04
Илья Тришин
|
Для сравнения были выбраны только инструменты оценки покрытия кода, работающие с native кодом и не требующие перекомпиляции. При рассмотрении Bounds Checker выяснилось, что при работе в Visual Studio, требуется перекомпиляция приложения, а работать из коммандной строки Bounds Checker может только с managed кодом. Это касается именно Code Coverage Analysis в Bounds Checker. К тому же за полтора месяца они так и не дали пробную версию, несмотря на все попытки и запросы на разные электронные ящики, поэтому судить о возможностях пришлось по файлам помощи и описаниям. |
| 17.10.2009 14:21
Alexei Alexandrov (Intel)
| "Мяса" в статье маловато. 75% текста занимает описание тестовых приложений и инструментов. Хотелось бы больше конкретики - сводной таблицы, графиков по времени исполнения приложения без инструмента и под инструментом. Расход памяти было бы интересно увидеть - очень распространенная проблема такого рода инструментов это нехватка памяти во время исполнения больших приложений. |
| 18.10.2009 11:32
Илья Тришин
|
- ""Мяса" в статье маловато. 75% текста занимает описание тестовых приложений и инструментов." Я не поленился и вычислил количество символов: 5055 символов - описание инструментов и приложений 5052 символа - Группы Сравнения, выводы, результаты, направления развития. Описание приложений и инструментов занимает далеко не 75%. Конечно, можно сравнивать непонятно что, непонятно как и написать кучу результатов и выводов, только вот толку от них будет маловато. В статье рассказано что и как проходило, чтобы было максимально понятно. Построенные таблицы не публикуются умышленно, при желании и необходимости заинтересованные люди смогут воспроизвести анализ, только вот пункты сравнения им придется предложить свои. Поэтому здесь они и не опубликованы. - "Хотелось бы больше конкретики - сводной таблицы, графиков по времени исполнения приложения без инструмента и под инструментом." Не совсем понятно, о каких графиках идет речь? График подразумевает зависимость какой-либо функции величины и.т.д. от переменных. В данном случае есть 2 характеристики - время выполнения программы без инструмента и с инструментом, их отношения дает overhead. Максимум, что можно из них составить - диаграммы, хотя зная overhead диаграмму можно построить. - "Расход памяти было бы интересно увидеть - очень распространенная проблема такого рода инструментов это нехватка памяти во время исполнения больших приложений." Согласен, было бы неплохо добавить, жалко что раньше мы не догадались учесть этот момент. |
| 23.10.2009 04:06
Dmitry Oganezov (Intel)
|
Илья, а как вы объясняете требование «анализ покрытия кода без перекомпиляции»? Почему без перекомпиляции? Кто занимается анализом покрытия кода? Рассуждая логически, - как раз те люди, для которых перекомпиляция не является проблемой. Хотелось бы услышать ваше мнение на этот счет. Как я понял цель работы - «провести сравнительный анализ уже существующих [инструментов], найти их сильные и слабые стороны и сделать вывод каким же должен быть Intel Code Coverage Tool, чтобы стать конкурентоспособным». Теперь смотрим результаты: «почти каждый такой продукт имеет свои недостатки, поэтому новому продукту есть где выступить и завоевать, возможно, свой сегмент рынка». Ну что тут скажешь! Все возможно. При такой постановке вопроса любой результат будет положительным. Согласен с Алексеем – мяса мало. Из плюсов – видно, что проведена большая исследовательская работа. Кстати, как уже действующий инженер QA - насколько хорошо был покрыт код "программ для тестирования"? Как впечатления? У разработчиков Tachyon есть о чем волноваться? :) Меня мучает один вопрос. Что же такое «оборудывание»? :) |
| 23.10.2009 05:05
Илья Тришин
|
По поводу анализа с перекомпиляцией, то он уже реализован в Intel Compiler. - "Кто занимается анализом покрытия кода? Рассуждая логически, - как раз те люди, для которых перекомпиляция не является проблемой." Перекомпиляция не является проблемой для относительно небольших приложений, а вот для солидных приложений - это уже часов 6 (по крайней мере Intel Compiler столько собирается, как на митинге сказали компиляторшики) и каждый раз перекомпилировать дополнительно для оценки покрытия кода будет весьма накладно. Намного удобнее при обычной компиляции создать файл с Debug информацией, а потом уже имея скомпилированное приложение, оценивать его покрытие. - "Ну что тут скажешь! Все возможно. При такой постановке вопроса любой результат будет положительным." Не совсем согласен, могло получиться так, что таких инструментов уже навалом, каждый найдет себе инструмент по душе и шансов завоевать рынок нет. Взять например, рынок процессоров: какова вероятность, что Microsoft начнет штамповать свои процессоры и завоюет рынок? Утрированный пример, зато понятный. Отрицательный результат может быть, когда есть вопрос ("да" или "нет", например "Есть ли жизнь на Марсе?") а когда цель работы - исследование, то очевидно, что какие-то результаты в ходе исследования получить можно. - "Согласен с Алексеем – мяса мало." Это как в загадке - "Много мяса мало дров, что это?", а если серьезно, то я могу вам с Алексеем митинг провести и поделиться результатами, если интересно. - "Из плюсов – видно, что проведена большая исследовательская работа. Кстати, как уже действующий инженер QA - насколько хорошо был покрыт код "программ для тестирования"? Как впечатления? У разработчиков Tachyon есть о чем волноваться? :)" Покрытие кода было в основном небольшое, процентов 20% т.к. программы достаточно многофункциональные, а при тестировании всего несколько моделей им подавалось, которые , конечно, не могут покрыть весь код. Вот QA инженером обзываться не надо, я Cross Product Validation инженер, точнее интерн. Приложения, которые в летней школе использовались сейчас очень помогают валидировать продукты, так как стандартные Samples в составе продуктов уже не так актуальны, а для валидации надо использовать какие-то средние по величине приложения. Тот же Tachyon помог 2 баги найти в Amplifier. Поэтому опыт летней школы безусловно очень важен. - "Меня мучает один вопрос. Что же такое «оборудывание»? :)" Я тоже заинтересовался этим вопросом и решил, что это такой маленький косяк модераторов ;) |
| 24.10.2009 03:13
Dmitry Oganezov (Intel)
|
>> Тот же Tachyon помог 2 баги найти в Amplifier. :) что творится-то! Я думал что амплифаер должен помочь найти баги в Tachyon :) |
Обратная ссылка (3)
- Как мы Code Coverage измеряли : Team Easy Projects .NET
10.08.2011 07:33 -
Как мы Code Coverage измеряли -Bugs Catcher
10.08.2011 07:46 -
Как мы Code Coverage измеряли -Bugs Catcher
26.12.2011 03:28
Оставить комментарий 
Илья Тришин
|


ksili
7,630
2) Так что ли единственный недостаток Code Coverage Tool, который удалось выявить в процессе сравнения - это отсутствие поддержки ввода аргументов коммандной строки в визуальном интерфейсе?