покрытие условий в питоне - PullRequest
18 голосов
/ 24 марта 2009

Существует ли какой-либо инструмент / библиотека, которая вычисляет процент "покрытия условий / решений" кода Python. Я нашел только cover.py, но он вычисляет только процент от "покрытия выписки".

Ответы [ 7 ]

8 голосов
/ 11 ноября 2009

Coverage.py теперь включает покрытие филиалов .

Для любопытных: код не изменяется перед запуском. Функция трассировки отслеживает, какие строки следуют за какими при выполнении, и сравнивает эту информацию со статическим анализом скомпилированного байтового кода, чтобы найти не выполненные возможности пути.

2 голосов
/ 26 марта 2009

Я не использовал его сам, но если вы готовы заменить анализ покрытия на тестирование на мутации , я слышал о тестере мутаций под названием "pester".

Пока я занимался поиском, я также наткнулся на список инструментов тестирования Python , в котором упоминаются некоторые возможные инструменты покрытия кода.

2 голосов
/ 25 марта 2009

Я не знаю каких-либо инструментов покрытия веток для Python, хотя я собирался написать один. Я думал начать с AST и добавить дополнительные инструменты для каждой точки ветвления. Это выполнимо, но есть некоторые хитрые случаи.

Например,

raise SomeException(x)

Покрытие ветки для этого должно проверить, что SomeException (x) был полностью создан и не вызвал свое собственное исключение.

assert x, "Oh No!: %r" % (x, y)

Это необходимо для проверки того, что текст в правой части утверждения утверждения полностью оценен.

return args.name or os.getenv("NAME") or die("no name present")

Каждое из первых двух слагаемых должно быть проверено на истинный / ложный путь, но не последний. На самом деле, последний может даже не вернуться.

Было много случаев для беспокойства, и у меня не было острой необходимости в этом, кроме любопытства, поэтому я никуда не ходил с этим. Мне также было интересно, получу ли я много ложных срабатываний, когда мне понадобится какой-то способ подавления определенных предупреждений.

Если вы хотите попробовать этот маршрут, начните с Python 2.6 или 3.0. В этих выпусках модуль AST документирован, и вы можете создавать свои собственные узлы AST перед созданием кода или файла .pyc.

2 голосов
/ 24 марта 2009

Вы ищете цикломатическая сложность (Википедия) ? Он в основном вычисляет количество путей через кусок кода. Есть некоторые проекты для вычисления этого для кода Python, например PyMetrics или этот . Гугл наверняка поднимет еще.

Но я не знаю дальнейшей интеграции с юнит-тестами, которые покажут вам покрытие.

1 голос
/ 25 марта 2009

Тот же сопровождающий cover.py имеет статью, в которой обсуждается способ получения информации покрытия на уровне байт-кода . Метод немного хитрый: он включает в себя повторную сборку файлов .pyc с измененными номерами строк. Тем не менее, он обеспечивает настолько большую степень детализации при измерении покрытия, насколько вы могли бы попросить.

0 голосов
/ 28 мая 2016

Похоже, что "инструментальный" реализует условие покрытия:

Инструментальная на Pypi

Ссылка на cover.py и инструментал

Кто-нибудь пробовал? У него есть крошечный номер версии. Мне нужно то, чему я могу доверять.

0 голосов
/ 12 июля 2009

Разбор и изменение AST - правильный ответ, ИМХО. Смотрите эту статью для полного описания того, что вам нужно сделать: «Освещение филиалов стало проще для произвольных языков»

http://www.semanticdesigns.com/Company/Publications/TestCoverage.pdf

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...