新工具和尖端项目展示了机器学习和高级分析将如何彻底改变软件的设计,测试和部署方式。
我们正在进入特斯拉人工智能主管Andrej Karpathy所谓的“软件2.0”的时代,在这个时代里,神经网络会编写代码,而人们的主要工作是定义任务,收集数据和创建用户界面。
但并非所有任务都可以通过神经网络来解决(至少现在还不行),而传统的软件开发仍然可以发挥作用。然而,即便如此,人工智能、机器学习和高级分析正在改变软件的设计、编写、测试和部署方式。
测试
总部位于巴西的TOTVS为大约100,000名企业客户提供关键的行业软件。例如,其金融服务解决方案每天处理数万亿美元的交易。
此类应用需要得到强有力的测试。创建测试用例的人必须非常慎重地考虑如何设计测试场景,每个测试场景都要花几个小时来创建。
TOTVS实验室的执行董事Vicente Goetten表示,要跟上步伐并不容易。每个测试用例都必须定制化,以适合用户界面。应用程序不断得到重新设计,因此界面也总是在变化。如果平台本身发生了变化(例如更新到更新版本的JavaScript时),所有设计元素都会立即发生变化。
Goetten说:“不妨想象一下重写成千上万用例的情景。”
因此TOTVS向人工智能求助。TOTVS使用Functionalize这个测试平台,该平台现在支持测试用例的智能创建。该技术可以像人一样查看屏幕,从而能识别输入字段和按钮的位置,而不是依赖于底层代码。它还可以提供测试场景和样本数据来对应用程序进行压力测试。
Goetten说:“以前,高级质量保证人员需要花一天的时间来完成我们所使用的传统解决方案中的测试用例,现在,他们可以在几分钟内创建相同的测试用例。”
Gotten说,还有就是,Functionalize能理解平直的语言。
他说:“你可以命令它测试要测试的东西,它会自动为你创建一个测试用例。这为我们指明了新的方向。我们不再需要那么多高级质量确认人员来测试用例。”
监控和部署
即使软件通过了质量确认,它也并不总是按预期发挥效用。“就在今天早上,我们获得了一些已经得到采用的产品数据,而网站尚不能处理这些数据”,在线家居装修零售商Build.com的高级技术总监Patrick Berry如是说。
我们花了数百小时来监控Build.com软件的性能,当问题出现时,公司将软件恢复到之前已知的良好状态,并将其发送给开发人员以解决问题。
Berry说:“我们面临的问题是,我们编写的软件变得非常复杂,流量太大,大到任何人都无法查看现有的所有监控系统,哪怕是一群人也做不到,他们会说,‘一切都很好’或‘一切都很糟糕,该做点事情了’,软件耗费了太多时间并放慢了发布速度。我们无法以足够快的速度为客户创造价值,我们也没有以足够快的速度向开发人员反馈必须得到补救的事情。”
因此,Build.com向Harness求助,这是一个软件交付即服务(software-delivery-as-a-service)平台,该平台将性能监控所需的时间几乎降为零,将部署速度提升了20倍,Berry如是说。现在,如果有问题出现,系统将自动恢复到先前的已知良好状态,并根据内置的机器学习功能将问题发送出去以进行补救。Build.com也正在考虑大举使用人工智能,以此作为代码开发过程的一部分。
Berry说:“我们实际上还没有能写代码的代码,但人工智能和机器学习在开发方面大有裨益,这实际上关系到我们是否理解常见模式的好坏利弊。它可以突显这是一个异常现象,我们可以回过头来对其进行修复。”
安全性
Berry还希望有更多能利用人工智能的工具相继问世,从而一开始就能帮各大公司编写更好更安全的代码。
Berry说:“这就是我们真心希望在开发方面使用人工智能和机器学习的领域——加强这些领域,这些领域人手不足,无法解决问题,比方说,你的代码库有数百万行代码。你要用多少人来审计这数百万行代码?我们需要的是可扩展的解决方案。”
例如,Build.com使用GitHub来存储代码。Berry说:“他们正在引入某些系统,这些系统将监控你的代码并向你发出提醒,让你知道我们使用的第三方库中可能存在的漏洞。”
GitHub的机器学习工程师Omoju Miller说,这是GitHub的一个活跃的开发领域。Berry说:“我们正致力于创建各种模型,这些模型能为常见漏洞和暴露发现(exposures discovery)提供支持。”
Berry说,GitHub刚刚发布了一个工具,这个工具可以帮开发人员发现他们在代码中意外共享令牌的位置。
发现
Miller说,GitHub还致力于开发“帮开发人员以自然方式发现功能的工具”,有了人工智能,开发人员就可以根据自己的意图搜寻各种功能。
Miller说:“由于在GitHub的开源编码平台上使用大量公开代码,机器学习研究团队在实现这一目标方面取得了重大进展。有了语义代码搜索的功能,开发人员就可以增加和简化计算方面解决问题的需求。”
Miller说,这就是说,开发人员将不再受自身认知的限制,“他们可以利用存储在GitHub上的所有代码知识来帮忙解决问题。”
分析
Constellation Research的首席分析师兼创始人Ray Wang表示,人工智能技术也出现在静态和动态软件分析工具中。
Wang说:“机器学习的功能已经很丰富了,比18个月前更加丰富。神经网络渐渐得到了应用。如今,与其说这是静态分析,不如说是动态分析,但由人工智能驱动的动态分析将在未来几年出现。”
开发代码
然而,就从头开始编写新代码而言,当前的技术还有待改进,Build.com的Berry如是说。
Berry说:“现在我们可以使用一些现成的系统,如你的集成开发环境,但这更像内置模板剪切粘贴得来的。”
但情况开始发生变化。最受欢迎的集成开发环境(微软的Visual Studio)在4月发布的最新版本中内置了人工智能代码自动完成功能。微软Visual Studio IntelliCode的高级项目经理Mark Wilson-Thomas表示,该功能基于数千个开源的GitHub存储库提供的机器学习。
“我们吸取了开源社区代码的智慧结晶”,微软Visual Studio和Visual Studio Code程序管理合作总监Amanda Silver如是说。
Silver补充说,这也有助于他们理解常用类的使用方式,“在处理不熟悉的代码时,这尤其有用。”
最近对IntelliCode用户进行的一项调查发现,超过70%的人表示,与经典的IntelliSense相比,使用新的由人工智能驱动的IntelliCode使他们觉得有更高的效率,Silver如是说。
Silver说,使用这个工具的企业也可以为自己的员工创建自定义的私有模型。
Silver说:“这使IntelliCode与你的团队或组织有共同的代码语言,你无需将源代码发给微软。”
Gartner的分析师Svetlana Sicular表示,这种功能是微软购买GitHub的首要原因。
GitHub拥有1亿多个存储库(其中有2500多万个存储库是开源的),微软于去年收购了GitHub。该平台对公共存储库和小型的私有项目免费开放。
Sicular说:“GitHub是一个代码存储库。在我看来,微软将使用它来生成新的代码。”
智能应用程序开发平台
Build.com的Berry也在密切关注低代码和无代码领域里发生的事情。
Berry说:“这根本谈不上是新鲜事儿,只要有开发,开发人员就已经将系统整合在一起了。”
Berry说,最近,人工智能系统的部署因此而变得更轻松快捷。他说:“例如,用于推荐引擎的固有解决方案将过去很难实施的解决方案和定制的解决方案商品化。”
现在,这种低代码方法变得更加智能,使公司不再浪费时间创建商品系统,Berry如是说。他说:“我们因此有机会提出全新的,真正的创新,这就是这种方法的意义所在。我对这些领域在未来所能做出的贡献感到非常兴奋。”
以Mendix为例,该公司在长达十年的时间里一直提供积木式的系统,这些系统可以用来创建各种应用程序。开发人员将平台上各种可用的功能集中在一起,当这些功能不够用时,他们就使用外部代码。如今,该公司创建了一个深度学习系统来分析这些模型,考察这些模型在生产中的表现,看看哪些模型是最管用并据此来识别各种模式。
Deloitte Cyber的应用程序安全负责人Vikram Kunchala说,IT部门依然十分抗拒这些平台,而业务方又缺乏信心。
Kunchala说:“此刻,对平台的采用似乎更像是好奇心使然。企业正在一点点进行对这些平台进行试验。又或者是他们不得不尽快落实——我们已经见过这种情况了。但我没有看到哪个客户将其视作我所了解的企业标准。”
软件2.0
但最大的变化是,企业开始使用与传统代码毫无联系的应用程序。
比如说,你想创建一个玩三子棋(Tic-Tac-Toe)的应用程序。你可以编写规则和游戏策略。对手怎么做,你就怎么做。开发人员的工作是选择正确的策略并创建惊艳的用户界面。
如果以击败人类棋手为目的,那么这种策略适用于三子棋、跳棋、甚至是国际象棋。但是对于围棋等更高难度的棋类竞技,创建规则并不容易。这时深度学习和神经网络等人工智能技术就登台亮相了,这些技术彻底改变了软件开发流程。
开发人员不是从制定规则开始,而是从收集数据开始——大量的棋类竞技。谷歌根据人类棋手下的大量棋局来训练系统。由于有了最新的AlphaGo Zero,训练数据来自系统与自身对弈的棋局,始于随机下子。
只要培训数据清晰且充分,而且评估其好坏的标准也十分明确,那么这种方法就有可能彻底改变软件开发。如今,开发人员必须努力管理培训数据和评估标准并让系统来编写代码,而不是弄懂对弈规则并编写对弈规则。
特斯拉的人工智能主管Andrej Karpathy表示,这正是特斯拉对自动驾驶汽车所采用的方法。
Karpathy在去年的技术会议主题演讲中说道:“这是一种全新的软件设计方式。如今,我们不是毫不隐讳地编写代码,而是积累和优化数据集,而这些数据集实际上就是代码。”
例如,因此,特斯拉驶经隧道时很难判断要不要启动雨刮器。在传统的软件开发中,程序员会查看代码,从而发现逻辑错误出在哪里。由于有了Software 2.0,开发人员只要查看数据就可以了。
例如,在这种特殊情况下,穿越隧道的车辆缺乏训练数据。特斯拉必须上路实测,获得更多数据,对这些数据进行注释,将其添加到训练数据集并重新运行深度学习算法。
Karpathy说:“我们通过这种方法使所有问题看起来都一个样子。”
Karpathy补充说,传统的发展仍有生存空间。目前,这些系统的用户界面是手动创建的,与其他平台的集成也仍然是手动完成的。
但随着越来越多的公司向人工智能求助,用于那些有大量可用数据和其他低代码平台的应用程序,那么软件开发的工作将在不久的将来发生巨大变化。