Методология DevOps особым образом сочетает скиллы и инструменты команды, направляя все рабочие процессы на ускорение разработки. Главной целью DevOps является быстрый выпуск качественного продукта. Введение методологии (и выделение специальной должности DevOps-инженера) направлено на внедрение в команде убеждения, что качественный софт есть ответственность всех ее участников: разработчиков, QA-отдела, аналитиков и других.
Сложно внедрить эту методологию в команду, работающую по «старым привычным» принципам.
Реформировать QA-команду
Главнейший принцип DevOps это непрерывное тестирование (continuous testing). Оно должно начинаться еще на этапе согласования требований, и завершаться на этапе мониторинга «прода». Все в соответствии с принятым в Agile “сдвигом влево”. Принятие методологии DevOps означает применение первого ее принципа — “постоянное тестирование теперь цель команды”.
Для эффективного принятия модной методологии надо убрать невидимые барьеры между разработчиками, QA-отделом и Ops-отделом, и заставить всех работать «как одна техническая команда”. Эта команда должна эффективно коммуницировать между собой, сотрудничать, и оптимизировать усилия, находить дефекты и фиксить их вовремя.
QA-команда должна сместить свой фокус с дотошного соблюдения требований и устранения дефектов — на устранение рисков возникновения дефектов; таким образом QA-команда превращается в связующее звено, активно работающее в промежутке между Dev и Ops. Тестировщики должны смотреть на продукт “глазами потребителя”, и на этом строить свою деятельность. Они должны вывести в приоритет быстрое масштабируемое развертывание, стандартизировать тестовые окружения, и хорошо согласовать план своих задач с существующими CI/CD-пайплайнами.
Максимальная автоматизация
Автоматизация должна всегда присутствовать в CI/CD-пайплайне. На каждом этапе разработки «техническая команда» по возможности автоматизирует тесты, и как результат получает быстрый фидбек по билдам. Автоматизируются юнит-тесты и деплой, интеграционные тесты, smoke-тесты, регрессионные тесты, тесты безопасности, и тесты производительности. QA-команда играет важнейшую роль в DevOps, начиная раннюю автоматизацию, и помогая находить дефекты как можно раньше.
Автоматизация будет особо эффективной, если QA-команда умеет быстро масштабировать автоматизацию, что бывает непросто при возрастании сложности продукта. Чем больше “фич” появилось в продукте, тем больше тестов нужно, и потребуются соответствующие аппаратные, программные и человеческие ресурсы на создание и выполнение новых тестов.
Хорошая практика: модульная, то есть легко изменяемая структура тест-сьютов, и запуск их на разных этапах разработки исходя из новых функций в продукте. Цель: тестировать только релевантные вещи, и как можно скорее, чтобы получить быстрый фидбек — важнейшую вещь в DevOps.
Хорошие тестировщики и их постоянное обучение
В DevOps-парадигме требования к тестировщикам повышаются. Уже мало написания простых скриптов автоматизации, выполнения тест-кейсов, и согласования плана тестирования с требованиями.
Тестировщики должны знать, как масштабируется деплой, уметь создавать и настраивать стабильные тестовые окружения, мониторить вместе с Ops-командой производительность приложения, в меру сил помогать разработчикам писать юнит-тесты, а иногда, может быть, даже писать отдельные части приложения. В этой парадигме QA-команда должна быть очень компетентной что касается инструментов, фреймворков и технологий, применяемых в пайплайне.
Поэтому доступность хороших QA-профессионалов критически важна для успешного сотрудничества QA с Ops и Dev. В рамках DevOps-парадигмы требуется постоянное повышение квалификации QA-команды.
Инструменты
Важная часть данного материала: инструментарий DevOps. Инструменты, фреймворки и технологии в пайплайнах, проверенные опытом:
Системы контроля версий: Git, Assembla
CI-инструменты: Travis CI, Jenkins
Юнит-тестирование: JUnit, Mocha, Jasmine
Облачная инфраструктура: AWS, Microsoft Azure, VMware vCloud
Статический анализ безопасности: Kiuwan, Coverity
Сканеры безопасности: Netspaker, Acunetix, Wireshark
Управление конфигурациями: Puppet, Ansible, Salt, Chef
Управление тестированием: TestRail, конечно же Jira, Xray
Автоматизация: Selenium, Appium, Water, Ranorex, Cypress, Espresso
Все эти инструменты и средства обрабатывают гигантский объем данных, которые потом еще должны мониториться и анализироваться, чтобы обеспечить производительность всегда на оптимальном уровне. Ops-команда активно сотрудничает с Dev- и QA-командами, помогая им с мониторингом и аналитикой. Тестировщики могут, и должны, помогать в этом, владея такими инструментами как Splunk, Kibana, Graphite, Crashlytics.
Прозрачность процессов и инструментов
Чтобы правильно работать в DevOps, команда должна хорошо видеть каждый аспект своей работы в каждый момент времени.
Хорошая практика: повысить наглядность рабочих процессов и инструментов, активно применяя дашборды и другие подобные инструменты. Визуально подчеркиваются: общая “скорость продвижения” всех 3 «технических» команд; нахождение и устранение дефектов; количество выполненных тестов; тестовое покрытие; и другие KPI-показатели. Так все команды получают быстрый и постоянный фидбек в процессе разработки.
Да, правильный качественный DevOps не очень просто внедряется. Даже если хорошо освоена Agile-методология, команды могут «тормозить» процесс. Но проблемы легко устраняемы, если команды работают как одно целое, тогда процессы упрощаются и ускоряются, и выгоды, в первую очередь финансовые, становятся очевидными.