PRO учет "всех" возможных исходов
В нашей повседневной работе мы редко сталкиваемся с линейными сценариями. Чаще всего у нас есть два основных варианта развития событий:
1️⃣. Конструкция: ЕСЛИ [условие1] ТО [действие1] ИНАЧЕ [действие0] (аналог if ... else ...) Пример: ЕСЛИ возраст клиента больше или равен 16 лет, ТО работаем ✅, ИНАЧЕ нет ❌.
2️⃣. Конструкция: ЕСЛИ [условие1] ТО [действие1]; ЕСЛИ [условие2] ТО [действие2]; ИНАЧЕ [действие0] (аналог switch: case ... default ...) Пример: ЕСЛИ статус заказа "Новый", ТО делай раз, ЕСЛИ статус заказа "Оплачен", ТО делай два и так далее; ИНАЧЕ [действие0]
При чтении постановок сталкиваюсь с ситуацией, когда аналитики пытаются предусмотреть "все" возможные исходы, но забывают про ключевое слово "ИНАЧЕ".
Это слово часто обрабатывает минимальный перечень возможных исходов, которые могут показаться невозможными и возникает такой диалог:
- Учли все исходы?
- Да, всё перечислено. Дополнительных исходов не будет.
- А что, ***, если нет? Что будет, если нет? (как у Слепакова в песне про нефть)
- Эм-м-м.
Пример: Представьте сервис, который возвращает состояние заказа, описываемое тремя возможными статусами {"Новый", "Оплачен", "Получен"}. Мы знаем все эти статусы сейчас и кажется, что достаточно описать поведение при получении каждого из них. Но что, если сервис не наш, а жизненный цикл заказа со временем может усложниться (судя по списку статусов, точно усложнится)? Правильно: мы столкнемся с необрабатываемым исходом и непредсказуемым поведением.
На ревью 🔍 могут не заметить. Разработчик 💻 сделает так, как описано. Тестировщики 🪲 поторопятся и не обратят внимания. Всё уедет в прод 🫣 как есть. Рано или поздно получим инцидент 🤷♂️ на ровном месте.
Решение: считаю лучшей практикой с самого начала заложить поведение на случай исключительных ситуаций. Даже если мы учли "все" исходы, всегда может произойти что-то еще: добавят статус "Отменён", "Ожидает оплаты" или иной другой статус. Поэтому необходимо не забывать про "ИНАЧЕ", чтобы система была готова к неожиданностям и оставалась стабильной 💪.
—————
Как тебе материал? Ставь 👍, если годится)
Спасибо за обратную связь и отличной 👨💻 недели!
made in: @pro_system_analysis ❗️Начало активного подбора СА близко. Заходи на тестовое собеседование: по ссылке
· 08.04.2025
Продумать заранее список статусов состояния заказа - это не идеально, это нормально)
Я, в принципе, и не возражал против Вашей мысли про "иначе", но отнесся к ней как к "если человеку так удобно и он считает, что так лучше - почему б и нет". Однако, для себя такое нахожу избыточным. Потому что не устраняет все равно необходимость доработок при появлении "непредвиденного чертика из табакерки". Ну вот пропишу "Иначе", а следом за ним - что?
Если статус = А, То сделать то-то, Если статус = В, то сделать еще что-то Иначе.. что? вывести сообщение "Тут произошло что-то, что не предвидели"?
Все равно же наполнение после "иначе" будет известно только после того, как "выяснилось ранее непредвиденое" и отработка логики при "иначе" будет понятна - не ранее.
ответить
коммент удалён