> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# 代码覆盖率

> Devin 可以分析您的代码库测试套件，并为您的团队编写更多测试以提高代码覆盖率。

<div id="improving-code-coverage-with-devin">
  # 使用 Devin 提升代码覆盖率
</div>

大多数生产环境中的应用都没有达到 100% 的代码覆盖率。工程团队必须严格划分优先级，通常会把精力集中在关键路径上编写测试，以最大化投入产出比。Devin 可以通过分析代码库中现有测试套件的风格和结构，弥补这一差距，提升那些虽然不是最关键但仍然很重要的函数的覆盖率。

在这个示例中，我们将使用一个基于 RealWorld 规范的开源 TypeScript 示例应用。该项目已经包含了一些测试，但覆盖率并不全面：[https://github.com/SeuRonao/realworld-express-prisma](https://github.com/SeuRonao/realworld-express-prisma)

你可以在[这里](https://app.devin.ai/sessions/9169ca11ab2141f9b0a5345f0338632d?ts=1727821682237)查看本次 Run 的完整过程，或者继续阅读本文余下内容，逐步了解 Devin 的处理流程。我们将重点展示 Devin 的 Workspace 中的不同部分，例如 Editor 和 Shell。

<div id="initial-prompt">
  #### 初始提示
</div>

我们首先用一个简单的提示开始本次 Run，指示 Devin 设置开发环境并评估我们应用现有的代码覆盖率：

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/57fe8d5a746bec6477a14fdb0918d500bdc94092-1318x468.png)
</Frame>

在其 Shell 中，Devin 首先从 GitHub 克隆我们的仓库，解析 README 文件，并在本地环境中安装项目依赖。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/d89ed7e02584d27c4830fbee59f819fdeff119a0-1332x1188.png)
</Frame>

接着 Devin 使用其内置编辑器创建 `.env` 文件，以便应用可以在本地运行。与 Devin 协作时，你也可以自行打开 VS Code 进行手动编辑，或审查 Devin 正在处理的文件。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/193d75f4af3868b6057729de9370001715d7e385-1360x486.png)
</Frame>

<div id="establishing-a-coverage-baseline">
  #### 建立覆盖率基线
</div>

接下来 Devin 会在它的 Shell 中运行测试套件。Devin 的一大优势在于，它不仅可以为你的团队修改或创建代码，还可以直接在它的 Browser 和 Terminal 中操作，对你的代码库、开发环境，甚至正在运行的应用执行更高层次的交互。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/b975dcb6d4ffab70f223185e443197a4fe7470c0-1172x906.png)
</Frame>

下面我们可以看到 Devin 如何理解并将它在 Shell 中得到的结果整理到我们的对话中，使其更加易于阅读并提炼出关键信息。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/88d2ea80095b6c7fcc2335b2f0895e4514d4c608-1536x1014.png)
</Frame>

<div id="making-an-improvement-plan">
  #### 制定改进计划
</div>

现在我们可以开始着手当前的核心任务：提高代码覆盖率。看起来 profileViewer.ts 是一个很好的起点，因为它在默认情况下几乎没有任何覆盖率。我们让 Devin 规划下一步操作，它会在整个过程中向我们汇报当前的进展。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/a954746c9a9132a562b061785708d8f8c4e2f309-1336x1478.png)
</Frame>

Devin 能够读取现有文件，根据已有功能判断我们可能需要实现哪些测试用例，然后在无需任何人工干预的情况下为我们实际编写这些新测试。完成新测试用例的实现后，Devin 会向我们给出它所做更改的最终总结：

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/cbebc6dd647b42c1539219a6dd9d12a48b358d06-1334x890.png)
</Frame>

<div id="code-review">
  #### 代码审查
</div>

它还会把这个新文件提供给我们，这样我们就可以下载并进行审查。或者，我们也可以让 Devin 使用这个新文件[直接在 GitHub 上创建一个拉取请求 (PR) ](/zh/integrations/gh)，这样就能把它纳入我们常规的代码审查流程中进行查看。我决定直接在 Devin 内置的 Editor 里审查它，这样就不需要下载文件了。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/20ce6078f7ed37fbd1aeb97f41c395d51eca8291-1842x1196.png)
</Frame>

整体来看这些更改都不错，但我们还需要确保没有遗漏任何运行时问题，因此我们让 Devin 再次运行测试套件并汇报结果。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/4e384c0d9df09ef718a397fb852ff0aaf82c4244-1344x1176.png)
</Frame>

测试按预期通过，并且我们把整体函数覆盖率从 28.57% 提升到了 57.14%，这正是我们想要达到的目标。整个过程 Devin 实际工作时间不到 10 分钟就完成了，尽管我们中途离开了一会儿，晚些才给 Devin 下一组指令。你只需把这项工作委托给 Devin，就可以提升测试覆盖率，并从工程团队的待办事项中移除一项繁琐任务。

如果你发现自己经常使用 Devin 来提升代码覆盖率，你甚至可以把这个提示词整理成一个[详细的 Playbook](/zh/product-guides/creating-playbooks)，这样就能为应用的不同部分轻松发起新的 Run。如果你想进一步了解 Devin 擅长处理哪些类型的提示，可以在文档中阅读我们的一些[示例](/zh/learn-about-devin/prompting)。
