SlideShare a Scribd company logo
Почему нужно читать
исходный код
инструментов
Малиновский Дмитрий
Студент 5 курса ОмГУ, ИМИТ
DevOps Engineer в Thumbtack
Идеальный код?

•  Проектирование
•  Документирование (sphinx, readthedocs)
•  Статические анализаторы (flake8)
•  Анализаторы цикломатической сложности (radon)
•  Автоматические проверки (git hooks, :w, etc.)
•  Тестирование (unittest, doctest, etc.)
•  Continuous Integration (Travis, Jenkins, etc.)
Анатомия инструментов
Внутренняя
кухня
_RSAobj
LocalClient
ListServers

• 
• 
• 

Магия
Магия
Магия

Внешний интерфейс
RSA.new
salt * test.ping
couchbase-cli server-list

• 
• 
• 
Анатомия инструментов, v2
Примеры:

•  server-add myserver # OK
•  server-remove myserver # FAIL: ‘myserver’ is not
• 
• 

a valid IPv4 address
salt v0.17.2: pkgrepo.managed # OK
salt v0.17.4: pkgrepo.managed # FAIL
1. Чтение исходного кода
2. ???
3. Profit!
Опыт
●  Существуют причины, по которым это сделано
так, а не иначе
●  Разработчики не могли предусмотреть всё
●  Pull request
Опыт
Pull request:
Not merged - недостаточно опыта/понимания
Merged - удовлетворение, признание
●  Contribution

• 
• 
Понимание

•  Реализует все контракты
• 
• 

o  raise NotImplementedError
Движется в нужном направлении
o  интеграция с puppet при сломанном yum api
o  преждевременная монетизация
Production-ready?
Реализация

•  Покрыто ли тестами?
•  Качество тестов
•  Соблюдение DRY/KISS/etc
•  Как следствие,
• 

o  простота
o  расширяемость
Соответствие [де-факто] стандартам
Комментарии

•  long john; // silver
•  // Я посвящаю весь свой код,

• 

// всю работу своей жене Дарлин, которой
// придётся содержать меня,
// наших троих детей и собаку, когда
// это пойдет в паблик.
long long ago; /* in a galaxy far far away */
Как выбираются инструменты
Как выбираются инструменты
“Первая ссылка в гугле”, обзор фич
Как выбираются инструменты
Сравнение фич
Как выбираются инструменты
Наличие удобного GUI
Как выбираются инструменты
Наличие удобного CLI
Как выбираются инструменты
Наличие удобного API
urllib2
urllib2.HTTPPasswordMgrWithDefaultRealm
urllib2.HTTPDigestAuthHandler
urllib2.AbstractBasicAuthHandler
Подводные камни
1. Обзор фич - маркетинг
2. Сравнение фич - платные, поверхностные обзоры
3. Удобный GUI - возможно, единственный
грамотно написанный компонент
4. Удобный CLI - неконсистентный ввод/вывод,
опции (--verbose vs --log verbose)
5. Удобный API - отсутствие высокоуровневых
абстракций, отсутствие логики взаимодействия
Вопросы, которые нужно задать
Могу ли я пользоваться инструментом, который:
не реализует маркетинговые обещания?
не имеет внутренней логики?
не имеет тестов?
имеет мало тестов?
имеет бессмысленные тесты?
развивается от “левой пятки”?

• 
• 
• 
• 
• 
• 
Не реализует обещания
Значит вместо

можно увидеть
Не имеет внутренней логики
Значит код придется писать так
Имеет проблемы с тестами
Значит что-то где-то упадет
Развивается от левой пятки
Значит, придется тратить ресурсы на
реализацию необходимых фич и костыли
Читайте исходный код и
помните, что баги
библиотек, которыми вы
пользуетесь, становятся
багами вашего проекта
Вопросы?

More Related Content

PDF
Robot Framework: универсальный инструмент автоматизатора
SQALab
 
PDF
Что такое Robot Framework?
Mykhailo Poliarush
 
PDF
Дефицит ресурсов тестирования... или нет?
SQALab
 
PDF
Как 3 тестировщика играючи тестируют приложение для 10млн пользователей
SQALab
 
PDF
Oleksandr Tolstykh "Quality. Android quality"
IT Event
 
PDF
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
IT61
 
PPTX
Разработка и сопровождении авто-тестов (Selenium)
Paul Stashevsky
 
PPTX
Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech H...
Innovecs
 
Robot Framework: универсальный инструмент автоматизатора
SQALab
 
Что такое Robot Framework?
Mykhailo Poliarush
 
Дефицит ресурсов тестирования... или нет?
SQALab
 
Как 3 тестировщика играючи тестируют приложение для 10млн пользователей
SQALab
 
Oleksandr Tolstykh "Quality. Android quality"
IT Event
 
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
IT61
 
Разработка и сопровождении авто-тестов (Selenium)
Paul Stashevsky
 
Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech H...
Innovecs
 

What's hot (20)

PDF
C&C for coffee'n'code
Ivan Mosiev
 
PPT
Юнит тестирование в Web. Как получать пользу и удовольствие.
Sergey Ryabenko
 
PDF
Что такое проект по автоматизации тестирования ПО?
Mykhailo Poliarush
 
PDF
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Mail.ru Group
 
PDF
Владислав Грязнов "Многозадачность в PHP"
Fwdays
 
PPTX
Автоматизация тестирования ролей и привилегий
SQALab
 
PDF
Алексей Петров, Mail.Ru Group, "Организация конвейера автоматизации тестирова...
Mail.ru Group
 
PDF
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Mail.ru Group
 
PPTX
Двухкратный публичный code review, Евгения Фирсова (Яндекс)
Ontico
 
PPTX
Seamy side of autotests
Anton Stepanenko
 
PPTX
евгения фирсова нерелизное тестирование
Alexei Lupan
 
PDF
Github Flow. Тестировщики против тестирования
SQALab
 
PDF
Повышаем и следим за качеством PHP кода
Aleksandr Makhomet
 
PDF
Grail: шаги для ваших Python-тестов
CodeFest
 
PPTX
Automated tests ci
COMAQA.BY
 
PDF
«Agile-тестирование по версии API 2ГИС» — Анастасия Огаркова, 2ГИС
DevDay
 
PDF
Быстрое расширение Robot Framework под свои нужды с использованием Python
automated-testing.info
 
PPT
CodeFest 2010. Жемчужникова М., Овчарова О. —Принципы выбора ПО для группы те...
CodeFest
 
PPTX
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
COMAQA.BY
 
PPTX
Разработка веб-приложений с помощью TypeScript
Stas Vyschepan
 
C&C for coffee'n'code
Ivan Mosiev
 
Юнит тестирование в Web. Как получать пользу и удовольствие.
Sergey Ryabenko
 
Что такое проект по автоматизации тестирования ПО?
Mykhailo Poliarush
 
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Mail.ru Group
 
Владислав Грязнов "Многозадачность в PHP"
Fwdays
 
Автоматизация тестирования ролей и привилегий
SQALab
 
Алексей Петров, Mail.Ru Group, "Организация конвейера автоматизации тестирова...
Mail.ru Group
 
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Mail.ru Group
 
Двухкратный публичный code review, Евгения Фирсова (Яндекс)
Ontico
 
Seamy side of autotests
Anton Stepanenko
 
евгения фирсова нерелизное тестирование
Alexei Lupan
 
Github Flow. Тестировщики против тестирования
SQALab
 
Повышаем и следим за качеством PHP кода
Aleksandr Makhomet
 
Grail: шаги для ваших Python-тестов
CodeFest
 
Automated tests ci
COMAQA.BY
 
«Agile-тестирование по версии API 2ГИС» — Анастасия Огаркова, 2ГИС
DevDay
 
Быстрое расширение Robot Framework под свои нужды с использованием Python
automated-testing.info
 
CodeFest 2010. Жемчужникова М., Овчарова О. —Принципы выбора ПО для группы те...
CodeFest
 
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
COMAQA.BY
 
Разработка веб-приложений с помощью TypeScript
Stas Vyschepan
 
Ad

Viewers also liked (7)

PDF
2012-01-05 02 Юлия Миттова. Автоматизированное тестирование под Android
Омские ИТ-субботники
 
PPTX
2014-03-01 02 Евгений Тюменцев. Почему буксует тайм-менеджмент
Омские ИТ-субботники
 
PPT
2013-05-04 03 Дмитрий Барсуков. Удаленная работа - мечта или реальность?
Омские ИТ-субботники
 
PDF
2014-09-06 02 Евгений Тюменцев. Экономика аутсорсинговой компании
Омские ИТ-субботники
 
PDF
2013-10-05 02 Алексей Родионов. Как сделать свой Travis CI - Vagrant + KVM
Омские ИТ-субботники
 
PDF
2013-02-02 00 Тарасенко. ИТ-конференции России
Омские ИТ-субботники
 
PDF
2014-11-01 01 Денис Нелюбин. О сортах кофе
Омские ИТ-субботники
 
2012-01-05 02 Юлия Миттова. Автоматизированное тестирование под Android
Омские ИТ-субботники
 
2014-03-01 02 Евгений Тюменцев. Почему буксует тайм-менеджмент
Омские ИТ-субботники
 
2013-05-04 03 Дмитрий Барсуков. Удаленная работа - мечта или реальность?
Омские ИТ-субботники
 
2014-09-06 02 Евгений Тюменцев. Экономика аутсорсинговой компании
Омские ИТ-субботники
 
2013-10-05 02 Алексей Родионов. Как сделать свой Travis CI - Vagrant + KVM
Омские ИТ-субботники
 
2013-02-02 00 Тарасенко. ИТ-конференции России
Омские ИТ-субботники
 
2014-11-01 01 Денис Нелюбин. О сортах кофе
Омские ИТ-субботники
 
Ad

Similar to 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов (20)

PDF
Sivko
kuchinskaya
 
PDF
Team workflow
Даниил Зайцев
 
PDF
Как построить свой фреймворк для автотестов?
Dmitry Buzdin
 
PPTX
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
DataArt
 
PPTX
Automation from the trenches
GlobalLogic Ukraine
 
PPTX
Automation from the trenches
Gleb Rybalko
 
PPTX
Introduction to Automation Testing
Return on Intelligence
 
PDF
"Девопс - это не только для программистов. Практические примеры из жизни одно...
it-people
 
PPTX
BlackBox testing
beched
 
PPTX
Шаги мануальщика к автоматизации на крупном проекте
SQALab
 
PPTX
Лучшие практики на практике
Denis Tuchin
 
PDF
Enter: testing
Kamil Samigullin
 
PPTX
Виды QA: Всё что вы не знали и боялись спростить
GoIT
 
PDF
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
HappyDev
 
PPTX
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
Oleg Mykolaichenko
 
PDF
DevOps guide for awesome quality assurance
Анастасия Асеева
 
PDF
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QAFest
 
PDF
QAFest. Роль тестирования в Devops
Анастасия Асеева
 
PDF
Когда технологий много - iForum 2013
Andrey Listochkin
 
PPTX
Ошибки в разработке интернет-магазинов - Евгений Концевой
Леонид Гроховский
 
Как построить свой фреймворк для автотестов?
Dmitry Buzdin
 
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
DataArt
 
Automation from the trenches
GlobalLogic Ukraine
 
Automation from the trenches
Gleb Rybalko
 
Introduction to Automation Testing
Return on Intelligence
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
it-people
 
BlackBox testing
beched
 
Шаги мануальщика к автоматизации на крупном проекте
SQALab
 
Лучшие практики на практике
Denis Tuchin
 
Enter: testing
Kamil Samigullin
 
Виды QA: Всё что вы не знали и боялись спростить
GoIT
 
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
HappyDev
 
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
Oleg Mykolaichenko
 
DevOps guide for awesome quality assurance
Анастасия Асеева
 
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QAFest
 
QAFest. Роль тестирования в Devops
Анастасия Асеева
 
Когда технологий много - iForum 2013
Andrey Listochkin
 
Ошибки в разработке интернет-магазинов - Евгений Концевой
Леонид Гроховский
 

More from Омские ИТ-субботники (20)

PDF
2017-08-12 01 Алексей Коровянский. Привет, ARKit!
Омские ИТ-субботники
 
PDF
2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit
Омские ИТ-субботники
 
PDF
2017-05-06 02 Илья Сиганов. Зачем учить машины?
Омские ИТ-субботники
 
PDF
2017 04-08 03 Максим Верзаков. Docker — жизнь, вселенная и все остальное
Омские ИТ-субботники
 
PDF
2017-04-08 01 Евгений Оськин. Video streaming: от идеи до нагруженной системы
Омские ИТ-субботники
 
PDF
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
Омские ИТ-субботники
 
PDF
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
Омские ИТ-субботники
 
PDF
2017-02-04 03 Алексей Букуров, Игорь Циглер. DSL для правил валидации
Омские ИТ-субботники
 
PDF
2017-02-04 02 Яков Лило. Решение задач
Омские ИТ-субботники
 
PDF
2017-02-04 01 Евгений Тюменцев. Выразительные возможности языков программиро...
Омские ИТ-субботники
 
PDF
2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно...
Омские ИТ-субботники
 
PDF
2016-12-03 02 Алексей Городецкий. Как пишут компиляторы
Омские ИТ-субботники
 
PDF
2016-12-03 03 Евгений Тюменцев. DSL на коленке
Омские ИТ-субботники
 
PDF
2016-11-12 02 Николай Линкер. Чему Java может поучиться у Haskell и наоборот
Омские ИТ-субботники
 
PDF
2016-11-12 03 Максим Дроздов. Навести порядок быстро, или как спасти оценки н...
Омские ИТ-субботники
 
PDF
2016-11-12 01 Егор Непомнящих. Агрегация и осведомленность
Омские ИТ-субботники
 
PDF
2016-10-01 03 Андрей Аржанников. Что такое Bluetooth Low Energy?
Омские ИТ-субботники
 
PDF
2016-10-01 02 Евгений Комаров. Как я сделал IoT-кикер
Омские ИТ-субботники
 
PDF
2016-10-01 01 Звиад Кардава. Welcome to Internet of Things
Омские ИТ-субботники
 
PDF
2016-09-17 03 Василий Полозов. WebRTC
Омские ИТ-субботники
 
2017-08-12 01 Алексей Коровянский. Привет, ARKit!
Омские ИТ-субботники
 
2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit
Омские ИТ-субботники
 
2017-05-06 02 Илья Сиганов. Зачем учить машины?
Омские ИТ-субботники
 
2017 04-08 03 Максим Верзаков. Docker — жизнь, вселенная и все остальное
Омские ИТ-субботники
 
2017-04-08 01 Евгений Оськин. Video streaming: от идеи до нагруженной системы
Омские ИТ-субботники
 
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
Омские ИТ-субботники
 
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
Омские ИТ-субботники
 
2017-02-04 03 Алексей Букуров, Игорь Циглер. DSL для правил валидации
Омские ИТ-субботники
 
2017-02-04 02 Яков Лило. Решение задач
Омские ИТ-субботники
 
2017-02-04 01 Евгений Тюменцев. Выразительные возможности языков программиро...
Омские ИТ-субботники
 
2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно...
Омские ИТ-субботники
 
2016-12-03 02 Алексей Городецкий. Как пишут компиляторы
Омские ИТ-субботники
 
2016-12-03 03 Евгений Тюменцев. DSL на коленке
Омские ИТ-субботники
 
2016-11-12 02 Николай Линкер. Чему Java может поучиться у Haskell и наоборот
Омские ИТ-субботники
 
2016-11-12 03 Максим Дроздов. Навести порядок быстро, или как спасти оценки н...
Омские ИТ-субботники
 
2016-11-12 01 Егор Непомнящих. Агрегация и осведомленность
Омские ИТ-субботники
 
2016-10-01 03 Андрей Аржанников. Что такое Bluetooth Low Energy?
Омские ИТ-субботники
 
2016-10-01 02 Евгений Комаров. Как я сделал IoT-кикер
Омские ИТ-субботники
 
2016-10-01 01 Звиад Кардава. Welcome to Internet of Things
Омские ИТ-субботники
 
2016-09-17 03 Василий Полозов. WebRTC
Омские ИТ-субботники
 

2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов