本指南的灵感来自 GitHub 的工程系统成功 playbook (ESSP),其中推荐了推动工程系统改进的策略和指标。
如果你要启动 Copilot 的推出,我们建议定义目标、相应地规划推出,并向员工明确传达目标。 请参阅“使用 GitHub Copilot 实现公司工程目标”。
1.确定阻碍成功的因素
ESSP 建议的第一步是充分了解阻碍公司取得进步的障碍。 通过了解当前的基线、所需的未来状态以及阻碍进步的障碍,可确保更改具有针对性且有效。
由于单元测试覆盖率较低,许多软件团队在维护高质量代码方面面临持续挑战。 在快节奏的开发环境中,编写测试通常被视为耗时或不必要,尤其是在团队面临快速交付功能的压力时。
因此,关键 bug 可能在开发生命周期的后期才被发现,通常是在过渡或生产环境中。
这会导致一系列负面结果:
- 更高的 bug 率以及客户反馈的问题增加****
- 部署后修复 bug 的成本增加****
- 降低开发人员对其代码稳定性的信心****
- 反应式调试和修补导致发布周期变慢****
在旧系统中,由于复杂的依赖项或记录不佳的代码,测试覆盖率问题可能更难解决。 开发人员可能不熟悉较旧的代码库或一般测试框架,这进一步加剧了问题。
提高测试覆盖率是公认的最佳做法,但需要时间和专业知识,而许多团队无法满足这些要求。
2.评估你的选项
下一步是评估并商定解决方案,以解决在第一步中确定的障碍。 在本指南中,我们将重点关注 GitHub Copilot 对已确定目标的影响。 新工具的成功推出还需要对文化和流程进行更改。
使用试点组运行新工具和流程的试用,以收集反馈并衡量成功。 有关在试验期间要使用的训练资源和指标,请参阅 3. 实施更改 和 需要监视的指标 部分。
<a href="https://github.com/github-copilot/purchase?ref_product=copilot&ref_type=trial&ref_style=button&ref_plan=enterprise" target="_blank" class="btn btn-primary mt-3 mr-3 no-underline">
<span>注册 Copilot</span><svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-link-external" aria-label="link external icon" role="img"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a>
如何 Copilot 能提供帮助
GitHub Copilot 可以显著加速和简化编写单元测试的过程。 通过了解周围的代码和上下文, Copilot 可以建议与所测试代码的结构和逻辑匹配的测试函数。
Copilot的功能在多个场景中非常有用:
- 当开发人员编写新函数时, Copilot 可以自动内联建议相应的测试用例。
- 重构旧代码时, Copilot 可以帮助生成测试基架以防止回归。
- 对于未经测试的模块,开发人员可以提示 Copilot 生成有意义的测试用例,即使测试覆盖率缺失或不一致。
通过简化单元测试、更快和更少的手动测试, Copilot 可减少可能导致测试覆盖率差距的摩擦,并帮助团队采用质量优先的思维模式。
用例
-
**内联测试生成**:开发人员可以要求 Copilot 为特定函数或模块生成测试,而无需切换上下文。 -
**更好的边缘案例覆盖率**:通过提示 Copilot 边缘方案(例如 null 输入、空列表或无效状态),开发人员可以快速覆盖更多逻辑分支。 -
**加速载入**:新团队成员可以通过 Copilot 查看生成的测试用例来了解函数的行为方式。 -
**有关 CI/CD 的帮助**: Copilot 可以建议如何将测试集成到生成管道中,确保覆盖率改进直接支持质量入口。
文化注意事项
除了推出 GitHub Copilot 外,还要解决可能阻碍你实现目标的任何社会或文化因素。
以下示例取自 ESSP 中的“反模式”部分。
- Teams 可能依赖手动测试或不充分的自动化测试****。 可能原因是自动化资源约束或缺乏新式测试工具的经验。
- 团队可能会等待太长时间才进行软件发布,并同时部署一个大批代码,这使得检测缺陷和回归变得更加困难。 这可能是由于 CI/CD 管道成熟度不足、合规性要求严格或 PR 与部署之间评审周期较长。
3. 实施更改
确定克服障碍的正确方法后,请实施并扩大你确定的解决方案。 若要成功推出新工具或流程,请将所有权分配给推出的每个部分,以透明方式传达目标,提供有效的培训,并衡量结果。
本部分为开发人员提供了示例场景、最佳做法和资源。 使用本部分来规划通信和培训课程,帮助员工以符合你的目标的方式使用 Copilot。
-
[内联生成测试](#generate-tests-inline) -
[覆盖边界情况](#cover-edge-cases) -
[了解新代码](#understand-new-code) -
[获取 CI/CD 的相关帮助](#get-assistance-with-cicd) -
[面向开发人员的最佳做法](#best-practices-for-developers) -
[面向开发人员的资源](#resources-for-developers) -
[推荐的功能](#recommended-features)
内联生成测试
- 在 VS Code 中,选择要测试和提示 Copilot的函数:
Generate a unit test for this code. -
Copilot 根据语言和结构,可在内联或单独的测试文件中生成测试。 - 评审、优化和接受建议。
覆盖边缘案例
-
在编写完测试后,询问 Copilot:
What are some edge cases I should test for this function?或者:
Write test cases for when the input is null or empty. -
Copilot 建议其他测试用例以涵盖边界条件。 -
审核测试并将其整合到测试套件中。
了解新代码
- 选择旧函数并询问 Copilot:
Explain what this function does and generate a test to validate it. -
Copilot 解释函数的目的,并建议相应的测试用例。 - 查看测试用例以了解预期行为并快速生成上下文。
获取 CI/CD 的相关帮助
- 评审测试用例并将其提交到代码库。
- 问 Copilot:
Where should I place this test if I want it to run in CI? - 根据代码库的结构, Copilot 建议在何处放置测试文件以及如何更新管道配置。
适用于开发人员的最佳做法
开发人员应该:****
- 在与 Copilot 聊天时使用描述性的注释或提示。 例如:
Generate unit tests for a function that calculates discounts based on user type and purchase amount. - 使用 Copilot 浏览逻辑覆盖范围。 例如:
What branches or conditions does this function have that should be tested? - 探索不同的提示技术,并比较不同 AI 模型的结果。
开发人员不应该:****
- 在未评审逻辑的情况下接受生成的测试。 请确保测试反映实际要求并处理实际输入和输出。
- 跳过验证边缘行为。 如果仅测试“理想路径”,就有可能遗漏回归问题。
- 依靠 Copilot 猜测未记录的业务规则。 请始终通过提示或备注提供上下文。
- 将 Copilot 视为人工代码评审的替代品。 Copilot 加速该过程,但仍需要应用工程判断。
面向开发人员的资源
-
[AUTOTITLE](/copilot/using-github-copilot/guides-on-using-github-copilot/writing-tests-with-github-copilot) -
[如何使用GitHub Copilot生成单元测试:提示和示例](https://github.blog/ai-and-ml/github-copilot/how-to-generate-unit-tests-with-github-copilot-tips-and-examples/) (包含测试部分的视频内容)在 Visual Studio 中随处可见 -
[AUTOTITLE](/copilot/using-github-copilot/copilot-chat/prompt-engineering-for-copilot-chat) -
[AUTOTITLE](/copilot/using-github-copilot/ai-models/changing-the-ai-model-for-copilot-chat)
推荐的功能
- GitHub 中的Copilot 对话助手
-
[ Copilot 内联建议](/copilot/using-github-copilot/getting-code-suggestions-in-your-ide-with-github-copilot) -
[ Copilot 对话助手 在 IDE 中](/copilot/using-github-copilot/copilot-chat/asking-github-copilot-questions-in-your-ide) - Copilot云代理
要监视的指标
若要评估新工具的试用,并确保完整的推出提供一致的改进,请监视结果并在需要时进行调整。 我们建议考虑 质量、速度和开发人员幸福的关键区域,以及这些区域如何结合在一起,为业务成果做出贡献。
下面是一些指标,用于评估 Copilot 对此特定目标的影响。
-
**测试覆盖率**:跟踪采用后的 Copilot 行和分支覆盖范围的增加。 如果可能,请查看 CI 管道中的测试覆盖率报告。 -
**部署后的 Bug 率**:生产环境中报告的 bug 应减少。 -
**开发人员置信度**:使用调查或回顾来评估开发人员交付新代码的自信程度。 -
**编写测试的时间**:度量创建单元测试所需时间的减少情况。