Пример

Что показали бы два анализа небольшого продукта?

Вымышленный продукт для записи на приём такого размера, какой ведёт небольшая команда: одно веб-приложение, очередь, планировщик и пять внешних сервисов. Что показали бы два его анализа.

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

Это вымышленная система. Она написана, чтобы показать форму картины 1ADK, а не чтобы описать какого-то клиента. Первый анализ даёт владельцу карту из семи компонентов и пяти внешних сервисов, доказательство под каждым утверждением и четыре вопроса, на которые код ответить не смог. Второй анализ через месяц показывает одно важное структурное изменение, два факта, которые только узнали, и одну выгрузку, которая не объявлена исчезнувшей, потому что часть системы, где она жила, повторно не проверялась.

#Система

Slotwise, продукт для записи на приём Вымышленный пример, не клиент

Slotwise позволяет клиникам публиковать свободное время приёма, а пациентам записываться и платить. Его за три года построила команда из двух человек: веб-приложение, обработчик очереди, который отправляет подтверждения и напоминания, и планировщик, который каждую ночь закрывает неоплаченные записи. Владелец продаёт продукт и код не читает. Первый ведущий разработчик уходит в следующем квартале.

#Что показывает первый анализ

Компоненты и внешние сервисы Вымышленный пример, не клиент
Первый анализ Slotwise
Компонент Для чего он С чем связан
Веб-приложение Кабинет клиники, публичные страницы записи, шаг оплаты База данных, кэш, платёжный провайдер, очередь
Обработчик очереди Письма с подтверждениями и напоминаниями, обновление календарей Очередь, почтовый провайдер, провайдер календарей
Ночной планировщик Закрывает неоплаченные записи, пишет выгрузку CSV для одной группы клиник База данных, файловое хранилище
Платёжный вебхук Принимает платёжные события и отмечает записи оплаченными Платёжный провайдер, база данных
База данных Клиники, время приёма, записи, пациенты Веб-приложение, обработчик, планировщик
Кэш и хранилище очереди Сессии, кэшированные страницы, очередь задач Веб-приложение, обработчик
Файловое хранилище Загруженные логотипы клиник, ночная выгрузка Веб-приложение, планировщик

По краю карты видны пять внешних сервисов: платёжный провайдер, почтовый провайдер, провайдер календарей, сервис отслеживания ошибок и сервис аналитики. Последние два кто-то когда-то подключил, и их нет ни в одном списке, который видел владелец.

#Три утверждения и их доказательства

Как выглядит утверждение Вымышленный пример, не клиент
  • Запись отмечается оплаченной только платёжным вебхуком. Наблюдалось в обработчике вебхука и в модели записи, где больше никакой код не ставит признак оплаты.
  • Адреса почты пациентов уходят почтовому провайдеру и сервису аналитики. Для почтового провайдера наблюдалось в коде уведомлений. Для аналитики наблюдалось в коде отслеживания на странице записи, который передаёт адрес как идентификатор пользователя.
  • Неоплаченные записи закрываются через тридцать минут. Заявлено в комментарии и в README. В планировщике наблюдались двадцать четыре часа. Два источника расходятся, и картина так и говорит, а не выбирает один.

Второе утверждение относится к тем, о которых владелец не знал, что надо спросить, а знать их нужно до того, как придёт вопрос о приватности. Третье относится к тем, что видны только тогда, когда заявленное и наблюдаемое записываются отдельно.

#Что не удалось установить

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

Ни на один из этих вопросов код не отвечает. Каждый попадает в список с причиной, по которой он открыт, а два из них, аккаунт сервиса ошибок и срок хранения данных пациентов, нужно задать уходящему разработчику, пока есть кому их задать.

#Второй анализ

Через месяц Вымышленный пример, не клиент
  • Изменилось в системе. Платёжный вебхук переехал на адрес с версией. Старый адрес всё ещё отвечает, и платёжный провайдер всё ещё настроен присылать события на него.
  • Узнали, но не изменилось. Обработчик повторяет неудачное напоминание три раза, а логотипы уменьшаются при загрузке. И то и другое было верно и месяц назад, просто не было записано.
  • Не объявлено исчезнувшим. Второй анализ не упоминает ночную выгрузку CSV. Но он и не проверял планировщик повторно, поэтому выгрузка становится вопросом, а не удалением.
  • Больше не подтверждено. Утверждение, что напоминания уходят за день до приёма, опиралось на настройку в веб-приложении, которую второй анализ больше не находит. Откуда теперь берётся значение, не установлено, поэтому утверждение помечено как больше не подтверждённое, с датой последнего подтверждения.

#Что с этим делает владелец

Что владелец делает дальше Вымышленный пример, не клиент

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

Посмотрите ту же форму на настоящем проекте.

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

Построить карту проекта Открыть демонстрацию