简化软件开发的五款机器学习工具
但是机器学习还在另一个方面影响软件开发:通过新的开发工具,这种工具使用机器学习技术使编程更轻松、更高效。本文介绍了五个项目:三个商业项目、两个实验项目,它们让机器学习在开发过程中为开发人员所用。
Kite
Kite是一种代码完成工具,适用于大多数主要的代码编辑器,它使用机器学习技术在你敲键输入时填写代码。
Kite使用的机器学习模型是以这种方法创建的:拿来GitHub上公开可用的代码,从中获得抽象语法树,将其作为模型的基础。据Kite声称,这可以从代码的上下文和意图(而不仅仅是从文本)获得自动建议和自动完成。
眼下,Kite仅面向Python开发人员,但支持Go的功能正在开发中。虽然Kite最初只适用于Windows和MacOS用户,但现在它也支持Linux。
2017年,Kite因处理用户数据不当及修改面向Atom的autocomplete-python软件包而在开源社区引发关注。这家公司已解决了这两个问题,声称Kite不再将用户代码发回到云服务器,而是在本地执行所有处理,并明确承认autocomplete-python软件包是Kite倡导的软件包。
Codota
Codota与Kite非常相似。它使用机器学习模型,拿Java和Kotlin代码来训练,在你键入时为这些语言自动完成代码。与Kite一样,Codota使用代码的语法树,而不仅仅是文本,作为构建模型的数据。
与改版后的Kite不同,Codota使用基于云的服务来生成和提供预测。然而据该服务的文档显示,Codota并不将用户代码发送到Codota服务器,只发送“来自当前编辑的文件的少量上下文信息,以便我们根据目前的本地范围进行预测。”
Codota适用于Windows、MacOS和Linux,但编辑器支持仅限于IntelliJ、Android Studio和Eclipse(Luna或更高版本)。鉴于它专注于Java和Kotlin语言,这有其道理。该公司特别指出,支持其他语言的功能正在开发中,JavaScript排在第一位。(现在拥有针对JetBrains JavaScript IDE:WebStorm的测试版支持。)
免费版Codota使用从免费获取的代码创建的预测。企业版可以使用私有代码存储库来用于训练。
DeepCode
DeepCode可以在AI的指导下自动审查代码,以检测潜在的安全漏洞。与Kite和Codota一样,DeepCode分析公共存储库中可用的代码以查找常见模式。但DeepCode使用那些模式来识别安全漏洞。
DeepCode专注于“污点分析”(taint analysis),确定用户输入在到达任何安全关键点之前是如何处理的。如果未验证是否可以安全传送,直接从用户输入到SQL查询的数据被视为“污点”,引发警报。
DeepCode声称可以标记的严重错误包括Web应用程序中常见的安全问题:跨站脚本、SQL注入攻击、远程代码执行和路径遍历攻击。
DeepCode的分析适用于GitHub和Bitbucket存储库,对于开源项目或至多30名开发人员的私有项目而言,它们不需要任何费用。DeepCode还可用于扫描本地代码托管(比如GitHub Enterprise),可索取价目表。
微软PROSE
PROSE的全称是“使用示例进行程序合成”。微软的这个项目是用于从示例输入和输出生成代码的SDK。因此,PROSE这个工具包可用于构建预测编码工具,而它本身不是预测编码工具。
潜在的PROSE应用领域包括通过示例转换文本(其中一个实现是微软在Excel中的“Flash Fill”功能)、从文本文件中提取数据(比如日志分析)以及预测文件操作(比如通过示例将文本拆分成多列)。
链接:https://microsoft.github.io/prose/
Pix2code
Pix2code的理念听起来像科幻小说。为Pix2code提供图形用户界面的屏幕截图,它会生成呈现该GUI的代码。Pix2code使用深度学习模型,使用软件随附的数据集进行训练,以生成Android XML、iOS Storyboard和HTML/CSS等格式的GUI。Pix2code是一个实验研究项目(“仅供教育用途共享”),因此用它完成的任何工作都需要使用该项目作为进一步开发的基础。