Короткий ответ
#Что такое снимок
- Снимок
- Полное адресуемое состояние знаний проекта на момент времени, полученное записью одного утверждённого Evidence Package в хранилище проекта. Снимки сохраняются, а не заменяются, — именно это делает возможным хоть какое-то утверждение об изменениях.
- Если проще Состояние технической картины проекта после того, как в неё записан один анализ.
Важное различие: снимок — это не пакет. Пакет — то, что произвёл анализ; снимок — то, что проект знает после того, как этот пакет сведён со всем, что проекту уже было известно. Вся работа именно в сведении.
#Проблема идентичности
Эта проблема есть у любого инструмента, который заявляет, что следит за архитектурой во времени. Большинство решают её тем, что о ней не упоминают.
Чтобы фраза «биллинг теперь пишет ещё и в базу аудита» вообще могла быть произведена, системе нужно решить, что биллинг, описанный в сентябре, — тот же биллинг, который описали в мае. Три очевидных подхода не работают:
- По имени. Переименуйте класс — это тот же класс. Две вещи с именем «Основная база» — это по-прежнему две разные вещи.
- По пути. Переместите файл — и вся идентичность, построенная на путях, ломается разом. Перестройте каталог — и система выглядит так, будто её заменили целиком.
- По похожести. Догадка, что два описания достаточно близки, порождает уверенные, непроверяемые и время от времени неверные склейки — худший из возможных отказов для продукта, вся ценность которого в проверяемости утверждений.
Поэтому идентичность объявляют, а не выводят. Каждая сущность несёт путь в репозитории, полное имя или внешний идентификатор — выбранный и сохранённый для того, у чего нет ни того, ни другого: базы, очереди, среды развёртывания. Сущность, у которой нет ни одного из трёх, каждый раз считается новой, и её история начинается заново.
Чего это стоит
Требование идентификатора перекладывает работу на анализ, а не на сервер, и агент, выдающий небрежные внешние идентификаторы, произведёт небрежную историю. Это настоящий размен. Альтернатива — выводить идентичность из похожести — уносит ту же неопределённость туда, где пользователь её не увидит, а это хуже.
#Версия, которая сделала это неправильно
Об этом стоит сказать прямо, потому что обычно продуктовая страница такое опускает.
Ранняя версия приёма данных в 1ADK выводила больше, чем следовало. Два анализа неизменившейся системы порождали дубли сущностей там, где их следовало опознать как одно и то же: второе сканирование создавало вторую копию вместо совпадения. Снаружи это выглядело как система, которая за ночь выросла вдвое.
Починили это тем, что сделали идентичность явной: потребовали идентификатор в пакете, стали сопоставлять по нему, а сущность без него считать по-настоящему новой, а не угадывать. Публикуем это потому, что это тот отказ, который будет у любого сопоставимого инструмента, и знание, что об этом надо спросить, полезно, у кого бы вы в итоге ни покупали.
#Что можно назвать удалённым, решает охват
Сообщить о появлении легко. Чтобы сообщить об исчезновении, нужно знать, что вы смотрели туда, где эта вещь была.
Каждый анализ записывает охват по каждой области: полностью, частично, не покрыто или неизвестно — плюс то, что исключили намеренно. Если текущий анализ не покрывал область, в которой жил компонент, 1ADK не сообщает, что компонент удалён. Он сообщает, что в этот раз его не видели, — это совсем другое и гораздо более скромное утверждение.
Практическое следствие: намеренно узкий анализ не читается как снос. Без этого первый же человек, просканировавший один каталог, узнал бы, что большая часть его системы перестала существовать, — и справедливо больше никогда бы продукту не поверил.
#Что такое смысловое различие
Это не диф исходников. Единица здесь — компонент, интерфейс, связь или утверждение, а не строка. Сравнение двух снимков порождает четыре вида фраз:
| Исход | Условие |
|---|---|
| Появилось | Есть сейчас, не было раньше, и идентичность говорит, что это не переименование чего-то известного. |
| Изменилось | Та же идентичность, другое описание, другие связи, интерфейс или утверждения. |
| Исчезло | Нет сейчас, было раньше, и текущий анализ полностью покрыл область, в которой оно жило. |
| Больше не подтверждается | Утверждение, которое в прежнем снимке опиралось на доказательство, а в текущем не опирается ни на что. |
#Больше не подтверждается
Исход, которого нет ни в одном документе, и тот самый, который оправдывает хранение картины вместо её переписывания.
У написанной страницы про архитектуру два состояния: актуальная и тихо неверная. Между ними она переходит без всякого события, и никто об этом не узнаёт, пока кто-нибудь по ней не поступит.
У утверждения в снимке есть третье состояние. В него верили, под ним было доказательство, а последний анализ его не подтверждает. Такое утверждение не удаляют и не оставляют как есть — его помечают как «больше не подтверждается», с датой последнего подтверждения и причиной.
Это и есть весь аргумент в пользу хранимой картины против произведённой, и это же ответ на вопрос «почему это подписка»: разовый анализ может произвести всё остальное, что делает 1ADK. Отозвать собственные прежние утверждения может только хранимый.
#Чего это не умеет
Чего это не делает
- Оно не восстанавливает, почему что-то изменилось. Сравнение говорит, что логика повторов переехала; причина — в человеке или в задаче.
- Оно не видит промежуток. Два анализа с разницей в три месяца сжимают всё, что было между ними, в одно различие: то, что появилось и исчезло внутри этого окна, невидимо.
- Оно не исправит небрежный идентификатор. Анализ, выдающий неустойчивые внешние идентификаторы, порождает неустойчивую историю, и сервер отличить это не может.
- Оно не сравнивает разные системы. Снимок принадлежит одному хранилищу проекта, и межпроектных запросов в продукте нет.
- Оно ничего не говорит о качестве. Изменение сообщается, а не оценивается.