Контроль за качеством кода
TRANSCRIPT
![Page 1: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/1.jpg)
Здравствуйте :)
![Page 2: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/2.jpg)
![Page 3: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/3.jpg)
Контроль за стилем кода
Борисов Кирилл, IT Global Meetup 2015
![Page 4: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/4.jpg)
Контроль за стилем качеством кода
Борисов Кирилл, IT Global Meetup 2015
![Page 5: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/5.jpg)
Теория
![Page 6: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/6.jpg)
Типичная ситуация
Команда разработчиков (3-5 человек)
Общий репозитарий
Что-то покрыто тестами
Жизнь потихонечку идет
![Page 7: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/7.jpg)
Возникающие проблемы
Каждый пишет по-своему
…знает, что его код - правильный
…верит, что остальные это понимают
…думает, что нет смысла беспокоиться
![Page 8: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/8.jpg)
Растет время code review
Сложно править чужой код
Споры о вкусах
Рабочее время тратится зря
Возникающие проблемы
![Page 9: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/9.jpg)
Все плохо.
![Page 10: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/10.jpg)
Чем спасаться?
Создайте style guide
Учитесь разрешать конфликты
Проводите сode review
“Автоматизируйте это!”
![Page 11: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/11.jpg)
Практика
![Page 12: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/12.jpg)
Как это делается в Python?
PEP8 - базовый свод рекомендаций по оформлению кода.
PEP257 - набор рекомендаций по оформлению docstring’ов
Множество инструментов:pep8, pep257, pyflakes, pylint, pychecker…
![Page 13: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/13.jpg)
Следим за стилемpep8 https://github.com/jcrocholl/pep8 Проверка стиля исходного кода.
pep257 https://github.com/GreenSteam/pep257 Проверка форматирования docstring’ов.
isort https://github.com/timothycrosley/isort Сортировка импортов.
![Page 14: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/14.jpg)
Следим за кодом
Статический анализ кода:
pylint
pyflakes
frosted
![Page 15: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/15.jpg)
Готовимся к релизу
pyroma https://bitbucket.org/regebro/pyroma Соответствие setup.py стандартам PyPi.
dodgy https://github.com/landscapeio/dodgy Проверяем на забытые ключи, токены и т.д.
![Page 16: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/16.jpg)
“N в одном”
flake8 https://gitlab.com/pycqa/flake8 pep8 + pyflakes + mccabe
prospector https://github.com/landscapeio/prospector pylint + pyflake + pep8 + pep257 + mccabe
![Page 17: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/17.jpg)
Где проверять?
Пользователь: style guide
IDE: плагины + встроенные средства
Локальная VCS: pre-commit hooks
Общая VCS: pre-receive hooks
Continuous Integration
![Page 18: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/18.jpg)
Онлайн-сервисы
Интегрируются с GitHub/Bitbucket
Бесплатны для open source проектов
Платные планы для приватных репозиториев
Результаты могут варьироваться со временем
![Page 19: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/19.jpg)
![Page 20: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/20.jpg)
Внешние средства: landscape.io
https://landscape.io
Онлайн-версия prospector
Учет особенностей фреймворков
Отслеживание версий зависимостей
Только для Python
![Page 21: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/21.jpg)
![Page 22: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/22.jpg)
![Page 23: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/23.jpg)
Внешние средства: codacy.com
https://codacy.com
Полноценный инструмент поддержки кода
Поддержка различных языков
Большая база паттернов
Интеграция с баг-трекерами и HipChat/Slack
![Page 24: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/24.jpg)
![Page 25: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/25.jpg)
![Page 26: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/26.jpg)
Внешние средства: quantifiedcode.com
https://quantifiedcode.com
https://github.com/quantifiedcode
Свой DSL для задания анти-паттернов
Возможность задавать свои анти-паттерны
Немного сырой :(
![Page 27: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/27.jpg)
![Page 28: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/28.jpg)
![Page 29: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/29.jpg)
Case study
![Page 30: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/30.jpg)
Яндекс.ПаспортИнтегрированный в IDE pep8
![Page 31: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/31.jpg)
Яндекс.ПаспортИнтегрированный в IDE pep8
Git pre-commit hooks:
Сортировка импортов
flake8 (+ поиск print / pdb.set_trace)
Поиск TODO/FIXME
![Page 32: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/32.jpg)
Яндекс.ПаспортИнтегрированный в IDE pep8
Git pre-commit hooks:
Сортировка импортов
flake8 (+ поиск print / pdb.set_trace)
Поиск TODO/FIXME
![Page 33: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/33.jpg)
На что ещё обратить внимание?
Сложность кода
Совместимость с разными версиями Python
Copy-paste
Зависимости
![Page 34: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/34.jpg)
A foolish consistency is the hobgoblin of little minds.
![Page 35: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/35.jpg)
Вопросы?
![Page 37: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/37.jpg)
Собственные инструменты
forgetmenot
<однажды на GitHub>
Поиск TODO/FIXME
Определение автора, момента добавления
Подсветка и оформление
![Page 38: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/38.jpg)
Инструменты
autopep8
https://github.com/hhatto/autopep8
Автоматически правит ошибки PEP8
Может быть не тем, что вы ожидали :(
Очень консервативен
![Page 39: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/39.jpg)
Инструменты
frosted
https://github.com/timothycrosley/frosted
Форк pyflakes
Больше проверок
Python 2.6 - 3.4
![Page 40: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/40.jpg)
Инструменты
pyroma
https://bitbucket.org/regebro/pyroma
Проверка стандартов упаковки кода:PyPi, Distribute, pip…
Ставит оценку вашему коду, сравнивает его с сыром
![Page 41: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/41.jpg)
Инструменты
isort
https://pypi.python.org/pypi/isort
Сортировка импортов
Автоматически правит код
Git-хук в комплекте
![Page 42: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/42.jpg)
Инструменты
prospector
https://github.com/landscapeio/prospector
pylint + pep8 + pyflakes + mccabe + dodgy
Машинно-читаемый вывод
Адаптируется под Django и Celery
![Page 43: Контроль за качеством кода](https://reader031.vdocuments.net/reader031/viewer/2022020314/58738e1e1a28ab272d8b7375/html5/thumbnails/43.jpg)
Наш выбор
flake8
https://gitlab.com/pycqa/flake8
Три в одном: pep8, pyflakes, mccabe
Легко расширяется
Много готовых плагинов