Покрытие кода
Покры́тие ко́да — мера, используемая при тестировании программного обеспечения. Она показывает процент исходного кода программы, который выполняется в процессе тестирования, то есть покрыт тестами.
Техника покрытия кода была одной из первых методик, изобретённых для систематического тестирования программного обеспечения (особенно, при тестировании белого ящика). Первое упоминание покрытия кода в публикациях появилось в 1963 году[1].
Критерии
[править | править код]Существует несколько различных способов измерения покрытия, основные из них:
- покрытие операторов — каждая ли строка исходного кода была выполнена и протестирована;
- покрытие условий — каждая ли точка решения (вычисления истинно ли или ложно выражение) была выполнена и протестирована;
- покрытие путей — все ли возможные пути через заданную часть кода были выполнены и протестированы;
- покрытие функций — каждая ли функция программы была выполнена;
- покрытие вход/выход — все ли вызовы функций и возвраты из них были выполнены.
- покрытие значений параметров — все ли типовые и граничные значения параметров были проверены.
Для программ с особыми требованиями к безопасности часто требуется продемонстрировать, что тестами достигается 100 % покрытие для одного из критериев. Некоторые из приведённых критериев покрытия связаны между собой; например, покрытие путей включает в себя и покрытие условий, и покрытие операторов. Покрытие операторов не включает покрытие условий, как показывает этот фрагмент программы на языке Си:
printf("this is");
if (bar < 1)
{
printf(" not ");
}
printf("a positive integer");
Если здесь bar = −1
, то покрытие операторов будет полным, а покрытие условий — нет, так как случай несоблюдения условия в операторе if — не покрыт (и при этом для положительных чисел вывод будет искажённым). Полное покрытие путей обычно невозможно. Фрагмент кода, имеющий n условий содержит путей; конструкция цикла порождает бесконечное количество путей. Некоторые пути в программе могут быть не достигнуты из-за того, что в тестовых данных отсутствовали такие, которые могли привести к выполнению этих путей. Не существует универсального алгоритма, который решал бы проблему недостижимых путей (этот алгоритм можно было бы использовать для решения проблемы остановки).
Практическое применение
[править | править код]Обычно исходный код снабжается тестами, которые регулярно выполняются. Полученный отчёт анализируется с целью выявить невыполнявшиеся области кода, набор тестов обновляется, пишутся тесты для непокрытых областей. Цель состоит в том, чтобы получить набор тестов для регрессионного тестирования, тщательно проверяющих весь исходный код.
Долю покрытия кода обычно выражают в процентах. Например, «мы протестировали 67 % кода». Смысл этой фразы зависит от того какой критерий был использован. Например, 67 % покрытия путей — это лучший результат чем 67 % покрытия операторов. Вопрос о связи значения покрытия кода и качества тестового набора ещё до конца не решён.
См. также
[править | править код]- Метрика программного обеспечения
- Регрессионное тестирование
- Покрытие требований
- Профилирование
- gcov — утилита для сбора покрытия кода из пакета GCC
- tcov[англ.] сходная утилита для ОС 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
Для улучшения этой статьи желательно:
|