ÎҵĵØÅÌÎÒ×öÖ÷£¡ ²©¿Í£ºhttp://tester2test.cnblogs.com/ ¡¡ msn:win_soft@163.com

Java´úÂëȱÏÝ×Ô¶¯·ÖÎö¹¤¾ß½éÉÜ

ÉÏһƪ / ÏÂһƪ  2007-07-12 12:19:40 / ¸öÈË·ÖÀࣺÆäËû

 

Java´úÂëȱÏÝ×Ô¶¯·ÖÎö¹¤¾ß½éÉÜ51TestingÈí¼þ²âÊÔÍø$Ye$C{T E g

7yIupjiNg?z0                                                                                                    »ÆÎý²¨

PT`O8qP(_0 51TestingÈí¼þ²âÊÔÍø#]|FN,pP {

Java´úÂëȱÏÝ×Ô¶¯·ÖÎö¹¤¾ßÖ÷ÒªÓУºFindbugs¡¢PMDºÍCheckStyle¹¤¾ß¡£ÕâÀïÖصã½éÉÜFindbugsµÄʹÓ㬼òÒªÌá¼°PMDºÍCheckStyle¹¤¾ßµÄʹÓá£

c!i;z`*b(vKO~_0

1         FindBugsÊÇʲô£¿

p-e C g r'oZ L0FindBugs ÊÇÒ»¸öjava bytecode¾²Ì¬·ÖÎö¹¤¾ß£¬Ëü¿ÉÒÔ°ïÖújava¹¤³ÌʦÌá¸ß´úÂëÖÊÁ¿ÒÔ¼°ÅųýÒþº¬µÄȱÏÝ¡£

!Y8mMf5}D W5XKjU0

]0z d(O;G8J9S0FindBugs¼ì²éÀà»òÕß JAR Îļþ£¬½«×Ö½ÚÂëÓëÒ»×éȱÏÝģʽ½øÐжԱÈÒÔ·¢ÏÖ¿ÉÄܵÄÎÊÌâ¡£51TestingÈí¼þ²âÊÔÍø#Z{;{L&U.W

HH&A.MH{Uoae.uD0ÓÐÁ˾²Ì¬·ÖÎö¹¤¾ß£¬¾Í¿ÉÒÔÔÚ²»Êµ¼ÊÔËÐгÌÐòµÄÇé¿ö¶ÔÈí¼þ½øÐзÖÎö¡£FindBugs²»ÊÇͨ¹ý·ÖÎöÀàÎļþµÄÐÎʽ»ò½á¹¹À´È·¶¨³ÌÐòµÄÒâͼ£¬¶øÊÇͨ³£Ê¹Óà Visitor ģʽ½øÐзÖÎö£¨Visitor ģʽµÄ¸ü¶àÐÅÏ¢£©¡£51TestingÈí¼þ²âÊÔÍøL8GKMLb,u0D

51TestingÈí¼þ²âÊÔÍø&S5S,|1JX EPF

 

N N5Y] ]C#x ]0

2         FindBugs¿ÉÒÔ×öʲô£¿

51TestingÈí¼þ²âÊÔÍøO"ZD!x&I9{S

FindBugsÌṩÁË35¸ö¼ì²âÆ÷À´¼ì²â×Ö½ÚÂëÖпÉÄܵÄȱÏÝ¡£¿ÉÒÔ×öµÄÊÂÇéÖ÷ÒªÓУº51TestingÈí¼þ²âÊÔÍø#i Vy Eh Kr0C+{

2.1       ÕÒ³ö hash equals ²»Æ¥Åä

r%v!u'm5b0ÕÒÓë equals() ºÍ hashCode() µÄʵÏÖÏà¹ØµÄ¼¸¸öÎÊÌâ¡£ÕâÁ½¸ö·½·¨·Ç³£ÖØÒª£¬ÒòΪ¼¸ºõËùÓлùÓÚ¼¯ºÏµÄÀà---List¡¢Map¡¢Set µÈ¶¼µ÷ÓÃËüÃÇ¡£Ò»°ãÀ´Ëµ£¬Õâ¸ö¼ì²âÆ÷Ñ°ÕÒÁ½ÖÖ²»Í¬ÀàÐ͵ÄÎÊÌâ:

)| ^`:Um&C wyyn0 51TestingÈí¼þ²âÊÔÍøVj tK'L9t `6P

¢Ùµ±Ò»¸öÀàÖØд¶ÔÏóµÄ equals() ·½·¨£¬µ«ÊÇûÓÐÖØдËüµÄ hashCode ·½·¨£¬»òÕßÏà·´µÄÇé¿öʱ¡£ 51TestingÈí¼þ²âÊÔÍø,ey5T? d7m"bVN

51TestingÈí¼þ²âÊÔÍø3i@ IX2w K@1w

¢Ú¶¨ÒåÒ»¸ö co-variant °æ±¾µÄ equals() »ò compareTo() ·½·¨¡£ÀýÈ磬 Bob ÀඨÒåÆä equals() ·½·¨Îª²¼¶û equals(Bob) £¬Ëü¸²¸ÇÁ˶ÔÏóÖж¨ÒåµÄ equals() ·½·¨¡£ÒòΪ Java ´úÂëÔÚ±àÒëʱ½âÎöÖØÔØ·½·¨µÄ·½Ê½£¬ÔÚÔËÐÐʱʹÓõļ¸ºõ×ÜÊÇÔÚ¶ÔÏóÖж¨ÒåµÄÕâ¸ö°æ±¾µÄ·½·¨£¬¶ø²»ÊÇÔÚ Bob Öж¨ÒåµÄÄÇÒ»¸ö£¨³ý·ÇÏÔʽ½« equals() ·½·¨µÄ²ÎÊýÇ¿ÖÆת»»Îª Bob ÀàÐÍ£©¡£Òò´Ë£¬µ±Õâ¸öÀàµÄÒ»¸öʵÀý·ÅÈëµ½À༯ºÏÖеÄÈκÎÒ»¸öÖÐʱ£¬Ê¹ÓõÄÊÇ Object.equals() °æ±¾µÄ·½·¨£¬¶ø²»ÊÇÔÚ Bob Öж¨ÒåµÄ°æ±¾¡£ÔÚÕâÖÖÇé¿öÏ£¬ Bob ÀàÓ¦µ±¶¨ÒåÒ»¸ö½ÓÊÜÀàÐÍΪ Object µÄ²ÎÊýµÄ equals() ·½·¨¡£ 51TestingÈí¼þ²âÊÔÍø7eU/~W^F3|nz%~n

51TestingÈí¼þ²âÊÔÍø[ G5\2Iy

 51TestingÈí¼þ²âÊÔÍø f$M4Z$Bn-_

2.2       ¼ì²â£ººöÂÔ·½·¨·µ»ØÖµ

D-hzu7L$w(d4O+q+m0Õâ¸ö¼ì²âÆ÷²éÕÒ´úÂëÖкöÂÔÁ˲»Ó¦¸ÃºöÂԵķ½·¨·µ»ØÖµµÄµØ·½¡£ÕâÖÖÇé¿öµÄÒ»¸ö³£¼ûÀý×ÓÊÇÔÚµ÷Óà String ·½·¨Ê±£¬ÀýÈç:51TestingÈí¼þ²âÊÔÍøAiTgn

&a"LlZ G'm"Z,a(y'A01 String aString = "bob";

wt-v#Fn Q/kq7cV0 51TestingÈí¼þ²âÊÔÍøF;}0T} o&bez(_

2 b.replace('b', 'p');

0? T`gx4W5fg)i0

4E.G-RP&p-D03 if(b.equals("pop"))

pP9V~T-h0 51TestingÈí¼þ²âÊÔÍøW7Y)G@2tk v c

Õâ¸ö´íÎóºÜ³£¼û¡£ÔÚµÚ 2 ÐУ¬³ÌÐòÔ±ÈÏΪËûÒѾ­Óà p Ìæ»»ÁË×Ö·û´®ÖеÄËùÓÐ b¡£È·ÊµÊÇÕâÑù£¬µ«ÊÇËûÍü¼ÇÁË×Ö·û´®ÊDz»¿É±äµÄ¡£ËùÓÐÕâÀà·½·¨¶¼·µ»ØÒ»¸öÐÂ×Ö·û´®£¬¶ø´ÓÀ´²»»á¸Ä±äÏûÏ¢µÄ½ÓÊÕÕß¡£

?9puO fA5Q1V/hzf0 51TestingÈí¼þ²âÊÔÍøPyih8c!p@2~/e-X5U&BN

 51TestingÈí¼þ²âÊÔÍø(ZW+GrK2o

2.3       ¼ì²â£ºNull Ö¸Õë¶Ô null µÄ½âÒýÓã¨dereference£©ºÍÈßÓà±È½Ï

51TestingÈí¼þ²âÊÔÍøIIl%r|#v

Õâ¸ö¼ì²âÆ÷²éÕÒÁ½ÀàÎÊÌâ¡£Ëü²éÕÒ´úÂë·¾¶½«»á»òÕß¿ÉÄÜÔì³É null Ö¸ÕëÒì³£µÄÇé¿ö£¬Ëü»¹²éÕÒ¶Ô null µÄÈßÓà±È½ÏµÄÇé¿ö¡£ÀýÈ磬Èç¹ûÁ½¸ö±È½ÏÖµ¶¼Îª null£¬ÄÇôËüÃǾÍÊÇÈßÓàµÄ²¢¿ÉÄܱíÃ÷´úÂë´íÎó¡£FindBugs ÔÚ¿ÉÒÔÈ·¶¨Ò»¸öֵΪ null ¶øÁíÒ»¸öÖµ²»Îª null ʱ£¬¼ì²âÀàËƵĴíÎó£¬ÀýÈ磺 51TestingÈí¼þ²âÊÔÍø)Q-vskt2_z)c

;fa2u,Ux2S~D;e01 Person person = aMap.get("bob");

9WkZo$r4f5vS0 51TestingÈí¼þ²âÊÔÍø.E'dF&[1RHO9r[0S(Ii

2 if (person != null) {

qB9t l%d Ln#D B G8C0 51TestingÈí¼þ²âÊÔÍøp/D0j7t\!lg*n

3      person.updateAccessTime();51TestingÈí¼þ²âÊÔÍø%mu0z [:^/`rsk5|)z

4} xIN%uLc^5{04 }

C V*VMM^C2r{5O0

-s;F+Z,V'E0n!QH05 String name = person.getName();

(zW5t:bs U.RL_ @0

2KT8x x M^&y @!W:H:`p*a0ÔÚÕâ¸öÀý×ÓÖУ¬Èç¹ûµÚ 1 ÐÐµÄ Map ²»°üÀ¨Ò»¸öÃûΪ“bob”µÄÈË£¬ÄÇôÔÚµÚ 5 ÐÐѯÎÊ person µÄÃû×Öʱ¾Í»á³öÏÖ null Ö¸ÕëÒì³£¡£ÒòΪ FindBugs ²»ÖªµÀ map ÊÇ·ñ°üº¬“bob”£¬ËùÒÔËü½«µÚ 5 Ðбê¼ÇΪ¿ÉÄÜ null Ö¸ÕëÒì³£¡£ 51TestingÈí¼þ²âÊÔÍø G-g*K%V*@wh CPO

P4X x1{wFs_0 

.xrUs[7[-}0

2.4       ¼ì²â£º³õʼ»¯Ö®Ç°¶ÁÈ¡×Ö¶Î

L |&@])bh0Õâ¸ö¼ì²âÆ÷Ñ°ÕÒÔÚ¹¹Ô캯ÊýÖгõʼ»¯Ö®Ç°±»¶ÁÈ¡µÄ×ֶΡ£Õâ¸ö´íÎóͨ³£ÊÇÓÉʹÓÃ×Ö¶ÎÃû¶ø²»Êǹ¹Ô캯Êý²ÎÊýÒýÆðµÄ£¬ÀýÈçÔÚ¹¹Ô캯ÊýÖжÁȡδ³õʼ»¯µÄ×Ö¶Î:

E Gk9P%Jq1J0 51TestingÈí¼þ²âÊÔÍøC4q7Y'{|g^#M }`(X

1 public class Thing {

3CcC4\&Le @0 51TestingÈí¼þ²âÊÔÍø4T*hu Pry3d*C Y

2      private List actions;51TestingÈí¼þ²âÊÔÍøKL {.ak

4]8NG&f1S{r03      public Thing(String startingActions) {51TestingÈí¼þ²âÊÔÍø|/dt.K+_)Fxi

#Y_!Kj}pE04       StringTokenizer tokenizer = new StringTokenizer(startingActions);51TestingÈí¼þ²âÊÔÍø Tr3y3Ro;C

bSpFo05          while (tokenizer.hasMoreTokens()) {51TestingÈí¼þ²âÊÔÍø} rFO7MW+`2l:PF

v(Od:Fm'D9abD.d#N^06              actions.add(tokenizer.nextToken());51TestingÈí¼þ²âÊÔÍø#NK@.S2PP

51TestingÈí¼þ²âÊÔÍø!Y5[pM(kO4A b9c&[

7       } 51TestingÈí¼þ²âÊÔÍøI4}4u.v!\/z

ke @ md.j]!U%]:q,x08      }

(m mK q Y'?0

F%Uvu/O:sX&[09 }51TestingÈí¼þ²âÊÔÍøf%~;d3Jp4@2? a

51TestingÈí¼þ²âÊÔÍøo OPjO:N Jr

ÔÚÕâ¸öÀý×ÓÖУ¬µÚ 6 Ðн«²úÉúÒ»¸ö null Ö¸ÕëÒì³££¬ÒòΪ±äÁ¿ actions »¹Ã»Óгõʼ»¯¡£

&~hI7UTDG&S9kp|%q,}0 51TestingÈí¼þ²âÊÔÍø5bs:} p-p.?#_m;I

 

7Ng7mXU0

2.5       ÃüÃû¼ì²é

k g\ f-M0¶Ô±ê×¼ Java ÃüÁî¹æ·¶µÄ²âÊÔ£º±äÁ¿Ãû³Æ²»Ó¦Ì«¶Ì£»·½·¨Ãû³Æ²»Ó¦¹ý³¤£»ÀàÃû³ÆÓ¦µ±ÒÔСд×Öĸ¿ªÍ·£»·½·¨ºÍ×Ö¶ÎÃûÓ¦µ±ÒÔСд×Öĸ¿ªÍ·£¬µÈµÈ¡£

bn vJP.[o0 51TestingÈí¼þ²âÊÔÍøW1G%R"{}3n ^#kWq

 51TestingÈí¼þ²âÊÔÍø+j$X/X1@(^_*bA

2.6       δʹÓõĴúÂë¼ì²é

51TestingÈí¼þ²âÊÔÍø6i`HH&h\5V

²éÕÒ´ÓδʹÓõÄ˽ÓÐ×ֶκͱ¾µØ±äÁ¿¡¢Ö´Ðв»µ½µÄÓï¾ä¡¢´Óδµ÷ÓõÄ˽Óз½·¨£¬µÈµÈ¡£51TestingÈí¼þ²âÊÔÍøCR W/SG#t;|PHZN

51TestingÈí¼þ²âÊÔÍøR6Z(B i~ SN%k~1]

 51TestingÈí¼þ²âÊÔÍø'MX/mPk)u(BySS

2.7       ǶÌ×¼ì²é

51TestingÈí¼þ²âÊÔÍø8S&j(Z,rfM-Ax/H)f+v

ÀýÈ磺 switch Óï¾äÓ¦µ±ÓÐ default ¿é£¬Ó¦µ±±ÜÃâÉî¶ÈǶÌ×µÄ if ¿é£¬²»Ó¦µ±¸ø²ÎÊýÖØи³Öµ£¬²»Ó¦¸Ã¶Ô double Öµ½øÐÐÏàµÈ±È½Ï¡£

3g;H EahXr]0 51TestingÈí¼þ²âÊÔÍø,Lq9qW&\]3uE k

 51TestingÈí¼þ²âÊÔÍø dOG9ND4fJ^L9X

2.8       µ¼ÈëÓï¾ä¼ì²é

51TestingÈí¼þ²âÊÔÍø.|j|,u R$^$T-rJR

¼ì²é import Óï¾äµÄÎÊÌ⣬±ÈÈçͬһ¸öÀà±»µ¼ÈëÁ½´Î»òÕß±»µ¼Èë java.lang µÄÀàÖС£

N0_9HI;U"?X0 51TestingÈí¼þ²âÊÔÍøv/b)m~`,Y

 51TestingÈí¼þ²âÊÔÍø\ \:B.f2v W-x

2.9       JUnit ²âÊÔ¼ì²é

51TestingÈí¼þ²âÊÔÍøDY ? h0jan|;y

²éÕÒ²âÊÔÓÃÀýºÍ²âÊÔ·½·¨µÄÌض¨ÎÊÌ⣬ÀýÈç·½·¨Ãû³ÆµÄÕýȷƴд£¬ÒÔ¼° suite() ·½·¨ÊDz»ÊÇ static ºÍ public¡£

t.b,Wx+s'V7_0

ScH:fP1H RQ%M0 

q~%\-I z\ @ _0

2.10   ×Ö·û´®¼ì²é

,xyY4S.R0ÕÒ³ö´¦Àí×Ö·û´®Ê±Óöµ½µÄ³£¼ûÎÊÌ⣬ÀýÈçÖظ´µÄ×Ö·û´®±êÁ¿£¬µ÷Óà String ¹¹Ô캯Êý£¬¶Ô String ±äÁ¿µ÷Óà toString() ·½·¨¡£51TestingÈí¼þ²âÊÔÍø n8n,lH$D ] \5Ae

51TestingÈí¼þ²âÊÔÍø;N:a7]X`s]$sp

 

.nI Gc(\dz/Q0

2.11   À¨ºÅ¼ì²é

51TestingÈí¼þ²âÊÔÍø ?'?|(?:S9H

¼ì²é for¡¢ if¡¢ while ºÍ else Óï¾äÊÇ·ñʹÓÃÁËÀ¨ºÅ¡£

&c&jF.X!{B2p _0 51TestingÈí¼þ²âÊÔÍøy+B/HU7|J"eW

 

a?[}6yM2E9H9u0

2.12   ´úÂë³ß´ç¼ì²é

51TestingÈí¼þ²âÊÔÍøF#c9T)J'?L0\/k.~

²âÊÔ¹ý³¤µÄ·½·¨¡¢ÓÐÌ«¶à·½·¨µÄÀàÒÔ¼°Öع¹·½ÃæµÄÀàËÆÎÊÌâ¡£

(ukh~&j0 51TestingÈí¼þ²âÊÔÍø.ZQ `G+vB

 51TestingÈí¼þ²âÊÔÍø,XS6^3i;Ot(o|'Fu7_

2.13   ÖսắÊý¼ì²é

51TestingÈí¼þ²âÊÔÍøFtZ3AIa `p'^

ÒòΪÔÚ Java ÓïÑÔÖУ¬ finalize() ·½·¨²»ÊÇÄÇôÆձ飬ËüÃǵÄʹÓùæÔòËäÈ»ºÜÏêϸ£¬µ«ÊÇÈËÃǶÔËüÃÇÏà¶Ô²»ÊǺÜÊìϤ¡£ÕâÀà¼ì²é²éÕÒ finalize() ·½·¨µÄ¸÷ÖÖÎÊÌ⣬ÀýÈç¿ÕµÄÖսắÊý£¬µ÷ÓÃÆäËû·½·¨µÄ finalize() ·½·¨£¬¶Ô finalize() µÄÏÔʽµ÷Ó㬵ȵȡ£51TestingÈí¼þ²âÊÔÍøk+d G"j3wx sS_3EE

Vfiz^3|d})].Q0 

ZQ.M`:^_0

2.14   ¿Ë¡¼ì²é

$E6f%bAxr L,Z0ÓÃÓÚ clone() ·½·¨µÄйæÔò¡£·²ÊÇÖØд clone() ·½·¨µÄÀ඼±ØÐëʵÏÖ Cloneable£¬ clone() ·½·¨Ó¦¸Ãµ÷Óà super.clone()£¬¶ø clone() ·½·¨Ó¦¸ÃÉùÃ÷Å׳ö CloneNotSupportedException Òì³££¬¼´Ê¹Êµ¼ÊÉÏûÓÐÅ׳öÒì³££¬Ò²ÒªÈç´Ë¡£51TestingÈí¼þ²âÊÔÍøM(O;YFc4DF+p"M

51TestingÈí¼þ²âÊÔÍø)ZW BO*h

 51TestingÈí¼þ²âÊÔÍø+zj`&HF;L5FHV{

2.15   ñîºÏ¼ì²é

3OC.C3E4s#PY0²éÕÒÀàÖ®¼ä¹ý¶ÈñîºÏµÄ¼£Ï󣬱ÈÈçµ¼ÈëÄÚÈÝÌ«¶à£»ÔÚ³¬ÀàÐÍ»ò½Ó¿Ú¾ÍÒѾ­¹»ÓõÄʱºòʹÓÃ×ÓÀàµÄÀàÐÍ£»ÀàÖеÄ×ֶΡ¢±äÁ¿ºÍ·µ»ØÀàÐ͹ý¶àµÈ¡£51TestingÈí¼þ²âÊÔÍøZ1ZP(eS1Ib`1o\H

;J7Zu[.J?0 51TestingÈí¼þ²âÊÔÍø+H3C dJ%{K }

2.16   Òì³£¼ì²é

h t Q4nNL9fQ0Õë¶ÔÒì³£µÄ¼ì²é£º²»Ó¦¸ÃÉùÃ÷¸Ã·½·¨¶øÅ׳ö java.lang.Exception Òì³££¬²»Ó¦µ±½«Òì³£ÓÃÓÚÁ÷¿ØÖÆ£¬²»Ó¦¸Ã²¶»ñ Throwable£¬µÈµÈ¡£

F7etf]E;I+R?@0

^DQ][zI7_0 51TestingÈí¼þ²âÊÔÍø@4y/s!Vj7{T [8| K-x

2.17   ÈÕÖ¾¼ì²é

51TestingÈí¼þ²âÊÔÍøM8afunexR F

²éÕÒ java.util.logging.Logger µÄ²»µ±Ê¹Ó㬰üÀ¨·ÇÖÕ״̬£¨nonfinal£©¡¢·Ç¾²Ì¬µÄ¼Ç¼Æ÷£¬ÒÔ¼°ÔÚÒ»¸öÀàÖÐÓжà¸ö¼Ç¼Æ÷¡£

1\R6xmq)AE0 51TestingÈí¼þ²âÊÔÍø8Hc{%PT$M uQf

 

!ZB$M7n!J0Q t0

2.18   Open€€Close¼ì²é

51TestingÈí¼þ²âÊÔÍø-O QO5eY;Q dh+G

¼ì²éÎļþ»òͨѶ·½Ã棬ÊÇ·ñÍü¼ÇCloseµÄÇé¿ö¡£51TestingÈí¼þ²âÊÔÍø:lx'd7x7g:ks._Z&K

E+Ye1E4K nF l!p0 

}!n]3y5Uz0

2.19   ÆäËü¼ì²é

{#_^U$X"w/ZYR%LT|0ÆäËüȱÏÝÇåµ¥¿É²Î¼û£ºÈ±ÏÝÇåµ¥

2CF.}Di&z0

B+J'a;{6n0 

K!rDn5b0

2.20    ¹¹½¨×Ô¼ºµÄ¹æÔò¼¯

}d@^ [8\P GO0¿ÉÒÔ¹¹½¨×Ô¼ºµÄ¹æÔò¼¯

!?;sp1@pp,ot.B yI0 51TestingÈí¼þ²âÊÔÍø^T/Q*i@S4M2o

 51TestingÈí¼þ²âÊÔÍøU9](nka

3         ×¼±¸Ê¹ÓÃFindBugs

.V\ j&k&O3i0FindBugsÄ¿Ç°×îа汾ÊÇ 0.9.3 ¡£ÎļþÃûÊÇ£ºfindbugs-0.9.3.zip£¨Windows£©»òfindbugs-0.9.3.tar.gz£¨Unix£©¡££¨ÏÂÔØÍøÒ³£©51TestingÈí¼þ²âÊÔÍøYyS/A3yt n

-t%sSZlmP!m%l\0rbg0Ò²¿ÉÒÔµ½StarTeamÈ¡ÏàÓ¦°²×°Îļþµ½±¾µØ£¬½«Ëü½âѹËõµ½ËùÑ¡µÄĿ¼ÖУ¬°²×°¾ÍÍê³ÉÁË¡£ 51TestingÈí¼þ²âÊÔÍø)Xu f;m,rwf]ge

51TestingÈí¼þ²âÊÔÍøjT T(^oeln

ÒªÔËÐÐ FindBugs£¬ÐèÒªÒ»¸ö°æ±¾ 1.4 »òÕ߸ü¸ßµÄ Java Development Kit £¨JDK£©¡£

nayj f"mTKH5~0 51TestingÈí¼þ²âÊÔÍø_2E#a!}AZy-vO

°²×°Íêºó£¬ÒªÔö¼ÓÁ½¸ö»·¾³±äÁ¿£º51TestingÈí¼þ²âÊÔÍø Dhd b0mU9c3Kp;U

51TestingÈí¼þ²âÊÔÍøD)p(m:Z.L*P6J5I2T

FINDBUGS_HOME£¬ÀýÈ磺FINDBUGS_HOME £½D:\findbugs-0.9.3

+DtY.t;s0v;GGI0 51TestingÈí¼þ²âÊÔÍø{%X [}Mf9P!n"m[

JAVA_HOME£¬ÀýÈ磺JAVA_HOME£½D:\j2sdk1.4.2_06

Jy LJ)xr\0

9W G+az1X V0 51TestingÈí¼þ²âÊÔÍø;B3IP"W*yri6GL

?L6LAbb5p0ÔÚ FindBugs Ö÷Ŀ¼ÖУ¬Óм¸¸öÖµµÃ×¢ÒâµÄĿ¼¡£ÎĵµÔÚ doc Ŀ¼ÖУ¬µ«ÊǶÔÎÒÃÇÀ´Ëµ¸üÖØÒªµÄÊÇbin Ŀ¼£¬¸Ã°üº¬ÁËÔËÐÐ FindBugs µÄÅú´¦ÀíÎļþ¡£51TestingÈí¼þ²âÊÔÍø i"d&ny;JX ?5XH

;n0pYS6f)M$i1XR_W0 

l)Y~5ElY/j0

4         ÔËÐÐ FindBugs

U*l4}Q]i F0ÏñÈç½ñµÄ´ó¶àÊýÊý¹¤¾ßÒ»Ñù£¬¿ÉÒÔÒÔ¶àÖÖ·½Ê½ÔËÐÐ FindBugs€€€€´Ó GUI¡¢´ÓÃüÁîÐС¢Ê¹Óà Ant¡¢×÷Ϊ Eclipse ²å¼þ³ÌÐòºÍʹÓà Maven¡£

NXpM Oj+p*m8I~"m+]0 51TestingÈí¼þ²âÊÔÍøH0vf&gFV

ÕâÀォÖصãÌá¼°´Ó GUI ÔËÐÐ FindBugs£¬¼òÒªÌἰʹÓÃAnt ºÍÃüÁîÐÐÔËÐС£51TestingÈí¼þ²âÊÔÍø1Rb0V-U6iJu&`

&Q g%rK)BzK G!Ld0 

xE;jyt a?.g*f0

4.1       FindBugs UI

51TestingÈí¼þ²âÊÔÍø3jy.hX kD/s

ʹÓà FindBugs UI ºÜÖ±¹Û¡£Ê¹Óà FindBugs UI µÄÒ»¸öºÃ´¦ÊǶÔÿһ¸ö¼ì²âµ½µÄÎÊÌâÌṩÁË˵Ã÷£¬Í¼ 1 ÏÔʾÁËȱÏÝ TestµÄ˵Ã÷¡£51TestingÈí¼þ²âÊÔÍø ~$T$I?#W}

51TestingÈí¼þ²âÊÔÍø}y2f*mQU5W kD

ͼһ£ºÏîÄ¿TestµÄȱÏÝ˵Ã÷51TestingÈí¼þ²âÊÔÍø/QGf|0b H

51TestingÈí¼þ²âÊÔÍø8`Yg9Tv ^2v

 

|{4Ss.a+HtpX0

o)A;]8i ?/w|5D h]-Pe0¶ÔÿһÖÖȱÏÝģʽÌṩÁËÀàËƵÄ˵Ã÷¡£´°¿ÚÏÂÃæµÄ Source code Ñ¡ÏºÜÓÐÓá£Èç¹û¸æËß FindBugs ÔÚʲôµØ·½Ñ°ÕÒ´úÂ룬Ëü¾Í»áÔÚת»»µ½ÏàÓ¦µÄÑ¡Ïʱͻ³öÏÔʾÓÐÎÊÌâµÄÄÇÒ»ÐС£51TestingÈí¼þ²âÊÔÍø.`b;f2\? ]

51TestingÈí¼þ²âÊÔÍøCJN*Z w x%~

ͼһÖеÄÉϲ¿Óиù¾Ý²»Í¬Àà±ðÀ´¼ì²éȱÏݵÄÑ¡ÏѡÏîÓУ¨By Class¡¢By Package¡¢By Bug Type¡¢By Bug Category£©¡£

+G%Y4g7VD2~0pu*A0 51TestingÈí¼þ²âÊÔÍøQ%j WV7z3M

ͼ¶þÊÇ¡¾file¡¿Ñ¡ÏÖ÷Òª¹¦ÄÜÓУº´´½¨ÐÂÏîÄ¿¡¢´ò¿ª/¹Ø±ÕÏîÄ¿¡¢´¢´æÏîÄ¿¡¢´¢´æBugsÐÅÏ¢¡¢×°ÔØBuugsÐÅÏ¢51TestingÈí¼þ²âÊÔÍøQzr5O"d

51TestingÈí¼þ²âÊÔÍøH9}5R7CsR Y

 

5g)} W;n+oqF0 51TestingÈí¼þ²âÊÔÍøna cG*y]

 51TestingÈí¼þ²âÊÔÍø%@c/aE"v2Q

51TestingÈí¼þ²âÊÔÍø/D"k'b8]T9x9E

ͼÈýÊÇ¡¾View¡¿Ñ¡ÏÕâЩѡÏîºÜÓÐÓ㬿ÉÒÔÇл»²»Í¬Ä£Ê½µÄÊÓͼ¡£

U!^k+p pYd8l0 51TestingÈí¼þ²âÊÔÍø(PA |u"EB&U0?

 51TestingÈí¼þ²âÊÔÍø4C{B4x8p3f

4xH#E0J_0r2B*Q0 51TestingÈí¼þ²âÊÔÍøK9|0E] w!a5V%oBLd

51TestingÈí¼þ²âÊÔÍø L`:GvE0de%G

ͼËÄÊÇ¡¾Settings¡¿Ñ¡ÏÊǶԼì²âµÄȱÏÝģʽ½øÐÐÑ¡Ôñ¡£51TestingÈí¼þ²âÊÔÍøsn&f(p o[;z

'zIkJ4F0i [0 51TestingÈí¼þ²âÊÔÍø'lJ U%~:xf0QD$d

V8@*J;k;@ XrU0 

ifp9B+Cq,^n0 51TestingÈí¼þ²âÊÔÍø,B$qdy^D7X$p

 

lE&lET#KW J0

vA7\D'm0ͼÎåÊÇ¡¾´´½¨ÐÂÏîÄ¿¡¿Ñ¡Ïî51TestingÈí¼þ²âÊÔÍø)lB+^~E:y&g

9N/c8K'R |'g0 51TestingÈí¼þ²âÊÔÍø;MH*l^D4_o O{&j

51TestingÈí¼þ²âÊÔÍø^4j'Ws)Gu5y`p

 

Qzu*cL$dt#{0

O zD(K1ZY0 51TestingÈí¼þ²âÊÔÍø6j-JI(u*j({ QO

4.2       ʹÓà FindBugs UI²½Öè

7i,q4?Db0µÚÒ»´ÎʹÓÃ

;G${8H-q b0 51TestingÈí¼þ²âÊÔÍøl&v6o+rf8hPL2j

£¨1£©       ÒÀÕÕͼÎ塾´´½¨ÐÂÏîÄ¿¡¿Ñ¡Ïî˵Ã÷£¬ÏÈ´´½¨ÐÂÏîÄ¿£¬ÊäÈë±»¼ì²éµÄclass»òjar·¾¶¡¢javaÔ´Îļþ·¾¶¼°³ÌÐòÔËÐÐÒÀÀµµÄclass»òjar·¾¶

B;`q)da i0 51TestingÈí¼þ²âÊÔÍøs(H/j%F3MWQ$RZ"~

£¨2£©       °´¡¾FingBugs¡¿°´Å¥¿ªÊ¼¼ì²é

`e6U&f9h{)M$y5r0 51TestingÈí¼þ²âÊÔÍøs$[.F9L3PL'XTR

£¨3£©       Èç¹û³öÏÖÏÂͼÁùµÄ¾¯¸æ

+n0uID#d!@]{:u&rn.Z0

DS a;tY@s0 51TestingÈí¼þ²âÊÔÍøv2i%o7B3FM7ozJ_

5D6wZt(N4s0e0˵Ã÷³ÌÐòÔËÐÐÒÀÀµµÄclass»òjar·¾¶²»¶Ô»òÒÀÀµÎļþ²»ÍêÕû£¬Ó¦ÒÀ¾Ý¾¯¸æÐÅÏ¢ÍêÉÆ¡£

C9fZG I"^d*~Y0 51TestingÈí¼þ²âÊÔÍø3_/v*Ik }T

£¨4£©       °´¡¾OK¡¿ºó¼´½øÈëÉÏͼһµÄ´íÎóÐÅÏ¢ÏÔʾ51TestingÈí¼þ²âÊÔÍø7ngH \;y&pE

| BR,L X%dJr0£¨5£©       Ñ¡Ôñ¡¾file¡¿´¢´æн¨µÄÏîÄ¿

[)h9r&P4o(P3J0 51TestingÈí¼þ²âÊÔÍø6H]`5NN#^

£¨6£©       Ñ¡Ôñ¡¾file¡¿´¢´æÐÂɨÃèµÄBugsÐÅÏ¢£¨xmlÎļþ£©51TestingÈí¼þ²âÊÔÍøMR.@/K @^+_

51TestingÈí¼þ²âÊÔÍøCqn9t ]*Uwt

 

!Ja"D-Z6E0

Jr+n)]N8]0a0·ÇµÚÒ»´ÎʹÓÃ

Q#f8q cGN2P4F(Z&Y0

{2l8YV@*J oj8G0{7x%M0£¨1£©       Ñ¡Ôñ¡¾file¡¿×°ÔØÉÏ´Îн¨µÄÏîÄ¿²¢ÔËÐÐ

k7n;C9|8k4{0 51TestingÈí¼þ²âÊÔÍø7g8B/eAx:y`Jp

£¨2£©       Ò²¿ÉÒÔÑ¡Ôñ¡¾file¡¿×°ÔØÉϴδ¢´æµÄBugsÐÅÏ¢À´²é¿´

im2r0{'u/i(fZ}8p0

$LI5c2N0?3Z0 51TestingÈí¼þ²âÊÔÍøJr g-|2j/`NaA8s)s

51TestingÈí¼þ²âÊÔÍø Y!Pz!WW

 

!X2})T k$ge0

w9`Bn}-Hv0ÖµµÃÒ»ÌáµÄ»¹ÓÐÔÚ½« FinBugs ×÷Ϊ Ant ÈÎÎñ»òÕßÔÚÃüÁîÐÐÖÐÔËÐÐ FindBugs ʱ£¬Ñ¡Ôñ xml ×÷Ϊ ouput Ñ¡Ï¿ÉÒÔ½«ÉÏÒ»´ÎÔËÐеĽá¹û×°Ôص½ UI ÖС£ÕâÑù×öÊÇͬʱÀûÓûùÓÚÃüÁîÐеŤ¾ßºÍ UI ¹¤¾ßµÄÓŵãµÄÒ»¸öºÜºÃµÄ·½·¨¡£51TestingÈí¼þ²âÊÔÍøJ_ uGG

51TestingÈí¼þ²âÊÔÍø#G-}z-]3M7u|!F_(`

 51TestingÈí¼þ²âÊÔÍø?;GBx'M t/^T:[p

4.3       FindBugs ×÷Ϊ Ant ÈÎÎñ

51TestingÈí¼þ²âÊÔÍø"[`l E8q(pO/A

ÈçºÎÔÚ Ant ±àÒë½Å±¾ÖÐʹÓà FindBugs£¿Ê×ÏȽ« FindBugs Ant ÈÎÎñ¿½±´µ½ Ant µÄ lib Ŀ¼ÖУ¬ÕâÑù Ant ¾ÍÖªµÀеÄÈÎÎñ¡£½« FIND_BUGS_HOME\lib\FindBugs-ant.jar ¿½±´µ½ ANT_HOME\lib¡£51TestingÈí¼þ²âÊÔÍø4x$zIE:C:U

51TestingÈí¼þ²âÊÔÍø L)X*I veo+@;B

ÏÖÔÚ¿´¿´ÔÚ±àÒë½Å±¾ÖÐÒª¼ÓÈëʲô²ÅÄÜʹÓà FindBugs ÈÎÎñ¡£ÒòΪ FindBugs ÊÇÒ»¸ö×Ô¶¨ÒåÈÎÎñ£¬½«ÐèҪʹÓà taskdef ÈÎÎñÒÔʹ Ant ÖªµÀ×°ÔØÄÄÒ»¸öÀࡣͨ¹ýÔÚ±àÒëÎļþÖмÓÈëÒÔÏÂÒ»ÐУº51TestingÈí¼þ²âÊÔÍøwd#hc5U

*H3L"]"Ii+DV3\0

LF nx$WG0

9y%z"F(i ~HcE }0ÔÚ¶¨ÒåÁË taskdef ºó£¬¿ÉÒÔÓÃËüµÄÃû×Ö FindBugs ÒýÓÃËü¡£ÏÂÒ»²½ÒªÔÚ±àÒëÖмÓÈëʹÓÃÐÂÈÎÎñµÄÄ¿±ê£¬Ê¾ÀýÈçÏ£º

w8X#p0H\&BnP0 51TestingÈí¼þ²âÊÔÍøTCgx[%B9j @

4v _v-y}E&|J0 51TestingÈí¼þ²âÊÔÍø(C*z!BDn!a

2             51TestingÈí¼þ²âÊÔÍøz#Oe ||:J

51TestingÈí¼þ²âÊÔÍø R!F a!C0_

home="${FindBugs.home}" output="xml" outputFile="jedit-output.xml">

C&]%SIPv$u,]4c0

.hM"m1P-E^03         

f6^G(C-J)Z&qXP0 51TestingÈí¼þ²âÊÔÍø-O|j0T*eM5N g%gNl

4         

SxO WFOM0 51TestingÈí¼þ²âÊÔÍø"?0gA tn'hj

5         

2W$Ikg*[E7R8]0

7CE_*}k NbG&@i06      51TestingÈí¼þ²âÊÔÍø![#LC {(V

Ik+FgzEG"` yN G0

DmD(YG^#v.A0

hdB8a,E0µÚ 1 ÐУº ×¢Òâ target È¡¾öÓÚ±àÒë¡£Ò»¶¨Òª¼Çס´¦ÀíµÄÊÇÀàÎļþ¶ø ²» ÊÇÔ´Îļþ£¬ÕâÑùʹ target ¶ÔÓ¦ÓÚ±àÒëÄ¿±ê±£Ö¤ÁË FindBugs ¿ÉÔÚ×îеÄÀàÎļþÔËÐС£FindBugs ¿ÉÒÔÁé»îµØ½ÓÊܶàÖÖÊäÈ룬°üÀ¨Ò»×éÀàÎļþ¡¢JAR Îļþ¡¢»òÕßÒ»×éĿ¼¡£

%h(R4E+D$kt:_XOE0

t s+W#U2[N/~0 51TestingÈí¼þ²âÊÔÍø1e](C B&Z

51TestingÈí¼þ²âÊÔÍøU~\.ONY6^9o

µÚ 2 ÐУº±ØÐëÖ¸¶¨°üº¬ FindBugs µÄĿ¼£¬ÎÒÊÇÓà Ant µÄÒ»¸öÊôÐÔÍê³ÉµÄ£¬ÏñÕâÑù£º51TestingÈí¼þ²âÊÔÍøzO1KW|

51TestingÈí¼þ²âÊÔÍøb o h-q;p;O eW-b

0.7.3" />

fn7B4L-a4[a:@0

8C#I4T6eFP#l3J)v0¿ÉÑ¡ÊôÐÔ output Ö¸¶¨ FindBugs µÄ½á¹ûʹÓõÄÊä³ö¸ñʽ¡£¿ÉÄܵÄÖµÓÐ xml ¡¢ text »òÕß emacs ¡£Èç¹ûûÓÐÖ¸¶¨ outputFile £¬ÄÇô FindBugs »áʹÓñê×¼Êä³ö¡£ÈçÇ°ËùÊö£¬XML ¸ñʽÓпÉÒÔÔÚ UI Öйۿ´µÄ¶îÍâºÃ´¦¡£ 51TestingÈí¼þ²âÊÔÍø9}qh)N8m

51TestingÈí¼þ²âÊÔÍøE7P$z5A I?M5A%`

 

!`o m)x/D;H,k+OU0 51TestingÈí¼þ²âÊÔÍø%s{!c6h[!c;~ e

µÚ 3 ÐУº class ÔªËØÓÃÓÚÖ¸¶¨Òª FindBugs ·ÖÎöÄÄЩ JAR¡¢ÀàÎļþ»òÕßĿ¼¡£·ÖÎö¶à¸ö JAR »òÕßÀàÎļþʱ£¬ÒªÎªÃ¿Ò»¸öÎļþÖ¸¶¨Ò»¸öµ¥¶ÀµÄ class ÔªËØ¡£³ý·Ç¼ÓÈëÁË projectFile ÔªËØ£¬·ñÔòÐèÒª class ÔªËØ¡£

H KO+?x,wu8r-L+e0

a(W1l*b.^ BJz0 

yz` or}0

0x4`9?.h8[{_f+B9d0µÚ 4 ÐУº ÓÃǶÌ×ÔªËØ auxClasspath ÁгöÓ¦ÓóÌÐòµÄÒÀÀµÐÔ¡£ÕâЩÊÇÓ¦ÓóÌÐòÐèÒªµ«ÊDz»Ï£Íû FindBugs ·ÖÎöµÄÀà¡£Èç¹ûûÓÐÁгöÓ¦ÓóÌÐòµÄÒÀÀµ¹Øϵ£¬ÄÇô FindBugs ÈÔÈ»»á¾¡¿ÉÄܵطÖÎöÀà¡£Óë class ÔªËØÒ»Ñù£¬¿ÉÒÔÔÚ FindBugs ÔªËØÖÐÖ¸¶¨¶à¸ö auxClasspath ÔªËØ¡£ auxClasspath ÔªËØÊÇ¿ÉÑ¡µÄ¡£ 51TestingÈí¼þ²âÊÔÍø[i~-]6IP

0Wu5zea5L0 

S|+Q}7aW0

D'hw:`J$X1b$ZZ{0µÚ 5 ÐУº Èç¹ûÖ¸¶¨ÁË sourcePath ÔªËØ£¬ÄÇô path ÊôÐÔÓ¦µ±±íÃ÷Ò»¸ö°üº¬Ó¦ÓóÌÐòÔ´´úÂëµÄĿ¼¡£Ö¸¶¨Ä¿Â¼Ê¹ FindBugs ¿ÉÒÔÔÚ GUI Öв鿴 XML ½á¹ûʱͻ³öÏÔʾ³ö´íµÄÔ´´úÂë¡£Õâ¸öÔªËØÊÇ¿ÉÑ¡µÄ¡£

.G3L'|#Mwd_+tQ8s%d0 51TestingÈí¼þ²âÊÔÍø bm@u4bHk

 51TestingÈí¼þ²âÊÔÍø!~$f$f&t@H

51TestingÈí¼þ²âÊÔÍø3v.r`&T,K(pQ

 51TestingÈí¼þ²âÊÔÍøV|R6?v&mmd

5         ÆäËü·ÖÎö¹¤¾ß

51TestingÈí¼þ²âÊÔÍø:Z.L R\&d0j5A]P

³ýFingBugs¾²Ì¬·ÖÎö¹¤¾ßÍ⣬»¹ÓÐPMDºÍCheckstyle£¬FingBugs¡¢PMDºÍCheckstyleÈý¸ö¹¤¾ß¸÷Óв»Í¬µÄÌص㣬ÁªºÏʹÓÃÓÐÖúÓÚ¼õÉÙÎ󱨴íÎó£¬Ìá¸ß±¨¸æµÄ׼ȷÂÊ¡£

_%n3ap@|&k@~ \0 51TestingÈí¼þ²âÊÔÍø(sD"lDh%lGn8o0X

ÕâÈý¸ö¹¤¾ß¼ì²éµÄ²àÖصã¸÷Óв»Í¬£º51TestingÈí¼þ²âÊÔÍø FlV-s6j~

¹¤¾ß

2G G Z|a] D)h0

Ä¿µÄ51TestingÈí¼þ²âÊÔÍø9K RU{f*W-N9n;L

Ö÷Òª¼ì²éÄÚÈÝ51TestingÈí¼þ²âÊÔÍø8V\8M6dw1| U

51TestingÈí¼þ²âÊÔÍø)c$e] | MR&X

FindBugs51TestingÈí¼þ²âÊÔÍø$|TO'XK-G!y6Q

jX:w m$b3{K$?0»ùÓÚBug Patterns¸ÅÄ²éÕÒjava bytecodeÖеÄDZÔÚbug¡£ÔÚÄ¿Ç°°æ±¾ÖУ¬Ëü²»¼ì²éjavaÔ´Îļþ¡£51TestingÈí¼þ²âÊÔÍø}cR4C?ws5c

51TestingÈí¼þ²âÊÔÍø{~y7m h

Ö÷Òª¼ì²ébytecodeÖеÄbug patterns£¬Ò²ÔÊÐíÓû§×Ô¶¨ÒåÌض¨µÄbug patterns¡£

%Z2JDU!]0

/u9C _.^j3I4ll%L,wk0PMD

2v4sO ]gC%B0

p0|0L7K+^ dm;zH cPpj0¼ì²éjavaÔ´ÎļþÖеÄDZÔÚÎÊÌâ¡£

Zg/T-F]~'\o E0

Y1W3U&K+Qg*p0Ö÷Òª°üÀ¨£º

\bxY[H6d0

0cQrkG x0iz0  -   ¿Õtry/catch/finally/switchÓï¾ä¿é51TestingÈí¼þ²âÊÔÍøUf LA~"aJ9l3X

+G WJ6E.bH e0 -        δʹÓõľֲ¿±äÁ¿¡¢²ÎÊýºÍprivate·½·¨51TestingÈí¼þ²âÊÔÍøRNk+N'Cu[*@3Wa

`(B'\C:q|0 -        ¿Õif/whileÓï¾ä

|6O i:cX0 51TestingÈí¼þ²âÊÔÍø;l*Ht1ha

 -        ¹ýÓÚ¸´Ôӵıí´ïʽ£¬Èç²»±ØÒªµÄifÓï¾äµÈ51TestingÈí¼þ²âÊÔÍø E(eW!r!A0q/BE3^*^

51TestingÈí¼þ²âÊÔÍøZ/z E3PD+\$`7]QM

 -        ¸´ÔÓÀà51TestingÈí¼þ²âÊÔÍø Xx[+X'S+x'^ J

a?7~+L(KZv0CheckStyle51TestingÈí¼þ²âÊÔÍø*W;K7f Xdp

51TestingÈí¼þ²âÊÔÍø~zR"C \,g1?

¼ì²éjavaÔ´ÎļþÊÇ·ñÓë´úÂë¹æ·¶Ïà·û51TestingÈí¼þ²âÊÔÍø?1~W(K|a;H6U4m

T ] g+oyhdv t0Ö÷Òª°üÀ¨51TestingÈí¼þ²âÊÔÍø$g*A-Z&N6X0o`${

51TestingÈí¼þ²âÊÔÍø?2~ ]w"F4p

 -        Javadoc×¢ÊÍ51TestingÈí¼þ²âÊÔÍø\'Vw~lPf j

51TestingÈí¼þ²âÊÔÍøH+z|;K4Q xCUo

 -        ÃüÃû¹æ·¶

/P X&^nqye0 51TestingÈí¼þ²âÊÔÍø Z\UYA,K

 -        Headers51TestingÈí¼þ²âÊÔÍø!fg0}(a%G/J |Y7n?

%hd7]5{*[i0 -        Imports51TestingÈí¼þ²âÊÔÍø2?n!U U9Z9C

51TestingÈí¼þ²âÊÔÍø9F3d8n!s1@ngr|

 -        Size³åÍ»ºÍ¶ÈÁ¿£¬Èç¹ý³¤µÄ·½·¨

*Jm&hP3e'b e z0

8];g u`0O v0 -        Whitespace

Kl(wF O0 51TestingÈí¼þ²âÊÔÍøYFzhqn/g@`

 -        Modifiers

PIdA v*DUdN0

1ER[2b0IQZ0 -        Blocks

t5iEC}E*e)o0J0

*Iy&^Ug$`h0 -        Coding Problems

AL0@jneX5cN0 51TestingÈí¼þ²âÊÔÍø"G v`VvX(C7V+`D

 -        Class Design51TestingÈí¼þ²âÊÔÍøC~ T-r)D.{&[{

1{9zZ @i]0S(XQ0 -        Öظ´´úÂë

blSYP2@0 51TestingÈí¼þ²âÊÔÍøt.rjUQH0q]

 -        Miscellaneous Checks

kl-]6|/u0 51TestingÈí¼þ²âÊÔÍø~@ty-IkgD

 -        Optional Checks51TestingÈí¼þ²âÊÔÍø&T"SZnn!q

51TestingÈí¼þ²âÊÔÍøZ!pF#S"z O1R

 51TestingÈí¼þ²âÊÔÍø4O,M'D8B+v{(Q4x(v

51TestingÈí¼þ²âÊÔÍøG*?A7?Bl*z:Nh

 51TestingÈí¼þ²âÊÔÍøGhj `;aG

5.1       PMD¹¤¾ß

8C'}0z{+bf0PMD¹¤¾ßÄ¿Ç°×îа汾ÊÇV3.3(ÏÂÔØÍøÒ³)¡£

T/q mr*F?B0

9D([ u5}X0PMDµÄÔËÐл·¾³ÊÇj2se1.3»òÒÔºó°æ±¾£¬°²×°¹ý³ÌͬÑùÒ²Êǽâѹ¼´¿É¡£

3d p iZ U5na5q0

5.1.1 Ant taskµÄʹÓÃ

51TestingÈí¼þ²âÊÔÍø(cI&]} I'Rr

£¨1£©       °ÑlibÖÐËùÓеÄjar¸´ÖƵ½ÏîÄ¿µÄclasspathÖС£51TestingÈí¼þ²âÊÔÍø!^w ajD8N$dy

51TestingÈí¼þ²âÊÔÍø` zl3?(?1_

£¨2£©       ½«pmd-2.0.jarÖеÄrulesets½âѹµ½Ö¸¶¨Ä¿Â¼£¬ÕâÀïÃ涨ÒåÁË·ÖÎöËùÐèÒªµÄ¹æÔò¼¯ºÏ¡£

5O@+Q0e]U t-Ir;cx0

NKr p"x$W ob#XuD0£¨3£©       ÐÞ¸Äbuild.xmlÎļþ¡£ÔÚÕâÒ»°æ±¾ÖУ¬ÌṩÁË2¸öant task¡£Ò»¸öÊÇpmdʹÓùæÔò¼¯ºÏ½øÐзÖÎö£»ÁíÒ»¸öÊǼì²é´úÂëÖÐCopy & Paste´úÂë¡£Õâ2¸öÈÎÎñ¶ÔÓ¦µÄant taskʹÓãº

8U\6](V&I }0

.z.}-Kg [ W0PMDÈÎÎñ£º

U7q9R` {/Trh H0 51TestingÈí¼þ²âÊÔÍø(L'FR;ne`S@R;@(AC

   

g*p { vO:uQ8tq N0

,k5km[B:QJ HG1}0   

2Qob#[y Uk0 51TestingÈí¼þ²âÊÔÍø(z ^I4yU+byl

        51TestingÈí¼þ²âÊÔÍøK}rX8`Bh K3|

51TestingÈí¼þ²âÊÔÍøw*C(}1z!HHcA`8r-m

                        classpathref="classpath"/>

zQG)Hrh&y0 51TestingÈí¼þ²âÊÔÍøU,Y1L8Z-~8s#o

    

n#A$D:@5iZd B1K9[0

m ~dW'Y8vB0        51TestingÈí¼þ²âÊÔÍø#]0c+O5v:?3~A-}

51TestingÈí¼þ²âÊÔÍøo1M#t5G;?w"q

         51TestingÈí¼þ²âÊÔÍø-T9Z oF+N$\

51TestingÈí¼þ²âÊÔÍø+mx"V"ik ^

            51TestingÈí¼þ²âÊÔÍø x| O"M[!? T

RYEB+d.\0        

;G*m'?HI0 51TestingÈí¼þ²âÊÔÍø?(SlH#O5L

            51TestingÈí¼þ²âÊÔÍøM B zAwMK*[

51TestingÈí¼þ²âÊÔÍøG Zr9hx!r

        

a:Pvax'd j.^V0 51TestingÈí¼þ²âÊÔÍø'] Gp!~#c

            51TestingÈí¼þ²âÊÔÍø&L@tiO:Q

S2b]"a/\8| c*B/j^s0               

lF GAr J-p dS7m0 51TestingÈí¼þ²âÊÔÍø%y:lAT3_Xfx

            51TestingÈí¼þ²âÊÔÍø9_ p%N,@8U

51TestingÈí¼þ²âÊÔÍø7w1Q3KqC"xx!A2\

       

}WC]Dy5u.AK0

%YD!jpQI]7vX0X ]0   

:t:R]_4oLr7p0 51TestingÈí¼þ²âÊÔÍøGU(`8z%YZ

CPDÈÎÎñ£º51TestingÈí¼þ²âÊÔÍø!A!Tf4p y+q

51TestingÈí¼þ²âÊÔÍø0tY:nHhXcU

+KozNH0F0

ww^F/M@|w/H;]0     51TestingÈí¼þ²âÊÔÍø\(Q@w4Z(Y*X

,y p-L6nI0       

6k7]#U(dB`-Y,D0

9izP v/X Q0                            classpathref="classpath"/>51TestingÈí¼þ²âÊÔÍø6z8q0n*R1_CA"I v

~hyP7fx O0     51TestingÈí¼þ²âÊÔÍø0O(F6`'U*Q%{

51TestingÈí¼þ²âÊÔÍø(@R9tL*a)QfCw4WFJ

        51TestingÈí¼þ²âÊÔÍøYBS2k9\

/AV0wbxS:|1_0        

N;ev#{1]jj;k0

)M:~C z G Jy } A$^+Z0           

A:G7D j;x#A0 51TestingÈí¼þ²âÊÔÍø+V6EE\)Y c tT_5K|O*B

                51TestingÈí¼þ²âÊÔÍø a(OAV FrIe

i(g8Z:JBV0           

pF1nK!@#r7x$?K,X0 51TestingÈí¼þ²âÊÔÍø,vKr OK c

        51TestingÈí¼þ²âÊÔÍø.BB9c4B1T

51TestingÈí¼þ²âÊÔÍø#q F6u~I9Wv(t

   

2B!Z N2b3@+z n0

7K`Ao&Y0£¨4£©       ÔËÐÐant pmdºÍant cpd¼´¿É¡£

B1lzJ3LD0

Q*b^0LF,M;Q0£¨5£©       ²ÎÊý˵Ã÷£º

w0FEjy%zH0 51TestingÈí¼þ²âÊÔÍø O$v cq&y

-        formatter£¬Ö¸Ã÷Êä³ö¸ñʽºÍÎļþ¡£

a%k i6x+Cq0 51TestingÈí¼þ²âÊÔÍø,eS0sP+l!w

-        rulesetfiles£¬Ö¸Ã÷·ÖÎöËùÐèµÄ¹æÔòÎļþ£¬²»Í¬ÎļþʹÓöººÅ·Ö¸ô¡£51TestingÈí¼þ²âÊÔÍø_!N [.K0r/Cp

51TestingÈí¼þ²âÊÔÍøN.g.On!R&akW c#G

-        failonerror£¬pmdÖ´Ðгö´íÊÇ·ñÖÐÖ¹¹¹½¨¹ý³Ì¡£

N7g.sC(C&XE7s0

I;o3H.P*j#C0-        failOnRuleViolation£¬Èç¹ûÓë¹æÔò³åÍ»£¬ÊÇ·ñÖÐÖ¹¹¹½¨¹ý³Ì¡£

,H |v \%S&m~p0 51TestingÈí¼þ²âÊÔÍøx-b_t3?!IK

-        classpath£¬pmdËùÐèµÄclasspath¡£51TestingÈí¼þ²âÊÔÍø^#d~ m9?*C,d_

f+Hom2t n0-        printToConsole£¬ÔÚ·¢ÏÖÎÊÌâʱÊÇ·ñ´òÓ¡µ½ant log»ò¿ØÖÆ̨¡£51TestingÈí¼þ²âÊÔÍøyQ_o4}

51TestingÈí¼þ²âÊÔÍø0fX-F!JX _S"u"q

-        shortFilenames£¬ÔÚÊä³ö±¨¸æÖÐÊÇ·ñʹÓöÌÎļþÃû¡£

AGl0\(tCx|0

q_'w Le\Q0-        targetjdk13£¬ÊÇ·ñ°ÑÄ¿±ê¶¨Îªjdk13£¬Èç²»ÄÜʹÓÃassert¡£

B6OepGs"\0 51TestingÈí¼þ²âÊÔÍø&l1C*X2J"Z ^ VP

-        failuresPropertyName£¬ÔÚÈÎÎñ½áÊøʱ£¬²åÈëÎ¥·´¹æÔòµÄºÅÂë

7\E8EdTL5fl0

'z.U-n7Icr0k0-        encoding£¬¶ÁÔ´ÎļþʱËù²ÉÓõıàÂ룬Èçutf-8¡£51TestingÈí¼þ²âÊÔÍør'g2nDF

51TestingÈí¼þ²âÊÔÍø+hdC8a+a\&D

 51TestingÈí¼þ²âÊÔÍøsK"Z9uBD

5.1.2 TextµÄʹÓÃ

51TestingÈí¼þ²âÊÔÍøk ] k(d;Fj

°ÑbinĿ¼ÏµÄpmd.batÐÞ¸ÄΪ£º

rFIVLpV0 51TestingÈí¼þ²âÊÔÍøc2X\[0R#x

java -jar ..\lib\pmd-3.3.jar D:\temp\hpMTS_2.jar[HUANGXB1]  text[HUANGXB2]  rulesets/basic.xml[HUANGXB3] ,rulesets/braces.xml,rulesets/clone.xml,rulesets/codesize.xml,rulesets/controversial.xml,rulesets/coupling.xml, rulesets/design.xml,rulesets/favorites.xml,rulesets/finalizers.xml,rulesets/unusedcode.xml,rulesets/sunsecure.xml,rulesets/strings.xml,rulesets/strictexception.xml,rulesets/scratchpad.xml,rulesets/optimizations.xml,rulesets/naming.xml,rulesets/my-rules.xml,rulesets/logging-java.xml,rulesets/logging-jakarta-commons.xml,rulesets/junit.xml,rulesets/javabeans.xml,rulesets/imports.xml51TestingÈí¼þ²âÊÔÍøbD9n s-_0Dl`

51TestingÈí¼þ²âÊÔÍø\#V8nch4k#X VU

 51TestingÈí¼þ²âÊÔÍø:U?S#t_%m

5.1      CheckStyle¹¤¾ß

51TestingÈí¼þ²âÊÔÍø)H T(R9nQr;J8C^&`{

CheckStyleÄ¿Ç°×îа汾ÊÇ: checkstyle-4.0-beta6£¨ÏÂÔØÍøÒ³£©¡£

"X6~*T&R3m0 51TestingÈí¼þ²âÊÔÍø2P9R]1|d!U |q N

CheckStyleµÄÔËÐл·¾³ÊÇj2se1.3»òÒÔºó°æ±¾£¬°²×°¹ý³ÌͬÑùÒ²Êǽâѹ¼´¿É¡£

k}'e:{H]vd%T0

]BBV+at n*C|0 51TestingÈí¼þ²âÊÔÍø8x*PT#g1n @eHJ)I

5.2.1    ant taskµÄʹÓÃ

&J5vAx8k#A0£¨1£©       ¸´ÖÆcheckstyle-4.0-beta6.jarµ½ÏîÄ¿µÄclasspathÖС£

&yl$^T!kL]C`c0

{KN TQ,R0£¨2£©       ÐÞ¸Äbuild.xmlÎļþ£º51TestingÈí¼þ²âÊÔÍøuU:V9UA9Ah/d

zN^'SJr1K}051TestingÈí¼þ²âÊÔÍø}4DNp4H(n.T

.WpM"R`0       classpath="${weblib.dir}/checkstyle-all-3.3.jar"/>

olx4C m5~9b0

^K!Q%jETXi/k q051TestingÈí¼þ²âÊÔÍø1_Hy4Z2p4EW I;e

51TestingÈí¼þ²âÊÔÍøe4G4S ]Th:@%~

        51TestingÈí¼þ²âÊÔÍø]_(A#Es };['s0Lq

51TestingÈí¼þ²âÊÔÍø+?dsK'}&ad~PQ

       

`SA o4@`H0

J*] y!l7D:Mu9T9Q1o0           

!Mr0a.Gq u5V6~f,d0 51TestingÈí¼þ²âÊÔÍø[w"TI'k/})o6E [6A

            51TestingÈí¼þ²âÊÔÍø,Av&F-g5{,i?Y

51TestingÈí¼þ²âÊÔÍøAcMn5D

            51TestingÈí¼þ²âÊÔÍømr1[6`a!|

Dp7^;M[,IZ|%C~$O0            51TestingÈí¼þ²âÊÔÍøn!H[$e"^DL

S4J%d R)j5qj/}V-{ I0        51TestingÈí¼þ²âÊÔÍø/ma S2D?V [E:v'b

C]srsZG0        51TestingÈí¼þ²âÊÔÍø&m[D h#v&E8F

51TestingÈí¼þ²âÊÔÍø b8Mj.n(SqU