Як я можу проаналізувати код Python для виявлення проблемних областей?


99

У мене є великий сховище джерела, розділене на кілька проектів. Я хотів би скласти звіт про стан здоров'я вихідного коду, визначивши проблемні області, які потрібно вирішити.

Зокрема, я хотів би зателефонувати на підпрограми з високою цикломатичною складністю, виявити повторення та, можливо, провести якийсь схожий статичний аналіз, щоб виявити підозрілі (і, ймовірно, помилкові) конструкції.

Як я можу піти про створення такого звіту?

Відповіді:


36

Для вимірювання цикломатичної складності на сайті traceback.org є приємний інструмент . Сторінка також дає хороший огляд того, як інтерпретувати результати.

+1 для пілінта . Це чудово для перевірки дотримання стандартів кодування (будь то PEP8 або варіант вашої власної організації), що врешті може допомогти зменшити цикломатичну складність.


4
traceback.org перервана посилання
denfromufa

Пілінт чудовий, але повільний. Ми використовуємо як гачок перед натисканням, але використовуємо flake8 та купу плагінів для регулярних перевірок та попереднього зачеплення. Насправді, я б рекомендував https://flakehell.readthedocs.io/config.htmlці дні, оскільки його модель виконання набагато надійніша та настроюється.
DylanYoung

29

Для цикломатичної складності можна використовувати radon: https://github.com/rubik/radon

(Використовуйте pipдля встановлення:pip install radon )

Крім того, він також має такі функції:

  • необроблені показники (сюди входять рядки SLOC, рядки коментарів, порожні рядки та ін.)
  • Показники Галстеда (усі вони)
  • Індекс ремонтопридатності (той, який використовується у Visual Studio)

Який перемикач отримує показники Halstead?
Діма Тиснек

1
@qarma Якщо я розумію документи, я не думаю, що ви можете використовувати командний рядок. Ви повинні використовувати API Python.
Дейв Халтер


11

Pycana працює як шарм, коли вам потрібно зрозуміти новий проект!

PyCAna (Python Code Analyzer) - фантастична назва простого аналізатора коду для python, який створює діаграму класів після виконання вашого коду.

Подивіться, як це працює: http://pycana.sourceforge.net/

вихід:

alt текст



6

Використовуйте flake8 , який забезпечує аналіз pep8, pyflakes та циклічний аналіз складності в одному інструменті


4

Існує інструмент під назвою CloneDigger, який допомагає вам знайти аналогічні фрагменти коду.


1
Він не працює з Python 3, і він ніколи не був добре підтримуваний.
Акумен

3

Для перевірки цикломатичної складності, звичайно, є mccabeпакет.

Установка:

$ pip install --upgrade mccabe

Використання:

$ python -m mccabe --min=6 path/to/myfile.py

Зверніть увагу на поріг 6 вище. Відповідно до цієї відповіді , балів> 5, ймовірно, слід спростити.

Вибірка з --min=3:

68:1: 'Fetcher.fetch' 3
48:1: 'Fetcher._read_dom_tag' 3
103:1: 'main' 3

Він необов'язково може бути також використаний за допомогою pylint-mccabe або pytest-mccabe тощо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.