findbug


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