Покрытие кода

Покрытие кода

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

Техника покрытия кода была одной из первых методик, изобретённых для систематического тестирования программного обеспечения. Первое упоминание покрытия кода в публикациях появилось в 1963 году[1].

Содержание

Критерии

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

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

Для программ с особыми требованиями к безопасности часто требуется продемонстрировать, что тестами достигается 100 % покрытие для одного из критериев. Некоторые из приведённых критериев покрытия связаны между собой; например, покрытие путей включает в себя и покрытие условий и покрытие операторов. Покрытие операторов не включает покрытие условий, как показывает этот фрагмент программы на языке Си:

printf("this is"); 
if (bar < 1)
{
    printf(" not ");
}
printf("a positive integer");

Если здесь bar = −1, то покрытие операторов будет полным, а покрытие условий — нет, так как случай несоблюдения условия в операторе if — не покрыт (и при этом для положительных чисел вывод будет искажённым). Полное покрытие путей обычно невозможно. Фрагмент кода, имеющий n условий содержит 2^n путей; конструкция цикла порождает бесконечное количество путей. Некоторые пути в программе могут быть не достигнуты из-за того, что в тестовых данных отсутствовали такие, которые могли привести к выполнению этих путей. Не существует универсального алгоритма, который решал бы проблему недостижимых путей (этот алгоритм можно было бы использовать для решения проблемы остановки).

На практике, для достижения покрытия путей используется следующий подход: выделяются классы путей (например, к одному классу можно отнести пути, отличающиеся только количеством итераций в одном и том же цикле), 100 % покрытие достигнуто, если покрыты все классы путей (класс считается покрытым, если покрыт хотя бы один путь из него).[источник не указан 928 дней]

Практическое применение

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

Степень покрытия кода обычно выражают в виде процента. Например, «мы протестировали 67 % кода». Смысл этой фразы зависит от того какой критерий был использован. Например, 67 % покрытия путей — это лучший результат чем 67 % покрытия операторов. Вопрос о связи значения покрытия кода и качества тестового набора ещё до конца не решён.

См. также

Примечания

  1. Joan C. Miller, Clifford J. Maloney (February 1963). «Systematic mistake analysis of digital computer programs». Communications of the ACM (ACM) 6 (2): 58–63. DOI:10.1145/366246.366248. ISSN 0001-0782.

См. также

  • gcov - gcc
  • tcov - sun

Ссылки

  • RTCA/DO-178B. Software Considerations In Airborne Systems And Equipment Certification, 1992.



Wikimedia Foundation. 2010.

Смотреть что такое "Покрытие кода" в других словарях:

  • Покрытие (значения) — Покрытие: Покрытие (математика) семейство множеств, объединение которых содержит данное множество. Покрытие (конструкция) верхняя конструкция здания Покрытие (материал) поверхностный слой, материал Критерий тестового покрытия метрика в… …   Википедия

  • Покрытие требований — У этого термина существуют и другие значения, см. Покрытие. Покрытие требований  это метрика, используемая в тестировании программного обеспечения. Покрытие требований позволяет оценить степень полноты системы тестов по отношению к… …   Википедия

  • Динамический анализ кода — (англ. Dynamic program analysis)  анализ программного обеспечения, выполняемый при помощи выполнения программ на реальном или виртуальном процессоре (анализ, выполняемый без запуска программ называется статический анализ кода). Утилиты… …   Википедия

  • Тестирование программного обеспечения — Разработка программного обеспечения Процесс разработки ПО Шаги процесса Анализ • Проектирование • Программирование • Докумен …   Википедия

  • Сравнение IDE — В следующие таблицы включены пакеты программ, которые являются интегрированными средствами разработки. Отдельные компиляторы и отладчики не упомянуты. Возможно, в английском разделе есть более свежая информация. Содержание 1 ActionScript 2 Ада 3 …   Википедия

  • Visual Studio Team System — Основная статья: Microsoft Visual Studio Visual Studio Team System  набор инструментов от Microsoft для разработки программных приложений, упрощения совместной работы над проектами, инструментов для тестирования и отладки разрабатываемых… …   Википедия

  • Gcov — Тип Покрытие кода Операционная система Unix like Лицензия GNU General Public License Сайт gnu.org Gcov  бесплатная утилита для исследования …   Википедия

  • Критерий тестового покрытия — У этого термина существуют и другие значения, см. Покрытие. Критерий тестового покрытия  это метрика для оценки качества тестирования. По Майерсу тестирование  это процесс исполнения программы с целью обнаружения ошибок. Таким образом,… …   Википедия

  • Pyramid (программный каркас) — Pyramid Тип Программный каркас веб приложений Разработчик …   Википедия

  • 1: — Терминология 1: : dw Номер дня недели. «1» соответствует понедельнику Определения термина из разных документов: dw DUT Разность между московским и всемирным координированным временем, выраженная целым количеством часов Определения термина из… …   Словарь-справочник терминов нормативно-технической документации


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»