Z5.07.4Boundary condition coverage设计

预演应覆盖边界条件而非仅验证正常路径

别名: 边界测试 · 边缘条件 · edge case testing

概念解释

预演如果只在「标准场景」下跑一遍——下午、人在家、设备全部在线——它验证的是正常路径:规则最顺的那条执行线。而规则的失败几乎不发生在正常路径上,发生在边界条件:阈值附近一次两次的抖动、两条规则同时触发、执行时设备恰好离线、跨日与勿扰时段的边界、家里恰好有客人。预演的价值上限由它覆盖的边界决定,不由它跑通正常路径决定。

这是软件测试的老结论在家庭自动化的重演:用户想得到的用例很少是出错的用例;错误住在组合与边角里。区别在于,软件测试有专职的测试员替开发者想边界,家庭自动化的「开发者」就是用户本人——没人替他想,所以产品必须把边界枚举自动化。

机制

为什么边界而不是正常路径承载了失败?因为正常路径是用户创建规则时心里的那幅图——「我到家、天黑、开灯」——规则按这幅图写,也按这幅图被心算验证,两边同源,心算通过不能提供新信息。边界条件的本质是用户心里没有的那幅图:写规则时没被想到的输入组合与状态组合。

几类高发边界,各有独立的失败机制:

  • 阈值边界:条件判定值附近的信号抖动,决定触发还是不触发的地带——正常路径永远远离阈值,所以永远测不到。
  • 并发边界:两条规则同一时刻对同一设备的指令——单独看各自正确,合起来互相覆盖;正常路径下规则彼此错峰,冲突只在该碰巧同触的时刻发生。
  • 可用性边界:动作执行时设备离线、规则引擎断网、云端超时——预演若默认全部在线,等于假设了一个不存在的世界。
  • 时间边界:跨日、夏令时切换、勿扰时段的起止点、时区错位——这些点一秒错过就是另一天,正常路径整天都不在这些点附近。
  • 社会边界:家里有客人、孩子改了作息、家人手动干预过——传感与规则的假设(「这个家只有我们俩」)在客人到的那一刻失效。

边界的共同结构:低频 × 后果不可预期。单条边界的发生概率低到不值得用户日常防备,但后果不受正常路径的经验约束——这是自动化系统「平时很好用、出事很突然」的根源。

边界

  • 边界覆盖不可能穷尽。 组合空间是设备数与条件数的乘积,枚举所有边界等于状态爆炸;正确目标是按后果排序的头部边界——先覆盖「触发后不可逆」动作的所有已知边界,再往下摊。
  • 产品枚举不能替代用户情景。 平台知道通用边界(跨日、离线),不知道这个家的边界(客人常住、上夜班);自动枚举 + 用户补例(「我们家周末作息完全不同,按周末跑一遍」)才是完整覆盖。
  • 有些边界只在长时段出现。 季节光照变化、假期作息漂移,单次预演的时间窗装不下——这类边界归长期观察模式管,不归预演管;指望预演抓住季节性问题是给了它做不到的任务。
  • 边界预演的结果解释有门槛。 「设备离线时此规则将跳过还是排队」——用户需要知道排队意味着什么;只展示行为不解释后果,边界预演会退化为新的困惑源。

怎么落地

  • 预演内置边界场景清单,按后果排序自动执行:条件在阈值两侧各抖一次、与同场景其他规则同触、目标设备离线、落在勿扰时段内——逐项报告「会发生什么」而非只报通过与否。
  • 冲突检测并入预演:保存规则时扫描与其共享设备或条件的既有规则,在预演结果里直接列出「同触时谁赢」——并发边界不用用户想到,系统替他枚举。
  • 离线边界的报告区分处置策略并明示:「窗帘离线时:跳过并继续其余动作 / 整条规则等待重试 / 放弃执行」——三种策略后果完全不同,默认值必须显眼。
  • 提供用户自建情景入口:「再按周末作息跑一遍」「假设家里有客人」——把产品枚举不到的家宅特有边界交还给知道的人。
  • 验证办法:把预演的边界清单与真实故障日志对照——线上发生的故障类型是否都曾被预演覆盖;未被覆盖的类型就是清单要加的下一行。另一个读数:用户在边界预演后主动修改规则的比例,按边界类型分桶,低修改率的边界类型要么覆盖到位、要么展示无效,入户访谈区分是哪种。

延伸

  • 同组Z5.07.1 规则上线前需要在不影响真实设备的情况下预演 · Z5.07.2 预演结果需要展示将被触发的具体动作 · Z5.07.3 缺少测试环境时新规则的副作用只能在真实运行中暴露
  • 相邻Z5.02 规则冲突 · Z5.06 时间窗与防抖
  • 站内检索edge case · boundary condition · rule conflicts · failure modes

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/Z5.07.4