写点什么

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

  • 2021-09-02
  • 本文字数:1810 字

    阅读完需:约 6 分钟

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-09-02 11:324445

评论

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

GIT 小白的指令合集

甜甜的白桃

git 版本管理 6月月更

java培训 @Autowired 的实现原理

@零度

JAVA开发

【100个 Unity踩坑小知识点】| 在编辑器中绘制正方体虚线、球体虚线(Gizmos 辅助线框)

呆呆敲代码的小Y

软件设计本质

GalaxyCreater

架构 设计模式 架构师 系统 软件设计

C#入门系列(七) -- 循环语句

陈言必行

C# 6月月更

springboot,vue,es,activiti数字知识库管理系统

金陵老街

Vue springboot ES Activiti 知识库

【Python技能树共建】字符串方法

梦想橡皮擦

6月月更

Linux驱动开发_视频广告机开发、Linux进程编程介绍

DS小龙哥

6月月更

SAP 云平台 ABAP 编程环境的前世今生

汪子熙

Cloud 云平台 SAP abap 6月月更

微软成为规模化敏捷组织的16个关键因素

ShineScrum

敏捷 谷歌 规模化敏捷

【100个 Unity踩坑小知识点】| Unity 使用Quaternion.AngleAxis随机一个方向

呆呆敲代码的小Y

如何使用物联网低代码平台进行模型管理?

AIRIOT

物联网 低代码开发

浅谈JavaScript原型和原型链

大熊G

JavaScript 前端 6月月更

探究Presto SQL引擎(3)-代码生成

vivo互联网技术

sql presto antlr4

【100个 Unity踩坑小知识点】| Unity控制物体持续指向某个方向

呆呆敲代码的小Y

【愚公系列】2022年06月 面向对象设计原则(一)-单一职责原则

愚公搬代码

6月月更

7 个 Flutter 开源项目,让你成为更好的 Flutter 开发者

坚果

6月月更

fomo3d区块链分红游戏系统开发(案例演示)

开发微hkkf5566

【100个 Unity踩坑小知识点】| Unity中的 Development build 详细解析

呆呆敲代码的小Y

性能优化手记下篇之【计费】

鲸品堂

性能优化 运维

AssertJ 的异常(Exception )断言

HoneyMoose

Junit 测试中如何对异常进行断言

HoneyMoose

spring4.1.8初始化源码学习三部曲之一:AbstractApplicationContext构造方法

程序员欣宸

Java spring 6月月更

Web Service进阶(五)SOAPBinding方式讲解

No Silver Bullet

6月月更 SOAPBinding

建木持续集成平台v2.4.1发布

Jianmu

DevOps CI/CD 开源项目 gitops 自动化运维

重点亦难点?三个案例看数据分类分级如何有效有序进行

美创科技

数据分类 数据安全

【100个 Unity踩坑小知识点】| Unity调用API ,动态获取Android权限,附带所有Android权限表格

呆呆敲代码的小Y

【网络编程知识】什么是Socket?概念及原理分析

呆呆敲代码的小Y

Fabric.js 精简输出的JSON🎫

德育处主任

FabricJS 6月月更

PHP开发者福音,支持CRUD代码生成且前后分离的tp6+Vue3后台管理系统开源啦!

妙码生花

php typescript Vue3 thinkphp Pinia

WordPress 常规设置

海拥(haiyong.site)

WordPress 6月月更

GitHub Copilot四成代码有漏洞,AI生成代码你还敢用?_AI&大模型_闫园园_InfoQ精选文章