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

# Devin 代码扫描

> 使用 Devin 代码扫描在你的仓库中发现性能、测试覆盖率、无用代码、无障碍等问题，并通过 Devin 修复它们

代码扫描是指一个 Devin 会话及其启动的 child 会话读取一个或多个仓库、报告**发现项**，并可通过 拉取请求 修复这些问题。安全扫描请参阅 [Security Swarm](/zh/work-with-devin/security-swarm)，本页介绍其他 scan type。

<Accordion title="前置条件">
  运行扫描前：

  * 你需要具备**使用代码扫描**权限，以及使用 Devin 会话的权限。请参阅[访问与权限](/zh/work-with-devin/security-swarm#access-and-permissions)。
  * 你的组织必须拥有待扫描仓库的访问权限。
</Accordion>

<div id="start-a-scan-with-scan">
  ## 使用 `/scan` 启动扫描
</div>

1. 在 composer 中输入 `/scan`，后面跟上你想查找的内容，并提及要扫描的仓库。例如：`/scan find N+1 queries in @acme/api`。你在 composer 中选中的仓库也会一并纳入。
2. 发送消息。Devin 会启动一个新会话来配置扫描并将其打开。如果你只发送了 `/scan`，Devin 会给出一些示例扫描 (例如查找缓慢的数据库查询或未使用的代码) ，并询问你想查找什么。
3. Devin 会根据你的请求选择 scan type，并用一句话说明，例如它将配置一个只查找 camelCase 变量名的自定义扫描。如果你想要别的方案，回复即可。
4. Devin 会显示一张 **Code scan setup** 卡片。确认要扫描的 **Repositories**，也可以在 **What should the scan focus on?** 下补充指导。如果你没有提及仓库，Devin 会根据你最近的拉取请求，预选你参与最多的那个仓库。
5. 点击 **Start scan**。只有在你提交该卡片后，Devin 才会创建扫描，随后分享该扫描会话的链接。若要取消配置，请点击 **Dismiss**。

你无需自己挑选 scan type 或配置扫描。覆盖整个领域的请求 (例如对某个仓库进行性能扫描) 会使用匹配的 [scan type](#scan-types)；范围更窄或目标不同的请求 (例如查找 memory 泄漏) 则会使用聚焦于你所描述内容的 **Custom** 扫描。

<video autoPlay muted loop playsInline className="w-full aspect-video" src="https://mintcdn.com/cognitionai-enterprise/oyRM0GqIVnPd1Bxj/images/work-with-devin/code-scans/code-scans-walkthrough.mp4?fit=max&auto=format&n=oyRM0GqIVnPd1Bxj&q=85&s=49a00198c8d9bc742a2505fa94250cda" data-path="images/work-with-devin/code-scans/code-scans-walkthrough.mp4" />

非安全类扫描完成后，Devin 会通过 Slack 私信向你发送发现项摘要，除非你指定了其他通知方式或不接收通知。发送 Slack 消息需要你的组织的 Slack 集成允许会话发送私信。

<Note>非安全类扫描以正常投入程度无人值守运行。投入程度选项以及交互模式 (Devin 会暂停，以便你在调查前审阅 threat model) 仅适用于[安全扫描](/zh/work-with-devin/security-swarm#interactive-mode)。</Note>

<div id="scan-types">
  ## Scan types
</div>

| Scan type            | 检查内容                                                            |
| -------------------- | --------------------------------------------------------------- |
| **Performance**      | 性能问题，以及让代码更快、更高效的改进机会。                                          |
| **Database queries** | 代码查询数据存储时存在的问题：低效、错误、不安全或不可靠的查询。                                |
| **Test coverage**    | 未被测试覆盖的流程和组件。                                                   |
| **无用代码**             | 已不再被调用的代码：可安全移除的无用函数、module、flags 和依赖。                          |
| **Code quality**     | 导致代码难以阅读、修改和保持正确性的可维护性问题。                                       |
| **Cleanup**          | 杂乱、冗余和过度设计的代码，可在不改变行为的前提下清理。                                    |
| **Telemetry**        | 需要添加 telemetry 或 tracking 埋点的位置。                                |
| **Accessibility**    | 不符合无障碍规范 (WCAG) 的 frontend 代码，例如缺少 labels、键盘访问失效、对比度过低等。        |
| **Compliance**       | 与 scan 所设定检查的法规、标准和 policies 之间的差距，例如敏感数据处理、audit trails 和数据留存。 |
| **Migration docs**   | 梳理代码的端到端流程和业务逻辑，生成带图示、可直接用于迁移的文档。                               |
| **Custom**           | 你描述的任何其他内容，例如记录了个人数据的位置，或你的 team 希望强制执行的命名规范。                   |

如需排查 vulnerabilities 和攻击面，请使用 [Security Swarm](/zh/work-with-devin/security-swarm) scan。

<div id="review-and-fix-findings">
  ## 审查并修复发现项
</div>

在启动扫描的会话中，或在该扫描的主会话中打开 **Findings** 选项卡，即可逐项处理发现项。处于 Open 状态的发现项按阶段分组：

* **Unassigned** — 尚未启动修复会话。
* **Assigned** — 已启动修复会话，但还没有打开的 拉取请求。
* **PR open** — 该发现项已有打开的 拉取请求。

对于每个发现项，你可以：

* **Assign to Devin** — 启动一个 Devin 会话来修复该发现项，并提交 拉取请求。点击 **Open session** 跟踪处理进展，点击 **Open PR** 审查结果。
* **Dismiss** — 移除无需处理的发现项。

扫描运行期间，扫描主会话中的 Findings 选项卡还提供 **Pause scan**、**Resume scan** 和 **Kill scan**。使用这些控件需要 **Manage code scans** 权限。

<div id="scale-scanning">
  ## 规模化扫描
</div>

<div id="scan-new-commits">
  ### Scan new commits
</div>

任何类型的扫描完成后，在 Findings 选项卡中点击 **Scan new commits**，即可启动一次增量运行，仅扫描自该扫描上次运行完成以来新增的提交。此次运行沿用该扫描的现有配置，并将发现项归入同一个扫描。扫描正在运行时或归档后不会显示该按钮，且使用该按钮需要 **Manage code scans** 权限。如果没有新的提交，则不会启动运行。

你也可以在会话中让 Devin 扫描某个现有扫描的新提交。

<div id="automations">
  ### 自动化
</div>

[自动化](/zh/product-guides/automations) 可以按计划或在事件触发时运行任意类型的扫描。选择 **Code scan** agent 类型，然后在 **Scan** 下：

* 选择 **Create a new scan**，每次自动化触发时都会启动一次全新扫描。指定仓库、扫描类型和 Profile。非安全类扫描类型需要同类型的 [scan profile](/zh/work-with-devin/security-swarm#scan-profiles)。
* 选择一个已有扫描，每次自动化触发时扫描其新增的提交。该扫描必须已完成过一次运行。

由自动化启动的扫描以无人值守方式运行。参见 [从自动化启动扫描](/zh/work-with-devin/security-swarm#start-scans-from-automations)。

<div id="api">
  ### API
</div>

[Code Scans API](/zh/api-reference/v3/code-scans/triggering-code-scans) 可以在不使用 web app 的情况下启动扫描、轮询扫描状态并读取发现项。当你通过 API 启动非安全类扫描时，必须传入该 scan type 对应 Profile 的 `profile_id`；`scan_type` 默认取该 Profile 的类型。通过 API 启动的扫描不支持交互。

<div id="related-pages">
  ## 相关页面
</div>

* [Security Swarm](/zh/work-with-devin/security-swarm) — 安全扫描、扫描 Profile、交互模式以及代码扫描权限。
* [通过 Devin API 触发代码扫描](/zh/api-reference/v3/code-scans/triggering-code-scans) — 端到端的 API 流程。
* [自动化](/zh/product-guides/automations) — 计划并触发扫描。
