跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaAIjava

Copilot 使用一年后,代码质量真的变好了吗?

GitHub Copilot 实战复盘显示,AI 能显著提升单元测试覆盖率和重复代码效率,但也存在 API 过时、上下文缺失及安全隐患风险。核心结论是代码质量未自动提升,但开发者可将节省的时间投入设计与优化。建议保持警惕,将 AI 视为需复核的实习生,规范团队使用策略并强化安全扫描。

Pythonist发布于 2026/4/5更新于 2026/6/1119 浏览
Copilot 使用一年后,代码质量真的变好了吗?

从怀疑到离不开

去年这个时候,GitHub Copilot 刚在我们小组里小范围开放试用。我当时的态度是不屑一顾的——一个 AI 能懂多少逻辑?代码补全不还是靠 IDE 的智能提示?况且我学了几年 Java,写过多少个项目,什么场景没见过,哪轮得到一个'实习生'来教我写代码。

转折发生在一个赶课程设计 deadline 的周末。隔壁组的同学用 Copilot 十分钟写完了一个数据清洗工具,而我还在翻 Apache Commons 的文档。那天晚上我提交了 Copilot 的试用申请。

一年后的今天,我每天写代码大概有 30%~40% 的内容是 AI 补全的。这篇文章想抛开那些'AI 取代程序员'的宏大叙事,从一个普通计算机专业学生的视角,聊聊这一年我踩过的坑、省下的时间,以及它对代码质量真实的影响。


那些 Copilot 让我'真香'的瞬间

写单元测试,它连边界值都想到了

以前写单元测试是我最抗拒的活,尤其是给课程作业补测试。自从用了 Copilot,我的习惯变成了:先写函数签名,然后空一行,敲个 // test,剩下的交给它。

举个例子,最近写一个计算折扣的方法:

public BigDecimal calculateDiscount(BigDecimal amount, String userLevel) {
    // 空值检查
    if (amount == null || userLevel == null) {
        throw new IllegalArgumentException("参数不能为空");
    }
    // 金额为 0 或负数,直接返回原值
    if (amount.compareTo(BigDecimal.ZERO) <= 0) {
        return amount;
    }
    // 根据会员等级计算折扣
    switch (userLevel) {
        case "VIP": return amount.multiply(new BigDecimal("0.8"));
        case "GOLD": return amount.multiply(new BigDecimal("0.9"));
        default: return amount;
    }
}

我在测试类里敲 @Test,然后写下注释:

// 测试普通用户无折扣



// 测试 VIP 用户 8 折
// 测试金额为 0 的情况
// 测试传入 null 抛异常

Copilot 生成的测试代码几乎覆盖了所有分支,连 BigDecimal 的比较方式都处理对了。我只需要微调几个数值,测试覆盖率直接从 60% 飙到 90%。

写重复代码,它比我记得牢

做后端最烦的是写 DTO、写 Mapper、写 Feign 接口。以前靠复制粘贴改字段名,总有漏改的时候。现在只要定义好实体,Copilot 能顺着我的命名习惯把 getter/setter、构造器、Builder 全补出来。

有次写一个二十多个字段的 VO,我刚敲完第一个字段,它直接给了我完整的类定义,包括 @ApiModelProperty 注解。虽然还得人工确认一遍,但至少省了五分钟。

写复杂 SQL,它是个不错的参谋

上周需要写一个统计报表 SQL,关联五张表,还有各种 group by 和子查询。我写了一版,跑出来数据不对。然后在注释里写了一句:

-- 用窗口函数重写,按部门分组,取每个部门工资最高的前 3 名

Copilot 给了两种实现,虽然不完全符合业务,但其中一种用 ROW_NUMBER() 的思路启发了我,最后结合自己的需求改出来了。这种'半成品'帮助,比直接搜 Stack Overflow 更高效。


那些 Copilot 让我'翻车'的瞬间

它生成过时 API

今年初我在写一个 Spring Boot 3 项目,Copilot 还在给我推荐 spring-boot-starter-web 的 2.x 版本,并且用了 WebMvcConfigurerAdapter(这个类在 Spring 5 就废弃了)。如果不注意,直接复制就会埋坑。

现在养成习惯:每次它补全依赖或旧 API,我都会下意识去官网确认一下版本。

它不懂项目上下文

Copilot 只能看到当前打开的文件,不知道你整个项目的架构。有次它建议一个工具类方法,里面用到了 commons-lang3 的 StringUtils,而我项目里统一用的是 Guava 的 Strings。引入的依赖不一样,直接编译报错。

后来我学会在写关键代码前,先把相关文件(比如常量类、工具类)也打开,让 Copilot 多看到一些上下文。

它太'热心'了

有时候我只是想写一个简单的 for 循环,它直接把整个业务逻辑都补完了,而且补的是错的。比如我在写:

for (int i = 0; i < list.size(); i++) {
    // 这里只需要打印日志
}

Copilot 非要帮我补上'处理每个元素并存入数据库'的逻辑,完全不是我想要的。现在看到它乱补,直接按 Esc 拒绝,或者改成手动模式。


我是怎么'驯服'Copilot 的

经过一年的磨合,我总结了几条让 Copilot 更好用的经验:

写好注释,比写好代码更重要

Copilot 是根据注释和上文来猜的。你写'根据用户 ID 查询用户',它大概率给一个正确的实现;你写'处理数据',它可能给一个千奇百怪的版本。

我现在会刻意写意图明确的注释:

# 输入:用户 ID 列表,输出:用户名字典 {user_id: user_name}
# 只返回状态为 ACTIVE 的用户,名字全部大写

这样生成的代码基本不用改。

核心逻辑自己写,体力活交给它

业务核心、安全逻辑、复杂算法,我坚持手写。工具类、测试数据、配置文件、重复的 CRUD,放心交给 Copilot。人机分工明确,效率最高。

定期'喂'它好的样本

如果项目里有自己封装的工具类,我会在写代码时先引用它,让 Copilot 看到。比如项目里统一用 Result 类返回,Copilot 看到几次后,生成的 Controller 方法就会自动返回 Result<T>,而不是随便一个对象。

永远保持怀疑

每次它生成一段代码,我都会问自己:这段逻辑对吗?有没有边界情况没处理?性能怎么样?有没有安全隐患?把它当实习生,需要复核。


对团队协作的连锁反应

代码 review 的重点变了

以前在实验室项目里 review 主要看语法、规范、有没有低级错误。现在这些 AI 基本帮我们解决了,review 更关注设计合理性、扩展性、AI 没考虑到的场景。有人开玩笑说,现在 review 是'人帮人看 AI 写的代码',但我觉得这是好事。

新人上手变快了

去年新加入实验室的一个学弟,两周就能独立写业务代码。他自己说,Copilot 帮他省去了查 API 的时间,可以更专注理解业务。但我们也会刻意让他手写一些关键代码,防止过度依赖。

安全隐患浮出水面

有次 Copilot 生成了一段代码,里面居然包含一个硬编码的阿里云 AccessKey(假的)。虽然那是测试密钥,但也提醒我们:AI 训练数据来自公开代码,那些被误传的密钥也可能被学进去。

我们在 CI 里加了一步静态扫描,自动检测可能的密钥泄露和 SQL 注入。


一年后的复盘:代码质量到底变好了还是变差了?

这个问题很难一概而论,我试着分维度说:

  • 可读性:变好了。AI 生成的代码通常遵循主流规范,命名也相对合理。
  • 正确性:没太大变化,因为核心逻辑还是人写的,AI 只是辅助。
  • 性能:有点下降。AI 倾向于生成'能跑就行'的代码,不会主动考虑性能优化。比如它可能用双层循环而不是用 Map,这点需要人工优化。
  • 可维护性:看情况。如果 AI 生成的部分符合团队规范,维护性就好;如果它用了团队不用的库或模式,反而增加维护成本。
  • 缺陷率:有所下降,因为单元测试覆盖率上来了,很多低级 bug 在测试阶段就被发现。

整体而言,我的结论是:代码质量没有自动变好,但 AI 给了我们更多时间去关注质量。原来花在重复劳动上的时间,现在可以用来做设计、写测试、优化性能。


给正在尝试 AI 编程的同学一些建议

  1. 别怕它,也别信它。把它当成一个经验丰富但偶尔会出错的搭档,保持警惕。
  2. 从重复劳动开始用。写测试、写文档、写配置,这些地方试错成本低。
  3. 团队要有规范。规定哪些场景可以用 AI,哪些必须手写,生成的代码如何审查。
  4. 关注数据安全。敏感项目慎用云端 AI 工具,或者用私有化部署的方案。
  5. 别丢掉基本功。如果你连基础的语法和算法都不懂,AI 生成的代码错在哪你都看不出来。

未来会怎样?

AI 编程工具还在快速迭代。我最近在试用 Copilot 的聊天模式,可以直接问它'这段代码有什么问题',它居然能指出潜在的 NPE。相信再过一两年,AI 不仅能生成代码,还能帮我们做代码审查、性能分析、自动重构。

但有一点我越来越确信:AI 不会取代程序员,但会用 AI 的程序员可能会取代不会用 AI 的程序员。这不是贩卖焦虑,而是工具演进的自然结果。就像当年从汇编到高级语言,从记事本到 IDE,每一次效率跃迁,都会重新定义开发者的能力模型。

我们能做的,就是拥抱它,驯服它,让它成为我们手中的工具,而不是反过来。

目录

  1. 从怀疑到离不开
  2. 那些 Copilot 让我“真香”的瞬间
  3. 写单元测试,它连边界值都想到了
  4. 写重复代码,它比我记得牢
  5. 写复杂 SQL,它是个不错的参谋
  6. 那些 Copilot 让我“翻车”的瞬间
  7. 它生成过时 API
  8. 它不懂项目上下文
  9. 它太“热心”了
  10. 我是怎么“驯服”Copilot 的
  11. 写好注释,比写好代码更重要
  12. 输入:用户 ID 列表,输出:用户名字典 {userid: username}
  13. 只返回状态为 ACTIVE 的用户,名字全部大写
  14. 核心逻辑自己写,体力活交给它
  15. 定期“喂”它好的样本
  16. 永远保持怀疑
  17. 对团队协作的连锁反应
  18. 代码 review 的重点变了
  19. 新人上手变快了
  20. 安全隐患浮出水面
  21. 一年后的复盘:代码质量到底变好了还是变差了?
  22. 给正在尝试 AI 编程的同学一些建议
  23. 未来会怎样?
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 基于 Q-Learning 的无人机三维动态避障路径规划 (Matlab 实现)
  • Whisper 音频转录工具使用指南
  • OpenClaw 实战:构建多功能 AI 数字替身与场景应用
  • JetBrains IDEA 授权机制分析与合法使用方案建议
  • 量化交易中 Python 与 C++ 的选择考量
  • 企业微信群机器人发送 Markdown 消息支持表格及艾特功能
  • Spring Boot 开发环境搭建:Java + Maven + IDEA 配置指南
  • 一文读懂 AI Skills:智能体技能范式的迁移与实战
  • AI 热榜深度解析:平台生态、多智能体与评测体系新趋势
  • Vue 实例劫持突破 Web 编辑器粘贴限制
  • 贪心算法实战:摆动序列与股票买卖详解
  • OpenClaw macOS 安装与配置指南
  • JavaAI 辅助生成 SpringBoot 项目的实战流程与效果评估
  • 前端视频防录屏原理:EME DRM 机制与实战代码
  • C++内联汇编详解:常见问题、陷阱与最佳实践
  • Spring Boot 2.0 整合 Spring Security OAuth2
  • C++ 进阶:unordered_set 与 unordered_map 原理及哈希表模拟实现
  • C++ 数据结构与算法:线性表之链表
  • Telegram 搜索机器人搭建指南(含 Python 脚本)
  • Java 按值传递与按引用传递详解

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online