Проблема остановки на практике
От: malphunction  
Дата: 06.09.12 03:48
Оценка: 8 (2)
Я уже поднимал эту тему здесь: http://rsdn.ru/forum/apptesting/4816033.1.aspx
Автор: malphunction
Дата: 12.07.12
, но там как-то
вяло отвечали и отфутболили сюда.

Переформулирую вопрос так: есть такая вещь, как покрытие трасс кода тестами. Код полностью покрыт,
если покрыты все трассы. Одинаковые классы входных данных дают один путь. Например, код
if (a > 10) x(); else y(); не нужно тестировать со всеми значениями переменной a, достаточно
двух тестов, где a > 10 и где a <= 10 (например, две трассы, в которых a = 15 и a = 2 -- подойдут).

Ясно, что в общем случае покрыть произвольную программу тестами невозможно, т.к. это эквивалентно
решению проблемы остановки.

Но как часто такие "невозможные для покрытия" программы встречаются на практике?

Ясно, что бывают запутанные программы, для покрытия которых требуется астрономическое число
вариантов. Но недавние успехи в автоматическом тестировании показывают, что и это
уже почти не проблема. Вот тут http://habrahabr.ru/post/128503/ описывается пример системы
KLEE, при помощью которой было достигнуто 94% покрытия кода Coreutils, при котором было
сгенерировано 3321 тестов и найдено 10 новых ошибок.

Итак, вопросы: Можете ли вы привести пример программы, не поддающейся покрытию тестами?
Можете ли привести примеры кода из реальных проектов?

P.S. Наверное, такая программа -- это вариации на тему самоприменимости или какой-то хитрой
рекурсии, я покак ещё не разобрался...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.