Infer:Facebook Java静态分析工具初探 - ImportNew



Infer:Facebook Java静态分析工具初探 - ImportNew

在这个例子中,我们能看到Infer怎么识别一个简单的空引用,并输出相关的解决信息,当问题解决并保存后,该类就能成功通过检查了。Infer完整的源代码可以在Github上找到。

增量 vs 非增量

Infer可以采用增量或非增量的方式运行。两者之间的不同点在于Infer是否删除已存在的结果目录。例如,在构建一个系统的时候,你可能想采用增量的方式运行,而执行单条编译命令时采用分增量的方式。如果要使用增量模式,只需增加�Cincremental标志。

Infer的局限性,Infer面临着和其他静态分析工具同样的问题。它存在错误的警告和bug丢失的问题,这个问题与你的应用如何编码,如何与第三方的库交互都有关系。另一个局限是存在检查范围的问题,因为它不能以动态的方式来进行测试。此外,对某些类型的bug检测还存在技术性限制,例如,迄今为止,Infer还不能测试数组越界或类型转换异常等问题。

这对Java开发者来说意味着什么呢?

Infer是为手机应用设计的,但是对普通的Java程序也能非常好的工作。它可以从构建工具(如Maven)开始运行,但是不一定完全符合你的工作流程。当然,问题在于是否值得用。

该问题的答案归结为你对静态分析工具的态度。Infer明显既不是第一个Java静态分析工具(例如,FindBugs是其中比较流行的一个),也不是第一个开源的这类工具。它仅仅是来自于Facebook的一个工具,但是,这可能给你带来固定的想法。既然是Facebook建立的,用于大量的apps,Infer自然被马上大规模使用了。

Infer还面临一些Java语言自身的限制。它不能处理Java的并发工具(Concurrency Utilities)或特性,比如计算。这些问题同样困扰着在其它静态分析工具,但是这点确实需要谨记。

工作流中的应用

静态分析工具通常在开发阶段使用。它们的本质是一个测试工具,是作为开发过程或CI/CD工作流中的一个步骤。它们不能代替调试器,因为它们工作的时候代码已经编译完成。它们也不能代替生产环境中的错误追踪器,因为整个主机的bug,只有当代码在生产环境暴露后,动态输入刚好命中时才会产生。但是在这两个环境之间存在一个空间,在这个地方,像Infer的工具是非常有用的。

例如,你可以将Infer做为一个开发环境(IDE)与生产环境(Takipi)中间的步骤。Infer在这种情景下,能帮助你在上线之前预先发现那些明显的bug。这能给你的用户防止一些问题,至少减少你Takipi面板上的问题,如果你使用Jenkins作为持续开发模型,你可以在每个版本发布的时候运行Infer,然后查看抛出的红色标记。

结论


Read full article from Infer:Facebook Java静态分析工具初探 - ImportNew


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts