findbug
11757 ワード
Findbugs java bug , bug , , Findbugs java , *.class 。 , , , , 。 : , null check, null check, if , , , "==", StringBuffer 。 ( , ), ( bug , , )。
Findbugs , JAR , 。Findbugs , 60 Bad practice,80 Correctness,1 Internationalization,12 Malicious code vulnerability,27 Multithreaded correctness,23 Performance,43 Dodgy。
Bad practice
, :
HE: equals(), hashCode(); equals(),
Object.hashCode(); hashCode(), equals(); hashCode(), Object.equals(); equals(), Object.hashCode()。
SQL:Statement execute ; Prepared Statement 。
DE: , , , 。
Correctness
, :
NP: ; , ; null;null ;null ; @NonNull null ; @NonNull null。
Nm: hashcode() , Object hashCode(); tostring() , Object toString(); ; 。
SQL: Prepared Statement 0 ; ResultSet 0 。
UwF: write null, null, ; write。
Internationalization
upper lowercase , , 。
Malicious code vulnerability
, , :
FI: finalize() protected, public 。
MS: ; Hashtable; package protected 。
Multithreaded correctness
, , :
ESync: , 。
MWN: notify(), IllegalMonitorStateException ;
wait()。
No: notify() notifyAll(), 。
SC: Thread.start(), 。
Performance
, :
DM: Boolean , Boolean.valueOf(…);
Integer.toString(1) new Integer(1).toString(); float , valueOf 。
SIC: , static。
SS: , static。
UrF: read, 。
UuF: , 。
Dodgy
, , :
CI: final protected 。
DLS: , ; null, 。
ICAST: , 。
INT: , X <= Integer.MAX_VALUE。
NP: readline() , null; , null。
REC: Exception, RuntimeException。
ST: , static 。
1、 Ant
http://findbugs.sourceforge.net/downloads.html Findbugs, 1.3.0, 2007 11 8 。 lib , Ant 。FindBugs j2se1.4.0 , 256MB 。
Ant , Findbugs :
<path id="findbugs.path" >
<fileset dir ="${lib.home}/findbugs-1.3.0">
<include name ="**/*.jar"/>
</fileset>
</path>
Findbugs :
<taskdef name="findbugs"
classname="edu.umd.cs.findbugs.anttask.FindBugsTask"
classpathref ="findbugs.path"/>
Findbugs :
<property name ="findbugs.home" value ="${lib.home}/findbugs-1.3.0"/>
<!-- findbugs home,findbugs task -->
<target name ="findbugs">
<findbugs home ="${findbugs.home}" includeFilter="${findbugs_include_filter}"
excludeFilter="${findbugs_exclude_filter}"
jvmargs="-Xmx384m" output ="html"
outputFile ="d:\test.html">
<class location ="${build.home}/WEB-INF/classes/"/>
<!-- findbugs -->
<auxClasspath path="${lib.home}/findbugs-1.3.0/lib/findbugs-ant.jar"/>
<auxClasspath>
<fileset dir="${build.home}/WEB-INF/lib" includes="**/*.jar" />
</auxClasspath>
<!-- -->
<sourcePath path ="${src.home}"/>
<!-- -->
</findbugs >
</target >
ant findbugs 。
2、Eclipse
Eclipse Findbugs CheckStyle , :
a. Eclipse Help->Software Updates->Find and Install
b. Search for new features to install Next
c. New Remote Site...
d. ( :Findbugs Plug-in) URL:http://findbugs.cs.umd.edu/eclipse
e.
Findbugs , Windows -> Show View -> Other… -> FindBugs -> BugDetails Bug Details 。
Package Explorer Navigator , Java , , “Find Bugs” , “Find Bugs” “Clear Bug Markers” 。
“Find Bugs”, Problems 。( )
FindBugs Problems , , , , , Eclipse 。
Problems , , 。
Problems , , , , “Show Bug Details”。
, Bug Details , 。 , , , Bug Details , 。
, Properties, FindBugs Findbugs 。
3、
bug , , bug 。 , bug 。 , 。 xml ,xml :
<FindBugsFilter>
<!-- bugcode HE -->
<Match>
<BugCode name ="HE"/>
</Match>
<!-- bug -->
<Match class ="com.foobar.AClass"/>
<!-- bugcode HE -->
<Match class ="com.foobar.BClass">
<BugCode name ="HE"/>
</Match>
<!-- AMethod BMethod bugcode HE -->
<Match class ="com.foobar.CClass">
<Or>
<Method name ="AMethod"/>
<Method name ="BMethod"/>
</Or>
<BugCode name ="HE"/>
</Match>
</FindBugsFilter>
4、Findbugs :
<FindBugsFilter>
<!-- bug -->
<Match>
<Class name="com.foobar.MyClass" />
</Match>
<!-- bugcode HE -->
<Match class ="com.foobar.BClass">
<BugCode name ="HE"/>
</Match>
<!-- bug -->
<Match>
<Class name="com.foobar.MyClass"/ >
<Bug code="DE,UrF,SIC" />
</Match>
<!-- bugcode HE -->
<Match>
<BugCode name ="HE"/>
</Match>
<!-- bugcode DE,UrF,SIC -->
<Match>
<Bug code="DE,UrF,SIC" />
</Match>
<!-- -->
<Match>
<Bug category="PERFORMANCE" />
</Match>
<!-- bugcode DC -->
<Match>
<Class name="com.foobar.MyClass" />
<Or>
<Method name="frob" params="int,java.lang.String" returns="void" />
<Method name="blat" params="" returns="boolean" />
</Or>
<Bug code="DC" />
</Match>
<!-- AMethod BMethod bugcode DE,UrF,SIC -->
<Match>
<Class name="com.foobar.MyClass" />
<Or>
<Method name ="AMethod"/>
<Method name ="BMethod"/>
</Or>
<BugCode name ="DE,UrF,SIC "/>
</Match>
<!— bug OS_OPEN_STREAM -->
<Match>
<Class name="com.foobar.MyClass" />
<Method name="writeDataToFile" />
<Bug pattern="OS_OPEN_STREAM" />
</Match>
<!— 2 bug DLS_DEAD_LOCAL_STORE -->
<Match>
<Class name="com.foobar.MyClass" />
<Method name="someMethod" />
<Bug pattern="DLS_DEAD_LOCAL_STORE" />
<Priority value="2" />
</Match>
<!— bugcode bug -->
<!— bugcode UUF -->
<Match>
<Class name="~.*\.Messages" />
<Bug code="UUF" />
</Match>
<!— bugcode MS -->
<Match>
<Package name="~.*\.internal" />
<Bug code="MS" />
</Match>
<!—ui bug SIC_INNER_SHOULD_BE_STATIC_ANON -->
<Match>
<Package name="~com\.foobar\.fooproject\.ui.*" />
<Bug pattern="SIC_INNER_SHOULD_BE_STATIC_ANON" />
</Match>
<!— bugcode bug -->
<!— void main(String[]) bug DM_EXIT -->
<Match>
<Method returns="void" name="main" params="java.lang.String[]" />
<Bug pattern="DM_EXIT" />
</Match>
<!— com.foobar.DebugInfo bugcode UuF -->
<Match>
<Field type="com.foobar.DebugInfo" />
<Bug code="UuF" />
</Match>
</FindBugsFilter>
参考資料:http://tidus2005.iteye.com/blog/462212