Непрерывная поставка — разработка программного обеспечения на конвейере

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

Определение

Непрерывная поставка — это модель, которая используется в разработке программного обеспечения для параллельного выполнения разработки, поставки, обратной связи и управления качеством через короткие промежутки времени в непрерывном цикле. Это делает разработку более эффективной, а заказчик получает продукт раньше, даже если он еще не закончен. Непрерывная поставка обеспечивает разработчику обратную связь через автоматизированные тесты, которые обычно проверяют сборку после каждого изменения исходного кода.

Непрерывная доставка описывает взаимный процесс, который объединяет и автоматизирует разработку, доставку, обратную связь и управление качеством. Это позволяет минимизировать длительные и трудоемкие этапы работы.

Преимущества непрерывной доставки

При классической разработке программного обеспечения конечный продукт поставляется только в том случае, если он содержит все запланированные функции, работает без сбоев и не имеет серьезных дефектов при проверке качества. Затем разработчик обычно поставляет программное обеспечение с исправлениями и обновлениями через регулярные промежутки времени. При непрерывной поставке продукт передается заказчику на гораздо более ранней стадии разработки, а работа над ним продолжается. Предрелизная версия часто содержит только основные функции программного обеспечения, которые затем тестируются заказчиком в реальной среде. Таким образом, заказчик (или тестировщик программного обеспечения) играет важную роль в обеспечении качества.

Полученная таким образом обратная связь помогает разработчику улучшить существующие функции в процессе разработки. Он также может получить ценные подсказки о том, какую функцию следует разработать следующей. Без непрерывной доставки этот процесс утомителен и может привести к тому, что обе стороны останутся недовольны: Клиент обычно ожидает получить готовый продукт, отвечающий его требованиям и пожеланиям, но разработчик еще не знает, в чем именно они заключаются. Если общение о состоянии разработки продукта начинается на более раннем этапе, то пожелания клиента легче учесть и избежать ошибок. Этот принцип можно проиллюстрировать в виде цикла:

Три области — разработка, обеспечение качества и производство — не заменяют друг друга в едином процессе, а постоянно взаимодействуют. Это означает, что продукт снова и снова проходит через отдельные этапы и постоянно совершенствуется. Когда клиентов много, этого невозможно достичь без автоматизации. Именно здесь на помощь приходит непрерывная поставка, автоматизирующая весь процесс.

Благодаря непрерывной поставке вы можете тестировать каждое изменение и улучшение, внесенное в программное обеспечение (т.е. каждое изменение исходного кода) в режиме реального времени для сбора обратной связи. Нежелательные побочные эффекты быстро видны, что позволяет вмешаться на ранней стадии разработки. Это особенно удобно, потому что так легче определить, какая часть кода вызывает, например, ошибку. Без непрерывной доставки поиск проблемы часто бывает очень утомительным.

Когда программное обеспечение находится на пути к заказчику, оно проходит промежуточный этап — конвейер непрерывной доставки. В этом конвейере проводятся как ручные, так и автоматизированные тесты. Каждый этап тестирования влечет за собой создание новой версии программного обеспечения (обычно называемой «бета-версией», иногда также «ночной сборкой», то есть версией, созданной автоматически «за ночь»), которая, в свою очередь, попадает в конвейер. Только если все тесты прошли успешно и дали удовлетворительную обратную связь, может быть создана «стабильная» версия и продукт официально выпущен (этот процесс, как и само опубликованное приложение, называется «релизом»). Вероятность того, что клиент получит продукт без ошибок, гораздо выше.

Это самое большое преимущество непрерывной доставки: автоматизированный процесс приносит пользу как заказчику, так и разработчику. Для клиента продукт доступен быстрее и, как правило, не содержит ошибок. Для разработчиков «полевое тестирование» намного эффективнее, чем внутреннее бета-тестирование, поскольку оно предоставляет больше ценных данных и рекомендаций. Весь процесс разработки становится гораздо более гибким, а риск выпуска программного обеспечения с ошибками сводится к минимуму.

Обзор: преимущества и недостатки непрерывной доставки

Преимущества

Недостатки

Ошибки в программном обеспечении могут быть найдены и устранены гораздо эффективнее в процессе разработки.

Фактор стоимости: Сильный и надежный сервер интеграции для автоматизированных тестов необходим для качественной и безопасной поставки продукта.

Усилий требуется меньше, чем при классическом выпуске программного обеспечения. Разработчики могут полностью сосредоточиться на реальной разработке.

Автоматизированные тесты должны быть написаны и функционировать безупречно. Неисправные тесты могут нанести большой ущерб во время тестирования качества.

Конвейер непрерывной доставки значительно облегчает разработчикам устранение проблем.

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

Меньше затрат, которые могли бы возникнуть в результате других процессов тестирования (например, альфа- и бета-тестирования).

Требуется хорошая и постоянная связь с клиентами и их целевыми системами.

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

Заказчик ожидает постоянных обновлений и улучшений. Проект ПО редко может быть «приостановлен».

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

Новые функции, усовершенствования и изменения в продукте все еще доставляются вручную. Чтобы автоматизировать этот процесс, необходимо перейти к непрерывному развертыванию.

Более быстрые и частые релизы ускоряют цикл обратной связи и улучшений.

Клиент должен проявить готовность использовать программное обеспечение, которое все еще находится в разработке. Они также должны быть мотивированы на предоставление важной обратной связи.

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

 

Фазы конвейера непрерывной доставки

Если код изменяется, запускается конвейер непрерывной доставки и выполняется процесс тестирования. Вот фазы, через которые проходит конвейер непрерывной доставки:

  1. Этап коммита: На этом первом этапе тестирования проверяется версия программного обеспечения, собираются или компилируются программные компоненты и выполняются необходимые модульные тесты. После успешного тестирования фаза завершается. Бинарные артефакты программных компонентов собираются в пакет и хранятся в репозитории. Затем этот пакет определяет функциональность трубопровода, поскольку он определяет состояние программного обеспечения. Наконец, пакет включает в себя объем данных, которые впоследствии будут установлены на целевой системе. Результаты тестирования на этапе фиксации могут быть затем отнесены к конкретным изменениям в исходном коде, что является значительным преимуществом непрерывной доставки.
  2. Этап приемочных испытаний: На втором этапе тестирования проводятся приемочные испытания. Сюда входят интеграционные тесты (работает ли взаимодействие компонентов?), а также необходимые системные тесты (работает ли программное обеспечение на стороне пользователя?). Существуют также некоторые дополнительные тесты, которые включаются в этап приемочных испытаний, например, тесты производительности и другие тесты, проверяющие нефункциональные требования к программному обеспечению. На этапе приемочных испытаний пакет, созданный на предыдущем этапе, используется повторно и устанавливается в подходящей тестовой среде.
  3. Любые ошибки или сложности на этих этапах документируются и, при необходимости, направляются в качестве обратной связи разработчику. Это можно сделать с помощью электронной почты, программ обмена сообщениями или специальных инструментов (см. ниже). Поскольку конвейер запускается при каждом изменении кода, сообщения об ошибках или регрессиях всегда относятся к последнему изменению. Это позволяет разработчику быстро и эффективно реагировать и исправлять любые ошибки или баги в коде.
  4. Ручные тесты теперь выполняются по мере необходимости. Для этих тестов конвейер также использует пакет из первой фазы и устанавливает его в подходящую тестовую среду.
  5. Если все тесты завершены с положительными отзывами, пакет может быть установлен на целевую систему вручную. Обычно это требует лишь «нажатия кнопки». Если этот этап автоматизирован, он называется непрерывным развертыванием.

Непрерывная интеграция в сравнении с непрерывной поставкой

Непрерывная поставка и непрерывная интеграция часто упоминаются вместе. Однако между ними есть одно существенное различие, которое заключается в сфере применения. В то время как непрерывная интеграция относится к автоматизации процесса тестирования и разделяет большую часть конвейера с непрерывной доставкой, непрерывная доставка расширяет концепцию и включает также процесс выпуска программного обеспечения в качестве автоматизированного процесса. Таким образом, непрерывная поставка добавляет конечного пользователя к модели непрерывной интеграции, одновременно передавая продукт на тестирование.

Использует ли разработчик просто непрерывную интеграцию или расширяет процесс разработки до непрерывной доставки, зависит от планирования разработки, команды разработчиков и клиентской базы. В следующей таблице мы сравним обе концепции:

Непрерывная интеграция (CI)

Непрерывная доставка (CD)

Автоматизированный процесс тестирования, который критически проверяет каждое изменение в исходном коде.

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

Команда должна писать автоматизированные тесты для каждой новой функции, каждого улучшения и каждого изменения кода.

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

Требуется специальный сервер непрерывной интеграции, который отслеживает и применяет автоматические тесты.

Установка на целевую систему также должна быть максимально автоматизирована, что предъявляет повышенные требования к серверу.

Разработчикам необходимо постоянно и часто объединять изменения своего кода.

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

Требует относительно больших затрат ресурсов для обеспечения качества продукта при поставке.

CD требует больше усилий. Но продукт может быть поставлен гораздо раньше и подвергнут «реальным» испытаниям.

Сама разработка более эффективна, но чаще приостанавливается ручными релизами.

Разработка может вестись непрерывно, поскольку процесс выпуска также в значительной степени автоматизирован.

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

Различные программы облегчают переход на непрерывную доставку. Мы представляем четыре из них.

Jenkins

Jenkins — это веб-приложение, которое обеспечивает непрерывную интеграцию программных компонентов. Jenkins на базе Java запускается в любом контейнере EJB и содержит различные инструменты сборки (Apache Ant, Maven/Gradle, CVS, Subversion, Git и т.д.), а также процедуры автоматического тестирования, важные для непрерывной доставки (JUnit, Emma). Дополнительные плагины обеспечивают совместимость с другими компиляторами. Интерфейс программирования на основе REST также позволяет другим программам получать доступ к Jenkins. Jenkins — бесплатная программа с открытым исходным кодом. Она рекомендуется особенно для начинающих, поскольку интерфейс и функциональность очень удобны для новичков.

Совет

Наш учебник по Jenkins шаг за шагом объясняет, как работает приложение.

CircleCI

CircleCI также является веб-приложением для непрерывной интеграции, доставки и развертывания. CircleCI предпочтительно работает с GitHub, GitHub Enterprise и Bitbucket. Кроме того, платформа предлагает множество практических функций, таких как управление заказами, управление ресурсами, поддержка docker, поддержка всех известных языков программирования, безопасное кэширование, анализ данных со статистикой и комплексные концепции безопасности. CircleCI получила награду «Лидер в области непрерывной интеграции» от Forrester в 2017 году. Первый контейнер предоставляется бесплатно, второй — $50 за контейнер в месяц.

Microsoft Team Foundation Server

Microsoft Team Foundation Server (TFS) — это инструмент совместной работы для программных проектов, которые совместно планируются, создаются, а затем управляются. TFS является неофициальным преемником Visual SourceSafe от Microsoft. Для совместной работы над программным проектом TFS поддерживает различные процессы разработки, включая CMMI, гибкую разработку программного обеспечения и Scrum. Для работы TFS связывает и интегрирует знакомые программы Office, такие как Word и Excel, поэтому вам не придется переключаться с TFS на другую программу.

Для непрерывной интеграции, доставки и развертывания доступны различные функции, которые помогут вам построить конвейер. TFS, по сути, разделяет весь процесс на разделы контроля версий, сборки, отчетов и администрирования пользователей.

Команды, в которых не более 5 человек, могут использовать бесплатную версию Express; все более крупные команды должны использовать коммерческую версию, которая стоит около $6 на пользователя в месяц. Однако для этого обычно требуется приобрести лицензию на сервер. Вы также можете приобрести TFS без ежемесячной подписки, но для этого необходимо обратиться к местному реселлеру. Цена колеблется между $570 и $800.

Codeship

Codeship — это SaaS-платформа для непрерывной интеграции (и доставки), которая адаптирует свои возможности к потребностям пользователя. Codeship поддерживает GitHub, Bitbucket и GitLab. Доступные функции зависят от соответствующего плана оплаты: В бесплатной версии Codeship предоставляет предустановленную среду CI, а также заботится о рабочем процессе CI/CD. Кроме того, бесплатная версия позволяет эффективно кэшировать и параллельно тестировать сборки в общих и предварительно настроенных контейнерах. Бесплатный тарифный план позволяет выполнять 100 сборок в месяц с непрерывной сборкой и конвейером тестирования. Однако верхний предел для проектов, пользователей и команд отсутствует.

Чтобы получить больше от Codeship, вы можете приобрести «Codeship Basic», который доступен по цене от $49/месяц и будет стоить дороже в зависимости от размера команды. Другая платная версия, «Codeship Pro», расширяет список функций за счет поддержки Docker, «полного контроля» над средой сборки, локальных сборок и лучшего контроля над рабочим процессом. Он также предоставляет множество инструментов, которые делают непрерывную интеграцию/доставку еще более эффективной и прозрачной. В зависимости от количества параллельных сборок, стоимость Codeship Pro составляет около 75 долларов в месяц.

Оцените статью
cdelat.ru
Добавить комментарий