Connect with us

Разработка

Григорий Петров: Управление страхом с помощью Continuous Integration

В одной из предыдущих колонок я рассказал про построение коридоров, упомянув про автобилд и continuous integration. Тогда я не было готов рассказать подробности. Но с тех пор успел написать про agile и стандарт кодирования, что позволяет мне рассказать про автобилд не взрывая голову читателя миллионом новых сущностей. Потому что последовательное изложение – это сила.

Григорий Петров

Опубликовано

/

     
     

В одной из предыдущих колонок я рассказал про построение коридоров, упомянув про автобилд и continuous integration. Тогда я не было готов рассказать подробности. Но с тех пор успел написать про agile и стандарт кодирования, что позволяет мне рассказать про автобилд не взрывая голову читателя миллионом новых сущностей. Потому что последовательное изложение – это сила.

Зачем нужно continuous integration

Самое главное в построении коридоров – это так организовать рабочий процесс, чтобы проверка работы была неизбежной. Эволюция мозга приспособила его постоянно оценивать положение в социуме и “настраивать” модели поведения. Мы очень тонко чувствуем фальшь, и если будет хоть малейшая возможность не делать скучную и неинтересную работу – мы такую возможность придумаем. И миллион оправданий к ней. Если в команде настроена непрерывная интеграция, то все участники понимают неизбежность автоматической сборки проекта. Понимают, и на бессознательном уровне адаптируют свое поведение, стиль работы, отношение к происходящему. Ведь никто не хочет быть супергероем, сломавшим Большое Ночное Тестирование?

CI_part1_cover_optima

Идея continuous integration (далее CI) – в автоматизации ради улучшения рабочего процесса. По доброй традиции CI настраивается так, чтобы вся автоматика выполнялась после того, как разработчик отгрузил на сервер новую порцию исходного кода. Интерактивность очень важна – разработчик должен чувствовать прямую связь между тем, что он сделал push и тем, что через минуту вся команда получила нотификацию о сломанном билде. В этом плане особенно хорошо работают физические индикаторы – вывод текущего состояния CI на большую плазму, загорающиеся красным цветом лампы и так далее. Все это помогает нашему мозгу адаптировать поведение.

И что туда можно запихнуть

Сборка проекта и вердикт “собралось или не собралось” – самое простое, что можно добавить в CI. Обычно все с этого начинают. А затем, войдя во вкус, добавляют все новые и новые автоматизации, чтобы рабочий процесс стал лучше. Вплоть до автоматического анализа сложности кода с помощью метрик вроде “cyclomatic complexity”. Тут главное – не увлекаться.

Хорошей идеей будет добавить в CI проверку на соблюдение стандарта кодирования, принятого в команде. Для этого существуют многочисленные программы семейства “lint”. Запущенная перед сборкой проекта, такая программа может проверить самые “болезненные” пункты стандарта кодирования: именование идентификаторов и структуру проекта, отступы, принятый в команде стиль расстановки скобок и тому подобное. Неизбежность проверки волшебным образом дисциплинирует разработчиков, они начинают соблюдать стандарт не потому, что “тимлид так сказал”, а потому что не хотят “сломать билд”. Опять же, главное не увлекаться и сконфигурировать линтер только на несколько самых важных, обязательных пунктов стандарта.

В CI очень хорошо добавлять разнообразные тесты проекта: интеграционные, функциональные, unit-тесты. О тестировании я поговорю отдельно, это очень большая и интересная тем. А начинать можно с самого простого: что собранный проект хотя бы запускается. Такой тест несложно сделать, а добавленный в CI он будет выявлять ошибки вида “ой, а на моем компьютере все работает”.

slon2u

CI является естественным местом для хранения информации о том, как развернуть и установить разрабатываемый проект. Нередки ситуации, когда “тайным знанием” сборки или установки проекта владеет один разработчик в команде, и в случае его отпуска или увольнения происходит много всего веселого. Последовательный перенос всех этих знаний в CI хорошо защищает проект от такой угрозы. Команды для сборки и установки хранятся в той же системе контроля версий, что и исходный код, а сами эти процессы происходят автоматически. В хорошо настроенной CI задача “собрать и выложить проект в продакшн” делается одной командой, после чего все остальное обеспечивает автоматика.

Сердце Agile

Continous Integration позволяет извлечь максимальную пользу из agile подхода к созданию софта. Автоматическая сборка и установка позволяет команде фокусироваться на разработке, быстро взаимодействовать с другими участниками процесса и помогать друг другу с задачами без боязни “все сломать”.

При использовании CI очень важно не забыть, для чего это все делается. Главная цель – улучшить рабочий процесс, дав нашему мозгу набор легко соблюдаемых и понятных правил. Легко попасть в ловушку, подменив цель процессом. Многие виденные мною команды, к примеру, ставят своей целью 100% покрытие проекта юнит тестами. И совсем не потому, что пишут драйвер. Такая ложная цель создает иллюзию контроля сложности и позволяет избежать действительно сложной работы – создания хороших программ в разумное время. Помните об этом, и continuous integration станет вашим надежным помощником в борьбе со сложностью.

Комментарии
Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Advertisement
Click to comment

You must be logged in to post a comment Login

Leave a Reply

Новости

Интересные материалы: 25.09

У нас нова куча анимаций, UI, реджектов и есть даже долг данных от Riot.

AppTractor

Опубликовано

/

Автор:

Весь день мы собираем лучшие материалы о разработке и маркетинге технологий, стартапов, мобильных приложений и игр для iOS и Android из самых разных источников:

Комментарии
Продолжить чтение

Медиа

Android Dev Подкаст. Выпуск 75. Новости об осенних релизах, либах и девфестах

У нас целый урожай релизов: Kotlin 1.3RC, OpenJDK11, Androidx1.0, и даже Flutter готовит свой 1.0RC! Ну и то, что вы любите: ругаем кривые либы и мамкиных архитекторов, хвалим девфесты и хорошие статейки. А ещё Денис свалил из Сингапура, а к нам вернулся блудный сын Даня!

AppTractor

Опубликовано

/

Автор:

У нас целый урожай релизов: Kotlin 1.3RC, OpenJDK11, Androidx1.0, и даже Flutter готовит свой 1.0RC! Ну и то, что вы любите: ругаем кривые либы и мамкиных архитекторов, хвалим девфесты и хорошие статейки.

А ещё Денис свалил из Сингапура, а к нам вернулся блудный сын Даня!

Материалы:

Комментарии
Продолжить чтение

Новости

Интересные материалы: 24.09

Начинаем новую неделю с чатов, дизайн-процессов и трендов.

AppTractor

Опубликовано

/

Автор:

Весь день мы собираем лучшие материалы о разработке и маркетинге технологий, стартапов, мобильных приложений и игр для iOS и Android из самых разных источников:

Комментарии
Продолжить чтение

Новости

Digest MBLTdev: Новости для iOS разработчиков №187

В течение недели топовые iOS-разработчики Руслан Гуменный, Саша Черный, Сергей Бендак, Вадим Дробинин, Юрий Петухов и директор по продукту VK Иван Козлов собирают для вас интересные и полезные ссылки на статьи, необходимые для прочтения каждому начинающему и опытному разработчику. В каждом выпуске – новости, коды, инструменты, дизайн и прочее.

e-Legion

Опубликовано

/

Автор:

Герой недели — Amazon. Отсыпали от души. Столько новых устройств как-то даже не припоминается. Микроволновка, настенные часы и устройство для автомобиля, которые позволяют использовать голосовые команды Алексы. Разве не прекрасно? Команда микроволновке «приготовь попкорн», команда автомобилю без необходимости запускать приложение — это же здорово. А один из членов Дорогой редакции недавно пытался связать Айфон с CarPlay в Genesis G70 и не смог. Не соединяет и всё. Машина за 2 млн рублей, в которой ты не смог с первого раза подключиться к CarPlay или Echo Auto за 3200 рублей? Да-да, сравнение не блещет корректностью, но идею вы поняли.

Неделя до MBLT DEV 2018

Посмотрите приветствие от спикера MBLT DEV Джона Фокса из Netflix. Посмотрите до конца, оно классное! Программа конференции опубликована. Спикеры пакуют чемоданы. Пора и билетом обзавестись.

WWW.FACEBOOK.COM

Foundation Release Notes

Про iOS 12 последние несколько месяцев много пишут и говорят, но конкретный список технических нововведений только-только опубликовали.

DEVELOPER.APPLE.COM

Migrating to Unified Logging, Swift Edition

До сих пор используете NSLog и print? Пора переходить на систему Unified Logging, она и к ресурсам менее требовательна, и обработку подобных логов выполнять проще. Об особенностях использования os_log рассказано в этом материале.

WWW.BIGNERDRANCH.COM

Bloom Filters and Swift 4.2

Hasher — универсальная хэш-функция, добавленная в Swift 4.2. На примере показано её применение для построения структуры данных, которая используется в Medium для отслеживания статуса прочтения статей.

KHANLOU.COM

Swift Associated Types With Default Values

Одной из недокументированных особенностей Associated Types является возможность установки значения по умолчанию. В этом случае при поддержке протокола можно не определять typealias. В материале показано практическое применение для этого кейса.

SWIFTROCKS.COM

Animating Table View Cells Display

Пример того, как можно улучшить визуальное восприятие пользователем таблиц в вашем приложении. На простых прототипах показаны реализации анимации движения, появления и отскока ячеек.

WWW.VADIMBULAVIN.COM

Type-Safe Swift Models

Автор статьи рассказывает о том, как можно улучшить подход к проектированию моделей в связке с Codable.

BLOG.USEJOURNAL.COM

Marzipan: Porting iOS Apps to the Mac

Исчерпывающая инструкция об инструментах для портирования мобильных приложений для работы на десктопе.

PSPDFKIT.COM

Fireworks in UIViews

Пятничное. Порадуйте ваших пользователей маленьким фейерверком.

SZULCTOMASZ.COM

Sublime Merge

Если вас по какой-то причине не устраивает консоль, разработчики редактора Sublime выпустили клиент для Git.

WWW.SUBLIMEMERGE.COM

Supporting iPhone XS Max and XR

Очерк о размере дисплеев, разрешениях, масштабировании и size-классах в новых моделях iPhone.

USEYOURLOAF.COM

Designing for Siri Shortcuts

Siri Shortcuts уже доступны для всех, поэтому самое время озадачиться нюансами их проектирования.

BLOG.MAXRUDBERG.COM

Apple Tech Talks

Apple рассказывает об особенностях адаптации приложений для новых iPhone XS и XR, а также о подходах к разработке дизайна для Apple Watch Series 4.

DEVELOPER.APPLE.COM

Apple Watch Series 4 Faces without CGI effects

Красивое видео о том, как новые анимации для часов были сняты без использования компьютерных эффектов.

APPLEINSIDER.COM

What’s new in Swift 5.0

Буквально несколько дней назад состоялся релиз Swift 4.2, а у нас уже есть возможность познакомиться со Swift 5.0. Raw strings облегчают работу при формировании регулярных выражений, а метод count(where:) для коллекций является заменой связки методов filter() и count(). О других нововведениях можно узнать из примеров в статье.

WWW.HACKINGWITHSWIFT.COM

Предыдущие выпуски Digest MBLTDEV и подписка доступны на официальном сайте. Всё бесплатно и никакого спама, честно!

Комментарии
Продолжить чтение

Реклама

Наша рассылка

Нажимая на кнопку "Подписаться" вы даете согласие на обработку персональных данных.

Вакансии

Популярное

X
X

Спасибо!

Теперь редакторы в курсе.