介绍
技术债务在每个代码库中累积:重复代码、缺少测试、过时依赖项和不一致的模式。 这些问题可能会累积,因为特征开发通常具有更高的优先级。 本教程介绍如何使用 GitHub Copilot 系统地处理技术债务,同时不牺牲功能开发速度。
本教程面向谁
本教程旨在帮助工程团队和技术主管减少技术债务,同时保持新功能交付速度。 你应该具备以下能力:
- 可访问 Copilot 的 Copilot cloud agent 订阅
- 至少一个存储库的管理员权限
- 熟悉团队的开发工作流
你要完成的操作
在本教程结束时,你将了解以下内容:
- 使用Copilot实现实时修复
- 利用 Copilot cloud agent 执行大规模清理任务
- 创建自定义说明以符合 Copilot 团队的标准
- 衡量
对技术债务的影响
了解技术债务问题
在开始减少代码库中的技术债务之前,你应该花些时间来确定团队最常面临的技术债务类型。
常见的技术债务类型包括:
- 代码重复 - 在多个位置实现的相同逻辑
- 缺少测试 - 测试覆盖不足的特性
- 过时的依赖项 - 库已落后于当前发布的几个版本
- 不一致的模式 - 跨代码库对相同问题的不同方法
- 旧代码 - 可以工作但不符合当前标准的旧代码
技术债务的成本随着时间的推移而累积。
- 高级工程师花时间进行例行更新,而不是体系结构设计
- 代码评审因为审阅者对不一致模式的争论而变得更长
- 由于代码组织混乱,新开发人员需要更长的时间加入
- 部署风险随着过时依赖项累积漏洞而增加
在您的 IDE 中使用 Copilot 进行即时修复
避免代码库中积累的技术债务的最佳方式是首先防止它进入代码库。
在开发过程中遇到技术债务时,请立即在 IDE 中使用 Copilot 进行修复。
快速重构工作流
-
在 IDE 中工作时,突出显示需要改进的代码。
-
在 IDE 中打开 Copilot Chat 。
-
要求 Copilot 重构代码。 例如:
Extract this into a reusable helper and add error handlingStandardize this logging format to match our patternAdd null checks for all optional parametersReplace this deprecated API call with the current version
-
查看建议的更改。
-
接受更改或要求 Copilot 修改其方法。
-
运行测试以验证更改是否正常工作。
示例:标准化错误处理
如果您发现错误处理不一致,例如:
// Highlight this code
try {
await fetchData();
} catch (e) {
console.log(e);
}
要求 Copilot 改进代码,例如:
Refactor this to use structured logging and proper error handling
// Highlight this code
try {
await fetchData();
} catch (e) {
console.log(e);
}
Refactor this to use structured logging and proper error handling
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 Chat 响应是不确定的,因此,如果针对同一代码运行相同的提示,可能会获得不同的响应。
通过采用立即修复方法,有助于确保不合格代码不会添加到代码库,并避免创建可能永远不会解决的积压工作问题。
有关在 IDE 中使用Copilot的详细信息,请参阅在 IDE 中向 GitHub Copilot 提问问题。
使用Copilot cloud agent进行大规模重构
一些重构任务太大,无法完成,而团队中的每个人都忙于开发新功能。 在这种情况下,您可以使用 Copilot cloud agent 自主处理这些任务。 人工仍将是必要的——至少需要审查 Copilot cloud agent 所建议的更改——但通过让 Copilot 完成大部分工作,可以让你进行大规模重构, 从而对团队工作效率的影响要小得多。
何时使用 Copilot cloud agent
使用 Copilot cloud agent 执行以下任务:
- 在代码库中修改多个文件
- 需要系统更改(例如删除旧功能标志)
- 需要仔细测试,但实现简单明了
- 如果手动完成,将中断功能开发
示例包括:
- 影响 50 多个文件的框架升级
- 删除已弃用的功能标志
- 迁移到严格的 TypeScript
- 更新依赖项版本
- 标准化导入模式
工作流 Copilot cloud agent
-
创建一个描述重构任务的 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. -
将问题分配给 Copilot 用户。
-
Copilot cloud agent 将会有:
- 设置开发环境
- 打开草稿拉取请求
- 对代码进行所需的更改
- 运行测试
- 完成提取请求以供审核
- 请求你对拉取请求进行审核
-
审核拉取请求,就像审核由用户提出的拉取请求一样。
-
如果需要更改,请留下评论,Copilot cloud agent 将根据你的反馈更新拉取请求。
-
以这种方式循环,直到工作完成正确为止。
-
批准和合并拉取请求。
有关详细信息,请参阅 启动GitHub Copilot会话 和 查看来自 Copilot 的输出。
安全护栏
Copilot cloud agent 使用内置安全措施进行操作:
- 它只能推送到自己的
copilot/*分支 - 它无法合并拉取请求——需要您的审批
- 所有的提交都被记录且可进行审计
- 现有的分支保护仍处于活动状态
- 在合并任何代码之前运行 CI/CD 检查
为团队创建自定义说明
自定义说明有助于 Copilot 了解团队的编码标准和模式。 这可确保建议从一开始就符合预期。
设置自定义指令
- 在存储库中创建名为
.github/copilot-instructions.md的文件。 - 以清晰、直接的语句添加团队的编码标准,例如使用项目符号列表。
- 将文件提交到存储库。
自定义说明示例
下面是有效的自定义指令示例:
## 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 周:设置和建立基线
-
确保所有试点参与者具有 Copilot 访问权限,并启用了 Copilot cloud agent 。
-
统计积压事项中的技术债务项:
- “技术债务”、“任务”或类似标签问题的数量
- 过时依赖项数
- 未通过 linter 检查的文件数量
-
跟踪当前指标:
- 从创建拉取请求到合并重构 PR 的平均时间
- 每个重构 PR 的平均审核轮次数
-
将 3-5 个最重要的标准创建到你的第一个
.github/copilot-instructions.md文件中。
第 2-4 周:实施试点
-
为试点选择 5-10 个存储库。
-
选择要解决的 1-2 个特定问题。 例如:
- 特定区域中的代码重复
- 对频繁更改的文件缺少测试
- 过时的依赖项
-
在 Copilot IDE 中使用,以便在遇到问题时快速修复。
-
将更大的清理任务分配给Copilot cloud agent。
-
请仔细查看所有 Copilot 生成的 PR。
-
提供有关建议的反馈,以帮助 Copilot 了解你的偏好。
第 5 周:评估结果
试点后,测量结果:
-
重构拉取请求合并的速度有多快?
-
他们现在需要多少轮审查?
-
开发人员最常接受哪种类型的代码更改建议(在 Copilot cloud agent 拉取请求中提出)
-
哪些建议需要最修订?
-
你的技术债务指标是否正在改进?
- Linter 警告的数量在减少吗?
- 测试覆盖率增加?
- 依赖项版本更最新?
根据你所了解到的哪些指导对 Copilot 帮助最大,更新自定义说明。
衡量成功率
跟踪特定指标,以了解 Copilot对技术债务的影响。
速度指标
监控Copilot对开发速度的影响。
- 关闭技术债务问题的时间(目标:30-50% 减少)
- 每周合并的技术债务拉取请求数量(目标:增加 2-3 倍)
- 每个重构 Pull Request 的平均评审轮数(评估此轮数是增加还是减少)
质量指标
确保质量随速度一起提高:
- Linter 警告计数(应该呈下降趋势)
- 测试覆盖率百分比(这应呈上升趋势)
- 与重构代码相关的生产事故数量(评估是否有变化)
工程师满意度
定期获取团队反馈:
- 工程师们在例行维护上花费的时间是否更少?
- 代码评审是否更注重体系结构,不关注样式?
- 新团队成员的加入速度是否更快?
Troubleshooting
Copilot 显示不正确的更改
如果 Copilot 一致地建议与需求不匹配的代码:
- 查看自定义说明 - 它们可能过于模糊或矛盾
- 在提示中提供更具体的上下文
- 向自定义说明添加良好代码的示例
- 在拉取请求评审中留下详细的反馈,使得 Copilot cloud agent 能够解决问题
拉取请求太大,无法审查
如果 Copilot cloud agent 创建难以审核的拉取请求:
- 将大型任务分解为较小的重点问题
- 要求 Copilot cloud agent 一次处理一个文件或目录
- 使用更具体的问题说明
更改导致测试失败
如果重构引入了测试失败:
- 在使用之前,请确保测试套件可靠运行 Copilot cloud agent
- 在合并之前务必仔细查看 Copilot 的更改
- 要求 Copilot 随代码更改一起更新测试
团队采用速度缓慢
如果你的团队没有使用 Copilot 来处理技术债务:
- 分享早期采用者的成功案例
- 演示团队会议中的节省时间
- 从最恼火的技术债务项目开始
- 将制定自定义说明作为团队活动
结论
在本教程中,你学习了如何使用 Copilot 系统地减少技术债务。 现在,你已了解如何:
- 在 IDE 中使用 Copilot 立即修复技术债务
- 将大型重构任务分配给 Copilot cloud agent
- 创建自定义说明,以符合 Copilot 团队的标准
- 运行试点计划以验证方法
- 评估 Copilot 对技术债务的影响
通过自动执行例行重构和维护任务, Copilot 可以让你专注于体系结构、功能开发和其他高价值工作。
快速调查
后续步骤
- 展开试点:根据试点结果推广到更多存储库。
- 自动执行依赖项更新:创建定期问题来处理 Copilot cloud agent 依赖项更新。
- 生成重构队列:将积压工作中的问题标记为 Copilot 良好,然后定期将这些问题分配给 Copilot 进行处理。
- 共享最佳做法:记录团队的成功提示和自定义说明。
延伸阅读
-
Copilot cloud agent