​软件开发 | 最新研究:量化GitHub Copilot对代码质量的影响

近期,GitHub发布了关于GitHub Copilot Chat的最新研究报告。通过利用自然语言的力量,该研究中的开发人员使用GitHub Copilot Chat实时获取指导、提示、故障排除、补救措施以及针对其特定编码挑战的解决方案,而所有这些都是在不离开集成开发环境(IDE)的情况下完成的。
研究发现,启用GitHub Copilot Chat后,编写和审查的代码质量全面提高,即使没有一个开发人员以前使用过该功能。
  • 85%的开发人员在使用GitHub Copilot和GitHub Copilot Chat编写代码时对自己的代码质量更有信心;
  • 使用GitHub Copilot Chat进行代码审查更具操作性,完成速度提高了15%;
  • 88%的开发人员表示,使用GitHub Copilot Chat时能够保持流畅状态,因为他们感觉更专注、更少挫败感,并且也更喜欢编码。
去年,GitHub研究发现,使用GitHub Copilot的开发人员的编码速度提高了55%。但快速开展工作只是其中的一部分——在许多情况下,快速完成工作和正确完成工作之间存在一种权衡。随着人工智能继续为越来越多的开发人员编写代码,确保好的代码质量变得更加重要。

高质量的代码是什么样子的?

为了衡量代码质量,GitHub制定了一个评分表,其中包括GitHub内部使用的五个度量标准,但也符合学术1和行业2标准。参与者可参考这些标准来区分强大的代码与减缓工作速度的代码。
可读性
代码是否遵循语言的习惯用法和命名模式?难以阅读的代码使维护、改进和记录更具挑战性。
可复用性
代码是否以可复用的方式编写?代码复用是开发人员协作的基石。它节省了时间和精力,打破了信息孤岛,并创造了整体的一致性。
简洁性
代码是否符合不重复(DRY, don’t repeat yourself)原则?代码的重复性越少,就越容易阅读、理解和构建。复杂的代码可能会导致难以修复的错误和问题。
可维护性
代码的编写方式是否使功能清晰、透明并且与当前问题相关?维护良好的代码意味着开发人员可以最大限度地减少依赖关系。可维护的代码也会影响开发人员搜索和实践代码复用的能力。
弹性
代码是否能够预测和处理错误?如果出现错误,具有弹性的代码将保持其功能性(或至少最小化中断)。简而言之,这对于确保代码能够正常工作大有帮助。

使用 GitHub Copilot 编写更高质量的代码

这项研究调查了GitHub Copilot及其聊天机器人功能是否会提高代码的质量、减少代码审查所需的时间,并生成通过单元测试的代码。从各个方面来看,开发人员在使用GitHub Copilot时都感觉到他们的编码得到了改善。
85%的开发人员在使用GitHub Copilot和Copilot Chat编写代码时对自己的代码质量更有信心。

GitHub Copilot Chat是一个聊天界面,让您可以与GitHub Copilot进行交互,从支持的集成开发环境(IDE)中直接提出与编码相关的问题并获取答案。聊天界面提供了访问编码信息和支持的途径,您无需浏览文档或搜索在线论坛。目前,Copilot Chat支持Visual Studio Code和Visual Studio。

总之,开发人员告诉我们,与不使用GitHub Copilot编码相比,他们感到使用GitHub Copilot和GitHub Copilot Chat编码更容易、更少错误、更易读、更可复用、更简洁、更易维护且更具弹性。

“代码非常干净,我只需查看代码就能理解其中的内容,并且相当容易地将其移植到我的代码库中。因此,我觉得代码质量非常干净且易于理解。在使用Copilot进行拉取请求审查时,我看到它非常擅长生成适当的错误处理代码。” 
——财富500强公司的高级软件工程师(研究参与者)
与没有GitHub Copilot Chat的情况相比,代码审查更具可操作性,完成速度提高了15%(这还包括首次使用的用户!)。
以上是谈论质量和速度的部分——因为是的,两者兼得是可能的。
开发人员指出,使用GitHub Copilot Chat进行代码审查提高了他们的代码质量(与没有使用它进行代码审查相比)。使用 GitHub Copilot Chat进行代码审查的速度比不使用时提高了15%。评论被接受的比例也更高。事实上,几乎有70%的参与者接受了使用GitHub Copilot Chat的审查者评论。
这些结果显示了GitHub Copilot Chat对协作的影响,以及在大型企业和大型工程团队中扩展其潜在影响的可能性。减少在拉取请求和代码审查上花费的时间意味着开发人员可以专注于优先级更高的更改。而且,从一开始就提供更高质量的代码,确保了代码以后不需要回滚,也不需要进行额外的测试。
“我收到的更具可操作性的评论是与我代码的概念理解有关——我希望其他开发人员能够理解我在做什么,所以这是一条很好的反馈。”
——软件工程师(研究参与者)
88%的开发人员表示使用GitHub Copilot Chat能够保持心流状态(一种心理状态,指个体在进行某项活动时全神贯注、投入其中,感受到时间流逝快、自我意识消失的状态),因为他们感到更加专注,更少挫败感,而且也更享受编码。
去年的研究发现,60-75%使用GitHub Copilot的开发者表示在工作中感到更有成就感,编码时更少挫败感,并且能够更好地专注于更令人满意的工作。在今年的研究中,88%的参与者同样感到更少挫败感,更加专注。导致这个结果的原因之一是,停留在IDE中意味着花费在搜索上的时间更少,而有更多的时间保持在那个令人向往的专注状态中。
“因为我有十多年的行业经验,我通常更喜欢用记事本或简单的平台进行编码,而Copilot Chat是一个非常有用的工具,我不需要去Google或Stack Overflow就可以检查基本内容。而且Copilot还有一个非常不错的语法编辑功能。”
——高级系统验证工程师(研究参与者)

GitHub如何开展这项研究

在这项研究中,目标是在受控环境中模拟编写代码、进行代码审查,并纳入代码审查建议的过程。因此,每个参与者都被要求编写代码、审查代码,然后检查代码审查的建议并合并更改。
GitHub招募了36名参与者,他们都具有5到10年的软件开发经验。在这项研究中,参与者使用GitHub Copilot Chat和不使用GitHub Copilot Chat来编写和审查代码。(参与者对使用GitHub Copilot有一些经验,但对使用GitHub Copilot Chat没有经验。)
参与者被要求为一个HTTP服务编写API端点,该服务负责创建、读取和删除对象。他们被随机分配到使用GitHub Copilot Chat来创建、读取和删除API端点的组。在使用GitHub Copilot Chat之前,开发人员观看了关于其功能的简短视频。参与者为他们在创建API端点上的工作创建了一个拉取请求,并为读取和删除部分创建了另一个拉取请求。
在编写API端点的代码后,参与者比较了使用GitHub Copilot Chat对他们编写的代码质量的影响。具体来说,他们被问及这项任务是否更容易完成、代码是否更少出现错误,以及代码是否更易读、可复用、简洁、可维护和有弹性。
会议结束后,开发人员被分配到该研究的另一位参与者编写的两个拉取请求。参与者不知晓这些拉取请求是否在编写中使用了Copilot,但被要求对其进行审查,并提供关于如何改进代码的建议。然后,他们评估了使用和不使用GitHub Copilot Chat进行审查的过程。然后,他们使用上述标准对代码的质量进行评分,衡量代码是否易读、可复用且结构良好。
在另一个参与者审查完他们的代码后,最初编写代码的参与者查看了拉取请求上的评论,以确定哪些评论对改进代码的质量有帮助,以及评论的可操作性如何。同样,这些参与者不知晓哪些拉取使用了Copilot Chat,哪些没有。

GitHub Copilot Chat的承诺:代码质量更高,编码速度更快

做事快和做事好之间是有区别的。但事实证明,使用GitHub Copilot Chat您就可以两者兼得。
GitHub开发了GitHub Copilot和GitHub Copilot Chat的初衷是通过帮助开发人员集中注意力、保持工作状态,并让他们在工作中找到更多乐趣,从而改善开发人员的生活。研究结果表明,这些AI工具确实做到了这些,GitHub也期待着构建下一个更强大的工具。

鸣谢

由衷感谢所有参与这项研究的开发人员,GitHub一直乐于听取您的建议!GitHub客户研究团队在GitHub Next的协助和咨询下进行了此项研究。

即试用GitHub Copilot,请联系GitHub中国官方授权合作伙伴——创实 ,我们提供GitHub产品的咨询、销售、实施、培训及技术支持服务。