Skip to content

Commit

Permalink
feat(quality): 添加GitClear代码质量研究报告
Browse files Browse the repository at this point in the history
引入GitClear的研究报告,揭示AI辅助编码对代码质量的潜在影响。报告指出AI助手可能导致代码返工率上升、代码移动减少和复制粘贴代码增加,这些趋势可能对代码的长期可维护性构成挑战。同时,提供了改善AI代码质量的策略,包括使用经典工具如SonarQube和SaaS服务CodeGeeX,以及实施质量左移和持续数据运营。
  • Loading branch information
phodal committed Aug 3, 2024
1 parent a0cf30c commit d420676
Showing 1 changed file with 33 additions and 3 deletions.
36 changes: 33 additions & 3 deletions src/aise-quality.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit d420676

Please sign in to comment.