SlideShare a Scribd company logo
1 of 43
Download to read offline
Здравствуйте :)
Контроль за
стилем кода
Борисов Кирилл, 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
Легко расширяется
Много готовых плагинов

More Related Content

What's hot

Добро пожаловать в практическую безопасность (Сергей Белов)
Добро пожаловать в практическую безопасность (Сергей Белов)Добро пожаловать в практическую безопасность (Сергей Белов)
Добро пожаловать в практическую безопасность (Сергей Белов)
Kristina Pomozova
 
Двухкратный публичный code review, Евгения Фирсова (Яндекс)
Двухкратный публичный code review, Евгения Фирсова (Яндекс)Двухкратный публичный code review, Евгения Фирсова (Яндекс)
Двухкратный публичный code review, Евгения Фирсова (Яндекс)
Ontico
 
Михаил Коробов: Как перейти на Python 3
Михаил Коробов: Как перейти на Python 3Михаил Коробов: Как перейти на Python 3
Михаил Коробов: Как перейти на Python 3
it-people
 
Open your source
Open your sourceOpen your source

What's hot (19)

Как писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодеромКак писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодером
 
Добро пожаловать в практическую безопасность (Сергей Белов)
Добро пожаловать в практическую безопасность (Сергей Белов)Добро пожаловать в практическую безопасность (Сергей Белов)
Добро пожаловать в практическую безопасность (Сергей Белов)
 
DEFCON и развитие информационной безопасности в стране
DEFCON и развитие информационной безопасности в странеDEFCON и развитие информационной безопасности в стране
DEFCON и развитие информационной безопасности в стране
 
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019
Как не подавиться большим старым проектом. Юрий Минаев ➠  CoreHard Autumn 2019Как не подавиться большим старым проектом. Юрий Минаев ➠  CoreHard Autumn 2019
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019
 
Разведка боем
Разведка боемРазведка боем
Разведка боем
 
Python dependencies
Python dependenciesPython dependencies
Python dependencies
 
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотестыСтажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
 
Чем Python плох для стартапа?
Чем Python плох для стартапа?Чем Python плох для стартапа?
Чем Python плох для стартапа?
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом Enterprise
 
Применение языка Go в инфраструктурных проектах
Применение языка Go в инфраструктурных проектахПрименение языка Go в инфраструктурных проектах
Применение языка Go в инфраструктурных проектах
 
Двухкратный публичный code review, Евгения Фирсова (Яндекс)
Двухкратный публичный code review, Евгения Фирсова (Яндекс)Двухкратный публичный code review, Евгения Фирсова (Яндекс)
Двухкратный публичный code review, Евгения Фирсова (Яндекс)
 
Михаил Коробов: Как перейти на Python 3
Михаил Коробов: Как перейти на Python 3Михаил Коробов: Как перейти на Python 3
Михаил Коробов: Как перейти на Python 3
 
Как мы делаем раскладку Календаря@Mail.Ru
Как мы делаем раскладку Календаря@Mail.RuКак мы делаем раскладку Календаря@Mail.Ru
Как мы делаем раскладку Календаря@Mail.Ru
 
Why does code style matter?
Why does code style matter?Why does code style matter?
Why does code style matter?
 
How to port JavaScript library to Android and iOS
How to port JavaScript library to Android and iOSHow to port JavaScript library to Android and iOS
How to port JavaScript library to Android and iOS
 
Техподдержка и внутренняя разработка
Техподдержка и внутренняя разработкаТехподдержка и внутренняя разработка
Техподдержка и внутренняя разработка
 
Maksym Antipov Hardware development as a hobby and a job
Maksym Antipov Hardware development as a hobby and a jobMaksym Antipov Hardware development as a hobby and a job
Maksym Antipov Hardware development as a hobby and a job
 
Как потратить 4 года и мешок денег на рефакторинг и ничего не запустить / М.Ч...
Как потратить 4 года и мешок денег на рефакторинг и ничего не запустить / М.Ч...Как потратить 4 года и мешок денег на рефакторинг и ничего не запустить / М.Ч...
Как потратить 4 года и мешок денег на рефакторинг и ничего не запустить / М.Ч...
 
Open your source
Open your sourceOpen your source
Open your source
 

Viewers also liked

Отладка в Python: 2016 edition
Отладка в Python: 2016 editionОтладка в Python: 2016 edition
Отладка в Python: 2016 edition
Кирилл Борисов
 
BPF: Tracing and more
BPF: Tracing and moreBPF: Tracing and more
BPF: Tracing and more
Brendan Gregg
 

Viewers also liked (11)

Flame graph: новый взгляд на старое профилирование
Flame graph: новый взгляд на старое профилированиеFlame graph: новый взгляд на старое профилирование
Flame graph: новый взгляд на старое профилирование
 
Автоматизированные рефакторинги: AST, FST и все-все-все
Автоматизированные рефакторинги: AST, FST и все-все-всеАвтоматизированные рефакторинги: AST, FST и все-все-все
Автоматизированные рефакторинги: AST, FST и все-все-все
 
Отладка в Python: 2016 edition
Отладка в Python: 2016 editionОтладка в Python: 2016 edition
Отладка в Python: 2016 edition
 
Python + Raspberry Pi GPIO
Python + Raspberry Pi GPIOPython + Raspberry Pi GPIO
Python + Raspberry Pi GPIO
 
Blazing Performance with Flame Graphs
Blazing Performance with Flame GraphsBlazing Performance with Flame Graphs
Blazing Performance with Flame Graphs
 
Linux Performance Analysis: New Tools and Old Secrets
Linux Performance Analysis: New Tools and Old SecretsLinux Performance Analysis: New Tools and Old Secrets
Linux Performance Analysis: New Tools and Old Secrets
 
Broken Linux Performance Tools 2016
Broken Linux Performance Tools 2016Broken Linux Performance Tools 2016
Broken Linux Performance Tools 2016
 
BPF: Tracing and more
BPF: Tracing and moreBPF: Tracing and more
BPF: Tracing and more
 
Linux Profiling at Netflix
Linux Profiling at NetflixLinux Profiling at Netflix
Linux Profiling at Netflix
 
Velocity 2015 linux perf tools
Velocity 2015 linux perf toolsVelocity 2015 linux perf tools
Velocity 2015 linux perf tools
 
Linux Systems Performance 2016
Linux Systems Performance 2016Linux Systems Performance 2016
Linux Systems Performance 2016
 

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

Быстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием PythonБыстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием Python
automated-testing.info
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Anthony Marchenko
 
Добро пожаловать в практическую безопасность (Сергей Белов)
Добро пожаловать в практическую безопасность (Сергей Белов)Добро пожаловать в практическую безопасность (Сергей Белов)
Добро пожаловать в практическую безопасность (Сергей Белов)
defcon_kz
 

Similar to Контроль за качеством кода (20)

Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.
 
Как расширять Robot Framework под свои нужны с помощью Python?
Как расширять Robot Framework под свои нужны с помощью Python? Как расширять Robot Framework под свои нужны с помощью Python?
Как расширять Robot Framework под свои нужны с помощью Python?
 
Быстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием PythonБыстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием Python
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
Реклама PVS-Studio - статический анализ кода на языке Си и Си++
Реклама PVS-Studio - статический анализ кода на языке Си и Си++Реклама PVS-Studio - статический анализ кода на языке Си и Си++
Реклама PVS-Studio - статический анализ кода на языке Си и Си++
 
Проблемы и пути их решения при командной разработке проектов
Проблемы и пути их решения при командной разработке проектовПроблемы и пути их решения при командной разработке проектов
Проблемы и пути их решения при командной разработке проектов
 
презентация.1
презентация.1презентация.1
презентация.1
 
Python-технология которую легко продавать!
Python-технология которую легко продавать!Python-технология которую легко продавать!
Python-технология которую легко продавать!
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
 
Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech H...
Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech H...Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech H...
Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech H...
 
Проходим тест Джоэла
Проходим тест ДжоэлаПроходим тест Джоэла
Проходим тест Джоэла
 
Сущность библиотеки анализа кода VivaCore
Сущность библиотеки анализа кода VivaCoreСущность библиотеки анализа кода VivaCore
Сущность библиотеки анализа кода VivaCore
 
Добро пожаловать в практическую безопасность (Сергей Белов)
Добро пожаловать в практическую безопасность (Сергей Белов)Добро пожаловать в практическую безопасность (Сергей Белов)
Добро пожаловать в практическую безопасность (Сергей Белов)
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
C++ Core Guidelines
C++ Core Guidelines C++ Core Guidelines
C++ Core Guidelines
 
Готовим код 
в мир открытых исходников
Готовим код 
в мир открытых исходниковГотовим код 
в мир открытых исходников
Готовим код 
в мир открытых исходников
 
Развитие сообщества Open DevOps Community
Развитие сообщества Open DevOps CommunityРазвитие сообщества Open DevOps Community
Развитие сообщества Open DevOps Community
 
Ігор Карпиленко — PHPStorm for drupal developer
Ігор Карпиленко — PHPStorm for drupal developerІгор Карпиленко — PHPStorm for drupal developer
Ігор Карпиленко — PHPStorm for drupal developer
 

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