欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

檢測未使用的java代碼,java error不需要捕捉

北大青鳥java培訓(xùn):五個方法讓你做更好的java單元測試?

單元測試是我們在軟件開發(fā)過程中經(jīng)常用到的一種軟件測試的方法,而今天我們就一起來了解一下,一個好的單元測試都是如何來編輯完成的。

創(chuàng)新互聯(lián)公司專注于網(wǎng)站建設(shè),為客戶提供網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計開發(fā)服務(wù),多年建網(wǎng)站服務(wù)經(jīng)驗,各類網(wǎng)站都可以開發(fā),成都品牌網(wǎng)站建設(shè),公司官網(wǎng),公司展示網(wǎng)站,網(wǎng)站設(shè)計,建網(wǎng)站費用,建網(wǎng)站多少錢,價格優(yōu)惠,收費合理。

1.使用框架來用于單元測試Java提供了若干用于單元測試的框架。

TestNG和JUnit是流行的測試框架。

JUnit和TestNG的一些重要功能:易于設(shè)置和運行。

支持注釋。

允許忽略或分組并一起執(zhí)行某些測試。

支持參數(shù)化測試,即通過在運行時指定不同的值來運行單元測試。

通過與構(gòu)建工具,如Ant,Maven和Gradle集成來支持自動化的測試執(zhí)行。

EasyMock是一個模擬框架,是單元測試框架,如JUnit和TestNG的補(bǔ)充。

EasyMock本身不是一個完整的框架。

它只是添加了創(chuàng)建模擬對象以便于測試的能力。

例如,我們想要測試的一個方法可以調(diào)用從數(shù)據(jù)庫獲取數(shù)據(jù)的DAO類。

在這種情況下,EasyMock可用于創(chuàng)建返回硬編碼數(shù)據(jù)的MockDAO。

這使我們能夠輕松地測試我們意向的方法,而不必?fù)?dān)心數(shù)據(jù)庫訪問。

2.謹(jǐn)慎使用測試驅(qū)動開發(fā)!測試驅(qū)動開發(fā)(TDD)是一個軟件開發(fā)過程,在這過程中,在開始任何編碼之前,我們基于需求來編寫測試。

由于還沒有編碼,測試初會失敗。

然后寫入小量的代碼以通過測試。

然后重構(gòu)代碼,直到被優(yōu)化。

目標(biāo)是編寫覆蓋所有需求的測試,而不是一開始就寫代碼,卻可能甚至都不能滿足需求。

TDD是偉大的,因為它導(dǎo)致簡單的模塊化代碼,且易于維護(hù)。

總體開發(fā)速度加快,容易發(fā)現(xiàn)缺陷。

此外,單元測試被創(chuàng)建作為TDD方法的副產(chǎn)品。

然而,TDD可能不適合所有的情況。

在設(shè)計復(fù)雜的項目中,專注于簡單的設(shè)計以便于通過測試用例,而不提前思考可能會導(dǎo)致巨大的代碼更改。

此外,TDD方法難以用于與遺留系統(tǒng),GUI應(yīng)用程序或與數(shù)據(jù)庫一起工作的應(yīng)用程序交互的系統(tǒng)。

另外,測試需要隨著代碼的改變而更新。

因此,在決定采用TDD方法之前,應(yīng)考慮上述因素,并應(yīng)根據(jù)項目的性質(zhì)采取措施。

3.測量代碼覆蓋率代碼覆蓋率衡量(以百分比表示)了在運行單元測試時執(zhí)行的代碼量。

通常,高覆蓋率的代碼包含未檢測到的錯誤的幾率要低,因為其更多的源代碼在測試過程中被執(zhí)行。

重慶電腦培訓(xùn)發(fā)現(xiàn)測量代碼覆蓋率的一些佳做法包括:使用代碼覆蓋工具,如Clover,Corbetura,JaCoCo或Sonar。

使用工具可以提高測試質(zhì)量,因為這些工具可以指出未經(jīng)測試的代碼區(qū)域,讓你能夠開發(fā)開發(fā)額外的測試來覆蓋這些領(lǐng)域。

android studio 怎么查找工程中無用的java文件

新建一個Android studio項目后,項目文件列表如圖所示:

但是,在文件列表中并沒有找到R.java文件。切換項目列表試圖為project,如圖:

依次,打開app--build--generated--source--r--debug,在debug中的兩個選項的子文件中分別有有一個R文件,既我們要找的R.java文件。

4

雙擊打開,即可看到R.java內(nèi)容。如圖所示:

java 哪些關(guān)鍵字 java未使用到

goto 保留關(guān)鍵字,沒有具體含義

abstract 表明類或者成員方法具有抽象屬性

assert 用來進(jìn)行程序調(diào)試

boolean 基本數(shù)據(jù)類型之一,布爾類型

break 提前跳出一個塊

byte 基本數(shù)據(jù)類型之一,字節(jié)類型

case 用在switch語句之中,表示其中的一個分支

catch 用在異常處理中,用來捕捉異常

char 基本數(shù)據(jù)類型之一,字符類型

class 類

const 保留關(guān)鍵字,沒有具體含義

continue 回到一個塊的開始處

default 默認(rèn),例如,用在switch語句中,表明一個默認(rèn)的分支

do 用在do-while循環(huán)結(jié)構(gòu)中

double 基本數(shù)據(jù)類型之一,雙精度浮點數(shù)類型

else 用在條件語句中,表明當(dāng)條件不成立時的分支

enum 枚舉

extends 表明一個類型是另一個類型的子類型,這里常見的類型有類和接口

final 用來說明最終屬性,表明一個類不能派生出子類,或者成員方法不能被覆蓋,或者成員域的值不能被改變,用來定義常量

finally 用于處理異常情況,用來聲明一個基本肯定會被執(zhí)行到的語句塊

float 基本數(shù)據(jù)類型之一,單精度浮點數(shù)類型

for 一種循環(huán)結(jié)構(gòu)的引導(dǎo)詞

goto 保留關(guān)鍵字,沒有具體含義

if 條件語句的引導(dǎo)詞

implements 表明一個類實現(xiàn)了給定的接口

import 表明要訪問指定的類或包

instanceof 用來測試一個對象是否是指定類型的實例對象

int 基本數(shù)據(jù)類型之一,整數(shù)類型

interface 接口

long 基本數(shù)據(jù)類型之一,長整數(shù)類型

native 用來聲明一個方法是由與計算機(jī)相關(guān)的語言(如C/C++/FORTRAN語言)實現(xiàn)的

new 用來創(chuàng)建新實例對象

package 包

private 一種訪問控制方式:私用模式

protected 一種訪問控制方式:保護(hù)模式

public 一種訪問控制方式:共用模式

return 從成員方法中返回數(shù)據(jù)

short 基本數(shù)據(jù)類型之一,短整數(shù)類型

static 表明具有靜態(tài)屬性

strictfp 用來聲明FP_strict(單精度或雙精度浮點數(shù))表達(dá)式遵循IEEE 754算術(shù)規(guī)范

super 表明當(dāng)前對象的父類型的引用或者父類型的構(gòu)造方法

switch 分支語句結(jié)構(gòu)的引導(dǎo)詞

synchronized 表明一段代碼需要同步執(zhí)行

this 指向當(dāng)前實例對象的引用

throw 拋出一個異常

throws 聲明在當(dāng)前定義的成員方法中所有需要拋出的異常

transient 聲明不用序列化的成員域

try 嘗試一個可能拋出異常的程序塊

void 聲明當(dāng)前成員方法沒有返回值

volatile 表明兩個或者多個變量必須同步地發(fā)生變化

while 用在循環(huán)結(jié)構(gòu)中

怎么知道代碼中存在垃圾代碼和冗余代碼?

一個好的集成開發(fā)環(huán)境能告訴你,以開發(fā)java的IDEA為例:

1、聲明卻未使用的變量:

它會建議你刪除該變量。

2、無用的初始值:

它也會建議你刪除初始值。

3、不必要的變量:

它會建議直接返回就行,不需要定義額外的變量。

4、可以簡化的if語句:

5、可以簡化的for語句:

6、一些潛在的可能引起bug的地方:

將會引起空指針異常

沒有檢查泛型

7、重復(fù)代碼:

重復(fù)的代碼可以考慮合并成公共的方法。

還有太多例子我就不舉例了,總之好的ide在開發(fā)過程中就能告訴我們很多潛在的問題,解決代碼不規(guī)范的地方,像eclipse也有專門的插件來檢查代碼。

當(dāng)然平時就養(yǎng)成好的開發(fā)習(xí)慣和好的代碼規(guī)范,長期積累下來在開發(fā)過程中自己就能解決掉一大堆冗余代碼。

java,在eclipse里定義類,總說某些變量或方法沒有被使用過

1、eclipse是開發(fā)環(huán)境,可以幫你提示代碼里出現(xiàn)的問題。這些問題分為兩種:error和warning,其中error的話程序就沒法運行了,warning只是告訴你代碼不完美。

2、未使用變量意思是,這個變量在程序里沒有被用過,也就是多余的,此時會以warning的形式提示你。

3、比如你一個類里定義了一個private類型的成員,且從未用過,對程序來說,它就是不需要的。

做靜態(tài)代碼分析都是用那個軟件的?

本文首先介紹了靜態(tài)代碼分析的基本概念及主要技術(shù),隨后分別介紹了現(xiàn)有 4 種主流 Java 靜態(tài)代碼分析工具 (Checkstyle,F(xiàn)indBugs,PMD,Jtest),最后從功能、特性等方面對它們進(jìn)行分析和比較,希望能夠幫助 Java 軟件開發(fā)人員了解靜態(tài)代碼分析工具,并選擇合適的工具應(yīng)用到軟件開發(fā)中。

引言

在 Java 軟件開發(fā)過程中,開發(fā)團(tuán)隊往往要花費大量的時間和精力發(fā)現(xiàn)并修改代碼缺陷。Java 靜態(tài)代碼分析(static code analysis)工具能夠在代碼構(gòu)建過程中幫助開發(fā)人員快速、有效的定位代碼缺陷并及時糾正這些問題,從而極大地提高軟件可靠性并節(jié)省軟件開發(fā)和測試成 本。目前市場上的 Java 靜態(tài)代碼分析工具種類繁多且各有千秋,因此本文將分別介紹現(xiàn)有 4 種主流 Java 靜態(tài)代碼分析工具 (Checkstyle,F(xiàn)indBugs,PMD,Jtest),并從功能、特性等方面對它們進(jìn)行分析和比較,希望能夠幫助 Java 軟件開發(fā)人員了解靜態(tài)代碼分析工具,并選擇合適的工具應(yīng)用到軟件開發(fā)中。

靜態(tài)代碼分析工具簡介

什么是靜態(tài)代碼分析

靜態(tài)代碼分析是指無需運行被測代碼,僅通過分析或檢查源程序的語法、結(jié)構(gòu)、過程、接口等來檢查程序的正確性,找出代碼隱藏的錯誤和缺陷,如參數(shù)不匹配,有歧義的嵌套語句,錯誤的遞歸,非法計算,可能出現(xiàn)的空指針引用等等。

在軟件開發(fā)過程中,靜態(tài)代碼分析往往先于動態(tài)測試之前進(jìn)行,同時也可以作為制定動態(tài)測試用例的參考。統(tǒng)計證明,在整個軟件開發(fā)生命周期中,30% 至 70% 的代碼邏輯設(shè)計和編碼缺陷是可以通過靜態(tài)代碼分析來發(fā)現(xiàn)和修復(fù)的。

但是,由于靜態(tài)代碼分析往往要求大量的時間消耗和相關(guān)知識的積累,因此對于軟件開發(fā)團(tuán)隊來說,使用靜態(tài)代碼分析工具自動化執(zhí)行代碼檢查和分析,能夠極大地提高軟件可靠性并節(jié)省軟件開發(fā)和測試成本。

靜態(tài)代碼分析工具的優(yōu)勢

1. 幫助程序開發(fā)人員自動執(zhí)行靜態(tài)代碼分析,快速定位代碼隱藏錯誤和缺陷。

2. 幫助代碼設(shè)計人員更專注于分析和解決代碼設(shè)計缺陷。

3. 顯著減少在代碼逐行檢查上花費的時間,提高軟件可靠性并節(jié)省軟件開發(fā)和測試成本。

Java 靜態(tài)代碼分析理論基礎(chǔ)和主要技術(shù)

缺陷模式匹配:缺陷模式匹配事先從代碼分析經(jīng)驗中收集足夠多的共性缺陷模式,將待分析代碼與已有的共性缺陷模式進(jìn)行模式匹配,從而完成軟件的安全分析。這種方式的優(yōu)點是簡單方便,但是要求內(nèi)置足夠多缺陷模式,且容易產(chǎn)生誤報。

類型推斷:類型推斷技術(shù)是指通過對代碼中運算對象類型進(jìn)行推理,從而保證代碼中每條語句都針對正確的類型執(zhí)行。這種技術(shù)首先將預(yù)定義一套類型機(jī)制,包括類 型等價、類型包含等推理規(guī)則,而后基于這一規(guī)則進(jìn)行推理計算。類型推斷可以檢查代碼中的類型錯誤,簡單,高效,適合代碼缺陷的快速檢測。

模型檢查:模型檢驗建立于有限狀態(tài)自動機(jī)的概念基礎(chǔ)之上,這一理論將被分析代碼抽象為一個自動機(jī)系統(tǒng),并且假設(shè)該系統(tǒng)是有限狀態(tài)的、或者是可以通過抽象歸 結(jié)為有限狀態(tài)。模型檢驗過程中,首先將被分析代碼中的每條語句產(chǎn)生的影響抽象為一個有限狀態(tài)自動機(jī)的一個狀態(tài),而后通過分析有限狀態(tài)機(jī)從而達(dá)到代碼分析的 目的。模型檢驗主要適合檢驗程序并發(fā)等時序特性,但是對于數(shù)據(jù)值域數(shù)據(jù)類型等方面作用較弱。

數(shù)據(jù)流分析:數(shù)據(jù)流分析也是一種軟件驗證技術(shù),這種技術(shù)通過收集代碼中引用到的變量信息,從而分析變量在程序中的賦值、引用以及傳遞等情況。對數(shù)據(jù)流進(jìn)行 分析可以確定變量的定義以及在代碼中被引用的情況,同時還能夠檢查代碼數(shù)據(jù)流異常,如引用在前賦值在后、只賦值無引用等。數(shù)據(jù)流分析主要適合檢驗程序中的 數(shù)據(jù)域特性。

現(xiàn)有主流 Java 靜態(tài)分析工具

Checkstyle

Checkstyle 是 SourceForge 的開源項目,通過檢查對代碼編碼格式,命名約定,Javadoc,類設(shè)計等方面進(jìn)行代碼規(guī)范和風(fēng)格的檢查,從而有效約束開發(fā)人員更好地遵循代碼編寫規(guī)范。

Checkstyle 提供了支持大多數(shù)常見 IDE 的插件,文本主要使用 Eclipse 中的 Checkstyle 插件。如下圖 1 所示,Checkstyle 對代碼進(jìn)行編碼風(fēng)格檢查,并將檢查結(jié)果顯示在 Problems 視圖中。圖中,代碼編輯器中每個放大鏡圖標(biāo)表示一個 Checkstyle 找到的代碼缺陷。開發(fā)人員可通過在 Problems 視圖中查看錯誤或警告詳細(xì)信息。

圖 1. 使用 Checkstyle 進(jìn)行編碼風(fēng)格檢查

此外,Checkstyle 支持用戶根據(jù)需求自定義代碼檢查規(guī)范,在下圖 2 中的配置面板中,用戶可以在已有檢查規(guī)范如命名約定,Javadoc,塊,類設(shè)計等方面的基礎(chǔ)上添加或刪除自定義檢查規(guī)范。

圖 2. 使用 Checkstyle 添加自定義代碼檢查規(guī)范

FindBugs

FindBugs 是由馬里蘭大學(xué)提供的一款開源 Java 靜態(tài)代碼分析工具。FindBugs 通過檢查類文件或 JAR 文件,將字節(jié)碼與一組缺陷模式進(jìn)行對比從而發(fā)現(xiàn)代碼缺陷,完成靜態(tài)代碼分析。FindBugs 既提供可視化 UI 界面,同時也可以作為 Eclipse 插件使用。文本將主要使用將 FindBugs 作為 Eclipse 插件。在安裝成功后會在 eclipse 中增加 FindBugs perspective,用戶可以對指定 Java 類或 JAR 文件運行 FindBugs,此時 FindBugs 會遍歷指定文件,進(jìn)行靜態(tài)代碼分析,并將代碼分析結(jié)果顯示在 FindBugs perspective 的 bugs explorer 中,如下圖 3 所示:

圖 3. 使用 FindBugs 進(jìn)行靜態(tài)代碼分析

圖中 Bug Explorer 中的灰色圖標(biāo)處為 Bug 類型,每種分類下紅色圖標(biāo)表示 bug 較為嚴(yán)重,黃色的圖標(biāo)表示 bug 為警告程度。Propreties 列出了 bug 的描述信息及修改方案。

此外,F(xiàn)indBugs 還為用戶提供定制 Bug Pattern 的功能。用戶可以根據(jù)需求自定義 FindBugs 的代碼檢查條件,如下圖 4 所示:

圖 4. 使用 FindBugs 添加自定義代碼檢查規(guī)范

PMD

PMD 是由 DARPA 在 SourceForge 上發(fā)布的開源 Java 代碼靜態(tài)分析工具。PMD 通過其內(nèi)置的編碼規(guī)則對 Java 代碼進(jìn)行靜態(tài)檢查,主要包括對潛在的 bug,未使用的代碼,重復(fù)的代碼,循環(huán)體創(chuàng)建新對象等問題的檢驗。PMD 提供了和多種 Java IDE 的集成,例如 Eclipse,IDEA,NetBean 等。本文主要使用 PMD 以插件方式與 Eclipse 集成。如下圖 5 所示:在 Violations Overview 視圖中,按照代碼缺陷嚴(yán)重性集中顯示了 PMD 靜態(tài)代碼分析的結(jié)果。

圖 5. 使用 PMD 進(jìn)行靜態(tài)代碼分析

PMD 同樣也支持開發(fā)人員對代碼檢查規(guī)范進(jìn)行自定義配置。開發(fā)人員可以在下圖 6 中的面板中添加、刪除、導(dǎo)入、導(dǎo)出代碼檢查規(guī)范。

圖 6. 使用 PMD 添加自定義代碼檢查規(guī)范

Jtest

Jtest 是 Parasoft 公司推出的一款針對 Java 語言的自動化代碼優(yōu)化和測試工具,Jtest 的靜態(tài)代碼分析功能能夠按照其內(nèi)置的超過 800 條的 Java 編碼規(guī)范自動檢查并糾正這些隱蔽且難以修復(fù)的編碼錯誤。同時,還支持用戶自定義編碼規(guī)則,幫助用戶預(yù)防一些特殊用法的錯誤。Jtest 提供了基于 Eclipse 的插件安裝。Jtest 支持開發(fā)人員對 Java 代碼進(jìn)行編碼規(guī)范檢查,并在 Jtask 窗口中集中顯示檢查結(jié)果,如下圖 7 所示:

圖 7. 使用 Jtest 進(jìn)行靜態(tài)代碼分析

同時,Jtest 還提供了對用戶定制代碼檢查配置甚至自定義編碼規(guī)則的支持,這一功能使得開發(fā)人員可以基于不同場景定制所需要的編碼規(guī)范,如圖 8 所示:

圖 8. 使用 Jtest 添加自定義代碼檢查規(guī)范

Java 靜態(tài)分析工具對比

本章節(jié)將從以下幾個方面對上述 Java 靜態(tài)分析工具進(jìn)行比較:

應(yīng)用技術(shù)及分析對象

下表 1 列出了不同工具的分析對象及應(yīng)用技術(shù)對比:

表 1. 不同工具的分析對象及應(yīng)用技術(shù)對比

Java 靜態(tài)分析工具

分析對象

應(yīng)用技術(shù)

Checkstyle ? ?Java 源文件 ? ?缺陷模式匹配 ?

FindBugs ? ?字節(jié)碼 ? ?缺陷模式匹配;數(shù)據(jù)流分析 ?

PMD ? ?Java 源代碼 ? ?缺陷模式匹配 ?

Jtest ? ?Java 源代碼 ? ?缺陷模式匹配;數(shù)據(jù)流分析 ?

內(nèi)置編程規(guī)范

Checkstyle:

Javadoc 注釋:檢查類及方法的 Javadoc 注釋

命名約定:檢查命名是否符合命名規(guī)范

標(biāo)題:檢查文件是否以某些行開頭

Import 語句:檢查 Import 語句是否符合定義規(guī)范

代碼塊大小,即檢查類、方法等代碼塊的行數(shù)

空白:檢查空白符,如 tab,回車符等

修飾符:修飾符號的檢查,如修飾符的定義順序

塊:檢查是否有空塊或無效塊

代碼問題:檢查重復(fù)代碼,條件判斷,魔數(shù)等問題

類設(shè)計:檢查類的定義是否符合規(guī)范,如構(gòu)造函數(shù)的定義等問題

FindBugs:

Bad practice 壞的實踐:常見代碼錯誤,用于靜態(tài)代碼檢查時進(jìn)行缺陷模式匹配

Correctness 可能導(dǎo)致錯誤的代碼,如空指針引用等

國際化相關(guān)問題:如錯誤的字符串轉(zhuǎn)換

可能受到的惡意攻擊,如訪問權(quán)限修飾符的定義等

多線程的正確性:如多線程編程時常見的同步,線程調(diào)度問題。

運行時性能問題:如由變量定義,方法調(diào)用導(dǎo)致的代碼低效問題。

PMD:

可能的 Bugs:檢查潛在代碼錯誤,如空 try/catch/finally/switch 語句

未使用代碼(Dead code):檢查未使用的變量,參數(shù),方法

復(fù)雜的表達(dá)式:檢查不必要的 if 語句,可被 while 替代的 for 循環(huán)

重復(fù)的代碼:檢查重復(fù)的代碼

循環(huán)體創(chuàng)建新對象:檢查在循環(huán)體內(nèi)實例化新對象

資源關(guān)閉:檢查 Connect,Result,Statement 等資源使用之后是否被關(guān)閉掉

Jtest

可能的錯誤:如內(nèi)存破壞、內(nèi)存泄露、指針錯誤、庫錯誤、邏輯錯誤和算法錯誤等

未使用代碼:檢查未使用的變量,參數(shù),方法

初始化錯誤:內(nèi)存分配錯誤、變量初始化錯誤、變量定義沖突

命名約定:檢查命名是否符合命名規(guī)范

Javadoc 注釋:檢查類及方法的 Javadoc 注釋

線程和同步:檢驗多線程編程時常見的同步,線程調(diào)度問題

國際化問題:

垃圾回收:檢查變量及 JDBC 資源是否存在內(nèi)存泄露隱患

錯誤檢查能力

為比較上述 Java 靜態(tài)分析工具的代碼缺陷檢測能力,本文將使用一段示例代碼進(jìn)行試驗,示例代碼中將涵蓋我們開發(fā)中的幾類常見錯誤,如引用操作、對象操作、表達(dá)式復(fù)雜化、數(shù) 組使用、未使用變量或代碼段、資源回收、方法調(diào)用及代碼設(shè)計幾個方面。最后本文將分別記錄在默認(rèn)檢查規(guī)范設(shè)置下,不同工具對該示例代碼的分析結(jié)果。以下為 示例代碼 Test.java。其中,代碼的注釋部分列舉了代碼中可能存在的缺陷。

清單 1. Test.java 示例代碼

package Test;import java.io.*;public class Test {/** ? ? * Write the bytes from input stream to output stream. ? ? * The input stream and output stream are not closed. ? ? * @param is ? ? * @param os ? ? * @throws IOException ? ? */public boolean copy(InputStream is, OutputStream os)throws IOException {intcount = 0;//缺少空指針判斷byte[] buffer =new byte[1024];while((count = is.read(buffer)) = 0) {os.write(buffer,0, count);}//未關(guān)閉I/O流returntrue;}/** ? ? * ? ? * @param a ? ? * @param b ? ? * @param ending ? ? * @return copy the elements from a to b, and stop when meet element ending ? ? */publicvoid copy(String[] a, String[] b, String ending){intindex;String temp =null;//空指針錯誤System.out.println(temp.length());//未使用變量intlength=a.length;for(index=0; indexa.length; index++){//多余的if語句if(true){//對象比較 應(yīng)使用equalsif(temp==ending){break;}//缺少 數(shù)組下標(biāo)越界檢查b[index]=temp;}}}/**? ? ?*? ? ?* @param file? ? ?* @return file contents as stri if file does not exist? ? ?*/public void? readFile(File file) {InputStream is =null;OutputStream os =null;try{is =new BufferedInputStream(newFileInputStream(file));os =new ByteArrayOutputStream();//未使用方法返回值copy(is,os);is.close();os.close();}catch (IOException e) {//可能造成I/O流未關(guān)閉e.printStackTrace();}finally{//空的try/catch/finally塊}}}

通過以上測試代碼,我們對已有 Java 靜態(tài)代碼分析工具的檢驗結(jié)果做了如下比較,如下表 2 所示。

表 2. Java 靜態(tài)代碼分析工具對比

代碼缺陷分類

示例

Checkstyle

FindBugs

PMD

Jtest

引用操作 ? ?空指針引用 ? ?√ ? ?√ ? ?√ ? ?√ ?

對象操作 ? ?對象比較(使用 == 而不是 equals) ? ?? ? ?√ ? ?√ ? ?√ ?

表達(dá)式復(fù)雜化 ? ?多余的 if 語句 ? ?? ? ?? ? ?√ ? ?? ?

數(shù)組使用 ? ?數(shù)組下標(biāo)越界 ? ?? ? ?? ? ?? ? ?√ ?

未使用變量或代碼段 ? ?未使用變量 ? ?? ? ?√ ? ?√ ? ?√ ?

資源回收 ? ?I/O 未關(guān)閉 ? ?? ? ?√ ? ?? ? ?√ ?

方法調(diào)用 ? ?未使用方法返回值 ? ?? ? ?√ ? ?? ? ?? ?

代碼設(shè)計 ? ?空的 try/catch/finally 塊 ? ?? ? ?? ? ?√ ? ?? ?

由表中可以看出幾種工具對于代碼檢查各有側(cè)重。其中,Checkstyle 更偏重于代碼編寫格式,及是否符合編碼規(guī)范的檢驗,對代碼 bug 的發(fā)現(xiàn)功能較弱;而 FindBugs,PMD,Jtest 著重于發(fā)現(xiàn)代碼缺陷。在對代碼缺陷檢查中,這三種工具在針對的代碼缺陷類別也各有不同,且類別之間有重疊。

總結(jié)

本文分別從功能、特性和內(nèi)置編程規(guī)范等方面詳細(xì)介紹了包括 Checkstyle,F(xiàn)indBugs,PMD,Jtest 在內(nèi)的四種主流 Java 靜態(tài)代碼分析工具,并通過一段 Java 代碼示例對這四種工具的代碼分析能力進(jìn)行比較。由于這四種工具內(nèi)置編程規(guī)范各有不同,因此它們對不同種類的代碼問題的發(fā)現(xiàn)能力也有所不同。其中 Checkstyle 更加偏重于代碼編寫格式檢查,而 FindBugs,PMD,Jtest 著重于發(fā)現(xiàn)代碼缺陷。最后,希望本文能夠幫助 Java 軟件開發(fā)和測試人員進(jìn)一步了解以上四種主流 Java 靜態(tài)分析工具,并幫助他們根據(jù)需求選擇合適的工具。

網(wǎng)頁題目:檢測未使用的java代碼,java error不需要捕捉
瀏覽路徑:http://chinadenli.net/article26/dsegjcg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)建站公司域名注冊用戶體驗網(wǎng)站設(shè)計公司云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司