计世网

呐,你累不累?要不要AI替你开发这个软件?
作者:Maria Korolov | 来源:计算机世界
2019-08-09
新工具和前沿项目展示了机器学习和高级分析将如何彻底改变软件的设计、测试和部署方式。

 

我们正在进入特斯拉AI主管Andrej Karpathy所称的“软件2.0”时代。在这个时代中,神经网络会编写代码,人类的主要工作是对任务进行定义,收集数据和构建用户界面。

但并非所有任务都可以通过神经网络来解决,至少现在还不是这样。传统的软件开发仍然可以发挥作用。即便如此,人工智能、机器学习和高级分析正在改变着软件的设计、编写、测试和部署方式。

测试

巴西的TOTVS公司正在为约10万名企业客户提供行业关键任务软件。例如,每天其金融服务解决方案会处理数万亿美元的交易。

此类应用需要进行能力测试。测试用例创建者需要非常慎重地考虑如何设计测试场景。每个测试场景的创建都需要花费几个小时。

TOTVS实验室执行董事Vicente Goetten表示,跟上发展的步伐是一项重大挑战。每个测试用例都必须针对用户接口进行定制。随着应用程序不断被重新设计,接口总是在变化。如果平台本身发生了变化,例如升级到更新版本的JavaScript时,所有设计元素都会发生变化。Goetten称:“想象一下重新编写成千上万的用例是一种什么样的场景。”

TOTVS为此不得不求助于人工智能。TOTVS用于测试的平台Functionalize现在支持智能创建测试用例。该技术可以按照人类识别输入字段和按钮的位置来查看屏幕,而不是依赖于底层代码。它们还可以提供测试场景和样本数据来为应用程序加压。

他说:“以前使用传统解决方案时,一名高级质保人员需要花一天时间才能完成测试用例。现在,他们可以在几分钟内创建相同的测试用例。”

Gotten说,最新增加的能力是能够理解通俗易懂的英语。“你可以告诉它们测试什么,随后它们会自动为你创建一个测试用例。这为我们打开了一扇新的大门。大大降低了在编写测试用例时对高级质保人员的需求。”

监控和部署

就算软件在质保方面达到了预定目标,情况也总不能按预期的那样工作。在线家居装修零售商Build.com的高级技术总监Patrick Berry说:“某天早上,我们已经有了一些新的产品数据,但是网站却还没有做好处理这些数据的准备。”

Build.com监控在软件性能方面花了数百小时。当问题出现时,公司会将软件恢复到之前已知的良好状态,然后将其发送给开发人员以解决出现的问题。

Berry说:“我们面临的问题是,编写的软件过于复杂,在流量规模方面,一个人甚至是一个团队都无法查看现有的所有监控系统,无法知道情况是好还是糟糕,亦或是现在应该采取些什么措施。它们耗费了我们太多的时间并拖慢了我们的速度,导致我们无法以足够快的速度获得客户价值,同时我们也无法以足够快的速度向开发人员反馈需要补救的事情。”

为此,Build.com转向了Harness。Harness为一个软件交付即服务平台,其将性能监控所花费的时间几乎压缩到了零,并且将部署速度提高了20倍。现在,如果出现问题,系统将自动恢复到先前的已知良好状态,并根据内置的机器学习功能将问题发送给相关人员以进行补救。Build.com还考虑在代码开发过程中使用更多的人工智能。

他说:“我们实际上还没有可用于代码编写的自动化工具。但是人工智能和机器学习可以在开发方面提供帮助,它们实际上能够理解哪些常见模式是好的,哪些是糟糕的。它们可以突出显示异常情况,这样我们可以回过头来展开修复工作。

安全

Berry还希望看到更多工具使用人工智能,以帮助公司首先编写更好、更安全的代码。

“这就是我们真正希望在开发方面使用人工智能和机器学习的地方。这些领域并不是投入足够的人才就能解决问题的。比方说,你的代码库有数百万行代码。你要投入多少人去审计这数百万行的代码呢?我们需要能够适应这种规模的解决方案。”

例如,Build.com一直在使用GitHub作为其代码存储库。Berry说:“他们正在引入一些系统,这些系统将监控你的代码并对第三方库中存在的潜在漏洞发出提醒。”

GitHub的机器学习工程师Omoju Miller表示,这是GitHub的一个活跃的开发领域。“我们正致力于构建支持常见漏洞的模型。”此外,GitHub还在近期发布了一款可以帮助开发人员发现在代码中的哪个地方意外共享令牌的工具。

发现

Miller透露,GlerHub还在致力于开发一款工具,“它可以帮助开发人员以自然方式发现一些功能”。通过人工智能,开发人员可以根据自己的意图搜索相关的功能。

她说:“通过在GitHub的开源编码平台上使用大量公开代码,机器学习研究团队在实现这一目标方面取得了重大进展。通过语义代码搜索,开发人员可以增加和简化解决问题的计算需求。”

这意味着开发人员将不再受他们的知识限制。“他们可以利用存储在GitHub上的所有代码知识来帮助解决问题。”

分析

Constellation Research的创始人兼首席分析师Ray Wang表示,静态和动态软件分析工具都在使用人工智能技术。

“机器学习能力已经比18个月前更强大了。我们看到神经网络已经在开始使用。现在,静态分析多于比动态分析,但是我们在未来几年会看到由人工智能驱动的动态分析的兴起。

开发代码

在谈到从头开始编写新代码时,Build.com的Berry指出。当前的技术还有待改进。

他表示:“现在出现了一些系统,但是它们更像是内置模板的剪切和粘贴。”

但这只是刚开始发生变化。最受欢迎的IDE,微软的Visual Studio,在4月份发布的最新版本中内置了人工智能辅助代码。微软Visual Studio IntelliCode高级项目经理Mark Wilson-Thomas表示,该功能基于对数千个开源GitHub存储库的机器学习。

“我们正在让开源社区代码具有智慧,”微软Visual Studio和Visual Studio Code程序管理合作总监Amanda Silver说。她指出,这也有助于理解常用的使用类别,“在处理不熟悉的代码时,这尤其有用。”

在最近对IntelliCode用户进行的一项调查显示,超过70%的人表示,与传统的IntelliSense相比,新的由人工智能驱动的IntelliCode让他们感觉更有效率。

使用这个工具的企业也可以为自己的员工创建自定义的私人模型。她说:“这使得IntelliCode能够说团队或企业的土话,无需将源代码传送给微软。”

Gartner分析师Svetlana Sicular表示,这种功能是微软购买GitHub的最初原因。

微软在去年收购的GitHub拥有超过1亿个存储库,其中2500万以上是开源的。该平台可免费用于公共存储库以及小型私有项目。Sicular称:“GitHub就是一个代码存储库。我认为微软将会用它们生成新的代码。”

智能应用开发平台

Build.com的Berry也在密切关注低代码和无代码的发展。他说:“这不是什么新东西。开发人员在开发过程中正在将系统整合在一起。”

这使得人工智能系统部署变得更加便捷。“例如,针对推荐引擎的预装解决方案让过去棘手的定制解决方案变得很容易。”

现在,这种低代码方法正变得更加智能,公司不用再浪费时间建立商品系统。“这让我们有时间进行真正的创新。这些领域正在为我们提供可继续发展的东西,让我们感到非常兴奋。”

以Mendix为例,该公司花了十年多的时间研发出了一套用于创建应用程序的模块系统。开发人员可以将平台上能够使用的功能选项集中在一起,当这些功能不够时,他们可以为缺失部分链接外部代码。如今该公司已经建立了一套深度学习系统来分析这些模型,查看它们在生产中的行为,看看哪些是最成功的,然后根据这些模型识别相关的模式。

Deloitte Cyber的应用安全负责人Vikram Kunchala称,IT部门对于使用这些平台目前还存在抵触情绪,与此同时业务部门对此也缺乏信心。

“企业正在小规模地进行试验,不过我还没有看到任何客户在以企业标准进行部署它们。”

软件2.0

但最大的变化是应用程序将与传统代码没有任何联系。

比如说,你想创建一个玩“井字棋”的应用程序,就可以根据规则和游戏策略来编写程序。一方这么走一步,另一方就那么应一步。开发人员的工作只是选择正确的策略并创建有吸引力的用户界面而已。

如果目标是要击败人类玩家,这种策略也适用于井字棋、跳棋、甚至国际象棋。但是对于难度更大的游戏,比如围棋,要创建一套规则就非常困难。但如果采用人工智能技术,如深度学习和神经网络,情况就不一样了。

开发人员不再从规则着手,而是从数据开始,即大量的对弈数据。通过AlphaGo,Google在数千次人类游戏中训练了该系统。在最新版本的AlphaGo Zero中,训练数据是系统对抗自己,随机开始。

只要培训数据清晰且充分,并且成功或失败的标准也很明确,那么这种方法就有可能彻底颠覆软件开发工作。开发人员现在就必须要致力于管理培训数据和成功标准,将实际编码工作留给系统,而不是试图弄清楚并编写游戏规则。

特斯拉的AI主管Andrej Karpathy称,这也正是特斯拉在自动驾驶汽车中采用的方法。

他在去年的技术会议主题演讲中指出,“这是一种全新的软件设计方式。现在,我们不是编写代码,而是积累和整理数据集,这些数据集实际上就是代码。”

例如,特斯拉的挡风玻璃刮水器在汽车开过隧道时很难知道何时开启和关闭。在传统的软件开发中,程序员会查看代码以找出错误逻辑的位置。使用软件2.0后,开发人员只需要查看这些数据。

在这种情况下,关于驾车穿越隧道并没有足够的训练数据可用。特斯拉必须要走出去,以获得更多数据,注释这些数据,然后将其添加到训练数据集中,并重新运行深度学习算法。

他补充道,传统的开发仍有发展空间。目前,这些系统的用户界面以及与其他平台的集成仍然是手动构建的。

随着越来越多的企业将人工智能用于那些有着大量可用数据的应用程序和使用低代码平台的应用程序,软件开发工作在不久的将来将会发生巨大变化。

作者:Maria Korolov二十多年来一直长期关注新兴科技和新兴市场。

编译:陈琳华

原文网址:https://www.cio.com/article/3393180/ai-is-poised-to-radically-transform-software-development.html

责任编辑:周星如