Инструменты для анализа кода Python. Часть 1

Инструменты для анализа кода Python. Часть 1

Высокая стоимость ошибок в программных продуктах предъявляет повышенные
требования к качеству кода. Каким критериям должен соответствовать хороший код?
Отсутствие ошибок, расширяемость, поддерживаемость, читаемость и наличие документации. Недостаточное внимание к любому из этих критериев может привести к появлению новых ошибок или снизить вероятность обнаружения уже существующих. Небрежно написанный или чересчур запутанный код, отсутствие документации напрямую влияют на время исправления найденного бага, ведь разработчику приходится заново вникать в код. Даже такие, казалось бы, незначительные вещи как неправильные имена переменных или отсутствие форматирования могут сильно влиять на читаемость и понимание кода.

Командная работа над проектом еще больше повышает требования к качеству кода, поэтому важным условием продуктивной работы команды становится описание формальных требований к написанию кода. Это могут быть соглашения, принятые в языке программирования, на котором ведется разработка, или собственное (внутрикорпоративное) руководство по стилю. Выработанные требования к оформлению кода не исключают появления «разночтений» среди разработчиков и временных затрат на их обсуждение. Кроме этого, соблюдение выработанных требований ложится на плечи программистов в виде дополнительной нагрузки. Все это привело к появлению инструментов для проверки кода на наличие стилистических и логических ошибок. О таких инструментах для языка программирования Python мы и поговорим в этой статье.

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

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

И первая, и вторая группы включают в себя как простые утилиты командной строки для решения узкоспециализированных задач (например, проверка docstring или сортировка импортов), так и богатые по возможностям библиотеки, объединяющие в себе более простые утилиты. Средства анализа кода из первой группы принято называть линтерами (linter). Название происходит от lint — статического анализатора для языка программирования Си и со временем ставшего нарицательным. Программы второй группы называют форматировщиками (formatter).

Даже при поверхностном сравнении этих групп видны особенности работы с ними. При применении линтеров программисту, во-первых, необходимо писать код с оглядкой, дабы позже не исправлять найденные ошибки. И во вторых, принимать решение по поводу обнаруженных ошибок — какие требуют исправления, а какие можно проигнорировать. Форматировщики, напротив, автоматизируют процесс исправления ошибок, оставляя программисту возможность осуществлять контроль.

Список рассматриваемых инструментов для анализа кода Python

Часть 1

Часть 2

Соглашения принятые в статье и общие замечания

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

Версия Python: во всех примерах, приведенных в статье, будет использоваться третья версия языка программирования Python.

Установка всех программ в обзоре практически однотипна и сводится к использованию пакетного менеджера pip.

Некоторые из библиотек имеют готовые бинарные пакеты в репозиториях дистрибутивов linux или возможность установки с использованием git. Тем не менее для большей определенности и возможности повторения примеров из статьи, установка будет производится с помощью pip.

Об ошибках: стоит упомянуть, что говоря об ошибках, обнаруживаемых анализаторами кода, как правило, имеют в виду два типа ошибок. К первому относятся ошибки стиля (неправильные отступы, длинные строки), ко второму — ошибки в логике программы и ошибки синтаксиса языка программирования (опечатки при написании названий стандартных функций, неиспользуемые импорты, дублирование кода). Существуют и другие виды ошибок, например — оставленные в коде пароли или высокая цикломатическая сложность.

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

Содержание файла example. py:

В коде допущено несколько ошибок:

Руководства по стилям: для тех, кто впервые сталкивается с темой оформления кода, в качестве знакомства предлагаем прочитать официальные руководства по стилю для языка Python PEP8 и PEP257. В качестве примера внутрикорпоративных соглашений можно рассмотреть Google Python Style Guide — https://github. com/google/styleguide/blob/gh-pages/pyguide. md

Pycodestyle

Pycodestyle — простая консольная утилита для анализа кода Python, а именно для проверки кода на соответствие PEP8. Один из старейших анализаторов кода, до 2016 года носил название pep8, но был переименован по просьбе создателя языка Python Гвидо ван Россума.

Запустим проверку на нашем коде:

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

Pydocstyle

Утилиту pydocstyle мы уже упоминали в статье Работа с документацией в Python: поиск информации и соглашения. Pydocstyle проверяет наличие docstring у модулей, классов, функций и их соответствие официальному соглашению PEP257.

Pyflakes

В отличие от уже рассмотренных инструментов для анализа кода Python pyflakes не делает проверок стиля. Цель этого анализатора кода — поиск логических и синтаксических ошибок. Разработчики pyflakes сделали упор на скорость работы программы, безопасность и простоту. Несмотря на то, что данная утилита не импортирует проверяемый файл, она прекрасно справляется c поиском синтаксических ошибок и делает это быстро. С другой стороны, такой подход сильно сужает область проверок.
Функциональность pyflakes — “нулевая”, все что он умеет делать — это выводить результаты анализа в консоль:

В нашем тестовом скрипте, он нашел только импорт не используемого модуля os. Вы можете самостоятельно поэкспериментировать с запуском программы и передачей ей в качестве параметра командной строки Python файла, содержащего синтаксические ошибки. Данная утилита имеет еще одну особенность — если вы используете обе версии Python, вам придется установить отдельные утилиты для каждой из версий.

Pylint

До сих пор мы рассматривали утилиты, которые проводили проверки на наличие либо стилистических, либо логических ошибок. Следующий в обзоре статический инструмент для анализа кода Python — Pylint, который совместил в себе обе возможности. Этот мощный, гибко настраиваемый инструмент для анализа кода Python отличается большим количеством проверок и разнообразием отчетов. Это один из самых “придирчивых” и “многословных” анализаторов кода. Анализ нашего тестового скрипта выдает весьма обширный отчет, состоящий из списка найденных в ходе анализа недочетов, статистических отчетов, представленных в виде таблиц, и общей оценки кода:

Программа имеет свою внутреннюю маркировку проблемных мест в коде:

[R]efactor — требуется рефакторинг,
[C]onvention — нарушено следование стилистике и соглашениям,
[W]arning — потенциальная ошибка,
[E]rror — ошибка,
[F]atal — ошибка, которая препятствует дальнейшей работе программы.

— Генерация файла настроек (—generate-rcfile). Позволяет не писать конфигурационный файл с нуля. В созданном rcfile содержатся все текущие настройки с подробными комментариями к ним, вам остается только отредактировать его под собственные требования.

— Отключение вывода в коде. При редактировании кода есть возможность вставить блокирующие вывод сообщений комментарии. Чтобы продемонстрировать это, в определение функции в файле примера example. py добавим строку:

и запустим pylint. Из результатов проверки “исчезло” сообщение:

— Создание отчетов в формате json (—output-format=json). Полезно, если необходимо сохранение или дальнейшая обработка результатов работы линтера. Вы также можете создать собственный формат вывода данных.

— Параллельный запуск (-j 4). Запуск в нескольких параллельных потоках на многоядерных процессорах сокращает время проверки.

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

— Плагины — отличная возможность изменять поведение pylint. Их применение может оказаться полезным в случаях, когда pylint неправильно обрабатывает код и есть “ложные” срабатывания, или когда требуется отличный от стандартного формат вывода результатов.

Vulture

Vulture — небольшая утилита для поиска “мертвого” кода в программах Python. Она использует модуль ast стандартной библиотеки и создает абстрактные синтаксические деревья для всех файлов исходного кода в проекте. Далее осуществляется поиск всех объектов, которые были определены, но не используются. Vulture полезно применять для очистки и нахождения ошибок в больших базовых кодах.

Продолжение следует

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

ФРОО рекомендует:
До конца октября действует промокод backupmaster, который дает скидку 5000 рублей на курс Программирование на Python и 5000 рублей на курс Машинное обучение и анализ данных.

Редактор Sublime Text

Sublime Text — это известный текстовый редактор, широко используемый, в частности, для написания Python-кода. Удобный пользовательский интерфейс Sublime Text, а также многочисленные расширения для подсветки синтаксиса, поиска исходного файла и анализа метрик кода делают редактор более доступным для новичков в программировании, чем некоторые другие приложения, такие как Vim и Emacs. При этом Sublime Text — это воплощение концепции одновременно и текстового редактора, и среды программирования.

Что делает редактор Sublime таким потрясающим?

Зачастую, Sublime Text — это первый редактор, который выбирают новички. Он работает на всех платформах и намного проще в изучении, чем Emacs, Vim или даже PyCharm.

В Sublime легко начать работу, так как все пункты меню и другие опции доступны с помощью мыши. Не нужно изучать различные режимы, как например в Vim, где есть нормальный режим и режим вставки. Быстрые сочетания клавиш можно выучить в процессе работы, в отличие от тех же Vim или Emacs.

Sublime идеален для начинающих, а с ростом навыков разработчика всегда можно перейти на полноценную IDE, например на PyCharm.

Дополнительным бонусом для Python-разработчика является тот факт, что плагины для этого редактора пишутся на Python. То есть, чтобы написать расширение для Sublime Text, не надо учить новый язык программирования, как язык Elisp в Emacs или Vimscript в Vim.

Зачем же тогда используют какие-то другие редакторы, если Sublime настолько хорош?

Выбор текстового редактора или среды программирования (IDE) это, как правило очень личное решение каждого разработчика. Но следует понимать, что в выбранной среде разработки вы будете проводить много времени, и так день за днем. Поэтому имеет смысл убедиться, что вы сделали правильный выбор, и ваш редактор (или IDE) приятен в использовании и отличается высокой производительностью.

Одни разработчики предпочитают Vim, который управляется исключительно при помощи клавиатуры, другие — PyCharm с ее стилем «все включено» или еще какой-нибудь из множества других редакторов, каждый из которых имеет свои достоинства и недостатки.

Единственно возможный «лучший выбор редактора» — это выбрать подходящий лично для вас и остановится на нём. Отточите ваши навыки работы с этим инструментом настолько, чтобы иметь возможность фокусироваться исключительно на коде, а не на функционале редактора.

Несколько ссылок на ресурсы по Sublime Text для Python-разработчиков

По Sublime Text есть много руководств и различных ресурсов, так как этот редактор очень популярен среди Python-разработчиков. Изучив материалы из нашего списка, вы сможете дополнить ваш редактор Sublime анализаторами кода и средствами для оценки его метрик, проверкой синтаксиса и другими фичами, обычно присущими исключительно IDE.

Общие ресурсы по Sublime Text

Разумеется, Sublime Text можно использовать не только для Python-разработки. Существует много полезных пособий, не направленных на какой-то конкретный язык программирования.

Ресурсы по плагинам Sublime

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

Запуск программ Python на Sublime Text 3

Привет разработчикам Python, здесь мы узнаем, как запускать программы python в редакторе Sublime Text 3, загружать и устанавливать Sublime Text 3, устанавливать пакеты и многое другое.

Редактор Sublime Text 3

Преимущества

Особенности Sublime Text 3

Палитра команд

Это еще одна мощная особенность Sublime Text 3. Он позволяет выполнять различные функции, такие как сортировка, изменение синтаксиса, а также изменение параметров идентификации.

Используя палитру команд, вы можете получить доступ ко многим вещам, таким как обработка проектов sublime, изменение синтаксиса файлов, вызов команд пакета и т. д. Чтобы использовать палитру команд – нажмите ctrl+shift+p, затем выберите команду и нажмите Enter.

Множественный выбор

Это одна из лучших особенностей Sublime Text 3. Используя эту функцию, вы сможете изменять несколько строк одновременно, а также быстрее манипулировать файлами. Он работает как быстрая замена для поиска и замены или для применения одной и той же последовательности изменений к нескольким строкам одновременно.

Чтобы использовать множественное выделение, выделите блок текста, затем нажмите Ctrl+Shift+L, чтобы разделить его на одно выделение в строке, а затем нажмите Ctrl+D, чтобы выбрать следующее вхождение выбранного слова.

Другие Особенности

Помимо вышеперечисленных функций Sublime Text 3 имеет также некоторые другие функции, такие как:

Sublime Run Python Tutorial – Запустите свою первую программу

Без сомнения, Sublime text является самым любимым текстовым редактором в сообществе разработчиков и может служить отличным текстовым редактором Python. Итак, теперь мы увидим, как использовать его для python.

Загрузка и установка

Прежде всего, вы должны скачать его. Ссылка для скачивания-https://www. sublimetext. com/3 Вы увидите описание версии следующим образом:

Запуск программ Python на Sublime Text 3

И теперь вы должны выбрать один из них в качестве требования к вашему компьютеру. Установите скачанный файл.

Протестируйте простую программу

Теперь мы увидим выполнение программы python на SublimeText 3. Для этого мы должны сделать вот что:

Здесь берем простую программу, то есть сложение двух чисел. Так что код есть:

num1 = 7
num2 = 9
# Сложите два числа
sum = float(num1) + float(num2)
# Отображение суммы
print(‘Сумма <0>и <1>равна <2>’.format(num1, num2, sum))

Запуск Кода

Перейдите в пункт Инструмент в строке меню, а затем нажмите кнопку Построить систему и внутри нее выберите пункт Python. Затем перейдите в раздел Tool option и нажмите кнопку Build option, которая выполнит ваш код.

Запуск программ Python на Sublime Text 3

Итак, теперь, запустив приведенный выше код, мы получим следующий вывод:

Поздравляем, код python успешно работает на sublime! Надеемся, что эта статья будет полезна для вас. И если у вас есть какие-либо вопросы по поводу SublimeText 3, оставляйте свои комментарии!

Источники:

https://proglib. io/p/python-code-analysis/

https://pythonist. ru/redaktor-sublime-text/

https://welcome4u. ru/languages/python/python-na-sublime-text-3

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: