20 个章节 · 支持关键词组合搜索

12

测试、可验证性与证据

实践 / 建议

可验证性:产品行为、测试有效性、证据可信度一起建设

开发 Agent 自验、CI 扫描与独立验收协作

用户于 2026-11-08 补充确认:开发 Agent 主要为 Claude、Codex 等,频繁与 GitLab 交互; 它们自行执行分层及端到端测试,详细过程和测试结果保留在 Multica,进展及证据保留在 GitLab。 GitLab CI 已内置团队称为 SonarLint 的安全、Bug 等扫描。泳道图已按此更新。 前轮依据用户确认记录扫描已接入,本轮补充部分项目 CI 抽查,不能推断所有仓均强制阻断。 这里沿用团队名称;落地接入卡应填写实际扫描器、版本、规则集和结果入口,避免名称代替配置事实。 本轮新增抽查发现 IDP 普通 MR 的 Sonar 扫描可为手动且允许失败,特定条件下才自动执行; 因此“CI 内置扫描”不等于每次 MR 都有必需阻断扫描,详见项目可观测与操作能力包的最新快照说明。

职责 执行与反馈 结果落点
Claude / Codex 开发 Agent 读取 Issue 当前合同、实现、执行适用的单元/集成/契约/端到端测试,分析失败并修复 Multica 留步骤、环境、命令、结果、失败和重试;GitLab 留进展、结论与证据
GitLab CI 扫描与必需测试 按 pipeline 配置运行 SonarLint 安全/Bug 扫描和必需检查,产出真实报告 GitLab job、reports/artifacts 或稳定证据引用;绑定实际 SHA
开发 Agent 持续反馈 push 后读取 CI,MR 后持续回应 comment/discussion;修复后重新提交并重跑受影响项 MR 更新变更和验证摘要,Multica 记录完整执行过程
独立验证/评审 按风险核对 验收标准、原始报告、负向样例与关键路径,必要时独立复跑 GitLab 保留验收结论和证据;Multica 保留执行与交接细节
人工责任人 判断需求、风险、例外和合并/生产发布条件 GitLab 审批与交付记录,关联实际发布事实

开发 Agent 的测试不只限于编译或单测,也包括适用的集成与端到端验证。 独立验证按风险和已有证据选择复核/复跑范围,避免机械地重复全部套件。 静态安全/Bug 扫描覆盖其规则能识别的问题,业务 验收标准、租户隔离、异步完成和用户旅程仍需行为测试。

建议 GitLab 中每次有效验收至少能定位:关联 Issue/MR、commit SHA、pipeline/job 或外部执行 ID、 环境与关键依赖版本、实际测试结果、扫描结论、原始报告、Multica run/topic/reply。 开发 Agent 在 CI 外执行的端到端测试也应保存原始报告和运行来源,并从 GitLab 可追溯访问; 不能仅贴一段“全部通过”的模型总结。保存证据不等于把运行日志提交进 Git 源码历史。 长期需要保留的证据应采用明确的 artifact 保留策略或受控持久存储,避免过期后只剩失效链接。

建议区分 PASS、FAIL、未运行、环境阻塞、报告缺失,以及经授权接受的例外。 新增提交后,按影响重新运行检查;旧 SHA 的绿灯不得直接作为新候选版本的放行依据。 误报处置和例外遵循已有授权,不由开发 Agent 通过关闭扫描、削弱规则或忽略失败自行放行。

复用两项公司已有工程实践

IDP 把反恒真、零断言与测试归属检查接到 CI,并测试检查器自身; Egress 拒绝缺报告、零执行、skipped/failures/errors,并对 长时间稳定性测试 检查 revision、时长与行为。 这两项很适合推广为参考适配,不能把启发式扫描或 JUnit 计数解释为完整的正确性证明。

先让产品行为可观察:权限是否拒绝、资源是否释放、状态是否落库、异步是否完成、用户是否能完成旅程。 再让测试能够识别错误:去掉目标实现应失败、错误凭据应被拒绝、异常路径应释放资源。 最后使报告绑定实际输入、执行者和环境,独立判定必需项是否满足。

测试使用多维矩阵

测试层次 必须看见的行为 典型位置
纯逻辑单元 边界、不变量、状态转移 本地与 CI;可控时钟/随机性
受控组件集成 事务、并发、装配、资源生命周期 隔离数据库、容器或受控组件
服务/消费者契约 错误语义、鉴权、租户、兼容性 接口测试与固定版本组合
完整应用 启动、配置、真实网络与依赖 测试环境、CLI binary、服务 smoke
用户旅程 跨服务业务完成、UI/设备行为 浏览器、模拟器/真机、端到端数据检查

另标目的(回归/安全/性能/长时间稳定性测试)、位置、触发时机与判定责任。 不把一次 smoke 当成全量测试,也不把层次名称直接映射为任务风险。 编辑期跑最小有效检查,候选版本补齐风险要求,CI 独立运行必需项。

长时间稳定性测试:发现持续运行后的退化

长时间稳定性测试(Soak,也称耐久测试)是在代表性负载下持续运行系统, 观察短时间测试不易暴露的内存/资源泄漏、性能退化、队列积压与周期性状态问题。 它是测试目的与运行方式,可以作用于组件、服务或完整系统,不另造一个必须顺序经过的测试层级。

测试类型 主要回答的问题
功能测试 行为是否符合验收标准?
负载测试 预期业务负载下,吞吐和响应时间是否达标?
压力测试 超过正常负载后,在哪里失效,能否恢复?
长时间稳定性测试 在持续运行和相关周期之后,资源、性能与业务状态是否仍然稳定?

Java 服务可重点观察堆/堆外内存、GC、线程和连接池、文件句柄、错误率、响应延迟与消费积压。 例如异步消费服务变更后,在固定制品、配置、数据集和代表性流量下持续运行, 核对消费正确性,以及积压、资源占用是否出现不可接受的增长;必要时观察停止负载后的资源回落。

运行时长按风险和机制周期确定,应覆盖相关的缓存过期、凭据刷新、定时任务或资源累积窗口; 不统一规定所有工程必须运行若干小时,也不只用“运行期间没有崩溃”作为通过标准。 执行前定义负载与观察窗口、资源/延迟/错误阈值、允许的变化趋势和停止条件, 保存实际时长、候选 SHA、制品/环境、负载曲线、指标与原始报告。 未达到约定时长、流量不足或证据缺失,应记录未完成或缺口,不能汇总为通过。

按改动风险在候选发布、定时任务或专门环境执行,不要求每次提交都跑完整耐久测试。 Agent 可以准备、执行、分析和归档;人负责确定业务代表性与可接受阈值, 成熟场景由独立执行器按已确认标准自动判定,异常按规则升级。

退出码为零还不够

建议统一验证结果为 PASS、FAIL、BLOCKED_ENV、NOT_RUN、UNKNOWN; SKIPPED 作为测试项状态记录,必需项被跳过时整体不能 PASS。 纯文档改动等不适用项记录理由,经规则判断后排除;不为“绿灯”虚构运行。

输入事实 应得结论 为什么
命令退出 0,JUnit 中 failure > 0 FAIL 包装脚本可能忽略失败
命令退出 0,报告缺失或 0 测试 UNKNOWN/FAIL,按合同阻断 没有证明必需行为被执行
单测全部通过,必需集成环境不可用 BLOCKED_ENV 不能用局部结果覆盖整体缺口
Pod Ready、health 通过,权限场景未测 仅部署/冒烟通过 就绪与业务正确是不同断言
旧版回归失败、新版通过、必需套件齐全、输入一致 对指定 验收标准 的 PASS 结论仍限于约定范围,不代表没有未知缺陷

交付证据包的最小字段(建议 schema 语义)

validation:
  task_ref: TASK-EXAMPLE
  acceptance_ids: [AC-object-permission]
  inputs:
    repo: project-repository
    commit: resolved-commit
    merge_base: resolved-base
    dirty: false
    artifact_digest: resolved-artifact-digest
    dependency_lock: resolved-dependency-revision
    policy_revision: pinned-policy
    capability_revision: pinned-bundle
  execution:
    runner_ref: isolated-runner
    suite: permission-contract
    required: true
    environment_ref: isolated-test-environment
    config_revision: resolved-config
    data_fixture_revision: resolved-fixture
  result:
    verdict: PASS
    executed: 12
    passed: 12
    failed: 0
    skipped: 0
    report_ref: access-controlled-report
    report_digest: resolved-report-digest
    first_attempt_ref: retained-first-attempt
    cleanup: complete

示例字段不是当前系统已提供的 API,数字是示例;实际记录还需时间、命令/工具版本与失败明细。 由受控验证执行器生成结果,模型不能只写一份 YAML 自称通过。 证据存储权限、写入身份、内容摘要和输入绑定一起提供可信度;SLSA provenance 可借鉴其追溯结构, 本方案不宣称达到某个 SLSA 等级。

必需验证的版本失效规则

新提交使旧输入的验证失效;合并基线变化重验受影响内容;重新构建的制品要核验 digest。 可变 SNAPSHOT、配置、测试数据或共享环境变化也会使结果不可复用。 改检查器、降低测试范围或更新规则包同样属于验证输入变化。 临时分支上的检查器不能单独决定放行,关键校验从受保护版本执行,调整门禁要独立评审。

本节依据: IDP 测试治理 ADR、Egress 证据检查器、检查器负向测试、Egress CI。