Files
STM32F4-Base/docs/测试说明
super_agent_bot ad7338365c
CI / 静态门禁 (pre-commit) (push) Failing after 6m14s
CI / 主机侧单测 (MSVC) (push) Successful in 54s
CI / 静态门禁 (pre-commit) (pull_request) Failing after 4m35s
CI / 主机侧单测 (MSVC) (pull_request) Successful in 47s
feat(sntp): 板端 SNTP 校时接入——coreSNTP 序列化器 + [sntp] 段 + 设置页(#73)
- vendored coreSNTP v2.0.0 序列化器(MIT,仅 serializer+LICENSE,零堆),
  48 字节报文编解码在库,节奏与准入判据在本方(RFC 4330 §10 调研口径)
- App/sync/time_sntp.c 挂 timeSyncTask 的 8888 事件循环,等待切片 ≤50 ms,
  不饿任务狗与 IWDG;懒建 UDP socket,代际变化/禁用/死错误码即关闭归还
- 防伪 = OriginTimestamp 逐位等于发出时 T1(含低 16 位随机小数位);
  mode/stratum/闰秒指示/KoD 按 RFC 拒收;DENY·RSTR 换服务器、RATE 只退避
- 主备轮换 + 失败指数退避(5 s 起、60 s 封顶)+ 首轮 1~5 分钟随机错峰;
  成功恢复 poll_min 周期(1~1440 分,出厂默认 60,默认不启用不发包)
- 钟面 = 本地时间:UTC+8 固定偏移落 sys_clock_set_unix(§1.1 时基裁定,
  第三个写入口,装置仍不存时区);|offset|<2 s 只记日志不步进,冷启动或
  更大偏差步进并回写 SD2506,留痕 [SNTP] step 与 syslog OPER
- 首个校验通过的同步置 SYS_EVT_TIMESYNC_READY(就绪位,消费方按需 NoClear)
- [sntp] 配置段(enable/server1/server2/poll_min)属主 sntp_cfg.c,
  注册在 net_cfg_load();UI 页 31「SNTP 设置」(密码叶):启用开关 +
  主/备服务器 octet 编辑 + 周期(分) + 保存,复用 net_cfg_save_request 链
- 测试与门禁:test/host/sntp 新套件(报文/防伪/KoD/退避周期/阶跃域/配置
  注册表)、net_cfg 与 time_sync 套件补 fake、黄金参考 66→74 张零漂移、
  字符集 228 字、Keil 0 错 0 警(RO +5,848 B 含字体)、覆盖率基线回填
- 文档:墙钟维护说明 §16、网络配置说明 [sntp] 节、配置文件设计说明变更记录、
  产品需求 FR-TIME-3 与 8.3/9.1.2 台账、UI 补齐规划/UI补齐 31 叶口径、
  登记簿销项并登记「SNTP 校时真机判据」等台架(PC 时间源 192.168.31.161/.13)
2026-11-04 16:20:22 +08:00
..

测试说明目录导航

本目录放测试文档与测试采集数据,2026-10-30 起按用途分六个子目录(原先 25 篇文档 与 3 个数据目录平铺在一层,找文档靠记忆、命名靠约定)。 全量索引与每篇文档的内容说明在 docs/README.md §6(同一事实只在一处详述, 本文件不重复那些描述),这里只回答两件事:东西该放哪一层、每层现在有什么。

1. 结构与职责

docs/测试说明/
├── 流程与规范/   测试开发的标准动作、门禁决策表、测试文档模板(3 篇)
├── 单元测试/     主机侧纯逻辑单测的说明 + 跨全部套件的覆盖率口径(9 篇)
├── 板级测试/     上板测试:芯片/模块测试指南 + 实机测试实施流程(5 篇)
├── 专项验证/     针对一个问题或一次复验的台架专项流程、存储恢复操作(6 篇)
├── 测试工具/     PC 侧工具用法:串口助手、ST-LINK_CLI 烧录与复位(3 篇)
└── 测试数据/     测试跑出来的原始证据:boot_log_data/ m2_data/ m3_data/

归层的分界线是"这份文档随什么一起演进":跟着测试方法走 → 流程与规范;跟着主机侧 单测代码走 → 单元测试;跟着真机套件与硬件走 → 板级测试;跟着一次结论走(写完即定稿 的专项)→ 专项验证;跟着一个工具走 → 测试工具;不是文档而是证据 → 测试数据。

2. 归层判据(新文档该放哪)

你手上的东西 去处 判据
任何测试都要遵守的流程、命名、门禁口径 流程与规范/ 它约束别的测试文档怎么写
test/host/<模块>/ 那套主机侧单测的说明(用例数、断言点、抓出的缺陷) 单元测试/ 跑它不需要真机;文件名用 <模块>单元测试说明.md
需要真机/台架、对应 test/board/ 套件或某颗芯片的验收步骤 板级测试/ 涉及硬件接线、烧录、板端标记;模块指南命名 <芯片>_Test_Guide.md
针对一个具体缺陷或一次复验的验证动作(非常跑套件)、或一类恢复操作 专项验证/ 有明确的"做完就结束"边界,结论沉淀进模块文档/问题记录
讲一个 PC 侧工具怎么用(命令、参数、排障) 测试工具/ 主体是工具本身,不是被测对象
测试产出的原始数据(JSON、串口片段、二进制快照) 测试数据/<采集批次目录>/ 它是一手证据,不是说明

判据冲突时按这个顺序裁决:是否需要真机执行 → 是则 板级测试/;否则是否只服务一次专项 结论 → 是则 专项验证/;否则按对象类型(单测说明 / 工具 / 流程)归层。拿不准就放 专项验证/ 并在提交说明里写明理由——专项验证/ 是唯一允许"先收下再迁移"的层。

3. 现有文件清单(按子目录)

子目录 文件
流程与规范/ 测试开发标准流程.md · 自动化测试流程.md · 测试文档模板规范.md
单元测试/ 看门狗单元测试说明.md · 系统时钟单元测试说明.md · 开机账本单元测试说明.md · 配置文件单元测试说明.md · ADC输入层单元测试说明.md · 相量层单元测试说明.md · 卷锁单元测试说明.md · 时间同步单元测试说明.md · 主机单测覆盖率口径.md
板级测试/ CH395F_Test_Guide.md · GD5F2GQ5UE_Test_Guide.md · SD2506_Test_Guide.md · FTP_Test_Guide.md · 实机测试实施指南.md
专项验证/ ADC前端注入验证流程.md · 启动日志原子性复验流程.md · 链路延迟测试说明.md · 存储维护与容量恢复.md · 模拟器差距清单.md · 故障录波板级到场轮执行手册.md
测试工具/ 串口助手使用指南.md · 串口助手设计说明.md · ST-LINK_CLI_复位使用说明.md
测试数据/ boot_log_data/(39 个文件,串口/SoE 一手证据)· m2_data/(8 个,链路时延安静档)· m3_data/(11 个,链路时延 M3 各档)

各子目录内部不再加下一层:一层子目录 + 文件名前缀(模块名 / 芯片名)已足够定位,再加层只会 让引用变长、让下面第 4 条的递归门禁 glob 更难核对。

4. 四条硬约束

  1. 测试数据/ 里的文件是一手证据:只增不改。数值被"顺手格式化"就等于基线失效;要更正 结论请改文档并另存新证据文件,不动旧文件。
  2. 两类文件名有机器面,被 scripts/check_test_traceability.py 按目录递归扫描(自本目录 根往下找 *_Test_Guide.md 与 *单元测试说明.md):模块指南落 板级测试/、单测说明落 单元测试/,换层等于让追溯门禁看不见它。
  3. 改名 / 挪目录一律走 scripts/rename_ref.py(先 dry-run 再 --apply),它会同步改写 全库引用;手工扫引用既慢又漏 → docs/文档规范.md §3.6。它搬目录时原有两个会改坏内容的坑 已修(同日加了 --selftest 回归),本目录当时的处置见下面第 5 节。
  4. 引用本目录文档时用仓库根相对路径(形如 docs/测试说明/<子目录>/<文件名>.md);只有图片用 文档所在目录相对 → docs/文档规范.md §3.1 / §3.2。

5. 本次分层的处置记录(2026-10-30)

scripts/rename_ref.py 当时搬目录有两个坑(权威记录在 docs/文档规范.md §3.6 第 4/5 条,两处已于 同日修复并加 --selftest 回归;这里只留本目录的处置):

  • 测试数据/ 下 23 个证据文件的内容曾被脚本误改 → 已用 git show HEAD:<旧路径> 的原始字节逐字节还原, 现在这三个目录是纯改名(内容与 HEAD 逐字节一致)。
  • 数据 README 指向外部的 ../ 出链未自动补层级 → 已手工核对补齐(本目录 测试数据/*/README.md 与 专项验证/链路延迟测试说明.md)。