Top.Mail.Ru

От контрактов к онтологиям: строим пирамиду семантической надёжности

​1. Проблема, которую не решают типы Начну с боли, знакомой каждому, кто работал в крупной кодовой базе. - изображение

​1. Проблема, которую не решают типы


Начну с боли, знакомой каждому, кто работал в крупной кодовой базе.

Идеальная типизация. 90% покрытия. Зелёный CI. Code review в два глаза. И всё равно раз в квартал — инцидент: заказ отменён после отгрузки, платёж возвращён дважды, скидка применена к товару, который в акции не участвует. Ни один тест не упал. Ни один тип не возмутился. Компилятор был счастлив.


Теперь добавьте вторую картину. Разработчик просит Copilot «написать метод refund для платежа», получает аккуратный, компилирующийся, покрытый тестами код — и через месяц выясняется, что он не учитывает правило «возврат невозможен после отгрузки». Copilot не ошибся синтаксически. Он ошибся семантически — потому что семантики в его контексте не было.


Это не два разных кризиса. Это один. Мы научились формализовать форму кода, но не его смысл. Типы гарантируют, что мы не сложим строку с числом. Они не гарантируют, что мы не нарушим бизнес-инвариант. Тесты гарантируют, что код делает то, что мы проверили. Они не гарантируют, что мы проверили то, что имеет значение.

За тридцать лет мы построили мощную инфраструктуру для типов: компиляторы, IDE, линтеры, системы сборки. Для смысла мы построили комментарии, вики и надежду на дисциплину. Неудивительно, что именно смысл утекает первым.


Но здесь есть ловушка. Услышав «нам нужна семантика», индустрия склонна бросаться в две крайности: либо «всё и так работает, обойдёмся тестами», либо «давайте формализуем всё в онтологию». Оба пути ведут в тупик. Первый оставляет нас с галлюцинациями LLM и ночными инцидентами. Второй — это архитектурный астронавтизм 2.0, где онтология становится сложнее кода, а команда тратит недели на описание геттеров.


Эта статья — о том, как пройти между крайностями. Не «нужна ли семантика», а где именно, в каком объёме и по какой цене. Ответ — пирамида семантической надёжности и матрица рисков, которая говорит, где остановиться.


2. Матрица рисков: не вся кодовая база одинакова


Первое, что нужно принять: разные части системы заслуживают разного уровня строгости. Попытка применить один уровень ко всему — главная причина провала семантических инициатив.

Разобьём кодовую базу на четыре зоны по двум осям: цена ошибки и частота изменения правил.


| Зона | Примеры | Цена ошибки | Частота изменения правил |

|---|---|---|---|

| Critical Path | Платежи, возвраты, доступ, compliance, налоги | Очень высокая (деньги, репутация, регуляторика) | Средняя (медленно, но с высокими последствиями) |

| Core Domain | Заказы, корзина, каталог, ценообразование | Высокая | Высокая |

| Supporting | Уведомления, отчёты, интеграции | Средняя | Средняя |

| Utility | Утилиты, скрипты, миграции, DTO | Низкая | Низкая |

Эта матрица — не бюрократия. Это инструмент принятия решений. Critical Path заслуживает максимальной строгости, потому что ошибка стоит дорого, а правила меняются достаточно редко, чтобы их формализация окупилась. Utility не заслуживает ничего выше типов, потому что формализация будет стоить дороже, чем ошибка.


Ключевой принцип: уровень строгости определяется ценой ошибки, а не эстетикой архитектора.


3. Пирамида семантической надёжности


Теперь — сами уровни. Их пять, от дешёвого к дорогому. Каждый следующий ловит класс ошибок, невидимый предыдущему.


Уровень 0 — Комментарии и документация

Дёшево, не проверяется, деградирует. Подходит для Utility и скриптов. Честная позиция: «мы не формализуем это, потому что цена ошибки ниже цены формализации». Это нормально — при условии, что решение принято осознанно, а не по умолчанию.


Уровень 1 — Типы и схемы

Строгая типизация, OpenAPI, JSON Schema, branded types. Ловит структурные ошибки: «передали строку вместо числа», «забыли поле в ответе». Это стандарт для всей кодовой базы — и он уже есть у большинства команд. Дальше начинается то, чего у большинства нет.


Уровень 2 — Контракты и property-based testing

Design by Contract (предусловия, постусловия, инварианты объекта) плюс property-based testing (Hypothesis, QuickCheck). Ловит нарушения поведения: «вызвали refund на незавершённом платеже», «сумма возврата превысила сумму платежа». Это дешёвый мост к семантике — и самая недооценённая часть пирамиды.


Ключевое преимущество: property-based testing не требует онтологии. Вы описываете свойство на языке предикатов, фреймворк генерирует сотни входов и ищет контрпримеры. Полдня работы — и вы ловите нарушения, о которых не знали. Для Core Domain это часто оптимум...


#DST #DSTGlobal #ДСТ #ДСТГлобал #LLM #искусственныйинтеллект #logosk #ООП #онтология #DbC #DTO #IDE #линтеры #системысборки #Copilot #семантика #semanticdb #OpenAPI #JSON #brandedtypes #AWS #Azure #MongoDB #Utility


Источник: https://dstglobal.ru/club/1264-ot-kontraktov-k-ontologijam-stroim-piramidu-semanticheskoi-nadyozhnosti.html


73
Комментарии
0 / 2000
Сообщение
Тебя ждёт миллион инвесторов
Регистрируйся бесплатно, чтобы учиться у лучших, следить за инсайтами и повторять успешные стратегии
Мы используем файлы cookie, чтобы улучшить ваш опыт на нашем сайте
Нажимая «Принять», вы соглашаетесь на использование файлов cookie в соответствии с Политикой конфиденциальности. Можно самостоятельно управлять cookie через настройки браузера: их можно удалить или настроить их использование в будущем.
От контрактов к онтологиям строим пирамиду семантической надёжности | БАЗАР