Skip to main content

使用 GitHub Copilot 减少技术债务

使用 Copilot 自动化重构和维护任务,从而解放团队,使他们能够专注于功能开发。

介绍

技术债务在每个代码库中累积:重复代码、缺少测试、过时依赖项和不一致的模式。 这些问题可能会累积,因为特征开发通常具有更高的优先级。 本教程介绍如何使用 GitHub Copilot 系统地处理技术债务,同时不牺牲功能开发速度。

本教程面向谁

本教程旨在帮助工程团队和技术主管减少技术债务,同时保持新功能交付速度。 你应该具备以下能力:

  •         Copilot有权访问的订阅Copilot 云代理
    
  • 至少一个存储库的管理员权限
  • 熟悉团队的开发工作流

你要完成的操作

在本教程结束时,你将了解以下内容:

  • 使用Copilot实现实时修复
  • 利用 Copilot 云代理 执行大规模清理任务
  • 创建自定义说明以符合 Copilot 团队的标准
  • 衡量对技术债务的影响

了解技术债务问题

在开始减少代码库中的技术债务之前,你应该花些时间来确定团队最常面临的技术债务类型。

常见的技术债务类型包括:

  •         **代码重复** - 在多个位置实现的相同逻辑
    
  •         **缺少测试** - 测试覆盖不足的特性
    
  •         **过时的依赖项** - 库已落后于当前发布的几个版本
    
  •         **不一致的模式** - 跨代码库对相同问题的不同方法
    
  •         **旧代码** - 可以工作但不符合当前标准的旧代码
    

技术债务的成本随着时间的推移而累积。

  • 高级工程师花时间进行例行更新,而不是体系结构设计
  • 代码评审因为审阅者对不一致模式的争论而变得更长
  • 由于代码组织混乱,新开发人员需要更长的时间加入
  • 部署风险随着过时依赖项累积漏洞而增加

在您的 IDE 中使用 Copilot 进行即时修复

避免代码库中积累的技术债务的最佳方式是首先防止它进入代码库。

在开发过程中遇到技术债务时,请立即使用 Copilot 修复它。

快速重构工作流

  1. 在 IDE 中工作时,突出显示需要改进的代码。

  2. 在 IDE 中打开 Copilot对话 。

  3. 要求 Copilot 重构代码。 例如:

    • Extract this into a reusable helper and add error handling
    • Standardize this logging format to match our pattern
    • Add null checks for all optional parameters
    • Replace this deprecated API call with the current version
  4. 查看建议的更改。

  5. 接受更改或要求 Copilot 修改其方法。

  6. 运行测试以验证更改是否正常工作。

示例:标准化错误处理

如果您发现错误处理不一致,例如:

// Highlight this code
try {
  await fetchData();
} catch (e) {
  console.log(e);
}

要求 Copilot 改进代码,例如:

Copilot prompt
Refactor this to use structured logging and proper error handling
          Copilot 可能建议:
try {
  await fetchData();
} catch (error) {
  logger.error('Failed to fetch data', {
    error: error.message,
    stack: error.stack,
    timestamp: new Date().toISOString()
  });
  throw error;
}

注意

此响应是一个示例。 Copilot对话 响应是不确定的,因此,如果针对同一代码运行相同的提示,可能会获得不同的响应。

通过采用立即修复方法,有助于确保不合格代码不会添加到代码库,并避免创建可能永远不会解决的积压工作问题。

有关在 IDE 中使用Copilot的详细信息,请参阅在 IDE 中提问GitHub Copilot 问题

使用Copilot 云代理进行大规模重构

一些重构任务太大,无法完成,而团队中的每个人都忙于开发新功能。 在这种情况下,您可以使用 Copilot 云代理 自主处理这些任务。 人工仍将是必要的——至少需要审查 Copilot 云代理 所建议的更改——但通过让 Copilot 完成大部分工作,可以让你进行大规模重构, 从而对团队工作效率的影响要小得多。

何时使用 Copilot 云代理

使用 Copilot 云代理 执行以下任务:

  • 在代码库中修改多个文件
  • 需要系统更改(例如删除旧功能标志)
  • 需要仔细测试,但实现简单明了
  • 如果手动完成,将中断功能开发

示例包括:

  • 影响 50 多个文件的框架升级
  • 删除已弃用的功能标志
  • 迁移到严格的 TypeScript
  • 更新依赖项版本
  • 标准化导入模式

工作流 Copilot 云代理

  1. 创建描述 GitHub 重构任务的问题。

    具体说明需要更改的内容。 例如:

    Remove all feature flags marked for cleanup in Q2.
    
    These flags are:
    - `enable_new_dashboard`
    - `beta_export_feature`
    - `experimental_search`
    
    All three flags are enabled by default in production.
    
    Remove the flag checks and keep the "enabled" code path.
    
  2. 将问题分配给 Copilot 用户。

  3.        Copilot 云代理 将会有:
    
    • 设置开发环境
    • 打开草稿拉取请求
    • 对代码进行所需的更改
    • 运行测试
    • 完成提取请求以供审核
    • 请求你对拉取请求进行审核
  4. 审核拉取请求,就像审核由用户提出的拉取请求一样。

  5. 如果需要更改,请留下评论,Copilot 云代理 将根据你的反馈更新拉取请求。

  6. 以这种方式循环,直到工作完成正确为止。

  7. 批准和合并拉取请求。

有关详细信息,请参阅 要求 GitHub Copilot 创建拉取请求审查 GitHub Copilot 创建的拉取请求

安全护栏

          Copilot 云代理 使用内置安全措施进行操作:
  • 它只能推送到自己的 copilot/* 分支
  • 它无法合并拉取请求——需要您的审批
  • 所有的提交都被记录且可进行审计
  • 现有的分支保护仍处于活动状态
  • 在合并任何代码之前运行 CI/CD 检查

为团队创建自定义说明

自定义说明有助于 Copilot 了解团队的编码标准和模式。 这可确保建议从一开始就符合预期。

设置自定义指令

  1. 在存储库中创建名为 .github/copilot-instructions.md 的文件。
  2. 以清晰、直接的语句添加团队的编码标准,例如使用项目符号列表。
  3. 将文件提交到存储库。

自定义说明示例

下面是有效的自定义指令示例:

## Our Standards

- Use structured logging, not console.log
- Sanitize user input before database queries
- Check for null/undefined on all optional parameters
- Keep functions under 50 lines (extract helpers if needed)
- Every public function needs a test
- Flag any loops that might trigger N+1 queries

## Error Handling

- Always use try-catch blocks for async operations
- Log errors with context (user ID, request ID, timestamp)
- Never swallow errors silently
- Return appropriate HTTP status codes

## Testing Requirements

- Unit tests for all business logic
- Integration tests for API endpoints
- Mock external services in tests
- Test both success and failure paths

有关编写自定义说明的详细指南,请参阅 为GitHub Copilot添加存储库自定义说明

自定义说明的优点

自定义指令已设置后:

  •         Copilot 建议编写符合您模式的代码
    
  • 代码评审变得更快,关于样式更改的讨论较少
  • 新团队成员通过Copilot的建议了解你的标准
  • 提高代码库的一致性

运行试点计划

在广泛应用Copilot之前,请从小范围开始,以验证其对技术债务的影响。

第 1 周:设置和建立基线

  1. 确保所有试点参与者具有 Copilot 访问权限,并启用了 Copilot 云代理 。

  2. 统计积压事项中的技术债务项:

    • “技术债务”、“任务”或类似标签问题的数量
    • 过时依赖项数
    • 未通过 linter 检查的文件数量
  3. 跟踪当前指标:

    • 从创建拉取请求到合并重构 PR 的平均时间
    • 每个重构 PR 的平均审核轮次数
  4. 将 3-5 个最重要的标准创建到你的第一个 .github/copilot-instructions.md 文件中。

第 2-4 周:实施试点

  1. 为试点选择 5-10 个存储库。

  2. 选择要解决的 1-2 个特定问题。 例如:

    • 特定区域中的代码重复
    • 对频繁更改的文件缺少测试
    • 过时的依赖项
  3. 在 Copilot IDE 中使用,以便在遇到问题时快速修复。

  4. 将更大的清理任务分配给Copilot 云代理。

  5. 请仔细查看所有 Copilot生成的 PR。

  6. 提供有关建议的反馈,以帮助 Copilot 了解你的偏好。

第 5 周:评估结果

试点后,测量结果:

  • 重构拉取请求合并的速度有多快?

  • 他们现在需要多少轮审查?

  • 开发人员最常接受哪种类型的代码更改建议(在 Copilot 云代理 拉取请求中提出)

  • 哪些建议需要最修订?

  • 你的技术债务指标是否正在改进?

    • Linter 警告的数量在减少吗?
    • 测试覆盖率增加?
    • 依赖项版本更最新?

根据您所了解的内容更新自定义说明,哪些指导对 Copilot 帮助最大。

衡量成功率

跟踪特定指标,以了解 Copilot对技术债务的影响。

速度指标

监控Copilot对开发速度的影响。

  • 关闭技术债务问题的时间(目标:30-50% 减少)
  • 每周合并的技术债务拉取请求数量(目标:增加 2-3 倍)
  • 每个重构 Pull Request 的平均评审轮数(评估此轮数是增加还是减少)

质量指标

确保质量随速度一起提高:

  • Linter 警告计数(应该呈下降趋势)
  • 测试覆盖率百分比(这应呈上升趋势)
  • 与重构代码相关的生产事故数量(评估是否有变化)

工程师满意度

定期获取团队反馈:

  • 工程师们在例行维护上花费的时间是否更少?
  • 代码评审是否更注重体系结构,不关注样式?
  • 新团队成员的加入速度是否更快?

Troubleshooting

          Copilot 显示不正确的更改

如果 Copilot 一致地建议与需求不匹配的代码:

  • 查看自定义说明 - 它们可能过于模糊或矛盾
  • 在提示中提供更具体的上下文
  • 向自定义说明添加良好代码的示例
  • 在拉取请求评审中留下详细的反馈,使得 Copilot 云代理 能够解决问题

拉取请求太大,无法审查

如果 Copilot 云代理 创建难以审核的拉取请求:

  • 将大型任务分解为较小的重点问题
  • 要求 Copilot 云代理 一次处理一个文件或目录
  • 使用更具体的问题说明

更改导致测试失败

如果重构引入了测试失败:

  • 在使用之前,请确保测试套件可靠运行 Copilot 云代理
  • 在合并之前务必仔细查看 Copilot 的更改
  • 要求 Copilot 更新测试内容和代码更改

团队采用速度缓慢

如果你的团队没有使用 Copilot 来处理技术债务:

  • 分享早期采用者的成功案例
  • 演示团队会议中的节省时间
  • 从最恼火的技术债务项目开始
  • 将制定自定义说明作为团队活动

结论

在本教程中,你学习了如何使用 Copilot 系统地减少技术债务。 现在,你已了解如何:

  • 在 IDE 中使用 Copilot 立即修复技术债务
  • 将大型重构任务分配给 Copilot 云代理
  • 创建自定义说明,以符合 Copilot 团队的标准
  • 运行试点计划以验证方法
  • 评估 Copilot 对技术债务的影响

通过自动执行例行重构和维护任务, Copilot 可以让你专注于体系结构、功能开发和其他高价值工作。

快速调查

阅读本教程后,您是否有信心使用 Copilot 来减少代码库中的技术债务?

          <a href="https://docs.github.io/success-test/yes.html" target="_blank" class="btn btn-outline mt-3 mr-3 no-underline">
          <span>Yes</span></a><a href="https://docs.github.io/success-test/no.html" target="_blank" class="btn btn-outline mt-3 mr-3 no-underline"><span>No</span></a>

后续步骤

  •         **展开试点**:根据试点结果推广到更多存储库。
    
  •         **自动执行依赖项更新**:创建定期问题来处理 Copilot 云代理 依赖项更新。
    
  •         **生成重构队列**:在积压工作中标记适合 Copilot 的问题,然后定期分配一批这些问题给 Copilot 处理。
    
  •         **共享最佳做法**:记录团队的成功提示和自定义说明。
    

延伸阅读

  •         [AUTOTITLE](/copilot/using-github-copilot/coding-agent)
    
  •         [AUTOTITLE](/copilot/tutorials/refactoring-code-with-github-copilot)
    
  •         [如何在 IDE 中使用 GitHub Copilot:](https://github.blog/developer-skills/github/how-to-use-github-copilot-in-your-ide-tips-tricks-and-best-practices/) 博客中的 GitHub 提示、技巧和最佳做法
    
  • 在博客中5 种方法将 GitHub Copilot 云代理 集成到你的工作流中GitHub