软件工程中两个关键概念验证Verification和确认Validation。✅验证Verification关注的是过程合规性即“我们是否正确地构建了产品”——它通过评审、走查、静态分析、单元测试、集成测试等手段检查开发输出如设计文档、代码、模块是否严格符合前期定义的规格说明Spec。强调“做得对”Right way。✅确认Validation关注的是结果适用性即“我们是否构建了正确的产品”——它通过用户验收测试UAT、原型演示、Beta测试、场景模拟等方式验证最终产品是否真正满足用户的实际需求、业务目标和使用环境。强调“做对事”Right product。二者常被简记为Verification Are we building the product right?Validation Are we building the right product?它们不是互斥而是互补的——一个系统可能完全符合规格验证通过但规格本身错误或遗漏导致验证通过却确认失败例如开发了一个响应极快但完全无法导出数据的报表系统——它“正确实现了规格”但规格未包含导出功能因此不是用户需要的“正确产品”。经典类比 Verification — 检查飞机图纸是否被精准照着制造出来哪怕图纸设计的是纸飞机 Validation — 检查造出来的飞机能否载人安全飞行即是否解决了真实的航空运输问题。在敏捷开发中兼顾验证Verification与确认Validation的核心在于将质量内建Built-in Quality融入每个迭代Sprint的全生命周期而非依赖后期集中检查。其关键策略如下✅1. 需求端以可验证、可确认的方式定义“完成”Definition of Done, DoDDoD 必须同时包含验证项如代码通过静态扫描、单元测试覆盖率 ≥80%、API 符合 OpenAPI 规范和确认项如通过用户可理解的验收测试场景、PO 现场签字确认、真实用户参与 UAT 演示。每个用户故事User Story需附带ACAcceptance Criteria—— 用行为驱动语言如 GherkinGiven-When-Then编写既是自动化测试脚本基础支持验证也是业务价值可观察的确认依据。✅2. 开发中左移验证 持续确认验证左移TDD/BDD 实践确保代码从编写起就面向规格CI 流水线自动执行单元测试、接口测试、安全扫描即时反馈“是否按规实现”。确认前移每 Sprint 中期组织Sprint Review 前的轻量级演示In-Sprint Validation Check邀请真实用户或领域专家快速反馈采用可运行原型如 Figma 交互原型 Mock API在编码前验证需求理解。✅3. 协作机制跨职能协作打破“开发-测试-业务”孤岛“三剑客”协同产品负责人PO、开发人员、测试工程师或 QA 工程师在 Sprint Planning 和 Refinement 阶段共同澄清 AC、设计测试用例、识别隐性需求如性能、可访问性使验证标准与确认目标对齐。使用活文档Living Documentation如 Cucumber Reports、Swagger UI 示例响应同步呈现“规格→实现→验证结果→用户确认证据”保障信息透明。✅4. 反馈闭环用度量驱动持续改进跟踪指标如•需求返工率反映确认偏差•缺陷逃逸率进入下一迭代/生产环境的缺陷数反映验证有效性•AC 自动化覆盖率验证可重复性•用户故事验收通过率 用户满意度 NPS确认有效性→ 这些数据在 Sprint Retrospective 中复盘动态优化 DoD 和协作流程。 本质逻辑敏捷不取消验证与确认而是将其原子化、常态化、协作化、自动化——每个用户故事都是一个微小的 VV 循环“理解需求确认起点→ 定义AC验证锚点→ 编码测试验证执行→ 演示反馈确认闭环”。反模式警示 × 把确认推迟到发布前才做UAT导致“最后一刻失败” × AC写成“系统应稳定”无法验证也无法确认 × PO只签字不参与测试验收变成形式主义 × 测试团队独立于Sprint延迟反馈周期