Контроль за качеством кода
TRANSCRIPT
Здравствуйте :)
Контроль за стилем кода
Борисов Кирилл, IT Global Meetup 2015
Контроль за стилем качеством кода
Борисов Кирилл, IT Global Meetup 2015
Теория
Типичная ситуация
Команда разработчиков (3-5 человек)
Общий репозитарий
Что-то покрыто тестами
Жизнь потихонечку идет
Возникающие проблемы
Каждый пишет по-своему
…знает, что его код - правильный
…верит, что остальные это понимают
…думает, что нет смысла беспокоиться
Растет время code review
Сложно править чужой код
Споры о вкусах
Рабочее время тратится зря
Возникающие проблемы
Все плохо.
Чем спасаться?
Создайте style guide
Учитесь разрешать конфликты
Проводите сode review
“Автоматизируйте это!”
Практика
Как это делается в Python?
PEP8 - базовый свод рекомендаций по оформлению кода.
PEP257 - набор рекомендаций по оформлению docstring’ов
Множество инструментов:pep8, pep257, pyflakes, pylint, pychecker…
Следим за стилемpep8 https://github.com/jcrocholl/pep8 Проверка стиля исходного кода.
pep257 https://github.com/GreenSteam/pep257 Проверка форматирования docstring’ов.
isort https://github.com/timothycrosley/isort Сортировка импортов.
Следим за кодом
Статический анализ кода:
pylint
pyflakes
frosted
Готовимся к релизу
pyroma https://bitbucket.org/regebro/pyroma Соответствие setup.py стандартам PyPi.
dodgy https://github.com/landscapeio/dodgy Проверяем на забытые ключи, токены и т.д.
“N в одном”
flake8 https://gitlab.com/pycqa/flake8 pep8 + pyflakes + mccabe
prospector https://github.com/landscapeio/prospector pylint + pyflake + pep8 + pep257 + mccabe
Где проверять?
Пользователь: style guide
IDE: плагины + встроенные средства
Локальная VCS: pre-commit hooks
Общая VCS: pre-receive hooks
Continuous Integration
Онлайн-сервисы
Интегрируются с GitHub/Bitbucket
Бесплатны для open source проектов
Платные планы для приватных репозиториев
Результаты могут варьироваться со временем
Внешние средства: landscape.io
https://landscape.io
Онлайн-версия prospector
Учет особенностей фреймворков
Отслеживание версий зависимостей
Только для Python
Внешние средства: codacy.com
https://codacy.com
Полноценный инструмент поддержки кода
Поддержка различных языков
Большая база паттернов
Интеграция с баг-трекерами и HipChat/Slack
Внешние средства: quantifiedcode.com
https://quantifiedcode.com
https://github.com/quantifiedcode
Свой DSL для задания анти-паттернов
Возможность задавать свои анти-паттерны
Немного сырой :(
Case study
Яндекс.ПаспортИнтегрированный в IDE pep8
Яндекс.ПаспортИнтегрированный в IDE pep8
Git pre-commit hooks:
Сортировка импортов
flake8 (+ поиск print / pdb.set_trace)
Поиск TODO/FIXME
Яндекс.ПаспортИнтегрированный в IDE pep8
Git pre-commit hooks:
Сортировка импортов
flake8 (+ поиск print / pdb.set_trace)
Поиск TODO/FIXME
На что ещё обратить внимание?
Сложность кода
Совместимость с разными версиями Python
Copy-paste
Зависимости
A foolish consistency is the hobgoblin of little minds.
Вопросы?
Спасибо!
@lensvol [email protected]
Собственные инструменты
forgetmenot
<однажды на GitHub>
Поиск TODO/FIXME
Определение автора, момента добавления
Подсветка и оформление
Инструменты
autopep8
https://github.com/hhatto/autopep8
Автоматически правит ошибки PEP8
Может быть не тем, что вы ожидали :(
Очень консервативен
Инструменты
frosted
https://github.com/timothycrosley/frosted
Форк pyflakes
Больше проверок
Python 2.6 - 3.4
Инструменты
pyroma
https://bitbucket.org/regebro/pyroma
Проверка стандартов упаковки кода:PyPi, Distribute, pip…
Ставит оценку вашему коду, сравнивает его с сыром
Инструменты
isort
https://pypi.python.org/pypi/isort
Сортировка импортов
Автоматически правит код
Git-хук в комплекте
Инструменты
prospector
https://github.com/landscapeio/prospector
pylint + pep8 + pyflakes + mccabe + dodgy
Машинно-читаемый вывод
Адаптируется под Django и Celery
Наш выбор
flake8
https://gitlab.com/pycqa/flake8
Три в одном: pep8, pyflakes, mccabe
Легко расширяется
Много готовых плагинов