选自《走向科学》
参与:Geek AI,Lu
Facebook的Project expense在部署移动应用之前是如何识别bug的?
Infer 官网地址:https://fbinfer.com/GitHub 地址:https://github.com/facebook/infer不久前,来自Facebook的一个工程团队获得了ACM SIGPLAN POPL最具影响力论文奖,这是机器学习研究界最受关注的奖项之一。这个团队的获奖论文是《双归纳法的成分形状分析》,介绍了我近年来最喜欢的机器学习应用之一“项目推断”背后的科学原理。项目推断的目标是在移动应用程序发布之前检测它们的缺陷。这项技术似乎是科幻电影中的一座桥梁。
移动应用程序中的bug通常代价高昂。对于任何开发人员来说,在移动应用被分发到成千上万的移动设备后发现错误都是一场噩梦。传统的移动应用测试侧重于重构已知场景,但实际上有很多代码组合可能会触发错误情况,这是传统测试方法无法检测到的。项目推断扫描移动应用程序的代码,并检测可能的错误情况,最终由开发人员进行审查。自从该软件三年前向公众开放以来,推断项目已经被AWS、Spotify和Uber等世界顶级公司采用。
项目推断是如何工作的?
项目推断使用逻辑推理来推理软件程序可能的执行结果。任何大型移动应用程序都可能包含数亿个可能触发错误情况的代码组合,这使得传统的代码分析例程无法扩展到所有可能的情况。Facebook的Express构建了关于应用的增量知识,提高了应用整个开发生命周期的开发效率。
从顶层来看,Facebook expense的工作流程可以分为捕获和分析两个主要阶段。并且其生命周期可以分为两个主要部分:全局部分和差异部分。
在“捕获”阶段,Expressor使用编译命令将要分析的文档转换为其内部中间语言。分析阶段探索每个函数可能触发哪些错误条件。如果expert在分析方法或函数时遇到一些错误,它将停止运行有错误的方法或函数,但会继续分析其他方法和函数。下面的动画演示了脸谱推断在捕获和分析阶段的操作。
从程序执行的角度来看,Facebook的Infer有两种模式可以使用:全局模式和差分模式。当“推断”分析给定项目中的所有文件时,“推断”将在全局工作流下运行。对于使用Gradle编译的项目,可以使用以下语法运行推断的全局工作流:
推断运行梯度构建
当在增量构建的系统中应用推断时(这在移动应用程序中很常见),经常使用差异工作流。在这种情况下,我们首先需要运行Expense的“捕获”阶段来获取所有编译命令,然后使用- reactive参数来分析代码更改。
gradle clean
推断捕获梯度构建
1.《infer AI自动识别移动应用代码bug:详解Facebook Infer》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《infer AI自动识别移动应用代码bug:详解Facebook Infer》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/junshi/1045142.html