Skip to content

静态审计:多处实现为过测试而非真实语义,需去测试化重构 #7

Description

@Haoxincode

概述

静态审计发现多处实现存在"为过测试而写"的问题,在真实使用场景中会出错或行为不符预期。按风险从高到低排列如下。


1. 🔴 tar 实现是自定义格式,非标准 tar

风险:高 — 真实场景完全不可互通

  • 核心序列化使用自定义头 MBTAR1\n(src/lib/commands/strings_split_tar.mbt:465),不是标准 tar 格式。
  • 代码注释直接写了 for comparison tests(src/lib/commands/strings_split_tar.mbt:392)。
  • -z 标志被直接忽略(src/lib/commands/strings_split_tar.mbt:593)。
  • 读取时如果不是 MBTAR1 格式就返回空条目(src/lib/commands/strings_split_tar.mbt:495),但 -t/-x 仍按成功路径走。
  • 结论: 标准 tar/tar.gz 文件基本不可用,只能"自己打包自己解包"。

2. 🔴 jq 有大量"题库式硬编码兼容"分支

风险:高 — 非完整语义实现,是缺口处打补丁让特定 case 过

  • src/lib/commands/jq_compat_advanced.mbt:4 写明是 Targeted man.test compatibility。
  • 通过 if trimmed == "..." 匹配固定 filter,再返回预制结果(如 src/lib/commands/jq_compat_advanced.mbt:5)。
  • 此逻辑在主执行路径里优先参与(src/lib/commands/jq_cmd.mbt:134, src/lib/commands/jq_cmd.mbt:161)。
  • 约 268 个固定 filter 硬编码分支(统计自 jq_compat_* 文件)。
  • 结论: 不是完整语义实现,而是"缺口处打补丁让特定官方 case 过"。

3. 🟡 comparison 测试基线机制存在折扣

  • fixture 有 29 个 locked: true 条目。
  • 回放模式不跑真实 bash(tests/comparison/fixture-runner.ts:421)。
  • record 模式下遇到 locked 也不跑真实 bash,直接复用旧值(tests/comparison/fixture-runner.ts:399)。
  • 不等于实现一定错,但"过测试 ≠ 真实一致",给测试可信度打了折扣。

4. 🟡 其他"强兼容壳"点

  • rg 实际是 grep -E 映射(src/lib/interpreter/builtins_dispatch.mbt:234,docs/ROADMAP.md:556 也写了 mapped)。
  • /bin/* 默认是 stub 文件(src/wrapper/index.ts:607),解释器识别 marker 后走虚拟分发(src/lib/interpreter/interpreter_execution_helpers.mbt:1032),是为兼容/测试稳定性加的机制。

建议重构优先级

  1. tar — 实现标准 USTAR 格式的序列化/反序列化,至少支持基本的 create/extract/list
  2. jq — 逐步用 bobzhang/moonjq 社区包替代硬编码分支,删除 jq_compat_* 兼容层
  3. 测试基线 — 审查 locked fixtures,解锁可验证的条目,补充真实 bash 对照
  4. rg / /bin/ stubs — 文档明确说明是别名/stub,或补充更真实的行为

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions