Вот и заканчивается август. В этом месяце мне удалось сходить в отпуск и смотаться в командировку в Москву. Удалось побывать на МАКСе 2011. Продолжим писанину
Это скорее заметка, чем полноценная статья. Здесь будут только тезисы из книги “Непрерывная интеграция. Улучшение качества программного обеспечения и снижение риска.” Поль м. Дюваль, Стивен Матиас и Эндрю Гловер (к сожалению, книга не моя, а брал почитать). В скобках в основном указано название программы-инструмента, которая позволяет выполнить описанную задачу.
Инструмент: TeamCity
Смысл:
Экран, отображающий информацию о проекте в реальном времени.
В чем значение CI?
Преимущества на высоком уровне:
Обычные отмазки почему не используется CI.
Для интеграции ПО всегда нужно использовать отдельную машину. Удостоверьтесь что в системе контроля версий было все необходимое для построения ПО, в т.ч. все артефакты БД.
Непрерывное развертывание.
Быстрая обратная связь. Необходимо передавать правильную информацию правильным людям в правильное время и правильным способом.
Способы:
Unit-тесты. Проверяют только изменившейся код http://www.ncrunch.net/ http://continuoustests.com/
Покрытие кода http://www.jetbrains.com/dotcover/
Для тестирования http://gallio.org/
Update 30.09.2011: Включение непрерывной интеграции на сервере TFS при сборке проектов Sharepoint 2010
Это скорее заметка, чем полноценная статья. Здесь будут только тезисы из книги “Непрерывная интеграция. Улучшение качества программного обеспечения и снижение риска.” Поль м. Дюваль, Стивен Матиас и Эндрю Гловер (к сожалению, книга не моя, а брал почитать). В скобках в основном указано название программы-инструмента, которая позволяет выполнить описанную задачу.
Инструмент: 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
- И др мелоч
Для интеграции ПО всегда нужно использовать отдельную машину. Удостоверьтесь что в системе контроля версий было все необходимое для построения ПО, в т.ч. все артефакты БД.
- Автоматизируйте построения (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
Странно, но про шар рассеянного света впервые слышу.
ОтветитьУдалитьНу надо же как-то привлечь внимание в случае сбоя.
УдалитьОчень информативная статья. Спасибо.
ОтветитьУдалитьДля интересующихся системой автоматизированной разработкой CI&CD - могу посоветовать уникальные онлайн курсы по изучению linux и организация процессов разработки CI&CD (DevOps) https://linuxtrainingcenter.com.
Большой плюс этих курсов в том, что в программу обучения входит изучение инструментов Git, Jenkins, AWS на русском языке - что является основой для системы CI&CD. Здесь все обучение проходит на русском языке и с получением практического опыт - что очень важно для будущей работы.
Курсы подходят как для начинающих, так и для профессионалов в it сфере.
Попробуйте!