Одно из важных концептуальных понятий DevOps – определение завершения (англ. – Definition of Done). Как и многие другие важные концептуальные понятия DevOps, оно появилось и сформировалось задолго до возникновения этого самого DevOps. Однако именно в DevOps определение завершения развили, продолжили и наполнили дополнительным смыслом. Давайте разберёмся, каким.
О чём, собственно, речь? Умные ребята говорят, что неплохо бы договориться о том, когда работа считается выполненной. Очень важно, говорят, одинаково понимать, что это означает – работа выполнена. Посмотрим на эволюцию такого понимания.
Первая ступень под кодовым названием "совсем, совсем плохо" такова: завершено тогда, когда разработчик сказал, что всё работает. Очень понятно почему это плохо – кто же станет верить разработчику? То, что на его ПК (в среде разработки) код не выдаёт ошибок, либо просто компилируется без существенных замечаний, в реальной жизни мало что означает.
Вторая ступень, чуть лучше: завершено тогда, когда тестировщик после разработчика сказал, что всё работает. Понятно, что это лучше, ведь появилась относительно независимая точка контроля. Однако и этого недостаточно.
Те, кто читал про Agile, скажут, что следующая ступень такова: завершено, когда владелец продукта принял результат разработки. Буквально, читаем в SAFe: "The product owner is the only team member who can accept stories as done. This includes validation that … it meets its Definition of Done". Конечно, для больших ребят команд пришлось картинку усложнить, добавив приёмку на уровне команды (владельцем продукта), системы (менеджерами продукта), решения (менеджерами решения) и релиза (менеджерами решения и релиза), но суть остаётся той же – кто-то в определённый, далёкий от продуктива момент решает, что всё завершено.
Непорядок, конечно же, говорят любители DevOps. Мало ли что там владелец продукта считает. Не он использует продукт, и не он за продукт платит, так не ему и решать. Следующая ступень эволюции, уже согласно DevOps: завершено тогда, когда код работает в продуктиве. Только тогда можно расслабиться (что, разумеется, невозможно, так как уже наступила следующая итерация).
Но и эта ступень не является финальной. Ценители единорогов обязательно добавят, что совсем-совсем правильное определение таково: завершено тогда, когда код работает в продуктиве, а вся сборка, всё тестирование и всё развёртывание выполнены автоматическими средствами.
Таким образом, условный флажок "Готово?" переезжает ещё дальше вправо (см. иллюстрацию выше). И это то хорошее, что с собой приносит DevOps.
Картинка для надёжного запоминания, что пользователь – это самое главное:
Олег, за картинку отдельное спасибо 🙂 Теперь уж точно не забудем!