From d4206760db5595e177a86b9135880a63dc172e5a Mon Sep 17 00:00:00 2001 From: Phodal Huang Date: Sat, 3 Aug 2024 08:23:37 +0800 Subject: [PATCH] =?UTF-8?q?feat(quality):=20=E6=B7=BB=E5=8A=A0GitClear?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=B4=A8=E9=87=8F=E7=A0=94=E7=A9=B6=E6=8A=A5?= =?UTF-8?q?=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 引入GitClear的研究报告,揭示AI辅助编码对代码质量的潜在影响。报告指出AI助手可能导致代码返工率上升、代码移动减少和复制粘贴代码增加,这些趋势可能对代码的长期可维护性构成挑战。同时,提供了改善AI代码质量的策略,包括使用经典工具如SonarQube和SaaS服务CodeGeeX,以及实施质量左移和持续数据运营。 --- src/aise-quality.md | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/src/aise-quality.md b/src/aise-quality.md index ca7b5c4..aaf8b98 100644 --- a/src/aise-quality.md +++ b/src/aise-quality.md @@ -17,6 +17,39 @@ AI 辅助编码的积极作用,需要做到以下几点: ## 0. 将代码质量设为关键绩效指标(KPI) +GitClear +报告《[Coding on Copilot: 2023 Data Suggests Downward Pressure on Code Quality](https://www.gitclear.com/coding_on_copilot_data_shows_ais_downward_pressure_on_code_quality)》 + +GitClear 分析了大约 1.53 亿行代码更改,这些更改发生在 2020 年 1 月至 2023 年 12 月之间。这是迄今为止已知最大的高度结构化代码更改数据库,用于评估代码质量差异。 +研究发现,在可维护性方面出现了令人不安的趋势。代码返工率(Churn)——即在编写后不到两周内被撤销或更新的代码行百分比——预计到 2024 +年将比 2021 年的 AI 应用前基准翻一番。 + +此外,研究还发现,“新增代码”和“复制粘贴代码”的比例正在增加,相对于 “更新”、“删除”和“移动”的代码。在这方面,2023 +年生成的代码更像是流动贡献者的作品, 容易违反访问过的仓库的DRY(Don't Repeat Yourself)原则。 + +GitClear将代码变更分为七个类别(研究中涉及前六种): + +1. 新增代码:首次提交的代码行,代码行是全新的,不包括对现有代码行的小幅修改,也不包括那些被添加、移除后又重新添加的代码行。 +2. 删除代码:被删除并提交的代码行,且至少在随后的两周内未被重新加入。 +3. 移动代码:将一行代码剪切并粘贴到新文件或同一文件内的新函数中。「移动」的操作仅涉及位置的变换,代码内容不发生改变。 +4. 更新代码:修改大约三个或更少的单词来更改原有代码行。 +5. 查找/替换代码:从三个或更多位置移除相同字符串,并用一致的内容进行替换。 +6. 复制/粘贴代码:在一次提交中,将相同的代码行内容复制到多个文件或函数中。 +7. 无操作代码:指一些微小的代码变更,比如空格或同一代码块内行号的变化。 + +2022 至 2023 年间,AI 助手的崛起与仓库中错误代码的增加密切相关。 + +- **代码返工率的上升趋势**。代码返工率是指代码在推送到代码仓库后,两周内被撤销、移除或更新的比例。此前,当开发者完全自主编写代码时,代码搅动较为罕见,通常在 + 3-4% 之间。然而,随着 AI 助手如 Copilot 和 ChatGPT 的广泛应用,代码搅动率显著上升,2023 年达到了 9%。这种上升趋势表明 AI 生成代码的增加与错误代码的生成密切相关。 + 报告预测,如果这种趋势持续下去,2024年代码更改的撤销比例可能会超过7%,这将是2021年的两倍。 +- **代码移动的减少与重构和复用的减少**。代码移动通常伴随着代码系统的重构,反映了开发者对已有代码的重新组织和复用。重构和复用能够提高代码的稳定性和可理解性。 + 然而,2023年,随着AI助手的广泛应用,代码移动减少,这表明开发者更倾向于复制粘贴代码而非重构。这种变化可能是因为 AI 助手提供了更简单的方式来生成代码, + 而非鼓励开发者复用已有代码。这一趋势可能导致开发团队在未来面临更多维护挑战。 +- **复制粘贴代码的增加与维护困难**。复制粘贴代码的增多可能对代码的长期可维护性产生重大影响。当开发者选择复制粘贴而非复用现有代码时, + 意味着他们没有充分评估现有实现的有效性。随着时间的推移,这种重复代码会增加系统复杂性,增加维护成本。特别是在缺乏经验的团队中, + 可能没有足够的资源和权威来删除重复的代码,从而导致技术债务的积累。如果管理层不主动安排时间解决这些问题,代码库中的复制粘贴代码将会继续存在, + 进一步阻碍未来的开发速度。 + ## 1. 结合经典工具/SAAS 服务,改善 AI 代码质量 经典工具:sonarqube @@ -46,19 +79,16 @@ Amazon CodeGuru Reviewer 是一项使用程序分析和机器学习来检测开 [How Amazon CodeGuru Reviewer works](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/how-codeguru-reviewer-works.html) - ### CodeGeeX:结合 SAAS 服务,静默守护代码质量 ![](images/codegeex-fix-problem.png) - ## 2. 质量左移:在结合日常开发活动 诸如 CodeReview 、测试生成 ## 3. 持续数据运营,构建专有保障模型 - ## 示例 ### 案例:TestSpark