← 返回计算机基础及软件工程

当 AI 开始写代码,软件工程该围绕什么重新组织?

AI 开发工作流 UML 活动图:用户故事 → 验收标准 → UI/用户流程 → AI 实现(前端、API、后端、数据模型、迁移)→ 自动测试 → 端到端验收。

让 AI 写后端,测试也通过了,但自己还没有完全看懂代码,为什么仍然觉得不踏实?前端、后端和端到端开发又该怎样分工?这些问题背后,其实是软件开发中人的角色正在发生变化。

传统软件开发的方法通常以人为主要代码生产者。随着 AI 承担更多实现工作,人的职责开始更多地集中在需求定义、约束设计与结果验收上。代码生产方式改变后,工程流程也需要重新思考。

传统开发中,一种常见流程是:需求 → 拆任务 → 前端开发 → 后端开发 → 联调 → 测试 → Debug(调试)→ Code Review(代码审查)→ 交付。

这套分工的一个重要背景是:写代码需要大量时间与专业能力。不同的人分别负责数据库、后端、前端和测试,再通过接口、文档、沟通与审查,把各部分连接成完整系统。当然,专业分工也承担着风险控制与责任划分的作用。

AI Coding(AI 辅助编程)改变了其中一个重要变量:生成代码的成本显著下降。 这让围绕完整用户需求组织实现,变得更容易尝试。

我现在对这条工作流的理解是:User Story(用户故事)→ Acceptance Criteria(验收标准)→ UI / User Flow(用户界面 / 用户流程)→ AI Implementation(AI 实现)→ Automated Tests(自动测试)→ E2E Acceptance(端到端验收)。

先用用户故事说明谁要完成什么、为什么,再用验收标准明确什么情况算做对。UI(User Interface,用户界面)与 User Flow(用户流程)把用户看到的界面、操作步骤和结果表达清楚,让实现围绕完整体验展开。

AI Implementation 覆盖 Frontend(前端)、API(Application Programming Interface,应用程序编程接口)、Backend(后端)、Data Model(数据模型)和 Migration(数据库迁移)。 这些是同一实现阶段需要协调的内容,不代表五个部分必须按固定顺序或完全并行完成。

相较于前面的理解,我把数据模型和迁移也纳入 AI 的实现范围。人不必事先亲手写出每项技术方案,但仍要明确业务规则、数据含义、权限与系统边界,并检查 AI 提出的模型和接口是否满足约束。已有的接口契约和数据约束仍然必须遵守。

实现之后,先通过自动测试检查已覆盖的行为,再按照验收标准检查完整用户流程。自动测试关注检查是否通过,端到端验收关注用户目标是否实现。 端到端测试本身也可以自动化;这里将两者分开,是为了区分检查环节与最终验收。

这并不意味着生成一次就能完成交付。它意味着,实现工作可以围绕一个贯穿系统的用户需求展开,再通过检查、测试和反馈不断修正。

当代码生成更快,真正需要投入判断的问题就更加突出:我们到底要做什么?系统边界是什么?数据应该长什么样?什么情况算做对了?AI 生成的实现有没有隐藏风险?

因此,需求文档、用户故事、验收标准、Entity–Relationship Diagram(实体关系图,ERD)、数据模型、接口契约、界面设计与测试,在 AI 开发中仍然重要。它们共同把模糊意图转化为可实现、可检查的系统约定。

如果把这种重心变化压缩成一句话,就是:人定义系统,AI 协助实现系统,人验证并对系统负责。 传统开发同样需要定义和验证系统,变化在于人投入各类工作的比例,以及组织实现的方式。

但这里有一个必须分清的问题:测试通过,不等于工程正确。

验收标准和端到端测试,能够为已覆盖场景中的行为提供证据。它们不能自动证明没有权限漏洞、并发冲突或事务错误,也不能保证异常路径完整、数据长期保持一致、架构持续可维护,或系统中没有重复实现的相同逻辑。

测试验证什么,取决于测试覆盖了什么、断言是否正确,以及测试环境与实际使用之间的差异。界面上的流程跑通,只是理解系统质量的一部分。

所以,AI 时代并不意味着不需要懂代码,而是理解代码的重点需要扩展。除了能否亲手写出一个函数,还要知道这个模块为什么存在、输入输出是什么、数据如何流动,以及它与其他部分如何连接。

进一步要问:哪些地方可能失败?安全边界在哪里?出现问题时,能否定位到对应的层次?AI 修改这里,会影响哪些其他功能?

代码已经跑通,却仍然缺少控制感,往往是因为还没有建立清楚的 Mental Model(心智模型):不了解系统的组成、关系、约束和失败方式,就很难判断一次修改是否可靠。

因此,值得继续研究的问题不只是“AI 能不能代替传统开发”,而是:当代码生产不再是主要瓶颈时,软件工程应该围绕什么重新组织?

这个问题会延伸到需求、架构、前后端分工、测试、代码审查与调试,也会影响程序员应该学什么、理解到什么程度。代码可以生成得更快,但系统仍然需要被清楚地定义、理解和验证。