Покрытие кода
Покры́тие ко́да — мера, используемая при тестировании программного обеспечения. Она показывает процент исходного кода программы, который был выполнен в процессе тестирования.
Техника покрытия кода была одной из первых методик, изобретённых для систематического тестирования программного обеспечения (особенно, при тестировании белого ящика). Первое упоминание покрытия кода в публикациях появилось в 1963 году[1].
КритерииПравить
Существует несколько различных способов измерения покрытия, основные из них:
- покрытие операторов — каждая ли строка исходного кода была выполнена и протестирована;
- покрытие условий — каждая ли точка решения (вычисления истинно ли или ложно выражение) была выполнена и протестирована;
- покрытие путей — все ли возможные пути через заданную часть кода были выполнены и протестированы;
- покрытие функций — каждая ли функция программы была выполнена;
- покрытие вход/выход — все ли вызовы функций и возвраты из них были выполнены.
- покрытие значений параметров — все ли типовые и граничные значения параметров были проверены.
Для программ с особыми требованиями к безопасности часто требуется продемонстрировать, что тестами достигается 100 % покрытие для одного из критериев. Некоторые из приведённых критериев покрытия связаны между собой; например, покрытие путей включает в себя и покрытие условий, и покрытие операторов. Покрытие операторов не включает покрытие условий, как показывает этот фрагмент программы на языке Си:
printf("this is");
if (bar < 1)
{
printf(" not ");
}
printf("a positive integer");
Если здесь bar = −1
, то покрытие операторов будет полным, а покрытие условий — нет, так как случай несоблюдения условия в операторе if — не покрыт (и при этом для положительных чисел вывод будет искажённым). Полное покрытие путей обычно невозможно. Фрагмент кода, имеющий n условий содержит путей; конструкция цикла порождает бесконечное количество путей. Некоторые пути в программе могут быть не достигнуты из-за того, что в тестовых данных отсутствовали такие, которые могли привести к выполнению этих путей. Не существует универсального алгоритма, который решал бы проблему недостижимых путей (этот алгоритм можно было бы использовать для решения проблемы остановки).
На практике, для достижения покрытия путей используется следующий подход: выделяются классы путей (например, к одному классу можно отнести пути, отличающиеся только количеством итераций в одном и том же цикле), 100 % покрытие достигнуто, если покрыты все классы путей (класс считается покрытым, если покрыт хотя бы один путь из него).[источник не указан 4662 дня]
Практическое применениеПравить
Обычно исходный код снабжается тестами, которые регулярно выполняются. Полученный отчёт анализируется с целью выявить невыполнявшиеся области кода, набор тестов обновляется, пишутся тесты для непокрытых областей. Цель состоит в том, чтобы получить набор тестов для регрессионного тестирования, тщательно проверяющих весь исходный код.
Степень покрытия кода обычно выражают в виде процента. Например, «мы протестировали 67 % кода». Смысл этой фразы зависит от того какой критерий был использован. Например, 67 % покрытия путей — это лучший результат чем 67 % покрытия операторов. Вопрос о связи значения покрытия кода и качества тестового набора ещё до конца не решён.
См. такжеПравить
- Метрика программного обеспечения
- Регрессионное тестирование
- Покрытие требований
- Профилирование
- gcov — утилита для сбора покрытия кода из пакета GCC
- tcov[en] сходная утилита для ОС Solaris из состава Sun Studio
- codecov утилита покрытия кода от Intel
- Testwell CTC++ Система анализа покрытия кода
ПримечанияПравить
- ↑ Joan C. Miller, Clifford J. Maloney. Systematic mistake analysis of digital computer programs (англ.) // Communications of the ACM : journal. — New York, NY, USA: Association for Computing Machinery, 1963. — February (vol. 6, no. 2). — P. 58—63. — ISSN 0001-0782. — doi:10.1145/366246.366248.
СсылкиПравить
- RTCA/DO-178B. Software Considerations In Airborne Systems And Equipment Certification, 1992.
- Использование покрытия кода для определения объёма протестированного кода Архивная копия от 1 января 2017 на Wayback Machine (рус.), справка Microsoft Visual Studio 2015
Для улучшения этой статьи желательно:
|