пятница, 26 августа 2011 г.

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

Вот и заканчивается август. В этом месяце мне удалось сходить в отпуск и смотаться в командировку в Москву. Удалось побывать на МАКСе 2011. Продолжим писанину Улыбка
Это скорее заметка, чем полноценная статья. Здесь будут только тезисы из книги “Непрерывная интеграция. Улучшение качества программного обеспечения и снижение риска.” Поль м. Дюваль, Стивен Матиас и Эндрю Гловер (к сожалению, книга не моя, а брал почитать). В скобках в основном указано название программы-инструмента, которая позволяет выполнить описанную задачу.
Инструмент: TeamCity
Смысл:
  • Все разработчики выполняют закрытое построение на собственных рабочих станциях перед передачей кода в хранилище с контролем версий, для гарантии того, что внесенные изменения не приведут к ошибке при интеграционном построении. Построение может состоять из:
    • Компиляции
    • Интеграции БД
    • Проверки (NUnit, xUnit). Из системы CI можно запускать проверки различных категорий, чтобы ускорить построение. Данные категории могут включать модули, компоненты, систему, нагрузку и эффективность, защиту и другие.
    • Инспекции. Статический и динамический анализ применяется для улучшения качества ПО за счет применения правил.
    • Развертывания. Позволяет предоставлять работоспособное развертываемое ПО в любой момент. Должно подразумевать возможность автоматической отмены всех изменений (откат), сделанных в его процессе.
    • Документирование. NDoc и другая документация, полученная средствами
  • Разработчики обновляют свой код в хранилище с контролем версий по крайней мере один раз в день
  • Интеграционное построение осуществляется несколько раз в день на выделенной для этого машине CI-сервер CruiseControl. Поддерживает:
    • Инструменты, которые автоматизируют цикл построения ПО (NAnt, MSBuild) Draco.NET http://draconet.sourceforge.net
  • При каждом построении проводится 100% проверок
  • Создаваемы продукт пригоден для функциональной проверки
  • Исправление ошибок имеет самый высокий приоритет
  • Часть разработчиков просматривает отчеты, созданные в ходе построения, стандарты программирования и отчеты анализа зависимостей, в поисках областей для усовершенствования
  • Быстрая обратная связь. Сервер CI может давать Обратную связь по окончанию построения.
Правила для разработчика:
  • Передавайте код часто. Один из основных принципов CI является ранняя и частая интеграция.
  • Не передавайте сбойный код
  • Ликвидируйте проблемы построения немедленно
  • Пишите автоматизированные проверки разработки
  • Все проверки и инспекции должны быть пройдены
    • Покрытие тестами
    • Соблюдение стандартов
    • Дублирование кода (CPD pdm.sourceforge.com, Simian redhillconsulting.com.ua/products/simian)
  • Выполняйте закрытое построение (на своей машине)
  • Избегайте получения сбойного кода. Используется активный механизм обратной связи (звук, свет сигнализация)
Делая предположения в разработке ПО (файл конфигурации никогда не меняется), мы сильно рискуем потратить время и силы впустую. Избегайте предположений.
Экран, отображающий информацию о проекте в реальном времени.
В чем значение CI?
Преимущества на высоком уровне:
  • Снижение риска;
    • Дефекты обнаруживаются и устраняются быстрее
    • Снижение количества предположений
    • Контроль состояния проекта ПО (например, сложность)
  • Уменьшение количества повторяемых процессов, выполняемых вручную;
  • Построение развертываемого ПО в любой момент, в любом месте
  • Обеспечение лучшего контроля проекта
    • Эффективные решения. Система CI может предоставить своевременную информацию о текущем состоянии и качественных показателях системы. Некоторые CI могут отображать частоту дефектов и отображать ход их устранения
    • Отслеживание тенденций. Возможность отслеживать тенденции успеха и отказа построения, общего качества и другой информации по проекту
  • Повышение доверия к программному продукту со стороны группы разработки
Что может мешать использовать CI?
Обычные отмазки почему не используется CI.
  • Увеличение допзатрат на поддержку CI. Поодерживать надежную CI значительно проще, чем контролировать процессы, выполняемые вручную.
  • Слишком много изменений. Инкрементальный способ перехода на CI
  • И др мелоч
Заметки
Для интеграции ПО всегда нужно использовать отдельную машину. Удостоверьтесь что в системе контроля версий было все необходимое для построения ПО, в т.ч. все артефакты БД.
  • Автоматизируйте построения (NAnt)
  • Выполняйте построение одной командой
  • Отделяйте сценарии построения от IDE
  • Централизуйте элементы ПО (использование СКВ для хранения всех файлов, необходимых для построения)
  • Создайте строгую структуру каталогов
  • Организуйте ранний сбой построения (чем раньше произойдет сбой, тем больше времени мы экономим. Например, если успешно были завершены некоторые элементы построения, которые потратили время, а потом произошел сбой. Эффективность построения выше, если склонный к отказу процесс выполняется раньше. Чем быстрее обратная связь, тем раньше устранение проблемы)
  • Осуществляйте построение для каждой среды
  • Используйте выделенную машину для интеграционного построения. Решительно ограничивается предположение о среде и конфигурации, а также способствует предотвращению слишком позднего проявления проблемы «а на моей машине всё работает». Построение должно осуществляться на чистой среде, т.е. сценарий CI должен удалять любые зависимости кода от среды интеграции.
  • Используйте сервер CI (необязательно). Требования:
    • Периодический опрос хранилища СКВ на предмет изменений
    • Выполнение неких действий по расписанию
    • Поддержка различных инструментов сценариев построения
    • Отправка электронной почты заинтересованным сторонам
    • Отображении истории предыдущего построения
    • Панель управления
    • Поддержка нескольких СКВ для разных проектов
  • Выполняйте интеграционное построение вручную (необязательно). Иногда эффективна для предотвращения сбойных построений
  • Выполняйте быстрое построение, Сбор показателей построения, Выбор и реализация усовершенствований и тд (стр 93, глава 4)
  • Выполняйте поэтапное построение
Непрерывная интеграция баз данных
  • Автоматизируйте интеграцию БД. Повторяемые действия:
    • Удаление БД
    • Создание БД
    • Вставка системных данных (DbUnit and NDbUnit (.org))
    • Вставка проверочных данных
    • Перемещение БД и данных
    • Установка экземпляров БД для нескольких сред
    • Модификация атрибутов столбцов и ограничителей
    • Модификация проверочных данных
    • Модификация хранимых процедур, функций, триггеров
    • Получение доступа к различным системам
    • Резервное копирование и восстановление больших наборов данных
  • Используйте локальное пространство БД (изменения, вносимые одним разработчиком, могут неблагоприятно сказаться на работе других участников группы, приводя к отказу даже при закрытом построении)
  • Применяйте хранилище СКВ для совместного использования элементов БД
  • Обеспечьте разработчикам модифицировать БД
  • Сделайте DBA участником группы разработчиков
  • Проверка (OUnit, PL/Unit for Oracle; SQLUnit for MS SQL), Инспекция, Развертывание
Непрерывная проверка
  • Автоматизируйте проверки модуля, компонента, системы, функций. Модуль – малый элемент программной системы (зачастую классы). Ключевой аспект проверки модуля – отсутствие внешней зависимости. Компонент – часть системы (интеграционное тестирование (не всегда исследует открытые API)). Проверка системы отличается от проверки функций тем, что она проверяет систему подробно тому, как её использовал бы клиент.Функциональное тестирование – проверка функциональных возможностей приложения с точки зрения клиента (Selenium).
  • Категоризируйте проверки разработчика
  • Выполняйте более быстрые проверки вначале
  • Пишите проверки для дефектов
  • Сделайте проверки компонента воспроизводимыми (NDbUnit – замена БД файлом Xml)
  • Ограничьте проверку одним методом assert
Непрерывная инспекция
  • Снижайте сложность кода (избегайте длинных методов с множеством ветвлений. Есть корреляция между количеством путей выполнения кода и вероятностью дефектов: например, цикломатическая сложность). Инструменты: Maven, PMD, SourceMonitor www.campwoodsw.com/sm20.html
  • Осуществляйте обзоры проекта непрерывно (NDepend – изучает зависимость одного кода, от другого)
  • Поддерживайте организационные стандарты при проверке кода (FxCop)
  • Снижайте количество двойного кода (Copy/Paste Detected – CPD, Simian). Проблемы:
    • Снижение издержек на поддержку в связи с обнаружением, оповещением, анализом и многократным устареванием ошибок
    • Неопределенности относительно существования других ошибок (которые не были еще обнаружены в копиях кода)
    • Увеличение затрат на проверку за счет написания ее дополнительных случаев
  • Оценивайте покрытие кода (NCover, Clover www.cenqua.com/clover ). Строка кода проверяется
Просмотр всего кода человеком стоит очень дорого! Регулярно оценивайте качество кода.
Непрерывное развертывание.
  • Выпускайте работоспособное ПО в любое время в любом месте
  • Маркируйте элементы в хранилище
  • Поддерживайте чистоту среды
  • Маркируйте каждое построение
  • Запускайте все проверки
  • Создавайте отчеты обратной связи построения
  • Позаботьтесь о возможности отката выпуска
Непрерывная обратная связь.
Быстрая обратная связь. Необходимо передавать правильную информацию правильным людям в правильное время и правильным способом.
Способы:
  • Email.
    • Преимущества: асинхронно передает информацию необходимым людям
    • Недостатки: многие не всегда регулярно проверяют электронную почту, а также создается потенциальная возможность спама
  • SMS
    • Преимущества: возможность получать сообщения, находясь далеко от электронной почты
    • Недостатки: краткость сообщений. Те же недостатки, что и для email
  • Шар рассеянного света (www.ambientdevices.com ) и устройства стандарта X10.
    • Преимущества: «мгновенная», нецифровая информация
    • Недостатки: цена, информация предоставляется без подробностей; вы должны находиться в зоне прямой видимости, чтобы обратить внимание на его действие
  • Панель задач Windows (ненавязчивая обратная связь)
  • Звуки
    • Преимущества: способность оповестить многих людей одновременно
    • Недостатки: как правило, звук воспроизводится 1 раз. Вы должна находиться поблизости, чтобы его слышать.
  • Широкоформатные мониторы

Unit-тесты. Проверяют только изменившейся код http://www.ncrunch.net/ http://continuoustests.com/
Покрытие кода http://www.jetbrains.com/dotcover/
Для тестирования http://gallio.org/

Update 30.09.2011Включение непрерывной интеграции на сервере TFS при сборке проектов Sharepoint 2010

3 комментария:

  1. Странно, но про шар рассеянного света впервые слышу.

    ОтветитьУдалить
    Ответы
    1. Ну надо же как-то привлечь внимание в случае сбоя.

      Удалить
  2. Очень информативная статья. Спасибо.
    Для интересующихся системой автоматизированной разработкой CI&CD - могу посоветовать уникальные онлайн курсы по изучению linux и организация процессов разработки CI&CD (DevOps) https://linuxtrainingcenter.com.
    Большой плюс этих курсов в том, что в программу обучения входит изучение инструментов Git, Jenkins, AWS на русском языке - что является основой для системы CI&CD. Здесь все обучение проходит на русском языке и с получением практического опыт - что очень важно для будущей работы.
    Курсы подходят как для начинающих, так и для профессионалов в it сфере.
    Попробуйте!

    ОтветитьУдалить

Еще статьи

2leep.com