报告:补稳定性基线与 P0/P1 收尾记录

- 稳定性基线(覆盖率 ≈51%、不设环境变量时 95 PASS / 86 SKIP 的假绿、无 CI)
- scripts/verify.sh 的能力与实测闸门
- 全新库冒烟的变异验证(迁移块顺序错了只有新库会炸)
- web 整包 -race:161 PASS / 0 DATA RACE
- 收尾验收:244 用例 / 0 FAIL / 0 SKIP
This commit is contained in:
tamakyi
2026-09-24 20:55:52 +08:00
parent ff594121da
commit c001e64ee0
+65
View File
@@ -1009,5 +1009,70 @@ go test -count=1 -v ./...
指到 `postgres` 维护库会多出 `TestChangeUsername` 失败(关系 users 不存在)+ 6 个 stats 用例 skip
(没有生效数据集)+ `TestVisitorHomeStore` skip(库名不含 test)——本轮就先踩了一次,误以为是回归。
---
# 稳定性基线(2026-09-24 实测)
修完之后要回答「现在稳不稳」,先量四个数:
| 指标 | 实测 |
|---|---|
| 语句覆盖率(`go test -cover ./...`,全套环境变量) | 按源码行数加权 **≈51%**(web 53.2% / stats 62.2% / rond 38.8% / fog 52.9% / db 53.4%) |
| 假绿规模(不设环境变量跑 web+rond+stats) | 三个包**全 `ok`、exit=0**,但 **95 PASS / 86 SKIP**(原始基线 62 SKIP ⇒ 随守卫增多而变大) |
| 路由触达 | 92 条注册路由里 41 条在测试中被直接引用(**高估**缺口:不少 handler 用函数直调覆盖) |
| 自动化 | 无 CI / 无 Makefile / 无 linter —— 0-skip 验收原本完全靠人记住六个变量 |
结论:**已知缺陷已关闭且有网**,但「一半代码没被跑过 + 没有 CI」这两条当时的回答是"证明不了"。
# 收尾:让「验收」不再依赖记忆(2026-09-24 落地)
## `scripts/verify.sh` —— 一键验收
| 能力 | 说明 |
|---|---|
| 六件套环境变量 | 自己从 `conf/app-test.ini` 取 DSN(**口令不进脚本**) |
| 拒跑非测试库 | 库名不含 `test` 直接报错退出(防「指到 postgres 维护库」那类假 skip) |
| **拒绝假绿** | 数 SKIP(**含子测试**),非 0 就失败退出 |
| 两段式导出 | 先跑 `TestMovementCleanExport` 产纯净包,再全量(免手工两步) |
| 模式 | `--fast`(gofmt+vet+build,~20s)/ `--race`(自动把 mingw 加进 PATH)/ `--cover` / `--pkg` / `--run` |
实测闸门:DSN 指 `postgres` → 拒跑;缺 `ROND_SRC` → 拒跑;未知参数 → exit 2。
## 全新库冒烟(`internal/db/fresh_db_test.go`)
空库 → `Open` 自动建库 → `Migrate` 跑两遍(验幂等)→ 断言 21 张表 / 迁移块补出来的列 /
三张附属表的主键已搬到坐标键 / 4 个索引 → 再用 `stats.DB{DB: d}` 真打 18 个读查询(空库上不该报错)。
**变异验证**:把 `CREATE INDEX idx_place_images_key` 挪到 `CREATE TABLE place_images` **之前**
⇒ 新库报 `关系 "place_images" 不存在 (SQLSTATE 42P01)`;同一条语句在老库上 `psql -c` 只提示
「已存在,跳过」⇒ 正是「开发库无症、新库起不来」这个签名。
## `web` 整包 `-race`
`./scripts/verify.sh --race --pkg ./internal/web/` ⇒ **161 PASS / 0 FAIL / 0 SKIP / 0 个 DATA RACE**。
(此前只有迷雾索引那一条用例验过 race。)
## 仓库卫生
删 6 个一次性探针(colprobe/diffprobe/exportprobe/fogprobe/idprobe/sqlprobe,git 历史可翻)与
误入库的 `__pycache__/*.pyc`;`.gitignore` 补 `__pycache__/`、`*.pyc`;`tools/README.md` 说明留下的
4 个工具。改动分 3 个提交落地(后端 / 前端 / 脚本与工具),工作区已干净。
## 收尾验收
```
./scripts/verify.sh # 六件套 + 0-skip 判定 + 两段式导出,一条命令
```
**244 个顶层用例(含子测试 271)/ 0 FAIL / 0 SKIP**,12 个包全 `ok`;
往返包 823/323/8/30/791/557/2246 全等、坐标偏差 `0.000000000`、时间偏差 `0s`、迷雾 8701 块一致。
`--fast`(gofmt + vet + build)干净。
提交:`b4c2a84` 后端 → `d5f6dfa` 前端 → `d2e4392` 脚本与工具 → `ff59412` 脚本补丁。
每个提交都过了 `go build ./...`;**中间提交没有单独跑全量**(实现与它的守卫是同一批落地的,
拆开跑会因守卫先于/后于实现而假红),最终状态是上面这个已验收的版本。