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

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

  • Upload
    -

  • View
    489

  • Download
    0

Embed Size (px)

Citation preview

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

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

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

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

Борисов Кирилл, IT Global Meetup 2015

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

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

Борисов Кирилл, IT Global Meetup 2015

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

Теория

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

Типичная ситуация

Команда разработчиков (3-5 человек)

Общий репозитарий

Что-то покрыто тестами

Жизнь потихонечку идет

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

Возникающие проблемы

Каждый пишет по-своему

…знает, что его код - правильный

…верит, что остальные это понимают

…думает, что нет смысла беспокоиться

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

Растет время code review

Сложно править чужой код

Споры о вкусах

Рабочее время тратится зря

Возникающие проблемы

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

Все плохо.

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

Чем спасаться?

Создайте style guide

Учитесь разрешать конфликты

Проводите сode review

“Автоматизируйте это!”

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

Практика

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

Как это делается в Python?

PEP8 - базовый свод рекомендаций по оформлению кода.

PEP257 - набор рекомендаций по оформлению docstring’ов

Множество инструментов:pep8, pep257, pyflakes, pylint, pychecker…

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

Следим за стилемpep8 https://github.com/jcrocholl/pep8 Проверка стиля исходного кода.

pep257 https://github.com/GreenSteam/pep257 Проверка форматирования docstring’ов.

isort https://github.com/timothycrosley/isort Сортировка импортов.

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

Следим за кодом

Статический анализ кода:

pylint

pyflakes

frosted

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

Готовимся к релизу

pyroma https://bitbucket.org/regebro/pyroma Соответствие setup.py стандартам PyPi.

dodgy https://github.com/landscapeio/dodgy Проверяем на забытые ключи, токены и т.д.

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

“N в одном”

flake8 https://gitlab.com/pycqa/flake8 pep8 + pyflakes + mccabe

prospector https://github.com/landscapeio/prospector pylint + pyflake + pep8 + pep257 + mccabe

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

Где проверять?

Пользователь: style guide

IDE: плагины + встроенные средства

Локальная VCS: pre-commit hooks

Общая VCS: pre-receive hooks

Continuous Integration

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

Онлайн-сервисы

Интегрируются с GitHub/Bitbucket

Бесплатны для open source проектов

Платные планы для приватных репозиториев

Результаты могут варьироваться со временем

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

Внешние средства: landscape.io

https://landscape.io

Онлайн-версия prospector

Учет особенностей фреймворков

Отслеживание версий зависимостей

Только для Python

Page 21: Контроль за качеством кода
Page 22: Контроль за качеством кода
Page 23: Контроль за качеством кода

Внешние средства: codacy.com

https://codacy.com

Полноценный инструмент поддержки кода

Поддержка различных языков

Большая база паттернов

Интеграция с баг-трекерами и HipChat/Slack

Page 24: Контроль за качеством кода
Page 25: Контроль за качеством кода
Page 26: Контроль за качеством кода

Внешние средства: quantifiedcode.com

https://quantifiedcode.com

https://github.com/quantifiedcode

Свой DSL для задания анти-паттернов

Возможность задавать свои анти-паттерны

Немного сырой :(

Page 27: Контроль за качеством кода
Page 28: Контроль за качеством кода
Page 29: Контроль за качеством кода

Case study

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

Яндекс.ПаспортИнтегрированный в IDE pep8

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

Яндекс.ПаспортИнтегрированный в IDE pep8

Git pre-commit hooks:

Сортировка импортов

flake8 (+ поиск print / pdb.set_trace)

Поиск TODO/FIXME

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

Яндекс.ПаспортИнтегрированный в IDE pep8

Git pre-commit hooks:

Сортировка импортов

flake8 (+ поиск print / pdb.set_trace)

Поиск TODO/FIXME

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

На что ещё обратить внимание?

Сложность кода

Совместимость с разными версиями Python

Copy-paste

Зависимости

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

A foolish consistency is the hobgoblin of little minds.

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

Вопросы?

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

Спасибо!

@lensvol [email protected]

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

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

forgetmenot

<однажды на GitHub>

Поиск TODO/FIXME

Определение автора, момента добавления

Подсветка и оформление

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

Инструменты

autopep8

https://github.com/hhatto/autopep8

Автоматически правит ошибки PEP8

Может быть не тем, что вы ожидали :(

Очень консервативен

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

Инструменты

frosted

https://github.com/timothycrosley/frosted

Форк pyflakes

Больше проверок

Python 2.6 - 3.4

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

Инструменты

pyroma

https://bitbucket.org/regebro/pyroma

Проверка стандартов упаковки кода:PyPi, Distribute, pip…

Ставит оценку вашему коду, сравнивает его с сыром

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

Инструменты

isort

https://pypi.python.org/pypi/isort

Сортировка импортов

Автоматически правит код

Git-хук в комплекте

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

Инструменты

prospector

https://github.com/landscapeio/prospector

pylint + pep8 + pyflakes + mccabe + dodgy

Машинно-читаемый вывод

Адаптируется под Django и Celery

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

Наш выбор

flake8

https://gitlab.com/pycqa/flake8

Три в одном: pep8, pyflakes, mccabe

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

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