Подтвердить что ты не робот

Покрытие условий в python

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

4b9b3361

Ответ 1

Coverage.py теперь включает в себя охват веток.

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

Ответ 2

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

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

Ответ 3

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

Например,

raise SomeException(x)

Для покрытия веток необходимо проверить, что SomeException (x) был полностью инстанцирован и не вызвал собственного исключения.

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

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

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

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

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

Анализ и изменение АСТ - правильный ответ, ИМХО. См. Эту статью для полного описания того, что вам нужно сделать: "Отраслевое покрытие облегчено для произвольных языков"

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