InfoQ技术大会双节活动折上折,限时特惠,满10000-1000>> 了解详情
写点什么

GitHub Copilot 四成代码有漏洞,AI 生成代码你还敢用?

2021 年 9 月 02 日

GitHub Copilot四成代码有漏洞,AI生成代码你还敢用?

日前,研究人员发现,GitHub Copilot 工具提供的代码建议中有接近 40% 存在 bug。为了对 Copilot 的实际价值做出量化,研究人员创建了 89 个测试场景以考查其代码建议质量,编写出了 1600 多个程序。经过全面审查,研究人员发现其中近四成存在安全漏洞。

 

研究人员指出,造成这种问题的主要原因有两个:

 

1、GitHub Copilot 参考的开源代码良莠不齐。GitHub 的代码量虽然庞大,但大部分都是未经审查的,源代码就有问题,GitHub Copilot 生成的代码也会出现问题;

 

2、GitHub Copilot 分不清新代码和旧代码。我们常常提起“最佳实践”,但曾经的“最佳实践”,极有可能在几年后变成反面典型。GitHub Copilot 目前还分不清这种区别,照单全收,自然有问题。

AI 编程神器 GitHub Copilot

 

作为一款 AI 结对编程工具,GitHub Copilot 的主要定位是提供代码补全与建议功能。它是 Visual Studio Code 的一个插件,可根据当前文件的内容和当前光标位置为你自动生成代码。

 

首先我们要理解什么是 AI 结对编程

 

结对编程用来代指两个程序员在一个计算机上共同工作。通常来说,会有一个人输入代码,而另一个人审查他输入的每一行代码。输入代码的人称作驾驶员,而审查代码的人称作观察员。

 

那么 AI 结对编程,可以简单理解为人机结对编程的升级版。具体来说 GitHub Copilot 由 OpenAI Codex 提供支持,可从代码中提取上下文,并立即对单行代码甚至整个函数给出建议。而 OpenAI Codex 接受过公开源代码和自然语言的培训,能理解编程语言和人类语言。在工作时,GitHub Copilot 编辑器的扩展插件将程序员的注释和代码发送到 GitHub Copilot 服务,然后该服务使用 OpenAI Codex 来生成对代码的建议。

跌落神坛只用了不到一周

 

在 GitHub Copilot 推出后,有关于它的负面消息这并不是第一次。

 

就在其发布不到一周的时间里,GitHub Copilot 就被推上了侵权的风口浪尖,引发了前所未有的争议。

 

原因是有位程序员尝试了一下平方根倒数速算法(Fast Inverse Square Root),结果只是打出来这四个关键词,GitHub Copilot 就逐行“完美复刻”了当年那段神奇的算法,甚至连当时的原版注释都被保留下来。

 

这种现象引起了大量开发者的不满,他们认为,GitHub Copilot 宣称的基于公开代码训练其实是在未遵循开源许可证的情况下,肆意“抄袭”开源代码,事情愈演愈烈,甚至个别比较激进的人为了抗议 GitHub 未经授权和许可便使用受版权保护的源代码作为 GitHub Copilot 的训练数据,宣布弃用 GitHub。

在争议中前行的 AI 编程

 

尽管 AI 编程有诸多争议,但它的脚步仍未停止。当人们开始关注 GitHub Copilot 背后的技术支撑 OpenAI Codex 后,今年八月,OpenAI宣布开发一种将自然语言转换为编程代码的人工智能系统——Codex。

 

Codex 更像是 OpenAI 的下一步产品。它建立在 Copilot 之上,前文说到 Copilot 是一种与 Microsoft 的 GitHub 代码存储库一起使用的工具,使用它可有助于完成代码行。但 Codex 通过接受用英语编写的句子并将它们翻译成可运行的代码,换句话说,它是可以将自然语言转换为代码的 AI 系统,这意味着 AI 编程的概念又往前进了一步。

 

对此,OpenAI 称 Codex 可让计算机能够更好地理解人们的意图,从而让每个人都可利用计算机来实现更多目的。

 

那么,AI 写代码究竟可行不可行呢

 

虽然对于开发者们来说,重复性的任务占据了软件开发的大部分时间,并且很容易出错,研究人工智来改进软件开发的确令人兴奋,但是我们也不难从 GitHub Copilot 身上看到,就目前来看,这个工具仍旧不建议大家使用。

 

第一,GitHub Copilot 既然可以逐行“完美复刻”平方根倒数速算法,那么我们又能如何判别它给我们的代码一定是没有受版权保护的呢?这种可能性,同样容易让我们背上“侵权”的法律风险。

 

第二,就连 GitHub 自己都表示 GitHub Copilot 建议的代码并不完美,有时候它提供的代码甚至毫无意义。因此,对于 GitHub Copilot 建议的代码来说,我们仍要小心其编码错误,还需要付出精力去审查,才能得到正确有效的代码。

 

因此总的来说,原则上,让 AI 学会写程序的确能为软件工程带来一次巨大的变革,但是就目前来看,现有的技术水平远远达不到预期。当前的 GitHub Copilot 已经是人工智能领域的一项重大的突破,但同时也存在诸多障碍,这一点还需要引起我们的注意。

 

参考链接:https://www.solidot.org/story?sid=68736

 

https://www.techradar.com/news/github-autopilot-highly-likely-to-introduce-bugs-and-vulnerabilities-report-claims

2021 年 9 月 02 日 11:322014

评论

发布
暂无评论
发现更多内容

区块链版权应用搭建,区块链版权存证平台开发

13530558032

线程模型Reactor/Proactor的区别

Linux服务器开发

reactor 线程 多线程 Linux服务器开发 Proactor

重点人员管控系统开发,可视化数据分析搭建

t13823115967

重点人员管控系统开发 智慧公安 可视化数据分析搭建

1分钟解密:博睿大数据核心引擎Bonree Zeus六大优势

博睿数据

区块链商品追溯平台开发,区块链防伪追溯系统搭建

13530558032

JVM调优不知道怎么回答,阿里总结四大模块,学不会就背过来

996小迁

Java 架构 面试 调优

“黑五”前夜的裁员:无接触配送大趋势为什么都带不动亚马逊无人机?

脑极体

构师训练营 - 第六周课后练习

joshuamai

《穿越数据的迷宫》笔记:第 3 章 DAMA的数据管理原则

方志

数据治理

AOT慈善币系统软件开发|AOT慈善币APP开发

开發I852946OIIO

系统开发 现成系统

区块链电子发票应用落地,区块链电子发票系统开发

13530558032

年轻人会用C++实现一种协程吗?

ShenDu_Linux

Linux 程序员 多线程 协程 什么是多线程

架构设计之路-1

Dnnn

架构师 代码规范

构师训练营 - 第六周学习总结

joshuamai

一万字详解 Redis Cluster Gossip 协议

程序员历小冰

redis 分布式 redis cluster

我理解的信息化、数字化、数智化

boshi

数字化 数据智能 信息化

Spock单元测试框架实战指南一Spock是什么?它和JUnit有什么区别?

Java老k

Java 单元测试 JUnit Mock spock

架构师训练营第 11 周课后练习

叶纪想

极客大学架构师训练营

江西吉安:一个上了区块链柚子的真情告白

CECBC区块链专委会

区块链 蜜柚

当千行万业的轨道,换上智能云网的高铁

脑极体

什么是KMP算法(详解)

赖猫

c++ Linux KMP

Spring 源码学习 05:BeanDefinition 概念及其实现

程序员小航

spring 源码 源码阅读 BeanDefinition

谁能阻止世纪互联星光?2020年第11期北京机房网络质量评测数据排行榜发布

博睿数据

跨架构编程不再难,英特尔机器编程工具迎来重磅更新

新闻科技资讯

《穿越数据的迷宫》笔记:第 2章 数据管理的挑战

方志

数据治理

Spring AOP核心类解析,这是最全的一篇了!!

冰河

spring aop ioc 注解驱动 切面编程

极客大学 - 架构师训练营 第十一周总结

9527

甲方日常 62

句子

工作 随笔杂谈 日常

智慧公安扫码一键定位报警系统搭建

t13823115967

智慧公安 智慧公安扫码 一键定位报警系统搭建

自己搭建服务器需要多少钱?

德胜网络-阳

LeetCode题解:51. N 皇后,回溯+哈希表,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

GitHub Copilot四成代码有漏洞,AI生成代码你还敢用?-InfoQ