Что создаёт 1ADK

Что такое карта программной системы?

Не картинка. Структурированный ответ на вопрос, что в системе есть, для чего нужна каждая часть, как части связаны и какие из этих утверждений можно проверить.

Короткий ответ

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

#Что это такое

Карта системы
Структурированная запись компонентов программной системы, их вложенности, связей между ними и интерфейсов, через которые они общаются. У каждого элемента есть описание, написанное для читателя, который не открывает код, а за каждым неочевидным утверждением стоит файл и диапазон строк, из которых оно выведено.
Если проще Письменный ответ на вопрос «из чего это сделано и что с чем разговаривает» — такой, что каждую строчку можно возвести к чему-то в коде.

Смысл иметь карту не эстетический. Дело в том, что множество обычных деловых решений — можно ли сменить поставщика, может ли этот человек уйти в отпуск, что сломается, если у того провайдера будет сбой, что передавать новой команде — упирается ровно в эти сведения, а в большинстве компаний они существуют только как то, что знает конкретный разработчик.

#Что в неё входит

Всё перечисленное ниже есть в проекте 1ADK, потому что инструкция анализа просит об этом явно. Карта, в которой есть только первая строка, — это картинка; карта, в которой есть все, пригодна тому, кого при этом не было.

Элементы карты системы
ЭлементНа какой вопрос отвечает
КомпонентыИз чего состоит система? Сервисы, модули, базы данных, очереди, задания, расписания, фронтенды.
ВложенностьЧто внутри чего — в приложении, в развёртывании, в данных.
СвязиЧто что использует, от чего зависит, откуда читает, куда пишет или что реализует — и в каком направлении.
ИнтерфейсыКак две вещи разговаривают на самом деле: адрес, очередь, канал и для чего нужна каждая операция.
ДанныеКакие деловые объекты существуют, какую форму принимают и куда перемещаются.
ДоказательстваГде всё перечисленное было найдено. Путь и диапазон строк, а не обещание.
НеизвестноеЧто установить не удалось и почему это важно.
ОхватКакие части системы действительно смотрели — и какие нет.

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

#Почему это не схема

Архитектурные схемы полезны. Но это другой объект с другими способами ломаться.

Схема в сравнении с картой
Архитектурная схемаКарта системы
Откуда берётсяИз чьего-то понимания, нарисована рукамиВыведена из анализа системы
Что означает прямоугольникТо, что имел в виду авторИменованный компонент с типом и описанием
Как это проверитьСпросить автораОткрыть файл, на который она ссылается
Что происходит, когда система меняетсяОна молча становится невернойСледующий анализ сообщает о расхождении
В чём хорошаОбъяснить замысел и спорить о том, чего ещё нетУстановить то, что есть

Иметь стоит и то, и другое. Беда начинается, когда схемой, нарисованной полтора года назад, отвечают на вопрос о сегодняшней системе, — а на практике так и происходит, потому что другого документа в комнате нет.

#Как она выглядит

Фрагмент карты Вымышленный пример — не клиент

Система биллинга подписок на том уровне, на котором её читает владелец. Каждой строке здесь соответствует запись с типом, описанием и — там, где утверждение неочевидно, — файлом и диапазоном строк за ним.

Портал клиента         ВЕБ-ПРИЛОЖЕНИЕ
  → читает из          Сервис подписок
  → отправляет в       Сервис биллинга         /api/invoices        POST

Сервис биллинга        СЕРВИС
  → пишет в            Основную базу           payments, invoices
  → публикует в        Очередь платежей
  → вызывает           Платёжного провайдера   ВНЕШНИЙ · REST

Обработчик просрочек   ФОНОВЫЙ ОБРАБОТЧИК
  → читает             Очередь платежей
  → пишет в            Основную базу

Ночная выгрузка        ЗАДАНИЕ ПО РАСПИСАНИЮ
  → читает из          Основную базу
  → пишет в            (получатель не установлен)        НЕИЗВЕСТНО

Смотреть здесь нужно на последнюю строку. Обычный документ либо опустил бы выгрузку, либо угадал, куда уходит файл. Записанная как неизвестное, она становится вопросом, на который кто-то ответит за пять минут, — а пока не ответил, никто не строит план поверх догадки.

Демонстрационный проект — рабочая версия этого: вымышленная система биллинга, которую можно открыть, полистать и прочитать без аккаунта.

#Пять взглядов на одну систему

Те же компоненты, разложенные по тому вопросу, который вы задаёте.

Компонент одновременно принадлежит больше чем одной иерархии. Платёжный сервис находится внутри приложения, внутри развёртывания и внутри деловой функции — и это три разных родителя. Схлопывание их в одно дерево и делает большинство архитектурных документов почти правильными и никогда по-настоящему пригодными.

  • Приложение — из чего программа состоит, на языке программ.
  • Бизнес — что программа делает, на языке компании.
  • Организация — кто чем владеет.
  • Развёртывание — что где работает.
  • Данные — какие сведения существуют и где они живут.

Практическая польза в том, что два разных человека получают прямой ответ из одной записи. Владелец, спрашивающий «что будет со счетами, если этот поставщик ляжет», и инженер, спрашивающий «что выкатывается вместе», читают одну карту через разные взгляды.

#Что делает её достоверной

Три свойства; карта без любого из них — это документ с лучшей вёрсткой.

  1. Каждое утверждение можно открыть

    Утверждение о компоненте называет файл и строки, из которых оно взято. Человек с репозиторием проверит это меньше чем за минуту и не спрашивая того, кто это составил.

  2. Пробелы видны

    То, что установить не удалось, записано открытым вопросом с причиной. Молчание никогда не означает «там ничего нет».

  3. Устаревание заметно

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

#Чего карта не скажет

Чего это не делает

  • Почему сделано именно так. Карта фиксирует то, что есть; рассуждение за решением живёт в людях, и анализ его не восстановит. Зато он покажет, о каких решениях нужно спросить.
  • Хорошо ли это. Оценки качества нет. Карта, показывающая девять сервисов там, где хватило бы двух, не помечается как плохая архитектура — она просто показывает девять сервисов.
  • Что происходит во время работы. Ничего не запускается, поэтому поведение под нагрузкой, реальные задержки и то, что видит конкретный пользователь, остаются вне её досягаемости.
  • То, чего нет в репозитории. Зависимость, настроенная только в облачной консоли, обычно попадает в неизвестное, а не в компоненты.
  • Безопасно ли это. Карта — не сканер уязвимостей и не пытается им быть.

Узнайте, чем вы на самом деле владеете.

Без доступа к репозиторию. Без загрузки исходного кода. Без банковской карты.

Построить карту проекта — бесплатно