Рубрики
Без рубрики

Инструменты статического анализа Python

В опросе от стека-переполнения в 2020 году разработчики по всему миру занимают Python, как третий самый любимый … Помечено с Python, Codequality, CodeReview.

Автор оригинала: Shubhendra Singh Chauhan.

В опросе от переполнения стека в 2020 году разработчики по всему миру занимают Python в качестве Третий самый любимый язык программирования и самый верхний разыскиваемый язык программирования. Python настолько популярен среди разработчиков, которые неудивительно, почему для него так много инструментов статического анализа. Но как вы выбираете лучший статический инструмент анализа кода среди них? В этом блоге я поделюсь, что, почему и как анализ статического кода для вашего кода Python.

Что такое статический анализ кода?

Статический анализ кода – это процесс анализа компьютерной программы для поиска проблем, не выполняющих его. Как правило, статический анализ выполняется в исходном коде программы с инструментами, которые преобразуют программу в Абстрактное синтаксическое дерево (AST) Чтобы понять структуру кода, а затем найти проблемы в нем.

Почему я должен использовать статический инструмент анализа?

Анализ статического кода может помочь определить антиблокировки в коде и обнаруживать возможные проблемы качества кода и вопросов безопасности. Это позволяет вам найти и исправить проблемы в коде на ранних этапах развития, снижая вероятность возникновения вопросов позже в производстве. Тип статического анализа, проведенного этими инструментами:

  • Анализ стилизации кода
  • Безопасность
  • Обнаружение ошибок
  • Создание диаграммы UML
  • Дублирующее обнаружение кода
  • Анализ сложности
  • Комментарий стиль анализа
  • Неиспользованное обнаружение кода

Преимущества анализа статического кода

Анализ статического кода не является точным 100%, а иногда и возвращает ложные позитивы или ложные негативы. Однако у него многочисленные преимущества, в том числе:

  • Относительная точность – поймать еще много ошибок, чем по ручному анализу
  • Скорость для обнаружения ошибок
  • Полковещательность тестирования
  • Уменьшает риск высокой ударной ошибки после выпуска программного обеспечения
  • Возможность раскрытия ошибок, которые обычно не обнаружены во время динамического тестирования

Лучшие инструменты статического анализа для Python

Давайте посмотрим на инструменты, которые существуют в экосистеме Python для анализа статического кода:

Пилинг

Пилинт Является ли статический инструмент анализа кода, который перечисляет ошибку, которая может прийти после выполнения кода Python, помогает обеспечить обеспечение стандарта кодирования и искать запахи кода, предлагает простые рефакторингические предложения и другие предложения о сложности кода.

Пилинт Был около 13 лет, и он все еще постоянно поддерживается. Хотя это педантично из коробки, он полностью настраивается через .pylintrc Файл, который вы можете настроить для ошибок или соглашений, имеющих отношение к вам.

Пример:

Вот программа, имеющая некоторые проблемы стиля:

sample.py

a = 23
b = 45
c = a + b

print(c)

После запуска пилинг Вы получите следующий вывод, который перечисляет несколько проблем стилизации в программе.

% pylint sample.py  
************* Module sample
sample.py:5:0: C0304: Final newline missing (missing-final-newline)
sample.py:1:0: C0114: Missing module docstring (missing-module-docstring)
sample.py:1:0: C0103: Constant name "a" doesn't conform to UPPER_CASE naming style (invalid-name)
sample.py:2:0: C0103: Constant name "b" doesn't conform to UPPER_CASE naming style (invalid-name)
sample.py:3:0: C0103: Constant name "c" doesn't conform to UPPER_CASE naming style (invalid-name)

Пильфлики

Pyflakes Это инструмент проверки для исходного кода Python. Это просто не проверяет стиль вообще, но проверяет только логистические ошибки. Он излучает очень мало ложных срабатывающих позитивов, что означает, что он не будет отображать ошибки о пропущенных Docstrings или имена аргументов, которые не соответствуют стилю именования.

Что делает Pyflakes быстрее, чем Пилинт Это его способность изучить AS каждая файл индивидуально, в сочетании с ограниченным набором ошибок.

Вы можете установить Pyflakes с участием

$ pip install --upgrade pyflakes

Как я уже упоминал ранее, Pyflakes Не делайте никаких стилистических чеков, но если вы хотите, вы можете сделать проверки в стиле, используя другой инструмент под названием Flake8. который сочетает в себе Pyflakes с Pep8 Проверки стилей. Кроме того, Flake8 Также дает вам преимущество добавления параметров конфигурации для каждого проекта.

Майка

Marpy немного отличается от Пилинт и Pyflakes Как это статический тип проверки для Python. Требуется ваш код, который должен быть аннотирован с использованием синтаксиса аннотации функций Python 3 ( Pep484 ) для того, чтобы выбрать код и обнаружить общие ошибки. Цель Marpy состоит в том, чтобы объединить преимущества динамического и статического набора (используя модуль печатания).

От Python …

def fib(n):
    a, b = 0, 1
    while a < n:
        yield a
        a, b = b, a+b

… к статически набратому Python

def fib(n: int) -> Iterator[int]:
    a, b = 0, 1
    while a < n:
        yield a
        a, b = b, a+b

Тип объявления действуют как машиностроенная документация, а статическая набравка делает ваш код прозрачным и простым в модификации без ошибок.

Проспект

Перспектор – это мощный статический инструмент анализа для кода Python. Он отображает информацию об ошибках, потенциальных проблемах, нарушениях конвенции и сложности. Он объединяет функциональность других инструментов анализа, таких как:

  • Pylint – качество кода/обнаружение ошибок/обнаружение дублирования кода
  • Pep8.py – Pep8 качество кода
  • Pep257.py – Pep27 Качество комментариев
  • Pyflakes – Обнаружение ошибок
  • MCCABE – анализатор цикломатического сложности
  • хитрый – Обнаружение утечки секретов
  • Пирома – Setup.py Validator.
  • Стервятность – Неиспользованное обнаружение кода

Посревектор имеет ряд настроек для подавления приманки от Пилинт , Pep8 или Pyflakes и предоставить только то, что важно.

Бандит

Bandit – это инструмент, разработанный для поиска общих проблем безопасности в Python Code. Для этого он анализирует каждый файл, создает из него AST и запускает подходящие плагины к узлам AST. После того, как он завершил статический анализ для вопросов безопасности по всем документам, он генерирует отчет. Он может искать жесткозедированные пароли, недействительным сортизацией/дезерриализацией, инъекций оболочек и инъекций SQL.

Автоматизированный анализ статического кода

Вы также можете автоматизировать анализ статического кода, который может помочь вам разработать культуру создания кода качества. Автоматизация статического анализа кода экономит много времени. Это помогает определить проблемы, которые не могут быть обнаружены иначе.

Особенности и возможности

Большинство автоматизированных инструментов анализа статического кода предлагают следующие функции:

  • Несколько языковой поддержки программирования
  • Различные безопасные и отраслевые стандартные библиотеки
  • Стандартизация кода
  • Ресторан и аналитические панели
  • Некоторые предлагают сторонние интеграции, включая GitHub и Jenkins

Идеальный пример автоматизированного статического анализа и инструмента обзора кода – DeepSource Отказ Вы можете использовать его бесплатно в проектах с открытым исходным кодом.

Оригинал: “https://dev.to/withshubh/python-static-analysis-tools-275b”