
江湖一直流传着关于人工智能的传闻:程序员似乎快要被机器取代,AI已经能够写出近乎完美的代码。AI作为软件形态存在,若真的让自己编写的代码替代人类程序员,去孕育新一代代码,那个情景既神奇又略带悲凉mile米乐。本文聚焦软件开发领域的现状,看看与传奇之间到底还差多少距离。

人工智能在创造性领域的突破,曾经被认为是机器缺乏创造力的证据。如今,深度学习带来了一些鲜有争议但确实值得关注的成果。AI已经能够在创作上展现出一定的“艺术性”,包括绘画、音乐与写作等方面的应用案例。
在绘画方面,出现了由神经网络驱动的创作作品;在音乐方面,出现了智能作曲工具的应用;在写作方面,已经出现了自动生成文本的产品和系统。这些案例通常建立在深度学习的基础之上,并逐渐进入商业化阶段。

与“创作”相关的探索,正在让人们重新思考AI距离编写代码到底有多远。实际落地的挑战,主要体现在以下方面。
首先,标注难题。深度学习需要大量标注数据来完成监督学习,而代码的“对”与“错”往往难以用简单的标签来标注,也难以用单纯的数值来衡量。可用于训练的已标注代码资源也相对有限。
其次,容错要求极高。软件对错误的容忍度极低,哪怕是极小的瑕疵也可能导致编译失败、运行错误或安全漏洞。与自然语言相比,代码对噪声极为敏感。
再次,场景与上下文复杂。软件开发涉及需求分析、非功能性要求、系统上下文等众多因素,如何将这些知识融入代码,是AI需要面对的高度复杂的挑战。
尽管如此,AI在软件开发领域已经出现突破性尝试,并在若干具体场景中发挥作用。
代码辅助是AI在软件开发中最先落地也最具可操作性的方向之一。它包括代码自动补全、智能搜索与推荐、代码转换等。让码农省时省力的工具正在逐步形成一条完整的生态线。
常见的几家代表性公司与产品如下:
- TabNine:由加拿大一名本科生开发的智能代码补全工具,支持多种语言和编辑器,已在主流编辑器市场获得广泛认可,后来被大型公司收购。
- Kite:硅谷创业公司,提供智能代码补全,覆盖Python与JavaScript等语言,已与多大IDE集成。
- Codota:以色列公司,专注于基于网上学习到的编程模式,提供代码补全与搜索等功能,强调与开发环境的无缝对接。
- Aroma:Facebook 的代码到代码型推荐工具,使用机器学习进行代码推荐,目标是降低从海量代码库中获取洞察的难度。其工作流程通常包含特征提取、重排与聚类、以及跨代码段的推荐。
- CodeBERT:微软与哈尔滨工业大学联合提出,将BERT框架扩展到编程语言与自然语言的双模态场景,支持包括Python、Java、JavaScript、PHP、Ruby、Go等在内的多种语言,既可用于自然语言与代码的搜索,也可用于生成任务。
- TransCoder:Facebook 开展的跨语言代码转换器,能够在不同高级语言间进行无监督的代码转换,提升了跨语言迁移的能力,显著改善跨语言翻译的质量。
- DeepCoder:微软与剑桥大学联合开发的程序综合/代码合成系统,通过学习现有代码片段来组合实现目标任务的程序,强调从代码库中“拼接”出可运行的解决方案。
- SketchCode:由社区实现的草图转代码工具,尝试将草图直接转化为可运行的前端代码,尽管仍在早期阶段但展示了设计向实现的直接转化能力。
- GPT-3 及相关应用:大型语言模型在生成代码方面的潜力备受关注,实际应用包括通过自然语言描述需求自动生成代码的在线工具等。
在代码生成与翻译方面,业界还涌现出一批有代表性的研究与产品方向:
- TransCoder 等跨语言模型训练,通过跨语言的共同表达进行初始化,从而实现跨语言的代码转换。
- DeepCoder 等程序合成方向,强调通过学习代码片段的输入输出关系,自动拼接出符合要求的程序。
- 针对特定领域的自动编程(Domain-Specific Automated Programming,DAP)和面向任务的自动编程(Task-Specific Automated Programming,TAP),旨在让机器完成简单、重复的编程任务,解放开发者处理繁琐工作的时间。
- SketchCode、GPT-3 等也在推动从自然语言到代码的映射,带来更直观的需求表达和落地实现的可能性。
在代码审查与测试领域,AI的介入更具行业意义,能够显著提高效率、降低成本。以下是一些典型的实践与产品案例:
- AWS CodeGuru Reviewer:面向代码审查的服务,覆盖多维度的代码质量问题,如最佳实践、并发与死锁、资源泄露、敏感信息暴露、代码克隆、输入验证等。
- DeepCode:瑞士一家初创公司,基于机器学习分析代码库中的安全缺陷与潜在错误,能够理解代码的真实意图、识别潜在漏洞并给出修复建议。
- 其他AI驱动的测试与评审工具:Apptest.ai、Appvance IQ、Eggplant AI、Sauce Labs、Sealights、Testim等,覆盖移动端自动化测试、测试脚本生成、测试用例相关性分析、界面与性能测试等不同维度。
- mabl:首批将机器学习引入商用的软件测试工具,强调无脚本测试、无基础设施、自动维护测试、自动分析结果,以及与主流开发工具的集成,开启了智能测试的尝试。
- Test.AI、DiffBlue 等产品也从不同角度推动了测试自动化、自动化测试脚本生成、漏洞定位与修复建议的落地。
关于未来的展望与思考,AI在代码开发与软件测试领域的作用更多呈现为人机协作的扩展,而非简单取代。AI可以承担重复性、模式化的任务,帮助人类工程师更专注于复杂的系统设计、需求分析与创新性问题解决。人类的创造力、领域知识与对业务目标的洞察力,仍然是驱动软件创新的核心。未来的高效工作方式,可能是人机结对编程、以AI为伙伴进行协作开发,而不是单方面的替代。
此外,代码生成、翻译、审查和测试等环节的AI化,正在推动软件质量、开发速度和测试覆盖面的提升,促使企业从传统DevOps向更深层次的智能化工程实践演进。尽管前路仍有挑战,但趋势已经清晰:AI将以辅助、协作、自动化和洞察的方式,成为现代软件开发的重要一环,而不是一个要挟的替代威胁。