Сравнительный анализ инструментов оценки покрытия кода

Создать новую статью

30.09.2009 13:00


Аннотация

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

Используемые понятия

Для начала определим, что же такое покрытие кода, зачем его измерять и что называется инструментом оценки покрытия кода. Ниже приведены выдержки из википедии:

Покрытие кода - мера, используемая при тестировании программного обеспечения. Она показывает процент, насколько исходный код программы был протестирован

Существует несколько различных способов измерения покрытия, основные из них:

  • Покрытие операторов — каждая ли строка исходного кода была выполнена и протестирована
  • Покрытие условий — каждая ли точка решения (вычисления истинно ли или ложно выражение) была выполнена и протестирована?
  • Покрытие путей — все ли возможные пути через заданную часть кода были выполнены и протестированы?
  • Покрытие функций — каждая ли функция программы была выполнена
  • Покрытие вход/выход — все ли вызовы функций и возвраты из них были выполнены

Почему же так важно покрытие кода?

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

Когда программа небольшая, покрытие можно посчитать вручную, но когда в программе несколько тысяч строк, пару сотен функций и еще много всего интересного, то вычислить покрытие кода тестами - это уже не тривиальная задача. Чтобы с ней справиться используют специальные Инструменты Оценки Покрытия Кода.

Постановка задачи

Компания Intel выпустила набор продуктов Intel Parallel Studio, который является незаменимым инструментом при проектировании, построении и отладке многопоточных программ:

Intel Parallel Studio

Один из компонентов этого набора - Intel Parallel Inspector - позволяет проверять параллельные программы на корректность исполнения. В одной из будущих версий этого продукта планируется представить инструмент оценки покрытия кода.

Подобных инструментов на рынке уже достаточно много, поэтому перед добавлением в Intel Parallel Studio своего инструмента оценки покрытия кода, необходимо провести сравнительный анализ уже существующих, найти их сильные и слабые стороны и сделать вывод каким же должен быть Intel Code Coverage Tool, чтобы стать конкурентоспособным.

Этапы выполнения работы

  1. Составление списка програм для тестирования на них различных инструментов оценки покрытия кода.
  2. Выбор инструментов оценки покрытия кода для сравнения функциональности.
  3. Проведение тестирования, заполнение сводной таблицы результатов.
  4. Подведение итогов.

Список програм для тестирования

  • GLPK - математический пакет
  • Emps - программа для распаковки (декомпрессии) пакетов для GLPK
  • Murk - многопоточная программа для просчета игры шахматы
  • SQLite - движок для баз данных MySql
  • Tachyon - параллельная многопоточная рейтрейсинговая система для моделирования 3-d сцен

GLPK - GNU Linear Programming Kit

Мощный математический пакет в котором реализованы многие алгоритмы, такие как:

  • прямой симплекс-метод;
  • двойственный симплекс-метод;
  • метод ветвей и границ;
  • и многие другие математические методы.

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

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

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

Emps

Является распаковщиком файлов для GLPK.

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

В работе она интересна как представитель програм-архиваторов.

SQLite

Cвободно распространяемая реляционная база данных.

В работе представляет интерес, как движок базы данных

Tachyon Parallel / Multiprocessor Ray Tracing System

Многопоточная рейтрейсинговая система для просчета 3d сцен.

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

Затем были выбраны наиболее сложные сцены, которые потом использовались в тестах на покрытие кода.

Данная программа представляет интерес, как представитель графических программ.

После подбора всех программ для тестов (каждая программа была найдена с исходным кодом и скомпилирована) был проведен обзор существующих программ для оценки покрытия кода.

Выбор программ для оценки покрытия кода

Для выбора программ были сформулированы следующие условия:

  1. Инструмент оценки покрытия кода должен выполнять анализ покрытия кода без перекомпиляции
  2. Иструмент должен работать с native С++ кодом
  3. У программы должна быть пробная версия
  4. Программа имеет интересные особенности (например, оригинальный пользовательский интерфейс), которые было бы интересно проанализировать

Code Coverage tools

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

AQTime 6

AQTime 6

Инструмент для повышения производительности и улучшения качества 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-битные приложения.

NCover

Ncover

Несмотря на отсутствие возможности работы с native С++ кодом, данный продукт был оставлен для сравнения, поскольку имеет оригинальный интерфейс.

IBM Rational PurifyPlus

Rational PurifyPlus - это полный набор инструментов автоматизированного динамического анализа для повышения надежности и производительности приложений на платформах Windows, Linux и UNIX. Предназначен для разработки на языках Java, C/C++, Visual C/C++, Visual Basic и в среде VS.NET (включая языки C# и VB.NET).

Intel Compiler

Intel Compiler

Позволяет добиться ускорения разработки и великолепной производительности приложений на всем диапазоне платформ на базе процессоров Intel® с компилятором Intel® Compiler Professional Edition. Версия Professional Edition обеспечивает широкие возможности дополнительной оптимизации, многопоточность и процессорную поддержку, которая включает автоматическое планирование процессоров, векторизацию и развертывание циклов. Кроме того, она включают библиотеки для оптимизации производительности многопоточных приложений.

Включает в себя инструментальное средство Code Coverage Tool, которое и представляет интерес для данной работы, однако для измерения покрытия кода требует перекомпиляции, поэтому под требования подходит "условно".

Группы сравнения

Вот какие группы для сравнения были выделены:

  1. Поддерживаемое оборудывание.
  2. Пользовательский интерфейс.
  3. Возможности оценки покрытия кода и дополнительные функции.
  4. Оверхед (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, а не в восьмом корпусе ННГУ. Скорее всего это бы позволило чуть-чуть более продуктивно работать.

Спасибо организаторам за все их усилия, интересные экскурсии и массу новых впечатлений!

Список материалов и литературы

Об авторе

Тришин Илья, студент механико-математического факультета ННГУ. В одиннадцатом классе выступал на конференции Юниор - 2006 с докладом "Алгоритмы и программы управления компьютером в азартных играх, созданные на основе теории нечётких множеств". Работа была отмечена ценными призами от Microsoft и других организаторов конкурса. Продолжением данной работы является курсовая работа, в которой для управления компьютером была применена теория нейронных сетей и был реализован самообучающийся алгоритм игры компьютера в карточной игре "Дурак". Данная работа развивается и планируется усложнять структуру нейронной сети, а также применение этого подхода к другим моделям.

В 2009 году прошел стажировку в Летней Школе Intel 2009, под руководством Игоря Лопатина