Контроль за качеством кода

Preview:

Citation preview

Здравствуйте :)

Контроль за стилем кода

Борисов Кирилл, 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 borisov.kir@gmail.com

Собственные инструменты

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

Легко расширяется

Много готовых плагинов

Recommended