代码质量与安全 | AI会取代程序员吗?

令软件开发人员夜不能寐的事情比比皆是。如今,他们最关心的问题不再是如何用自己喜欢的语言(C、C++、Erlang、Java 等)表达最新的算法,而是人工智能(AI)。

本文中,我们将介绍AI编写代码的过程,并回答这个问题:AI会取代程序员吗?

什么是AI代码生成?

近年来,生成式AI的应用呈爆炸式增长,这主要因为现在有足够的计算能力来运行深度学习算法,而且训练机器学习模型所需的海量数据也在增加。

AI代码生成是指使用生成式AI和机器学习编写计算机代码的过程。

生成式AI编码工具正在改变软件开发过程,但这种进步也带来了不确定性。通过AI编写代码,对软件开发人员到底意味着什么?

AI编写代码的未来

生成式AI的潜力已初露端倪。AI正在改变各行各业,并有望加速创新。OpenAI最近进行的一项研究估计,生成式AI工具可能会影响47%的任务,从而大大加快软件开发的过程。

在埃文斯数据公司(Evans Data Corp)进行的一项调查中,550名软件开发人员被问及他们职业生涯中最担心的问题。其中,29%的人担心:“我和我的开发工作被AI所取代”。

美国能源部橡树岭国家实验室(U.S. Department of Energy’s Oak Ridge National Laboratory)的一个研究小组对此表示赞同。到2040年,机器学习和自然语言处理技术将非常先进,能够编写更好的软件代码,而且它们会比最好的人类开发人员写得更快。

牛津大学的“未来就业”(The Future of Employment)研究警告说,随着机器学习的发展,软件工程师可能会变得计算机化,软件设计选择将通过算法进行优化。

软件开发,特别是在安全关键型行业,需要确保高质量的代码,以满足功能要求。

因此,如果AI正在开发代码,该代码应该是没有错误和问题的。这也包括软件测试中的AI,因为它能够“以人类难以企及的可靠性”检测编码错误。

如果您正在用AI编写代码,请务必使用静态代码分析器验证代码是否安全、可靠。

AI编写代码可能吗?

AI可以编写代码。

早在2015年,Andrej Karpathy 就运行了一个使用递归神经网络(Recurrent Neural Networks,RNN)生成代码的项目。他获取了GitHub的Linux存储库(所有源文件和头文件),将其组合成一个巨大的文档(超过400 MB的C代码),并用这些代码训练RNN。

以下是它产生的结果:

				
					/*
 * If this error is set, we will need anything right after that BSD.
 */
static void action_new_function(struct s_stat_info *wb)
{
  unsigned long flags;
  int lel_idx_bit = e->edd, *sys & ~((unsigned long) *FIRST_COMPAT);
  buf[0] = 0xFFFFFFFF & (bit << 4);
  min(inc, slist->bytes);
  printk(KERN_WARNING "Memory allocated %02x/%02x, "
    "original MLL instead\n"),
    min(min(multi_run - s->len, max) * num_data_in),
    frame_pos, sz + first_seg);
  div_u64_w(val, inb_p);
  spin_unlock(&disk->queue_lock);
  mutex_unlock(&s->sock->mutex);
  mutex_unlock(&func->mutex);
  return disassemble(info->pending_bh);
}

static void num_serial_settings(struct tty_struct *tty)
{
  if (tty == tty)
    disable_single_st_p(dev);
  pci_disable_spool(port);
  return 0;
}

static void do_command(struct seq_file *m, void *v)
{
  int column = 32 << (cmd[2] & 0x80);
  if (state)
    cmd = (int)(int_state ^ (in_8(&ch->ch_flags) & Cmd) ? 2 : 1);
  else
    seq = 1;
  for (i = 0; i < 16; i++) {
    if (k & (1 << 1))
      pipe = (in_use & UMXTHREAD_UNCCA) +
        ((count & 0x00000000fffffff8) & 0x000000f) << 8;
    if (count == 0)
      sub(pid, ppc_md.kexec_handle, 0x20000000);
    pipe_set_bytes(i, 0);
  }
  /* Free our user pages pointer to place camera if all dash */
  subsystem_info = &of_changes[PAGE_SIZE];
  rek_controls(offset, idx, &soffset);
  /* Now we want to deliberately put it to device */
  control_check_polarity(&context, val, 0);
  for (i = 0; i < COUNTER; i++)
    seq_puts(s, "policy ");
}
				
			

AI在一夜之间就生成了代码,包括函数和函数声明。它有参数、变量、循环和正确的缩进。括号也是完成的。甚至还有注释。

但是,AI生成的代码存在语法错误。它没有跟踪变量名称。有时,变量被声明但从未使用过。还有一些时候,变量被使用了,但未定义。代码示例中的第二个函数比较了tty == tty。

生成式AI会取代程序员吗?

AI不会取代程序员。但AI已经在帮助开发人员编写代码。像ChatGPT、GithubCoPilot和OpenAI Codex这样的AI驱动的编码助手都是可以使用的工具,可以帮助嵌入式开发人员更快地编写出更好的代码。AI代码生成器现在可以快速生成高质量的代码片段,识别问题和缺陷,并对代码片段提出改进建议。当然,AI需要时间才能创建跨越几行实际的、具有生产价值的代码,而这些代码的跨度不会超过几行。

AI在不久的将来如何影响软件开发?以下是一些可能的趋势。

▎AI将不断进步

它将有效地实现任务自动化,帮助开发人员了解他们的选择。另外,它将让人类决定如何在AI无法理解的情况下进行优化。

AI将成为编码伙伴

软件开发人员将使用AI作为编码伙伴来编写更好的软件。这种情况如今已经出现,而且随着AI学会一次编写多行代码,这种情况将继续普及。开发人员将在集成开发环境中加入AI配对程序员工具。与人类配对编程类似,AI工具将根据提示执行编码任务,然后开发人员将审查代码。过去,这一过程需要耗费更多的人力,但AI工具可以比人类开发人员更快地完成SDLC的某些部分,从而让开发人员能够专注于更复杂的任务。

但程序员依然重要

程序员的真正价值不在于知道如何构建,而在于知道要构建什么。

AI还需要更长的时间才能学会如何解释每个功能的商业价值,并向您建议首先开发哪些功能。人类程序员的作用始终存在。

如果AI编写出可靠的代码会怎样?

这是一个很大的假设。大多数人都写不出可靠的代码。而AI只是一种分析大量人类编写的代码的应用程序。因此,AI不太可能写出可靠的代码。

大多数程序员都同意这一点。在CodeSignal最近的一项调查中,全球1,000名开发人员被问及他们对AI编码助手工具的使用情况。虽然81%的开发人员表示他们使用了AI驱动的编码助手,但55%的受访软件工程师表示,他们对AI生成代码的质量感到担忧。

因此,AI并不是提高代码质量的答案。

如何提高代码质量?

您现在就可以提高代码质量,但不是通过AI取代程序员,而是利用静态代码分析工具。

静态代码分析工具可以确保程序员编写的代码符合编码规则,并能够扫描代码,找出潜在的错误和安全漏洞。它还能发现在代码审查和软件测试中经常被忽略的错误,从而提高代码和软件的整体质量。

提高代码质量最简单的方法之一,就是使用静态代码分析工具。

Perforce静态代码分析工具Helix QACKlocwork,因提供其他工具所无法提供的准确诊断而备受推崇。使用Helix QAC和Klocwork,您将收到按风险严重程度确定优先级的编码问题诊断,以及有关如何修复代码的建议,帮助您确保代码合规,提高代码效率和质量。

– END –

作者简介:

Stuart Foster

Klocwork 和 Helix QAC 产品经理,Perforce

Stuart Foster在移动和软件开发方面拥有超过 17 年的经验。他负责管理消费者应用和企业软件的产品开发。目前,他负责管理 Perforce 市场领先的代码质量管理解决方案 Klocwork 和 Helix QAC。他相信开发适合客户业务需求的产品、特性和功能,并帮助开发人员生成安全、可靠和无缺陷的代码。Stuart 拥有卡尔顿大学的信息技术、交互式多媒体和设计学士学位,以及阿冈昆应用艺术与技术学院的多媒体设计高级文凭。

立即体验领先的代码质量管理解决方案Helix QACKlocwork,请联系Perforce中国授权合作伙伴——龙智:

官网:www.shdsd.com

电话:400-666-7732

邮箱:marketing@shdsd.com