TDD и CI/CD: Red-Green-Refactor и автоматизированные конвейеры
Этот материал представляет собой определение понятий TDD и CI/CD с примерами вопросов для проверки знаний и ключевыми терминами.
Кратко
Test-Driven Development (TDD) — это подход к разработке, когда тесты пишут раньше, чем сам код. CI/CD охватывает автоматизированные процессы непрерывной интеграции и развёртывания программного обеспечения.
Подробное описание
Test-Driven Development (TDD) следует цикличному процессу: Red – Green – Refactor. Сначала пишут тест, который не проходит (Red), затем реализуют минимум кода, достаточный для успешного прохождения теста (Green), и наконец улучшают структуру и читаемость кода (Refactor). TDD способствует написанию чистого, легко тестируемого кода и выявляет ошибки на ранних этапах разработки. CI/CD расшифровывается как Continuous Integration (автоматическое объединение кода в главную ветку с запуском тестов) и Continuous Deployment/Delivery — процесс, который автоматически развёртывает изменения в staging или production окружение. CI/CD использует инструменты вроде GitHub Actions, Jenkins или GitLab CI в сочетании с модульными, интеграционными и приёмочными тестами.
Ключевые моменты для проверки знаний
- TDD: сначала тест, потом реализация
- Цикл Red-Green-Refactor
- CI: автоматическая сборка и тестирование после каждого коммита
- CD: автоматическое развёртывание на целевые окружения (актуально для экзаменов)
- TDD повышает покрытие тестами и структурирует код
- CI/CD снижает количество ручных ошибок и уязвимостей безопасности
- Быстрые релизы благодаря автоматизации
- Процессы сборки и развёртывания должны быть задокументированы
Основные компоненты
- Unit Tests
- Test Frameworks (например, JUnit, pytest)
- CI-серверы (например, Jenkins, GitHub Actions)
- Build Tools (например, Maven, Gradle)
- Docker для развёртывания
- Pipeline-скрипты
- Автоматизированное развёртывание (CD)
- Стратегии отката (rollback)
- Staging-окружения
- Инструменты для анализа покрытия тестами и качества кода
Пример из практики
# Пример TDD (Python с pytest)
def add(a, b):
return a + b
def test_add():
assert add(2, 3) == 5
Пояснение: сначала пишут тест, который не проходит (Red). Затем реализуют функцию add() (Green). После этого проводят рефакторинг кода, если требуется (Refactor).
Преимущества и недостатки
Преимущества
- Выше качество кода
- Автоматизированное обеспечение качества
- Быстрее находятся ошибки
- Воспроизводимые и надёжные развёртывания
Недостатки
- Больше работы на начальном этапе
- Требует инфраструктуры (CI/CD-системы)
- Требует дисциплинированного подхода
Типичные вопросы на экзамене (с кратким ответом)
- Что такое “Red-Green-Refactor” в TDD? Написание теста (Red), реализация минимального кода (Green), затем рефакторинг (Refactor).
- Какова цель CI? Автоматическое тестирование и объединение изменений кода.
- Как CD поддерживает процесс разработки? Через автоматизированное развёртывание протестированных версий.
- Какие тесты запускаются автоматически в CI/CD? Unit-тесты, интеграционные тесты, при необходимости приёмочные тесты.
- В чём разница между Continuous Delivery и Continuous Deployment? Delivery доводит код до staging, Deployment развёртывает прямо в production.
- Как TDD улучшает качество ПО? Ошибки выявляются рано, код лучше структурирован.
- Какие CI/CD-инструменты применяются чаще всего? Jenkins, GitHub Actions, GitLab CI, Travis CI.
- Как документировать CI/CD-процесс? Как конфигурацию pipeline в YAML-файле с описанием всех этапов.
Основные источники
- https://martinfowler.com/bliki/TestDrivenDevelopment.html
- https://docs.github.com/en/actions
- https://www.atlassian.com/continuous-delivery
- https://docs.pytest.org/en/latest/
- https://learn.microsoft.com/en-us/azure/devops/pipelines/index



