Executable Specifications/Specs
InBox
Изначально концепция "Executable Specifications" касалась в большей степени подхода BDD (Behavior-Driven Development) и конкретно язык Gherkin. Он всем своим видом старался походить на бизнес-язык, но в то же время за описанными на нём бизнес-требованиями стоял конкретный код, проверяющий, что создаваемое приложение соответствует этим требованиям.
Но мы попробуем расширить эту концепцию, поскольку стейкхолдеры – не единственные участники производственного процесса.
Всякий продукт обычно начинается со спецификации. Точнее – первичного исследования предметной области, решаемых проблем и т.п.
Черновое описание процесса (на примере .NET)
Создаётся Specs-сборка. Например, Xde.App.Specs. И на неё ложится целый спектр ролей:
- Выполняет роль SSoT (Single Source of Truth). Вся информация, которая поступает разработчикам, в том или ином виде размещается в этой сборке.
- Объединяет и координирует все остальные сборки. По мере формализации тех или иных элементов решения, они выделяются в отдельные сборки, например Xde.App.Security, но остаются включёнными в эту основную Specs-сборку.
- Является единым командным центом. Эта сборка является консольным приложением, которое отвечает за тесты, настройки рабочих мест, развертывание решений и любую другую задачу.
Таким образом эта Specs-сборка содержит не только всю информацию, суть спецификацию решения, к какому бы участку оно не относилось, но и старается делать их исполняемыми. Таким образом, можно запускать не только BDD-спецификации, но и развертывание Development/Staging/Production сред для запуска продукта, специфицированных на своём языке и так далее.
Примеры интегрированных в данную сборку решений:
- Сборка приложения;
- Развертывание инфраструктуры;
- Тесты самых различных видов (unit, integration, e2e);
- Веб-сервер документации и генерация документации;
- Различные ETL-задачи;
Бизнес функции можно начинать размещать в Specflow-спецификациях, для начала в виде комментариев. Может с минимальным требованием вроде "Then Smth", чтобы сразу был failing test.
https://github.com/scriban/scriban