Оценка качества и полноты тестирования является сложной задачей. Сколько тестов достаточно провести, чтобы убедиться в работоспособности отдельной функции или программы в целом? Если программа представляет собой последовательности из N условных операторов, то возможно 2N вариантов выполнения программы (какие условия выполнились). При идеальном тестировании нужно проверить все варианты, что малореально. В качестве критериев оценки качества тестирования крупной системы, для которой невозможно проверть все комбинации входных данных, обычно рассматривают количество выявленных ошибок (успешность тестирования) и количество выявленных ошибок в процессе эксплуатации (неудача тестирования, так как ошибка не была выявлена на стадии тестирования).
При тестировании отдельной функции (например, функции проверки корректности номера паспорта, которая является частью системы продажи авиабилетов) можно говорить о покрытии исходного кода набором тестов. При выполнении тестов можно вычислить, сколько раз выполнялся тот или иной оператор в программе. Полное паокрытие означает, что все операторы выполнялись по крайней меер один раз. На практике следует проверять:
Покрытие тестами является формальным критерий качества. При этом нужно понимать, что полное покрытие не гарантирует, что при тестировании были проверены все возможные последовательности выполнения программы. В примере с цепочкой условных операторов тесты могут быть составлены таким образом, что каждый тест приводт к истинности только одного условия. Выполнение N тестов даст 100%-покрытие кода, но очевидно, что далеко не все возможные варианты исполнения программы были проверены.
Компилятор gcc имеет специальный ключ компляции --coverage, который включает в исполняемый файл программы код для подсчета числа выполнения операторов. Если программа была откомплирована с этим ключом, то после ее запуска в текущей директории создаются служебные файлы, из которых программой gcov можно сформировать пригодный для человека отчет (текстовый файл). Рассмотрим как это делается на примере.