datatestool/docs/architecture.md

2.2 KiB
Raw Permalink Blame History

DataTest 架构

设计原则

  1. 需求是聚合根文档、Metadata、案例、结果、指标和报告都绑定需求版本。
  2. 必须先获取真实 Metadata再生成和校验测试案例。
  3. AI 只生成结构化草稿,确定性引擎负责安全校验、执行和断言。
  4. SwiftUI、CLI 和 MCP 共用同一个核心服务,避免行为分叉。
  5. 数据源、SQL 方言、指标采集器和断言均采用可替换边界。

组件

SwiftUI ─┐
CLI ─────┼→ DataTestService → Storage
MCP ─────┘         │          → SQLiteDataSource
                   ├──────────→ DeterministicExecutor
                   └──────────→ CodexCLIAdapter

Storage

app.sqlite 保存需求版本、ETL 任务、Metadata 快照、案例版本、运行结果、结构化失败分析、指标和 Agent 调用审计。原始文档以及报告作为 artifact 保存,数据库记录路径和哈希。

Data source adapter

当前 SQLiteDataSourcesource.sqlitetarget.sqlite 分别附加为 odsdwd。连接启用 query_onlyMetadata 查询封装在适配器内部。

Case validation

执行前必须同时通过:案例名称、表字段存在性、只读 SQL、断言完整性以及审核状态校验。Agent 不能向运行工具提交临时 SQL。

AI adapter

Codex CLI 使用 JSON Schema 输出结构化结果。内部调用使用临时会话、不加载用户配置,并启用只读沙箱,避免继承 DataTest MCP 后递归调用。失败分析绑定具体运行结果、需求版本和同版本 MetadataAgent 只提供调查结论,确定性执行器仍然独占测试状态判定。

MCP

MCP Server 使用 STDIO JSON-RPC。只读工具带有只读标记运行、AI 生成和报告生成属于非破坏性写操作。

扩展路径

后续数据源适配器至少需要实现:

  • Metadata 获取
  • 方言和标识符规则
  • 只读会话
  • SQL 执行与取消
  • 查询超时
  • 查询计划与性能指标
  • 分区、批次及数据新鲜度指标

Hive、Impala 和 Spark 专属能力不在 SQLite 中模拟,未实现的能力必须明确返回 UNSUPPORTED