ContractFirst- vs CodeFirst-подходы при построении процесса разработки

Иван Поддубный, CTO Вебпрактик

ContractFirst
vs CodeFirst
подходы
при построении процесса разработки


Иван Поддубный
CTO Webpractik

Кто я 👨‍💻

  1. 15+ лет в IT (web). Прошел путь fullstack, teamlead
  2. Работаю CTO в Вебпрактик (130+)
  3. Пишу на PHP, Typescript, Nodejs (Nest) и React
  4. Член программного комитета TechLead Conf, Podlodka Crew и др.
  5. Организатор Ростовского PHP-сообщества (500+ человек) и многих региональных митапов

Вебпрактик —
Digital-интегратор для корпораций

О чем будем говорить

Проблемы техлидов при работе с контрактами

Типовя задача техлида:
Как построить
эффективный техпроцесс

Аспекты эффективного техпроцесса в рамках работы с контрактами

Что подразумеваем под контрактами

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

Кто пишет контракт в машиночитаемом виде?

Современный
контракт

Должен быть
машиночитаемым!

Disclaimer: обсуждаемые способы подходят

Code First

  1. Пишем код
  2. На основе (backend) кода
    генерируем контракт

У кого Code First?

У кого Contract First?

Строим процесс

Малая команда

Code First

Code First

Code First: что хорошо

Code First:
как работает

Code First: возможно ли запараллелить работу?

А можно
запараллелить
сразу?

Code First: что хорошо

Прокачиваем
автоматизацию Frontend'a

Выделяем куски работы Frontender'a 

Можем автоматизировать на основе контракта

Прокачиваем автоматизацию Frontend'a

Стабильность и блокеры

Генерируем mock-server
на основе контракта

Генерируем mock-server на основе контракта

Готовые mock для автотестов!

Contract First

Как подходим

Прокачиваем автоматизацию
Backend'a

Выделяем куски работы Backend'a

Что можно автоматизировать на основе контракта

Что произойдет при изменении контракта?

Проверка качества контракта: Spectral

Проверка качества контракта: RateMyApi

Проверка качества контракта

Уменьшаем время отладки

  1. Инструментарий для контроля соблюдения контрактов
  2. Инструментарий для тестирования
  3. Инструментарий для визуального тестирования

Проверка соблюдения контрактов

Контрактное тестирование:

Инструменты визуального тестирования: SwaggerUI

SwaggerUI

Elements

Что делать если у меня нет машиночитаемого контракта?

Выводы

Выводы: Code First

  1. Code First может быть не менее контракто-центричен, чем ContractFirst
  2. Code First немного отстает с появлением контракта в рамках процесса, но не критично
  3. Качество контракта может в CodeFirst проседать по сравнению с ContractFirst, но это решается регламентом и линтингом
  4. С CodeFirst проще стартовать, и его поддерживают по умолчанию все фреймворки
  5. Подход по-прежнему актуален, востребован, инструменты развиваются

Выводы: Contract First

  1. Простор оптимизации процессов в ContractFirst больше
  2. Подход больше подходит для больших команд и проектов
  3. Возможность обнаруживать проблемы на более ранних этапах
  4. Качество контракта по дефолту выше благодаря ревью
  5. Контракт можно поручать аналитикам (как постановщикам задачи) или фронтам (как будущим пользователям)

Итог

  1. Оба подхода имеют право на жизнь
  2. Могут стать отправной точкой для значительной оптимизации вашего техпроцесса

Чит лист точек роста техпроцесса:

  1. Генерируем frontend из контракта
  2. Генерируем backend из контракта (только для contract first)
  3. Генерируем тестовый сервер с тестовыми данными для backend
  4. Генерируем мок сервер для frontend чтобы не зависеть от стенда backend
  5. Генерируем мок сервер для тестов
  6. Генерируем тесты контракта
  7. Генерируем визуал для документации
  8. Подключаем линтер на контракт, чтобы повысить и контролировать качество
  9. Подключаем проверки на выходе сервера или входе клиента, чтобы фиксировать отклонения контракта в тестовой или продуктовой среде

Полезные ссылки