java自动推断类型_推断:Facebook的新Java静态分析工具
java自動推斷類型
如何使用Facebook的Infer改善Java開發(fā)工作流程?
如果您與技術(shù)話題保持同步(如果您正在閱讀此博客,我想您會這樣做),那么您可能聽說過Facebook 剛剛向公眾發(fā)布的新工具:推斷。 由于它來自Facebook,所以人們自然會感到好奇,因此我想看看該工具的含義以及它如何對Java開發(fā)人員發(fā)揮作用。
新帖:推斷:考察Facebook的新Java靜態(tài)分析工具h(yuǎn)ttp://t.co/Dnp2xmSPQG pic.twitter.com/Dw9zZByMvB
— Takipi(@takipid) 2015年6月24日
什么是Facebook的推斷?
在評估其潛在用途之前,第一步當(dāng)然是要了解該工具的作用和用途。 Infer是Facebook最近以開源形式發(fā)布的靜態(tài)分析工具。 專為iOS和Android使用而設(shè)計,可用于在應(yīng)用發(fā)布之前檢測其錯誤。 Facebook的工程師一直在將Infer用作其Facebook和Instagram應(yīng)用程序的內(nèi)部工具,因此已經(jīng)為大規(guī)模移動環(huán)境進(jìn)行了很好的審查。
大致而言,它的工作方式是在編譯過程中掃描您的代碼,以查找某些預(yù)先設(shè)想的錯誤和錯誤情況。 捕獲有關(guān)編譯過程的信息后,它將對其進(jìn)行分析以尋找潛在的錯誤。 如果找到任何內(nèi)容,它將在您的終端中將它們報告給您,并將它們寫入目錄文件。 它查找的錯誤類型的示例包括空指針異常和資源泄漏。
設(shè)置Infer需要Python 2.7和Mac OS X或Linux。 要運(yùn)行它,您可以直接使用javac,也可以使用Maven或Gradle之類的構(gòu)建工具。 這是一個實際效果的示例:
在此示例中,我們可以看到Infer如何識別簡單的null引用,如何輸出我們需要對其進(jìn)行修復(fù)的相關(guān)信息,以及如何在保存修復(fù)后成功傳遞該類。 可以在Github上找到Infer的完整源代碼。
增量與非增量
推斷可以增量或非增量方式運(yùn)行。 兩者之間的區(qū)別在于Infer是否將刪除現(xiàn)有的結(jié)果目錄。 因此,例如,您可能希望在使用構(gòu)建系統(tǒng)時以增量方式運(yùn)行,而在使用單個編譯器命令時以非增量方式運(yùn)行。 要允許增量模式,您只需要添加–incremental標(biāo)志。
就限制而言,Infer面臨靜態(tài)分析工具的標(biāo)準(zhǔn)標(biāo)準(zhǔn)。 它可以根據(jù)應(yīng)用程序的編碼方式以及與第三方代碼的交互方式報告錯誤警報和/或未命中的錯誤。 它無法檢測的問題范圍也很有限,因為它無法動態(tài)地測試您的代碼。 它測試的錯誤類型也有技術(shù)限制。 例如,Infer今天不測試數(shù)組邊界錯誤或強(qiáng)制轉(zhuǎn)換異常。
這對Java開發(fā)人員意味著什么?
Infer專為移動使用而設(shè)計,但對于純Java也非常適用。 由于可以從Maven之類的構(gòu)建工具運(yùn)行它,因此使其適應(yīng)您的工作流程并非易事。 當(dāng)然,問題是它是否值得使用。
該問題的答案取決于您對靜態(tài)分析工具的立場。 顯然,Infer并不是第一個可用于Java的靜態(tài)分析工具(例如, FindBugs是一種流行的工具),也不是唯一的開源工具。 但是,它是唯一來自Facebook的網(wǎng)站,它可能會隨身攜帶一定的緩存。 隨著Facebook在其巨型應(yīng)用程序上的廣泛使用,Infer已受到大規(guī)模抨擊。
但是,Infer面對Java的一些語言限制。 它無法處理Java的并發(fā)實用程序或諸如算術(shù)之類的功能。 其中的一些問題對于其他靜態(tài)分析工具也很麻煩,但值得牢記。
工作流程示例
靜態(tài)分析工具通常適合在開發(fā)的中間階段。 實際上,它們是用于開發(fā)過程的過渡步驟或作為CI / CD工作流的一部分的測試工具。 他們無法替換開發(fā)人員中的調(diào)試器,因為必須對其進(jìn)行編譯才能工作,并且它們不能替換產(chǎn)品中的錯誤跟蹤器,因為只有當(dāng)代碼進(jìn)入生產(chǎn)環(huán)境并暴露于動態(tài)環(huán)境后,才會出現(xiàn)大量錯誤。輸入。 但是在這兩種環(huán)境之間有一定的空間,可以使用像Infer這樣的工具。
例如,您可以選擇將Infer用作中間步驟,將其與開發(fā)環(huán)境選擇的IDE結(jié)合使用,并將Takipi用于生產(chǎn)環(huán)境。 在這種情況下,推斷可以幫助您在生產(chǎn)之前預(yù)先捕獲一些明顯的錯誤。 這可以為您的用戶避免一些問題,或者至少可以減少Takipi儀表板中的某些條目。 或者,如果您正在使用Jenkins運(yùn)行連續(xù)部署模型,則可以在每次發(fā)布推送后運(yùn)行Infer,以查看是否有新的事物引發(fā)明顯的危險信號。
結(jié)論
當(dāng)像Facebook這樣的公司發(fā)布與Java兼容的開源工具時,值得一看。 Infer不是專門為Java構(gòu)建的,但仍可用于Java應(yīng)用程序中的靜態(tài)代碼分析。 它有一定的局限性,但也有一些很好的潛在用途,并且在將來應(yīng)該會繼續(xù)改進(jìn)。 如果您嘗試使用它,請讓我知道您在評論中的想法。
使用正確的工具對于成功至關(guān)重要,要確保在代碼交付生產(chǎn)時被覆蓋,請查看生產(chǎn)工具權(quán)威指南中的警報工具一章 。
翻譯自: https://www.javacodegeeks.com/2015/06/infer-a-look-into-facebooks-new-java-static-analysis-tool.html
java自動推斷類型
總結(jié)
以上是生活随笔為你收集整理的java自动推断类型_推断:Facebook的新Java静态分析工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux组成部分(linux 组成)
- 下一篇: gradle排除依赖_如何从Gradle