docs(测试说明): 按用途分六个子目录并同步全库引用
分层:流程与规范/ 单元测试/ 板级测试/ 专项验证/ 测试工具/ 测试数据/, 顶层只留新增的目录导航 README.md(归层判据 + 硬约束 + 本次处置记录)。 - 搬迁 28 个路径:测试数据三个目录 58 个文件为纯改名(R100,内容逐字节不变) - 全库引用同步 124 个文件:AGENTS / docs 索引 / skills / 门禁注释 / scripts - 门禁面:scripts/check_test_traceability.py 的 glob 改 rglob (分层后不递归扫描=追溯门禁直接瞎掉) - scripts/rename_ref.py:收尾的 ℹ 提示在 GBK 代码页抛 UnicodeEncodeError, 让进程以退出码 1 收场而改写其实已落盘(RC 与真实结果相反);改为把 stdout/stderr reconfigure 成 UTF-8,与 check_doc_links.py 等同法 - docs/文档规范.md §1.1 补「子目录文件过多时再分一层」;§3.6 补 rename_ref 搬整目录的两个实测坑:① 会改写目录内部文件的内容 ② 内部文件的 ../ 出链 不补层级(本次 23 个被误改的证据文件已按 HEAD 原始字节逐字节还原) - docs/README.md §6 改为与六个子目录一一对应,并补登原先漏登记的 「启动日志原子性复验流程」一行 - .cubemx_survival_baseline.json:App/util/task_watchdog.c 的注释路径也随分层更新, 该文件是存活审计的 watchdog-module 漂移锚点,按脚本自己的提示跑 --write 重建基线 (实测重建后仅 watchdog-module 一条哈希变化) - 铁律 4 例外(本次在任务树里改了单写者文件):AGENTS.md 与 .pre-commit-config.yaml 只被 rename_ref 改写路径字面量(后者全在注释行), 任务表块与钩子声明一字未动 验证:check_doc_links.py --sections-strict 覆盖全部 88 个改动 .md 全绿; check_test_traceability.py 输出与主树逐行一致;196 个文本文件无 BOM、无新增 CR、无 U+FFFD、无行尾空白;陈旧引用面由主树 25 处降到 6 处(无新增断链)。
This commit is contained in:
+4
-4
@@ -56,7 +56,7 @@
|
||||
|
||||
## 相关文档
|
||||
|
||||
- `docs/测试说明/测试开发标准流程.md` — 测试验证分层与门禁决策表
|
||||
- `docs/测试说明/自动化测试流程.md` — `@test` 细节与失败模式
|
||||
- 各模块测试指南:`docs/测试说明/*_Test_Guide.md`
|
||||
- `docs/测试说明/链路延迟测试说明.md`
|
||||
- `docs/测试说明/流程与规范/测试开发标准流程.md` — 测试验证分层与门禁决策表
|
||||
- `docs/测试说明/流程与规范/自动化测试流程.md` — `@test` 细节与失败模式
|
||||
- 各模块测试指南:`docs/测试说明/板级测试/*_Test_Guide.md`
|
||||
- `docs/测试说明/专项验证/链路延迟测试说明.md`
|
||||
|
||||
@@ -40,6 +40,6 @@
|
||||
|
||||
## 相关文档
|
||||
|
||||
- 测试指南:`docs/测试说明/CH395F_Test_Guide.md`、`GD5F2GQ5UE_Test_Guide.md`、`SD2506_Test_Guide.md`、`FTP_Test_Guide.md`
|
||||
- 测试指南:`docs/测试说明/板级测试/CH395F_Test_Guide.md`、`GD5F2GQ5UE_Test_Guide.md`、`SD2506_Test_Guide.md`、`FTP_Test_Guide.md`
|
||||
- 套件配置:`AGENTS.md`「测试与验证」章
|
||||
- 容量恢复:`docs/测试说明/存储维护与容量恢复.md`
|
||||
- 容量恢复:`docs/测试说明/专项验证/存储维护与容量恢复.md`
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
* Phase 12 | 硬件层 | 独立运行:SPI 字节命令 / DMA 时延基线(SPI_CMD/SPI_DMA,无需 PC)
|
||||
* Phase 13 | NET 层 | testTask:芯片 + 队列时延(CHUNK_WAIT~FRAME_RT/LOGTAX,需 PC peer,独立运行)
|
||||
* Phase 14 | NET 层 | testTask:生产路径时延(PROD_CYCLE~UI_LOOP + 模拟器 A/B,需 PC peer)〔M3 规划〕
|
||||
* 时延分段定义/判定基线/执行流程:docs/测试说明/链路延迟测试说明.md
|
||||
* 时延分段定义/判定基线/执行流程:docs/测试说明/专项验证/链路延迟测试说明.md
|
||||
*/
|
||||
|
||||
#ifndef CH395F_TEST_H
|
||||
@@ -42,7 +42,7 @@ extern "C" {
|
||||
/*
|
||||
* 阶段使能开关(取消注释即启用对应阶段)
|
||||
*
|
||||
* 构建模式互斥(详见 docs/测试说明/CH395F_Test_Guide.md「构建模式与执行顺序」):
|
||||
* 构建模式互斥(详见 docs/测试说明/板级测试/CH395F_Test_Guide.md「构建模式与执行顺序」):
|
||||
* 硬件层模式(阶段 1~5):netTask 入口自挂起(创建但不运行),testTask 独占 CH395F
|
||||
* NET 层模式 (阶段 6~11):完整网络栈,netTask 轮询 + testTask 监听循环
|
||||
*
|
||||
@@ -66,10 +66,10 @@ extern "C" {
|
||||
* 连接无效,E11 实证);勿与 Phase 6/9/10/13 混选(recv 互抢数据)。
|
||||
* ⚠ 说明写在**上一行**而不是挂在 #define 行尾:见本节末尾的"开关行注释规范" */
|
||||
#define ENABLE_PHASE11_TESTS /* [网] KeepAlive 超时断开(判据见 CH395F_Test_Guide) */
|
||||
/* ---- 链路时延基线(M1;分段/阈值见 docs/测试说明/链路延迟测试说明.md)---- */
|
||||
/* ---- 链路时延基线(M1;分段/阈值见 docs/测试说明/专项验证/链路延迟测试说明.md)---- */
|
||||
//#define ENABLE_PHASE12_TESTS /* [硬] SPI 字节命令 / DMA 时延基线(SPI_CMD/SPI_DMA,无需 PC)—— M1 已完成,基线见说明文档 §6.1 */
|
||||
//#define ENABLE_PHASE15_TESTS /* [硬] 自愈驱动原语:状态回读一致性/cmd_done/sock_reset 状态机跑通/链路缓存(无需 PC)——TC 详见 docs/测试说明/CH395F_Test_Guide.md 阶段 15;台架 21/21 PASS */
|
||||
/* ---- 链路时延(M2/M3;分段/阈值见 docs/测试说明/链路延迟测试说明.md)---- */
|
||||
//#define ENABLE_PHASE15_TESTS /* [硬] 自愈驱动原语:状态回读一致性/cmd_done/sock_reset 状态机跑通/链路缓存(无需 PC)——TC 详见 docs/测试说明/板级测试/CH395F_Test_Guide.md 阶段 15;台架 21/21 PASS */
|
||||
/* ---- 链路时延(M2/M3;分段/阈值见 docs/测试说明/专项验证/链路延迟测试说明.md)---- */
|
||||
//#define ENABLE_PHASE13_TESTS /* [网] 芯片 + 队列时延(CHUNK_WAIT~FRAME_RT/LOGTAX,需 PC peer)—— M2 已完成,基线见说明文档 §6.2 */
|
||||
/* [网] 生产路径时延(PROD_CYCLE~UI_LOOP + 模拟器 Δ)—— M3,需 peer --mode remo(:7003);
|
||||
* 与 Phase 11 共存安全:peer 缺席时有 LAT_P14_TIMEOUT_MS 整体超时,自动 done,
|
||||
|
||||
@@ -90,7 +90,7 @@ static void phase1_run(void) {
|
||||
* 通过:函数返回 CH395F_ERR_SUCCESS(0x00)= SPI 回显取反匹配。
|
||||
* 失败:返回 CH395F_STATUS_NOT_DETECTED(0xFF)= SPI 通信异常或芯片未响应。
|
||||
*
|
||||
* 用例号:TC-NET-101(docs/测试说明/CH395F_Test_Guide.md §2 阶段 1「SPI 命令路径
|
||||
* 用例号:TC-NET-101(docs/测试说明/板级测试/CH395F_Test_Guide.md §2 阶段 1「SPI 命令路径
|
||||
* 完整性」——该条目的各步就是本函数按序执行的九个测试项,项号见各项标注)。
|
||||
*/
|
||||
{
|
||||
@@ -187,7 +187,7 @@ static void phase1_run(void) {
|
||||
* 失败:第二次读非 0x0000(测试期间出现新事件)。
|
||||
*
|
||||
* 用例号:本项即原 TC-NET-102(全局中断状态一致性)。该条目在 2026-08-22
|
||||
* 文档重构时被删、而 docs/测试说明/CH395F_Test_Guide.md 附录 B 的
|
||||
* 文档重构时被删、而 docs/测试说明/板级测试/CH395F_Test_Guide.md 附录 B 的
|
||||
* 汇总行遗留至今,故在此把号挂回实现体。
|
||||
*/
|
||||
{
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* 模块名称:GD5F2GQ5UE Driver Test Suite
|
||||
* 模块功能:GD5F2GQ5UE SPI NAND Flash 驱动测试入口,按阶段组织测试用例,
|
||||
* 覆盖 gd5f2gq5ue.c 全部公开/私有函数,并延伸到 FTL(nand_ftl)与
|
||||
* FatFS diskio。详见 docs/测试说明/GD5F2GQ5UE_Test_Guide.md。
|
||||
* FatFS diskio。详见 docs/测试说明/板级测试/GD5F2GQ5UE_Test_Guide.md。
|
||||
* 适用平台:STM32F4 系列(GD5F2GQ5UE SPI NAND)
|
||||
* 作者:王建锋
|
||||
* 创建日期:2026-08-26
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* 模块功能:DWT CYCCNT 微秒时基 + 采样统计(min/med/p95/max/尖峰)+ [LAT]
|
||||
* 机器可读报告与 verdict;Phase 12(M1):SPI 字节命令 / DMA 时延
|
||||
* 基线(SPI_CMD/SPI_DMA,硬件层模式,无需 PC)。分段定义与判定基线见
|
||||
* docs/测试说明/链路延迟测试说明.md。
|
||||
* docs/测试说明/专项验证/链路延迟测试说明.md。
|
||||
* 适用平台:STM32F4 系列(CH395F)
|
||||
* 作者:王建锋
|
||||
* 创建日期:2026-09-22
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* Phase 12(硬件层,M1):SPI 字节命令 / DMA 时延基线(SPI_CMD/SPI_DMA,无需 PC);
|
||||
* Phase 13/14(NET 层,M2/M3 规划):芯片发送握手 / 队列往返 /
|
||||
* 生产路径时延。分段定义、判定基线与执行流程见
|
||||
* docs/测试说明/链路延迟测试说明.md。
|
||||
* docs/测试说明/专项验证/链路延迟测试说明.md。
|
||||
* 适用平台:STM32F4 系列(CH395F)
|
||||
* 作者:王建锋
|
||||
* 创建日期:2026-09-22
|
||||
|
||||
@@ -494,7 +494,7 @@ static int32_t phase8_verify(uint8_t *buf, uint32_t size, uint32_t offset) {
|
||||
#endif
|
||||
|
||||
/* 用例号:TC-NET-801(SEND 方向)与 TC-NET-802(RECV 方向)——两向由
|
||||
* PHASE8_DIRECTION 编译期切换,定义见 docs/测试说明/CH395F_Test_Guide.md
|
||||
* PHASE8_DIRECTION 编译期切换,定义见 docs/测试说明/板级测试/CH395F_Test_Guide.md
|
||||
* 阶段 8(本函数体从未改过名,只是一直没挂上号,2026-10-21 核对补注)。 */
|
||||
static void phase8_run(int32_t sockfd) {
|
||||
#if PHASE8_DIRECTION == PHASE8_DIR_RECV
|
||||
@@ -610,7 +610,7 @@ static void phase8_run(int32_t sockfd) {
|
||||
* 通过:select 检测到数据并成功回显。
|
||||
* 失败:select 未检测到数据或回显失败。
|
||||
* 用例号:TC-NET-901(单 Socket 就绪检测)与 TC-NET-902(超时返回 0),
|
||||
* 定义见 docs/测试说明/CH395F_Test_Guide.md 阶段 9——本测试一直在,
|
||||
* 定义见 docs/测试说明/板级测试/CH395F_Test_Guide.md 阶段 9——本测试一直在,
|
||||
* 只是从未挂上这两个号(2026-10-21 核对补注)。
|
||||
* =================================================================== */
|
||||
|
||||
@@ -811,7 +811,7 @@ static void phase10_run(int32_t sockfd) {
|
||||
* 通过:从连接建立到 recv 返回 0 的间隔落在 10s~120s 有界窗
|
||||
* (芯片定时语义与手册公式 75s 不符,实测判死 18~31s——
|
||||
* 见《网络自愈架构设计》§5.2 E11 与 phase11_run 内判据注释)。
|
||||
* 用例号:TC-NET-1101(docs/测试说明/CH395F_Test_Guide.md 阶段 11 KeepAlive 触发断开)。
|
||||
* 用例号:TC-NET-1101(docs/测试说明/板级测试/CH395F_Test_Guide.md 阶段 11 KeepAlive 触发断开)。
|
||||
* =================================================================== */
|
||||
|
||||
#ifdef ENABLE_PHASE11_TESTS
|
||||
|
||||
@@ -229,7 +229,7 @@ void sd2506_test_run(void)
|
||||
* 不再出现"Phase 2 显示的是含 Phase 1 的累计值"这种易误读输出;
|
||||
* 2) 末尾输出套件级 `=== RTC Tests: N/M PASSED (failed=0) ===` 汇总行——
|
||||
* 它是 run_all_suites.py --require-suite-summary 的判定标记
|
||||
* (见 test_common.h / docs/测试说明/测试开发标准流程.md §3.2)。 */
|
||||
* (见 test_common.h / docs/测试说明/流程与规范/测试开发标准流程.md §3.2)。 */
|
||||
uint16_t suite_total = 0U;
|
||||
uint16_t suite_passed = 0U;
|
||||
uint16_t suite_failed = 0U;
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
*
|
||||
* 设计取舍:**统计变量仍按套件独立**(各套件持有自己的 `g_xxx_stats`),
|
||||
* 公共宏只提供"内核",由各套件用一行宏把它绑定到自己的统计变量。
|
||||
* 理由见 docs/测试说明/测试开发标准流程.md §3.2:
|
||||
* 理由见 docs/测试说明/流程与规范/测试开发标准流程.md §3.2:
|
||||
* - 统计变量独立 = 防跨套件串数(历史约定,不能破);
|
||||
* - 内核共用 = 报告行格式/字段一处维护,改一次即全生效。
|
||||
*
|
||||
|
||||
@@ -26,7 +26,7 @@ extern "C" {
|
||||
* ⚠️ 默认必须是**产品构建**(全部注释)——pre-commit 钩子 `test-suite-switch` 会拦截
|
||||
* 未显式放行的测试构建(`--allow-test-build` / `ALLOW_TEST_BUILD=1`)。
|
||||
* 跑套件回归时取消注释所需套件;跑完务必改回、或直接用 `test/run_all_suites.py`
|
||||
* (自动改宏 + 结束后无条件还原)。详见 docs/测试说明/测试开发标准流程.md §3.1/§3.6。 */
|
||||
* (自动改宏 + 结束后无条件还原)。详见 docs/测试说明/流程与规范/测试开发标准流程.md §3.1/§3.6。 */
|
||||
//#define TEST_SUITE_CH395F
|
||||
//#define TEST_SUITE_STORAGE
|
||||
//#define TEST_SUITE_GD5F
|
||||
@@ -54,7 +54,7 @@ extern "C" {
|
||||
* 创建"的旧疑点不成立(实测 RTC 套件正常执行;RTC 已计入下方析取,故 RTC 构建下本
|
||||
* 标记亦置位、testTask 正常保留)。
|
||||
* 4 个套件(含 RTC)在此补齐:若将来再引入"测试构建下 defaultTask 空闲"等分支而复用
|
||||
* 本标记,可避免重演"漏 RTC"的隐患。详见 docs/测试说明/实机测试实施指南.md §8.3。 */
|
||||
* 本标记,可避免重演"漏 RTC"的隐患。详见 docs/测试说明/板级测试/实机测试实施指南.md §8.3。 */
|
||||
#if defined(TEST_SUITE_CH395F) || defined(TEST_SUITE_STORAGE) || defined(TEST_SUITE_GD5F) || defined(TEST_SUITE_RTC)
|
||||
#define TEST_SUITE_SELECTED
|
||||
#endif
|
||||
|
||||
+14
-14
@@ -70,10 +70,10 @@
|
||||
| `nand_port/nand_port_test.c` | 测试单元本体(`#include` 生产源码 + RAM 假芯片;内联一份"只看页首 64 B"的**旧算法对照**,证明断言能咬人) |
|
||||
| `nand_port/stub/` | 桩头文件(`gd5f2gq5ue.h` 芯片几何与 SPI 原语声明 / `dbg_log.h` 日志宏计数) |
|
||||
|
||||
> 详见 `docs/测试说明/看门狗单元测试说明.md`、`docs/测试说明/系统时钟单元测试说明.md`、
|
||||
> `docs/测试说明/配置文件单元测试说明.md`、`docs/测试说明/ADC输入层单元测试说明.md`、
|
||||
> `docs/测试说明/相量层单元测试说明.md`、`docs/测试说明/卷锁单元测试说明.md`、
|
||||
> `docs/测试说明/时间同步单元测试说明.md`;
|
||||
> 详见 `docs/测试说明/单元测试/看门狗单元测试说明.md`、`docs/测试说明/单元测试/系统时钟单元测试说明.md`、
|
||||
> `docs/测试说明/单元测试/配置文件单元测试说明.md`、`docs/测试说明/单元测试/ADC输入层单元测试说明.md`、
|
||||
> `docs/测试说明/单元测试/相量层单元测试说明.md`、`docs/测试说明/单元测试/卷锁单元测试说明.md`、
|
||||
> `docs/测试说明/单元测试/时间同步单元测试说明.md`;
|
||||
> harness 用法见 [`common/README.md`](common/README.md)。
|
||||
> 已挂 pre-commit 钩子(各模块同名 `*-unit-test`,共 **22** 个;逐个说明见
|
||||
> `docs/代码规范/pre-commit使用说明.md` §2 与 AGENTS.md 门禁条)。
|
||||
@@ -149,13 +149,13 @@
|
||||
|
||||
## 相关文档
|
||||
|
||||
- `docs/测试说明/自动化测试流程.md` — `@test` 细节与失败模式
|
||||
- `docs/测试说明/测试开发标准流程.md` — 测试分层与门禁
|
||||
- `docs/测试说明/看门狗单元测试说明.md` — 主机侧单测(用例 / 平台层 / 扩展方法)
|
||||
- `docs/测试说明/系统时钟单元测试说明.md` — 系统时钟换算单测(用例 / 桩 / Zeller 缺陷记录)
|
||||
- `docs/测试说明/配置文件单元测试说明.md` — 配置引擎单测(内存 FS 桩 / 抓出的 P0)
|
||||
- `docs/测试说明/ADC输入层单元测试说明.md` — ADC 输入层单测(逐 Rank 钉死映射)
|
||||
- `docs/测试说明/相量层单元测试说明.md` — 相量层单测(傅氏系数 / 双区交换)
|
||||
- `docs/测试说明/卷锁单元测试说明.md` — 卷锁单测(fail-open 不变量)
|
||||
- `docs/测试说明/时间同步单元测试说明.md` — 时间同步单测(探针窗口心跳缺口逻辑贡献者)
|
||||
- `docs/测试说明/CH395F_Test_Guide.md`、`FTP_Test_Guide.md`
|
||||
- `docs/测试说明/流程与规范/自动化测试流程.md` — `@test` 细节与失败模式
|
||||
- `docs/测试说明/流程与规范/测试开发标准流程.md` — 测试分层与门禁
|
||||
- `docs/测试说明/单元测试/看门狗单元测试说明.md` — 主机侧单测(用例 / 平台层 / 扩展方法)
|
||||
- `docs/测试说明/单元测试/系统时钟单元测试说明.md` — 系统时钟换算单测(用例 / 桩 / Zeller 缺陷记录)
|
||||
- `docs/测试说明/单元测试/配置文件单元测试说明.md` — 配置引擎单测(内存 FS 桩 / 抓出的 P0)
|
||||
- `docs/测试说明/单元测试/ADC输入层单元测试说明.md` — ADC 输入层单测(逐 Rank 钉死映射)
|
||||
- `docs/测试说明/单元测试/相量层单元测试说明.md` — 相量层单测(傅氏系数 / 双区交换)
|
||||
- `docs/测试说明/单元测试/卷锁单元测试说明.md` — 卷锁单测(fail-open 不变量)
|
||||
- `docs/测试说明/单元测试/时间同步单元测试说明.md` — 时间同步单测(探针窗口心跳缺口逻辑贡献者)
|
||||
- `docs/测试说明/板级测试/CH395F_Test_Guide.md`、`FTP_Test_Guide.md`
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
退出码:0=PASS / 1=测试失败 / 2=环境错误(找不到编译器 / 编译失败 / 无汇总行)。
|
||||
|
||||
设计依据:docs/算法/继电保护功能复现规划.md §3.1(采样有效性校验);
|
||||
docs/测试说明/测试开发标准流程.md §4.2(主机侧纯逻辑单测)。
|
||||
docs/测试说明/流程与规范/测试开发标准流程.md §4.2(主机侧纯逻辑单测)。
|
||||
创建日期:2026-10-11
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* 这些在真机上极难复现(需掉电/坏块)。
|
||||
* 3. 不占 MCU 的 RAM。
|
||||
*
|
||||
* 覆盖点(对应 docs/测试说明/配置文件单元测试说明.md 的 TC-CFG-xxx):
|
||||
* 覆盖点(对应 docs/测试说明/单元测试/配置文件单元测试说明.md 的 TC-CFG-xxx):
|
||||
* —— 值类型编解码(s_encode / s_decode 经公开 load/save 间接验证 + 直接白盒)——
|
||||
* TC-CONFIG-001 UINT 1/2/4 字节小端往返(含 0 / 最大值)
|
||||
* TC-CONFIG-002 UINT 非法:空 / 非数字 / 带后缀 / 超范围
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
退出码:0=PASS / 1=测试失败 / 2=环境错误(找不到编译器 / 编译失败 / 无汇总行)。
|
||||
|
||||
设计依据:docs/测试说明/配置文件单元测试说明.md(S1-b,原复审项已闭环);
|
||||
设计依据:docs/测试说明/单元测试/配置文件单元测试说明.md(S1-b,原复审项已闭环);
|
||||
创建日期:2026-10-02
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -36,7 +36,7 @@ r"""配置存储后端(cfg_file_store_mcu)的主机侧纯逻辑单元测试
|
||||
|
||||
设计依据:docs/子系统设计/配置文件设计说明.md §6.2(mtime 令牌)、
|
||||
docs/架构设计/STM32F4-Base存储架构说明.md §10.1 第 10/11 条、
|
||||
docs/测试说明/主机单测覆盖率口径.md §9 P2 第 2 项
|
||||
docs/测试说明/单元测试/主机单测覆盖率口径.md §9 P2 第 2 项
|
||||
创建日期:2026-10-24
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -72,7 +72,7 @@ raise SystemExit(run_host_unit_test(TestBuild(name="...", src="...", ...)))
|
||||
|
||||
## 环境要求
|
||||
|
||||
同主机侧纯逻辑单测通用要求(见 [`../../../docs/测试说明/测试开发标准流程.md`](../../../docs/测试说明/测试开发标准流程.md) §4.2):
|
||||
同主机侧纯逻辑单测通用要求(见 [`../../../docs/测试说明/流程与规范/测试开发标准流程.md`](../../../docs/测试说明/流程与规范/测试开发标准流程.md) §4.2):
|
||||
MSVC `cl.exe`(装了 VS 即有)+ Windows SDK + 纯标准库 Python;**不调 `vcvars64.bat`**
|
||||
(内部 `reg.exe` 受限),直接拼环境变量调 `cl.exe`。
|
||||
|
||||
@@ -104,7 +104,7 @@ MSVC `cl.exe`(装了 VS 即有)+ Windows SDK + 纯标准库 Python;**不
|
||||
|
||||
- `DTU_HOST_BUILD=<目录>`:改产物根(CI/容器要固定路径时用)。覆盖率侧同源——
|
||||
`scripts/check_test_coverage.py` 复用同一个函数,不再用自己那套固定名
|
||||
(旧 `%TEMP%\dtu_test_cov` 的共享名,正是 docs/测试说明/主机单测覆盖率口径.md 里
|
||||
(旧 `%TEMP%\dtu_test_cov` 的共享名,正是 docs/测试说明/单元测试/主机单测覆盖率口径.md 里
|
||||
"并行期每人只跑 `--module` 自己模块"那条规避的由来;分家之后该规避不再必要)。
|
||||
- `DTU_HOST_BUILD_KEEP=1`:保留本次独占目录不删(要单步调试那个 exe 时用,会打印路径)。
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
summary_marker="=== Task Watchdog Tests:",
|
||||
)))
|
||||
|
||||
设计依据:docs/测试说明/测试开发标准流程.md §4.2
|
||||
设计依据:docs/测试说明/流程与规范/测试开发标准流程.md §4.2
|
||||
创建日期:2026-10-01
|
||||
"""
|
||||
|
||||
@@ -141,9 +141,9 @@ class TestBuild:
|
||||
# 套件**就会互相覆盖,而最坏的不是编不过:A 树编译完,B 树把同名 exe 又盖一遍,
|
||||
# A 树随后执行的是 **B 树编出来的二进制**——两棵树的 summary_marker 一模一样,
|
||||
# harness 分辨不出来,于是拿着别人的运行结果给自己下结论(比红更难查)。
|
||||
# 覆盖率侧同源:%TEMP%\dtu_test_cov 也是固定共享名(docs/测试说明/主机单测覆盖率
|
||||
# 口径.md 里"并行期每人只跑 --module 自己模块"就是为绕开它写的规避;本处修好后
|
||||
# 那条规避不再必要)。
|
||||
# 覆盖率侧同源:%TEMP%\dtu_test_cov 也是固定共享名(口径文档
|
||||
# docs/测试说明/单元测试/主机单测覆盖率口径.md:其中"并行期每人只跑 --module 自己模块"
|
||||
# 就是为绕开它写的规避;本处修好后那条规避不再必要)。
|
||||
#
|
||||
# 口径:**按工作树分家**。产物根 = %TEMP%\dtu_host\<仓库根路径哈希>\,跨树天然不撞,
|
||||
# 同一棵树内仍复用同一份目录(33 套的编译缓存没必要白白重编)。**不用锁**——锁会把
|
||||
|
||||
@@ -1282,9 +1282,10 @@ static void tc_check_then_act(void)
|
||||
* 这是本套唯一能把"两个生产者并发时,写进 DR 的字节流里不得出现另一条行的字节"
|
||||
* 做成必然失败断言的把手:修复后是**非阻塞**设计,永远不会调 vTaskDelay,所以既有的
|
||||
* con_delay_hook 在这条路径上根本不会被触发(拿它当注入点会静默地什么都测不到)。
|
||||
* 台架一手证据:docs/测试说明/boot_log_data/20261026_prod_console_interleave_evidence.txt
|
||||
* 台架一手证据:docs/测试说明/测试数据/boot_log_data/20261026_prod_console_interleave_evidence.txt
|
||||
* —— PROT 行内多出 [ 2 0 三字节,紧接其后的 NAND_FTL 行恰好缺这三个字节的行首。 */
|
||||
/* 台架 16:37 那次被插字的原文行(boot_log_data/20261026_prod_console_interleave_evidence.txt
|
||||
/* 台架 16:37 那次被插字的原文行(证据文件同上:
|
||||
* docs/测试说明/测试数据/boot_log_data/ 那份 interleave 证据的
|
||||
* OCCURRENCE 1 去掉三个外来字节之后的样子)。M 族拿它当"真实行长与真实前缀"的样本,
|
||||
* 免得用例自己造一个不像现场的理想行。 */
|
||||
static const char s_prot_line[] =
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
退出码:0=PASS / 1=测试失败 / 2=环境错误。
|
||||
|
||||
设计依据:docs/子系统设计/控制台单写者日志设计说明.md、docs/测试说明/主机单测覆盖率口径.md §9「P2 落地」清单第 3 条
|
||||
设计依据:docs/子系统设计/控制台单写者日志设计说明.md、docs/测试说明/单元测试/主机单测覆盖率口径.md §9「P2 落地」清单第 3 条
|
||||
创建日期:2026-10-24
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
退出码:0=PASS / 1=测试失败 / 2=环境错误(找不到编译器 / 编译失败 / 无汇总行)。
|
||||
|
||||
设计依据:docs/子系统设计/网络配置说明.md §3.4、docs/测试说明/主机单测覆盖率口径.md §9 P1
|
||||
设计依据:docs/子系统设计/网络配置说明.md §3.4、docs/测试说明/单元测试/主机单测覆盖率口径.md §9 P1
|
||||
创建日期:2026-10-23
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
退出码:0=PASS / 1=测试失败 / 2=环境错误。
|
||||
|
||||
设计依据:docs/子系统设计/*104* 设计文档、AGENTS.md 模块约定(单连接 socket 断开语义、
|
||||
错误码经任务通知值回传)、docs/测试说明/主机单测覆盖率口径.md §9
|
||||
错误码经任务通知值回传)、docs/测试说明/单元测试/主机单测覆盖率口径.md §9
|
||||
创建日期:2026-10-23
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
Server-driven protocol: the MCU (testTask, port 8080) sends one operation
|
||||
byte; the peer executes the corresponding traffic pattern. See
|
||||
docs/测试说明/链路延迟测试说明.md §4.5 for the full protocol spec.
|
||||
docs/测试说明/专项验证/链路延迟测试说明.md §4.5 for the full protocol spec.
|
||||
|
||||
Ops (MCU -> peer):
|
||||
0x01 QUEUE_RT recv flood : peer sends 50 x 100B (5ms apart)
|
||||
|
||||
@@ -29,8 +29,8 @@
|
||||
|
||||
退出码:0=PASS / 1=测试失败 / 2=环境错误。
|
||||
|
||||
设计依据:docs/测试说明/FTP_Test_Guide.md、docs/子系统设计/网络配置说明.md §3.4、
|
||||
docs/测试说明/主机单测覆盖率口径.md §9
|
||||
设计依据:docs/测试说明/板级测试/FTP_Test_Guide.md、docs/子系统设计/网络配置说明.md §3.4、
|
||||
docs/测试说明/单元测试/主机单测覆盖率口径.md §9
|
||||
创建日期:2026-10-23
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -25,8 +25,8 @@
|
||||
|
||||
退出码:0=PASS / 1=测试失败 / 2=环境错误。
|
||||
|
||||
设计依据:docs/子系统设计/网络配置说明.md §3.4、docs/测试说明/FTP_Test_Guide.md、
|
||||
docs/测试说明/主机单测覆盖率口径.md §9
|
||||
设计依据:docs/子系统设计/网络配置说明.md §3.4、docs/测试说明/板级测试/FTP_Test_Guide.md、
|
||||
docs/测试说明/单元测试/主机单测覆盖率口径.md §9
|
||||
创建日期:2026-10-23
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
退出码:0=PASS / 1=测试失败 / 2=环境错误。
|
||||
|
||||
设计依据:docs/内存管理/RAM使用分析与优化方案.md §4.2.1、docs/测试说明/主机单测覆盖率口径.md §9 P1
|
||||
设计依据:docs/内存管理/RAM使用分析与优化方案.md §4.2.1、docs/测试说明/单元测试/主机单测覆盖率口径.md §9 P1
|
||||
创建日期:2026-10-23
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
退出码:0=PASS / 1=测试失败 / 2=环境错误(找不到编译器 / 编译失败 / 无汇总行)。
|
||||
|
||||
设计依据:docs/子系统设计/网络配置说明.md、docs/测试说明/主机单测覆盖率口径.md §9 P1
|
||||
设计依据:docs/子系统设计/网络配置说明.md、docs/测试说明/单元测试/主机单测覆盖率口径.md §9 P1
|
||||
创建日期:2026-10-23
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
退出码:0=PASS / 1=测试失败 / 2=环境错误。
|
||||
|
||||
设计依据:docs/网络/网络自愈架构设计.md §4.10、docs/网络/Net层阻塞模型架构设计.md、
|
||||
docs/测试说明/主机单测覆盖率口径.md §9
|
||||
docs/测试说明/单元测试/主机单测覆盖率口径.md §9
|
||||
创建日期:2026-10-23
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
退出码:0=PASS / 1=测试失败 / 2=环境错误。
|
||||
|
||||
设计依据:docs/网络/网络自愈架构设计.md §4.10、docs/测试说明/主机单测覆盖率口径.md §9(假 CH395F 实施规格)
|
||||
设计依据:docs/网络/网络自愈架构设计.md §4.10、docs/测试说明/单元测试/主机单测覆盖率口径.md §9(假 CH395F 实施规格)
|
||||
创建日期:2026-10-23
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
退出码:0=PASS / 1=测试失败 / 2=环境错误。
|
||||
|
||||
设计依据:AGENTS.md 模块约定(错误码经任务通知值回传)、
|
||||
docs/网络/Net层阻塞模型架构设计.md、docs/测试说明/主机单测覆盖率口径.md §9
|
||||
docs/网络/Net层阻塞模型架构设计.md、docs/测试说明/单元测试/主机单测覆盖率口径.md §9
|
||||
创建日期:2026-10-23
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
退出码:0=PASS / 1=测试失败 / 2=环境错误。
|
||||
|
||||
设计依据:docs/网络/Net层阻塞模型架构设计.md、docs/测试说明/主机单测覆盖率口径.md §9 P1
|
||||
设计依据:docs/网络/Net层阻塞模型架构设计.md、docs/测试说明/单元测试/主机单测覆盖率口径.md §9 P1
|
||||
创建日期:2026-10-23
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
|
||||
退出码:0=PASS / 1=测试失败(含常量闸不过)/ 2=环境错误。
|
||||
|
||||
设计依据:docs/网络/网络自愈架构设计.md §4.10、docs/测试说明/主机单测覆盖率口径.md §9
|
||||
设计依据:docs/网络/网络自愈架构设计.md §4.10、docs/测试说明/单元测试/主机单测覆盖率口径.md §9
|
||||
创建日期:2026-10-24
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
设计依据:docs/算法/继电保护功能复现规划.md §3.2(全周傅氏系数表 等);
|
||||
docs/算法/傅氏算法详解.md §2.3(系数口径);
|
||||
docs/测试说明/测试开发标准流程.md §4.2(主机侧纯逻辑单测)。
|
||||
docs/测试说明/流程与规范/测试开发标准流程.md §4.2(主机侧纯逻辑单测)。
|
||||
创建日期:2026-10-10
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
退出码:0=PASS / 1=测试失败 / 2=环境错误。
|
||||
|
||||
设计依据:App/cfg/prot_set_store.h 的返回码表、docs/测试说明/主机单测覆盖率口径.md §9 P1
|
||||
设计依据:App/cfg/prot_set_store.h 的返回码表、docs/测试说明/单元测试/主机单测覆盖率口径.md §9 P1
|
||||
创建日期:2026-10-23
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -39,7 +39,7 @@ r"""SOE 落盘胶水层(soe_store)的主机侧纯逻辑单元测试运行器
|
||||
|
||||
设计依据:docs/架构设计/STM32F4-Base存储架构说明.md §10.1 第 10/11 条、
|
||||
docs/算法/继电保护功能复现规划.md §3.4(SOE 记录 / 动作记录,B9)、
|
||||
docs/测试说明/主机单测覆盖率口径.md §9 P2 第 2 项
|
||||
docs/测试说明/单元测试/主机单测覆盖率口径.md §9 P2 第 2 项
|
||||
创建日期:2026-10-24
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
退出码:0=PASS / 1=测试失败 / 2=环境错误(找不到编译器 / 编译失败 / 无汇总行)。
|
||||
|
||||
设计依据:docs/测试说明/系统时钟单元测试说明.md(S1-a,原复审项已闭环);
|
||||
设计依据:docs/测试说明/单元测试/系统时钟单元测试说明.md(S1-a,原复审项已闭环);
|
||||
创建日期:2026-10-02
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
* 断言,见 tc_000;
|
||||
* - 其余用例用 sys_clock_set(unix, NULL) 建立确定基准(无 RTC 副作用)。
|
||||
*
|
||||
* 覆盖点(对应 docs/测试说明/系统时钟单元测试说明.md 的 TC-CLK-xxx):
|
||||
* 覆盖点(对应 docs/测试说明/单元测试/系统时钟单元测试说明.md 的 TC-CLK-xxx):
|
||||
* TC-SYSCLK-000 未初始化:sys_clock_get / get_time / get_str 的无效语义
|
||||
* TC-SYSCLK-001 init 正常:RTC 合法 → 返回 0,基准 = 换算 Unix 秒
|
||||
* TC-SYSCLK-002 init 闰年换算:2024-02-29 / 2000-02-29(世纪闰)/ 2/29→3/1 间隔
|
||||
|
||||
@@ -46,7 +46,7 @@ r"""运行/自检记录落盘后端(sys_log_mcu)的主机侧纯逻辑单元
|
||||
|
||||
设计依据:docs/子系统设计/运行与自检记录设计说明.md §4.4/§4.5/§5.3、
|
||||
docs/架构设计/STM32F4-Base存储架构说明.md §10.1 第 10/11 条、
|
||||
docs/测试说明/主机单测覆盖率口径.md §9 P2 第 2 项
|
||||
docs/测试说明/单元测试/主机单测覆盖率口径.md §9 P2 第 2 项
|
||||
创建日期:2026-10-24
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
退出码:0=PASS / 1=测试失败 / 2=环境错误。
|
||||
|
||||
设计依据:App/util/task_prof.h、docs/测试说明/主机单测覆盖率口径.md §9 P1
|
||||
设计依据:App/util/task_prof.h、docs/测试说明/单元测试/主机单测覆盖率口径.md §9 P1
|
||||
创建日期:2026-10-23
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
退出码:0=PASS / 1=测试失败 / 2=环境错误(找不到编译器 / 编译失败 / 无汇总行)。
|
||||
|
||||
设计依据:docs/测试说明/看门狗单元测试说明.md
|
||||
设计依据:docs/测试说明/单元测试/看门狗单元测试说明.md
|
||||
创建日期:2026-10-01
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
* TASK_WATCHDOG_UNIT_TEST 守卫的测试专用复位,MCU 构建零开销)
|
||||
* 把模块静态态恢复到"刚上电"。
|
||||
*
|
||||
* 覆盖点(对应 docs/测试说明/看门狗单元测试说明.md 的 TC-WD-xxx):
|
||||
* 覆盖点(对应 docs/测试说明/单元测试/看门狗单元测试说明.md 的 TC-WD-xxx):
|
||||
* TC-WATCHDOG-001 未启动时 poll 不做任何判定(也不喂狗)
|
||||
* TC-WATCHDOG-002 节流:< 100ms 的 poll 直接返回
|
||||
* TC-WATCHDOG-003 全员到位置位 → 喂狗一次,且位图取走清零
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
② 防止"某套件长期编不过而无人知"(2026-08~09 CH395F 套件实例)。
|
||||
注意 RAM 溢出会自然暴露为链接错误 L6406E——这正是想要的。
|
||||
|
||||
设计依据:docs/测试说明/测试开发标准流程.md §3.1
|
||||
设计依据:docs/测试说明/流程与规范/测试开发标准流程.md §3.1
|
||||
创建日期:2026-10-01
|
||||
"""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user