edge-hunt
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseEdge Hunt
Edge Hunt
Корнер редко выглядит необычно по частям. Обычно ломается пересечение обычного
состояния, обычного действия и неучтённого порядка событий. Не пытаться просто
«подумать внимательнее»: построить пространство задачи и системно столкнуть его
измерения.
Сначала убедиться, что задача и масштаб уже выбраны. Этот скилл укрепляет края
решения, но не доказывает, что выбрано правильное решение. Если направление ещё
обсуждается, вернуться к или .
nodumbask-nodumb边缘情况很少在单个环节上表现异常。通常是常规状态、常规操作和未考虑到的事件顺序的交叉点导致问题。不要试图只是“更仔细思考”:构建任务的维度空间,系统性地交叉各个维度。
首先确保已确定任务和规模。该技能用于强化解决方案的边缘覆盖,但无法证明所选方案是否正确。若方向仍在讨论中,请返回使用或。
nodumbask-nodumb1. Зафиксировать нормальный контракт
1. 确定正常契约
Одной короткой цепочкой записать:
исходное состояние → действие → видимый результат → что обязано сохранитьсяПоследний элемент обязателен. Неявные гарантии вроде «закрыл временную панель —
вернулся к прежней работе» чаще выпадают из постановки, чем основной результат.
Не изобретать контракт только по тикету. Проверить релевантные код, тесты,
документацию, историю решений и соседние сценарии. Разделить:
- подтверждённое текущее поведение;
- выбранное новое поведение;
- предположение без источника;
- вопрос, требующий продуктового решения.
用简短的链条记录:
初始状态 → 操作 → 可见结果 → 必须保留的内容最后一项为必填项。诸如“关闭临时面板后返回原工作状态”这类隐含保障,比主要结果更容易被遗漏在任务说明之外。
不要仅根据工单凭空构建契约。需检查相关代码、测试、文档、决策历史和相邻场景。区分:
- 已确认的当前行为;
- 选定的新行为;
- 无依据的假设;
- 需要产品决策的问题。
2. Выделить измерения именно этой задачи
2. 提取当前任务的维度
Выбрать только те оси, которые физически участвуют в изменении:
- состояние до действия;
- способ входа и вариант действия;
- порядок, повтор, отмена и прерывание;
- форма, объём и свежесть данных;
- роль, права и смена доступа;
- этап жизненного цикла: первый случай, следующий, спустя время, после restart, update, миграции или отзыва доступа;
- время ответа, retry и поздний результат;
- устройство, вкладка, процесс или внешняя интеграция;
- параллельное действие другого участника или воркера.
Для каждой выбранной оси назвать 2–5 различающихся классов, а не перечислять
все возможные значения. Отметить невозможные сочетания и основание, которое их
исключает.
仅选择实际参与变更的维度:
- 操作前的状态;
- 进入方式和操作选项;
- 顺序、重复、取消和中断;
- 数据的形式、量和新鲜度;
- 角色、权限和访问变更;
- 生命周期阶段:首次使用、后续使用、一段时间后、重启、更新、迁移或权限撤销后;
- 响应时间、重试和延迟结果;
- 设备、标签页、进程或外部集成;
- 其他参与者或工作线程的并行操作。
为每个选定的维度定义2–5个不同的类别,而非枚举所有可能值。标记不可能的组合及其排除依据。
3. Породить корнеры
3. 生成边缘情况
Применить к выбранным осям пять операций:
- Пересечение. Скрестить пары условий. Для потери данных, прав, платежей, синхронизации и необратимых действий проверить также тройки.
- Перестановка. Поменять порядок связанных действий; повторить действие; вставить отмену, возврат, перезапуск или продолжение после паузы.
- Нарушение инварианта. Попытаться потерять то, что должно сохраняться: основную работу, идентичность, выбор, данные, права или возможность вернуться.
- Разрез сбоя. Поместить ошибку до эффекта, во время частичного эффекта и после эффекта, но до подтверждения пользователю.
- Сдвиг по жизненному циклу. Повторить сценарий не только сразу, но для второго и последующего объекта, после истечения времени, перезапуска, обновления, миграции или отзыва внешнего права.
Не останавливаться на названиях вроде «ошибка сети». Описывать полную ситуацию:
что уже произошло, что не произошло, что видит человек и что случится при
повторе.
Подробный механизм и примеры —
.
references/generation-methods.md对选定维度应用以下五种操作:
- 交叉组合:将条件两两交叉。对于数据丢失、权限、支付、同步和不可逆操作,还需检查三者组合的情况。
- 顺序调整:改变相关操作的顺序;重复操作;插入取消、返回、重启或暂停后继续的操作。
- 破坏不变量:尝试破坏必须保留的内容:核心工作、身份、选择、数据、权限或返回能力。
- 故障切入:在效果发生前、部分效果发生时、效果发生后但未向用户确认前引入错误。
- 生命周期偏移:不仅在立即执行时重复场景,还要针对第二个及后续对象、过期后、重启、更新、迁移或外部权限撤销后的场景进行重复。
不要停留在“网络错误”这类笼统名称上。描述完整场景:已发生什么、未发生什么、用户看到什么以及重复操作时会发生什么。
详细机制和示例请参考。
references/generation-methods.md4. Отобрать важное
4. 筛选重要场景
Оставить обычно 5–10 сценариев. Поднимать выше случаи, где:
- несколько обычных условий создают неожиданный результат;
- возможны тихая потеря данных, нарушение прав или необратимое действие;
- граница проходит между двумя компонентами, устройствами или моментами времени;
- поведение существует в продукте, но не записано в постановке;
- проверка способна опровергнуть решение, а не только подтвердить реализацию.
Не добавлять корнер только потому, что он теоретически возможен. Назвать связь с
реальным состоянием, веткой кода, контрактом, прошлым багом или внешней
гарантией. Невозможные, уже закрытые нижним слоем и не относящиеся к изменению
случаи отбросить.
通常保留5–10个场景。优先保留以下情况:
- 多个常规条件组合产生意外结果;
- 可能出现静默数据丢失、权限违规或不可逆操作;
- 边界存在于两个组件、设备或时间点之间;
- 产品中存在该行为但未记录在任务说明中;
- 验证能够推翻解决方案,而非仅确认实现。
不要仅因理论上可能就添加边缘情况。需说明其与实际状态、代码分支、契约、过往缺陷或外部保障的关联。排除不可能的、已由底层处理的以及与当前变更无关的情况。
5. Превратить находку в решение
5. 将发现转化为解决方案
Для каждого оставшегося корнера определить один статус:
- поддержать сейчас — без него задача не выполняет свой контракт;
- сохранить прежнее — новое решение не должно менять существующий сценарий;
- оставить за границей — случай реален, но его цена не входит в эту задачу;
- нужен новый факт — сначала наблюдение, лог, решение человека или живая проверка.
Не перекладывать на пользователя обратимые локальные решения. Рекомендовать
поведение по существующему контракту; спрашивать только там, где выбор меняет
продукт, данные, права или скоуп.
为每个保留的边缘情况确定一个状态:
- 当前支持:没有该场景,任务无法履行其契约;
- 保留原有行为:新解决方案不应改变现有场景;
- 排除在范围外:该情况真实存在,但处理成本不在本次任务范围内;
- 需要新事实:需先进行观察、记录、人工决策或实际验证。
不要将可逆的本地解决方案推给用户。建议遵循现有契约的行为;仅在选择会改变产品、数据、权限或范围时才询问。
6. Проверить, а не только перечислить
6. 验证而非仅列举
Если доступны код или живой продукт, безопасно проверить 1–3 самых рискованных
сценария до реализации либо включить их в план проверки. Предпочитать пробу,
которая может опровергнуть гипотезу: воспроизведение, state-machine test,
property-based test, fault injection или минимальную последовательность событий.
Выбрать сигнал, который физически наблюдает сломанный слой: визуальное поведение
проверять в живом интерфейсе, сохранность данных — повторным чтением из
хранилища, права — запросом с нужной ролью, восстановление — реальным restart.
Зелёная проверка не считается подтверждением, если она не могла увидеть дефект.
Не выдавать придуманный сценарий за найденный дефект. Отдельно помечать:
подтверждено кодом, воспроизведено, следует из контракта или остаётся гипотезой.
若有代码或可用产品,在实现前安全验证1–3个风险最高的场景,或将其纳入验证计划。优先选择能够推翻假设的测试方法:复现、状态机测试、基于属性的测试、故障注入或最小事件序列。
选择能够直接观察故障层的信号:在实际界面中检查视觉行为,通过重新读取存储验证数据完整性,通过对应角色的请求验证权限,通过实际重启验证恢复能力。若验证无法发现缺陷,即使结果为通过也不能视为确认。
不要将虚构场景当作已发现的缺陷。需单独标记:已代码确认、已复现、符合契约或仍为假设。
Результат
结果
Начать с самого опасного пропуска. Для каждого корнера кратко дать:
| Ситуация | Ожидаемое поведение | Почему её легко пропустить | Статус | Проверка |
|---|
В конце назвать, какие измерения проверены, какие сознательно исключены и какое
одно неизвестное сильнее всего ограничивает уверенность. Не превращать ответ в
ритуальный чеклист и не расширять задачу молча.
从最危险的遗漏情况开始。为每个边缘情况简要填写:
| 场景 | 预期行为 | 为何容易被遗漏 | 状态 | 验证方式 |
|---|
最后说明已验证的维度、故意排除的维度,以及哪一个未知因素最限制信心。不要将答案变成例行检查表,也不要擅自扩大任务范围。