AI 写代码最容易展示的是速度。说一句需求,几分钟后文件已经改完,测试也开始跑。企业还要决定这些改动怎样进入主分支。

我看了 GitHub 对 Copilot 建议的责任说明,也翻了 NIST 的安全软件开发框架。两边给出的共同提醒很实在。生成工具可以参与写代码和检查代码,团队仍要保留明确的接受动作、测试结果与问题记录。

接受按钮是一道边界

GitHub 的文档解释,Copilot 行内建议会读取光标附近的代码,也可能使用编辑器里已经打开文件的片段。模型据此提出新增、修改或删除。建议只有在开发者明确接受以后才写进文件。

这个动作看着很轻,责任却从这里开始。GitHub 同时提醒,生成结果可能语法正确却不符合业务意图,也可能在语法上直接出错。代码看起来像熟悉的写法,不能证明边界条件已经处理。开发者要读完整差异,弄清它改了哪些文件,又有哪些文件本来不该动。

公开代码匹配也要留意。GitHub 提供相关过滤和提示,但仍建议使用者做许可证、知识产权与安全检查。公司若有依赖清单和许可证扫描,AI 生成代码应该走同一套规则。来源不清的长片段,不能因为来自聊天窗口就获得特殊通行。

测试要对应这次改动

NIST 的 SSDF 把安全软件开发分成准备组织、保护软件、产出安全软件和响应漏洞四组实践。PW.7 专门谈代码审查与代码分析。组织要先决定何时用人工审查,何时用自动分析,然后把发现的问题和修复建议记录进团队流程。

这条要求适合 AI 编程。模型说“测试通过”时,先看它实际运行了什么。只跑格式检查,说明不了登录流程是否正常。新增一个订单状态,就应补状态转换的单元测试,还要检查接口、页面与旧数据能否一起工作。改到权限、支付和删除操作时,审查范围还要扩大。

NIST 的 DevSecOps 参考流程列出单元、集成、回归、冒烟和用户验收等测试类型。项目无需每次全部跑满,可以按改动风险选择。选择本身要写进项目规则,不能临时交给生成工具猜。

让改动保持小一点

AI 一次能改很多文件,审查者的注意力没有跟着扩容。几千行差异里混着重命名、格式化和功能修改,人很难看出真正的行为变化。更稳的做法是让一次任务只处理一个结果。先修接口,再改页面;顺手发现的无关问题另开任务。

隔离分支也很有用。工具可以在独立工作区安装依赖、运行测试和构建,主目录里的临时文件与未提交资产不会被带进提交。完成后只挑本次任务涉及的文件,查看差异,再由有权限的人合并。失败的测试和未解决的警告应当留在报告里,不能靠删日志让状态变绿。

AI 编程能明显缩短从想法到候选改动的时间。团队可以把省下来的时间放到验收上,检查真实用户路径,读安全敏感代码,也确认回滚方法。合并规则守得住,生成速度才会稳定变成开发速度。

参考资料