人工智能在软件开发领域应用现状

人工智能在软件开发领域应用现状

转载本文需注明出处:微信公众号EAWorld,违者必究。

江湖上一直流传着这样的传闻:“程序员们很快就要失业了,因为人工智能马上就能写出完美的代码了”。人工智能是以软件形式存在的,编写了这些强大软件的码农们,如果被自己编写的代码所取代,来写出新一代的代码,那会是一个神奇而又悲伤的故事。我们今天就来看看人工智能在软件开发领域里的现状,我们距离传奇还有多远/p>

有人说软件开发是一种艺术,有人说软件开发需要工匠精神,不管是哪一种说法,软件开发都是一个创造性的工作,而机器曾被认为是缺乏创造力的,但是随着深度学习的发展,人工智能在一些创造性的领域也得到了飞跃的发展。

现在的人工智能可以画画:

人工智能在软件开发领域应用现状

musical.ai

可以写作:

?  2017年5月,机器人微软小冰出版了诗集《阳光失了玻璃窗》。
?  2017年,韩国某通讯社也测试使用人工智能进行足球比赛报道,几秒钟就可以稿件上线。
?  2018年,阿里妈妈推出的AI智能文案。

下图是我用最近世界足坛最出色的球星梅西(蹭一下煤老板转会风波的热度)的名字为种子让AI创作的诗:

人工智能在软件开发领域应用现状

代码辅助指的是辅助写代码的一些功能和过程。例如代码自动补全,代码搜索推荐,代码转换等。人工智能在这个领域大有可为,想想我写代码的时候,一大半的时间在查文档,还有一大半的时间在搜google和stackoverflow,人工智能可以很好充当码农的好助手。在这个领域里,已经有了不少的创业公司和相应的产品。

TabNine

TabNine是加拿大一位大四学霸开发的智能代码补全工具,作者Jacob Jackson目前在滑铁卢大学主修计算机科学与组合优化专业。该工具支持23种语言,支持VS Code、Sublime Text、Atom、Emacs、Vim五种代码编辑器。在VS Code的扩展商店里,TabNine已经被下载超过万次,获得全5星好评。2019年12月,被Codota收购。

人工智能在软件开发领域应用现状

 
Kite目前支持以下的IDE:

人工智能在软件开发领域应用现状

记得我在德国某BI企业的时候,当时产品开发做了一件事,就是把一个之前用C++写的产品用Java重写了一遍,大公司就是这么任性,虽然功能完全没有变化,但是我就是喜欢Java,因为Java代表着更先进的生产力。后来Java被竞争对手O记给收了,估计做此决策的人想死的心都有了。这个时候你需要的是一款代码自动翻译转换工具。

Facebook Transcoder

https://github.com/facebookresearch/TransCoder

代码翻译的问题是,手工重新改写不仅耗时,还很难找到懂多种编程语言的程序员,基于规则等方法转换质量非常差,最新的无监督神经转换器能在某些特定范围上很好的完成代码翻译任务。

Facebook最近开发的神经转换编译器TransCoder让代码转换越过了新的篇章。该系统可以将代码从一个高级语言转换成另一个,比如 c + + 、 Java 和 Python。

这个系统是弱监督的,可以在没有标签的数据集中寻找以前未检测到的模式,只需要少量的人工监督。研究人员称,这比基于规则数据集的模型要高效得多。

人工智能在软件开发领域应用现状

代码生成聚焦在特定领域或特定任务的自动编程,即Domain-Specific Automated Programming(DAP)和Task-Specific Automated Programming(TAP)。目标是让机器完成简单的编程任务,解放开发者繁重的编程工作。

这个可能是目前最接近于取代码农工作的AI。

DeepCoder

DeepCoder是微软和剑桥大学联合开发的一种计算机算法,可以用于自行编写代码并解决简单的数学问题。该系统分成两个组成部分:代码编写算法,以及搜索潜在代码的机制。该算法发表于2016年11月的论文中。

人工智能在软件开发领域应用现状

 
但是Airbnb没有开源,有位大神自己开源了sketch-code,可以完成类似的工作。

https://github.com/ashnkumar/sketch-code

经网友亲测有效,当然还不是很完美。

人工智能在软件开发领域应用现状手稿生成图

可能会有小伙伴站出来挑战,html也算编程语言么网页能算写代码么急,看看最新的自然语言模型的威力吧!

GPT-3

OpenAI发布最新的NLP模型GPT-3使用的数据集容量达到45TB,参数个数1750亿,一个训练好的模型就要 700G的硬盘空间来存储。充分反映了“大力出奇迹”的特点。GPT-3通过对大量文本进行预训练,针对特定任务进行微调,模型的性能可以在许多 NLP 任务以及基准测试中获得显著提升。

近日有开发者根据GPT-3模型上线了一个能够自动生成代码的网站debuid(https://debuild.co/)。在这网站注册后,用户只要用英语描述需求,前端代码会自动生成。

人工智能在软件开发领域应用现状

代码审查是现代软件开发过程中的必要流程,代码审查面临着很多挑战

?   软件系统正变得越来越复杂:更多模块,更多执行路径,更大状态空间,逐渐超过手工检测的能力范围
?   资源有限,时间和人力都不够用,码农们需要996和007
?   团队中的专家不够用

面临这些挑战,利用人工智能来提高代码审查的效率,是一个不错的途径。

AWS CodeGuru Reviewer

人工智能在软件开发领域应用现状

DeepCode实现了一种方法,可以在达到临界安全级别之前分析用户输入处理。因此,当任何数据在没有安全验证或清除的情况下从一个点移动到另一个点时,该工具会将其标记为受污染的,并向您发出警告。该工具可以标记的问题包括跨网站脚本、SQL注入威胁、远程代码执行以及路径遍历攻击等。

快速精准理解代码背后真实意图,准确定位语法错误和漏洞

训练流程:DeepCode的模型训练分三步进行:

Step1:将各类编程语言写成的代码进行解析,生成解析树;
Step2:通过线性复杂度数据求解器可在几秒内完成代码库分析;
Step3:语义事实表示方法用于ML模型理解代码结构及其背后意图。

战略简要,覆盖面广和技术优势是DeepCode的制胜法宝:

  • 战略重点简明扼要:让机器code review可以提供尽可能多的、更广泛且深入的代码建议;

  • 缺陷检测覆盖范围广:
    其他现有静态分析工具的缺陷检测范围仅为DeepCode的十分之一;

    可以快速兼容来自其他工具的checkers/rules/patterns;

    可与GitHub,GitLab集成。

  • 程序分析、AI算法、特征工程和大数据多种能力互补,形成独特技术优势:持续从开源项目在线学习的能力;

    独立于编程语言的平台,可以在几周内完成新语言添加;

    无需编译,大型代码库平均分析时间仅5秒(其他方案一般要通宵)。

代码测试

人工智能在软件开发领域应用现状

首款基于机器学习的商用智能软件测试工具,使用机器学习技术,开创了智能化软件测试的先河。开发mabl的是一家位于波士顿的创业公司。共同创始人是Dan Belcher和Izzy Azeri。这两位哥们是连续创业者。他们于2014年创办了Stack Driver。这家公司为云平台(例如谷歌GCP,亚马逊AWS)上的应用程序提供监测和诊断服务。后来这家公司被谷歌收购,这两位就进入了谷歌工作。2017年初,他们又出来创业,创办了mabl。公司一经成立,便获得了来自Charles River Ventures和Amplify Partners和1000万美元首轮投资。不到一年,便发布了面向商业市场的mabl产品(https://www.mabl.com/)。mabl以SaaS(software-as-a-service)方式,为用户提供智能软件测试服务。软件测试的全过程自动化,不再需要人工参与。自动创建和执行测试,自动分析测试结果,同时还能根据需求的变化自动适配和维护测试。

mabl的口号非常响亮:You write code, mabl tests (你写代码,mabl来测试)。

mabl使用机器学习技术,自动创建和执行测试(Tests),自动分析测试结果,同时还能根据需求的变化自动适配和维护测试。也就是说,mabl将软件测试的全过程均自动化了。有了mabl,软件测试将不再需要人工参与。

mabl已经脱离了自动化软件测试的范畴,开创了智能化软件测试(intelligent testing)的先河。

机器学习为软件测试自动化的用户体验带来质的飞跃,它提供:

? 无脚本测试:测试人员无需创建和维护测试用例。测试工作由机器学习算法在没有测试用例的情况下自主完成。
? 无基础设施:mabl以SaaS的方式提供服务,用户无需安装和维护任何本地基础设施。
? 自动维护测试:当产品发生改变时,机器学习算法自动适配这种变化。
? 自动分析结果:mabl自动分析结果、定位问题原因。
? 第三方集成:mabl与Jenkins,Slack,Jira等第三方工具均能很好的集成。

test.ai

人工智能在软件开发领域应用现状

DiffBlue是一种非常有用而又简单的用于代码自动化的平台。DiffBlue有几个核心目的——测试编写、bug定位、重构代码以及发现和替换弱点的能力——这些都是通过使用自动化实现的。Diffblue专注于用AI技术为代码提供数字模型,Diffblue正在研发三款产品,分别是用于发现bug,编写测试代码的测试产品;能够自动标记bug并对其进行测试的安全产品;以及自动修改不合理代码或过时代码的重构产品。

在AI辅助自动化测试领域,还有很多产品,这里就不一一细说,它们有:

?    apptest.ai
AI辅助的移动应用自动化测试

?    Appvance IQ
根据应用程序的映射和实际用户活动分析,使用机器学习和认知自动生成自动化测试脚本

?    Eggplant AI
使用AI和深度学习来从界面上寻找缺陷,能够自动生成测试用例,大幅度提高测试效率和覆盖率。

?    Sauce Labs
利用机器学习来针对测试数据进行分析,更好地理解测试行为,主动改进测试自动化。

?    Sealights
利用机器学习技术分析SUT的代码以及与之对应的测试,不局限于单元测试,还包括系统级的业务测试和性能测试。它还基于机器学习呈现完整的质量Dashboard,帮助我们进行“质量风险”的评估。

?    Testim
专注于减少不稳定的测试(flaky tests)和测试维护,试图利用机器学习来加快开发、执行和维护自动化测试。

总之软件测试的自动化正在向着越来越智能的方向前进。

总结

人工智能在软件开发领域应用现状

关于作者:陶刚,Splunk资深软件工程师,架构师,毕业于北京邮电大学,现在在温哥华负责Splunk机器学习云平台的开发,曾经就职于SAP,EMC,Lucent等企业,拥有丰富的企业应用软件开发经验,熟悉软件开发的各种技术,平台和开发过程,在商务智能,机器学习,数据可视化,数据采集,网络管理等领域都有涉及。

人工智能在软件开发领域应用现状

关于EAWorld:微服务,DevOps,数据治理,移动架构原创技术分享。长按二维码关注!

文章知识点与官方知识档案匹配,可进一步学习相关知识算法技能树首页概览33828 人正在系统学习中

来源:EAWorld

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年8月26日
下一篇 2020年8月26日

相关推荐