从数据规范开始
可复现的重放应记录程序所实现的规则,包括数据格式、序列范围、事件语义、初始状态及每个输出的确切含义。这些记录既支持复现,也为检查结果是否符合数据规范提供依据。
区分协议事实与实验假设。规范中的改单规则属于前者,假设每笔订单都是单位数量属于后者。两者都可能有用,但读者不应依靠猜测区分。
保留一份精简实验记录
下面的记录描述 Python 示例中的三条合成 SET 更新。SET 将当前数量替换为消息中的数量,初始数量为 0。
experiment: event-order-001
input: event_order_lab.py::EVENTS
sequence_scope: one channel, one session
initial_state: quantity = 0
update_rule: SET overwrites quantity
quantities_by_sequence: {1: 10, 2: 4, 3: 7}
source_order: [1, 2, 3]
receive_order: [1, 3, 2]
source_order_expected: 7
receive_order_expected: 4
network_access: none按序列 1、2、3 应用更新,数量依次为 10、4、7;按接收顺序 1、3、2 应用,数量则依次为 10、7、4。下载示例后运行 python3 event_order_lab.py,可以核对两条轨迹。记录本身是实验规范,不是可执行程序。
记录应随代码保留。对较大输入,还应保留校验值、解析器版本和数据许可或访问条件。机器可读记录可以呈现后续变化,避免同一文件名悄然指向不同数据。
检验不变量,而不仅是最终值
不变量,是在既定规则下每次有效更新后都应成立的条件。最终校验值可以表明存在差异,却未必定位原因。逐事件检查更易发现问题:例如撤单前订单应存在、存续订单剩余数量应为正、订单级加总应与相同纳入范围的聚合状态一致。
不变量必须符合行情协议。消息可能代表更正、恢复更新或会话转换。检查规则应覆盖协议规定的这些情形,并在测试样本中明确表示特殊转移。
记录信息何时可得
离线重建可能借助后续消息解释早先事件。这用于诊断可以合理,但在当时决策时未必可得。应标明输出属于事后状态、行情观察状态还是实时可用特征。
如果时间戳在消费者尚未观察到的处理阶段赋值,仅比较时间戳并不充分。可得性属于观察模型,应接受检验。诊断标签需要与决策规则使用的输入分开。
审阅材料应包括什么
- 具有来源说明与稳定标识的输入样本。
- 明确假设与不支持的消息类型。
- 逐事件预期轨迹与最小运行命令。
- 失败状态、恢复规则与信息可得性检查。
- 实验范围及结果的解释。
这份清单适用于小型实验的审阅。公开实验提供合成教学样本,用于演示这一流程。
查看事件顺序实验