Есть ли какой-либо инструмент/библиотека, которые вычисляют процент "покрытия условий/решений" кода python. Я нашел только cover.py, но он вычисляет только процент "покрытия операторов".
Покрытие условий в python
Ответ 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
Ответ 7
Похоже, что "инструментальное" реализует условие покрытия:
Ссылка о cover.py и инструментальном
Кто-нибудь попробовал? Он имеет крошечный номер версии. Мне нужно что-то, чему я могу доверять.