新工具和尖端项目展示了机器学习和高级分析将如何彻底改变软件的设计,测试和部署方式。
我们正在进入特斯拉人工智能主管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上的所有代码知识来帮忙解决问题。”