3. CBTC安全场景测试用例的等价类与边界设计

为什么位置报告与移动授权必须做边界设计

CBTC 的安全输出不是“连续函数”,而是由离散判定阈值切出来的状态。以列车位置报告为例,车载周期上报“车头可信位置 + 位置不确定度”,轨旁 ATP 用 安全车尾 = 车头位置 − 不确定度 − 安全余量 计算后,再与前方障碍/进路终点比较,决定移动授权(MA)的终点。这里真正决定安全的是几个参数边界:不确定度上限、MA 计算的最小安全余量、以及“车尾是否越过授权终点”的判定阈值。等价类负责把无限输入压成有限类,边界值负责在类与类的接缝处补刀——因为缺陷几乎总藏在“刚好等于”和“刚好超过”的那一格。

参数与判定模型(先定参照,再定用例)

约定:位置沿运行方向为正,单位米;d_head 为车头可信位置,u 为位置不确定度,m 为安全余量(取 2.0 m),L_MA 为授权终点位置。安全车尾 d_tail = d_head − u − m。安全判定条件为 d_tail ≥ L_MA 时保持/延伸授权,d_tail < L_MA 时收缩授权至 d_tail 并触发制动曲线。参数约束:0 ≤ u ≤ 6.0 m(超限视为位置报告失效,进入降级)。

位置报告 → 安全车尾 → MA 判定的参数边界 参数 u(位置不确定度,m)的等价类与边界 0 3.0 6.0 ∞ EC1 有效小值 (0,3) EC2 有效大值 (3,6] EC3 无效 >6.0 u=0 u=3.0 u=6.0 安全车尾与 MA 终点的判定关系(示例:d_head=1000.0,m=2.0) u = 3.0(边界内) d_tail = 1000−3−2 = 995.0 995.0 ≥ L_MA → 保持授权 u = 6.0(上边界) d_tail = 1000−6−2 = 992.0 992.0 ≥ L_MA → 保持授权 u = 6.1(越界) 报告失效 → 降级 不得用于 MA 计算 边界值选取(每个边界取 下界−ε / 下界 / 上界 / 上界+ε) u 边界:−0.1(无效)、0、3.0、6.0、6.1(无效) d_tail 判定边界:L_MA−0.1(收缩)、L_MA(保持)、L_MA+0.1(保持) m 边界:1.9(余量不足告警)、2.0(合规)、2.1(合规)

等价类划分:把输入压成可判定的类

针对 u 与 d_tail 两个核心参数,按“有效/无效”和“安全/不安全”两个维度划分:

参数等价类代表值预期安全输出
uEC1 有效小值 (0,3)1.5正常计算 d_tail,参与 MA 判定
uEC2 有效大值 (3,6]5.0正常计算,d_tail 偏保守
uEC3 无效 >6.06.5报告失效,进入降级,不输出 MA
d_tail vs L_MA安全类 d_tail ≥ L_MA995.0 vs 990.0保持/延伸授权
d_tail vs L_MA不安全类 d_tail < L_MA988.0 vs 990.0收缩授权至 d_tail,触发制动曲线

边界值用例设计(可直接执行)

以下用例以 d_head=1000.0、m=2.0、L_MA=990.0 为固定基线,只变动被测参数,便于定位缺陷。ε 取 0.1 m,对应位置报告分辨率。

用例ud_tail判定预期输出
BV-01−0.1—无效输入拒绝报告,记录异常,不更新 MA
BV-020998.0≥990保持授权,MA 终点不变
BV-033.0995.0≥990保持授权
BV-046.0992.0≥990保持授权(上边界仍有效)
BV-056.1—越界报告失效,降级,MA 冻结
BV-068.0990.0=990保持授权(判定取 ≥,等号归安全侧)
BV-078.1989.9<990收缩授权至 989.9,触发制动曲线
BV-06 与 BV-07 是本节最关键的“接缝用例”:判定条件写 ≥ 还是 >,直接决定 990.0 这一格是保持还是收缩。测试必须显式覆盖等号点,否则该缺陷在常规用例中不可见。

结果判读与通过条件

  • 通过:每个边界点的实际输出与上表“预期输出”一致,且等号点(BV-06)落在安全侧(保持授权)。
  • 不通过典型表现:u=6.0 被误判为失效(边界闭合方向错误);d_tail=990.0 被误判为收缩(等号归属错误);u=6.1 仍参与 MA 计算(无效类未拦截)。
  • 记录要求:每条用例记录输入参数、计算出的 d_tail、判定分支、MA 终点值与制动曲线触发标志,便于回溯是参数错误还是判定逻辑错误。
等价类保证“类内代表值”覆盖,边界值保证“类间接缝”覆盖,两者组合才能把参数边界这一约束对象测透。若时间受限,优先保留所有等号点与越界点用例。