闈?
鎬佸垎鏋愬伐鍏鋒壙璇烘棤闇寮鍙戜漢鍛樿垂鍔插氨鑳芥壘鍑轟唬鐮佷腑宸叉湁鐨勭己闄楓傚綋鐒訛紝濡傛灉鏈夊騫寸殑緙栧啓緇忛獙錛屽氨浼氱煡閬撹繖浜涙壙璇哄茍涓嶆槸涓瀹氳兘鍏戠幇銆傚敖綆″姝わ紝濂界殑闈欐佸垎鏋愬伐鍏?
浠嶇劧鏄伐鍏風涓殑鏃犱環涔嬪疂銆傚湪榪欎釜鐢變袱閮ㄥ垎緇勬垚鐨勭郴鍒楁枃绔犵殑絎竴閮ㄥ垎涓紝楂樼駭杞歡宸ョ▼甯?Chris Grindstaff 鍒嗘瀽浜?FindBugs
濡備綍甯姪鎻愰珮浠g爜璐ㄩ噺浠ュ強鎺掗櫎闅愬惈鐨勭己闄楓?/blockquote>
浠g爜璐ㄩ噺宸ュ叿鐨勪竴涓棶棰樻槸瀹冧滑瀹規槗涓哄紑鍙戜漢鍛樻彁渚涘ぇ閲忎絾騫墮潪鐪熸闂鐨勯棶棰樷斺斿嵆
浼棶棰橈紙false positives錛?/em>銆?
鍑虹幇浼棶棰樻椂錛屽紑鍙戜漢鍛樿瀛︿細蹇界暐宸ュ叿鐨勮緭鍑烘垨鑰呮斁寮冨畠銆侳indBugs 鐨勮璁¤?David Hovemeyer 鍜?William Pugh
娉ㄦ剰鍒頒簡榪欎釜闂錛屽茍鍔姏鍑忓皯浠栦滑鎵鎶ュ憡鐨勪吉闂鏁伴噺銆備笌鍏朵粬闈欐佸垎鏋愬伐鍏蜂笉鍚岋紝FindBugs
涓嶆敞閲嶆牱寮忔垨鑰呮牸寮忥紝瀹冭瘯鍥懼彧瀵繪壘鐪熸鐨勭己闄鋒垨鑰呮綔鍦ㄧ殑鎬ц兘闂銆?
FindBugs 鏄粈涔堬紵
FindBugs
鏄竴涓潤鎬佸垎鏋愬伐鍏鳳紝瀹冩鏌ョ被鎴栬?JAR
鏂囦歡錛屽皢瀛楄妭鐮佷笌涓緇勭己闄鋒ā寮忚繘琛屽姣斾互鍙戠幇鍙兘鐨勯棶棰樸傛湁浜嗛潤鎬佸垎鏋愬伐鍏鳳紝灝卞彲浠ュ湪涓嶅疄闄呰繍琛岀▼搴忕殑鎯呭喌瀵硅蔣浠惰繘琛屽垎鏋愩備笉鏄氳繃鍒嗘瀽綾繪枃浠剁殑褰㈠紡鎴栫粨
鏋勬潵紜畾紼嬪簭鐨勬剰鍥撅紝鑰屾槸閫氬父浣跨敤 Visitor 妯″紡錛堣鍙傞槄 鍙傝冭祫鏂?/a>錛夈傚浘 1 鏄劇ず浜嗗垎鏋愪竴涓尶鍚嶉」鐩殑緇撴灉錛堜負闃叉鍙曠殑鐘姜錛岃繖閲屼笉緇欏嚭瀹冪殑鍚嶅瓧錛夛細
鍥?1. FindBugs UI
璁╂垜浠湅鍑犱釜 FindBugs 鍙互鍙戠幇鐨勯棶棰樸?/p>
 |
鏈郴鍒楃殑絎簩綃囨枃绔?#8220;
緙栧啓鑷畾涔夋嫻嬪櫒”瑙i噴浜嗗浣曠紪鍐欒嚜瀹氫箟媯嫻嬪櫒錛?浠ヤ究鍙戠幇鐗瑰畾浜庡簲鐢ㄧ▼搴忕殑闂銆?
|
|
闂鍙戠幇鐨勪緥瀛?/span>
涓嬮潰鐨勫垪琛ㄦ病鏈夊寘鎷?FindBug 鍙互鎵懼埌鐨?
鎵鏈?/em>闂銆傜浉鍙嶏紝鎴戜晶閲嶄簬涓浜涙洿鏈夋剰鎬濈殑闂銆?
媯嫻嬪櫒錛氭壘鍑?hash equals 涓嶅尮閰?/strong>
榪欎釜媯嫻嬪櫒瀵繪壘涓?
equals()
鍜?
hashCode()
鐨勫疄鐜扮浉鍏崇殑鍑犱釜闂銆傝繖涓や釜鏂規硶闈炲父閲嶈錛屽洜涓哄嚑涔庢墍鏈夊熀浜庨泦鍚堢殑綾燴斺?List銆丮ap銆丼et 絳夐兘璋冪敤瀹冧滑銆備竴鑸潵璇達紝榪欎釜媯嫻嬪櫒瀵繪壘涓ょ涓嶅悓綾誨瀷鐨勯棶棰樷斺斿綋涓涓被錛?
- 閲嶅啓瀵硅薄鐨?
equals()
鏂規硶錛屼絾鏄病鏈夐噸鍐欏畠鐨?
hashCode
鏂規硶錛屾垨鑰呯浉鍙嶇殑鎯呭喌鏃躲?
- 瀹氫箟涓涓?co-variant 鐗堟湰鐨?
equals()
鎴?
compareTo()
鏂規硶銆備緥濡傦紝
Bob
綾誨畾涔夊叾
equals()
鏂規硶涓哄竷灝?
equals(Bob)
錛屽畠瑕嗙洊浜嗗璞′腑瀹氫箟鐨?
equals()
鏂規硶銆傚洜涓?Java 浠g爜鍦ㄧ紪璇戞椂瑙f瀽閲嶈澆鏂規硶鐨勬柟寮忥紝鍦ㄨ繍琛屾椂浣跨敤鐨勫嚑涔庢繪槸鍦ㄥ璞′腑瀹氫箟鐨勮繖涓増鏈殑鏂規硶錛岃屼笉鏄湪
Bob
涓畾涔夌殑閭d竴涓紙闄ら潪鏄懼紡灝?
equals()
鏂規硶鐨勫弬鏁板己鍒惰漿鎹負
Bob
綾誨瀷錛夈傚洜姝わ紝褰撹繖涓被鐨勪竴涓疄渚嬫斁鍏ュ埌綾婚泦鍚堜腑鐨勪換浣曚竴涓腑鏃訛紝浣跨敤鐨勬槸
Object.equals()
鐗堟湰鐨勬柟娉曪紝鑰屼笉鏄湪
Bob
涓畾涔夌殑鐗堟湰銆傚湪榪欑鎯呭喌涓嬶紝
Bob
綾誨簲褰撳畾涔変竴涓帴鍙楃被鍨嬩負
Object
鐨勫弬鏁扮殑
equals()
鏂規硶銆?
媯嫻嬪櫒錛氬拷鐣ユ柟娉曡繑鍥炲?/strong>
榪欎釜媯嫻嬪櫒鏌ユ壘浠g爜涓拷鐣ヤ簡涓嶅簲璇ュ拷鐣ョ殑鏂規硶榪斿洖鍊肩殑鍦版柟銆傝繖縐嶆儏鍐電殑涓涓父瑙佷緥瀛愭槸鍦ㄨ皟鐢?
String
鏂規硶鏃訛紝濡傚湪娓呭崟 1 涓細
娓呭崟 1. 蹇界暐榪斿洖鍊肩殑渚嬪瓙
1 String aString = "bob";
2 b.replace('b', 'p');
3 if(b.equals("pop"))
|
榪欎釜閿欒寰堝父瑙併傚湪絎?2 琛岋紝紼嬪簭鍛樿涓轟粬宸茬粡鐢?p 鏇挎崲浜嗗瓧絎︿覆涓殑鎵鏈?b銆傜‘瀹炴槸榪欐牱錛屼絾鏄粬蹇樿浜嗗瓧絎︿覆鏄笉鍙彉鐨勩傛墍鏈夎繖綾繪柟娉曢兘榪斿洖涓涓柊瀛楃涓詫紝鑰屼粠鏉ヤ笉浼氭敼鍙樻秷鎭殑鎺ユ敹鑰呫?/p>
媯嫻嬪櫒錛歂ull 鎸囬拡瀵?null 鐨勮В寮曠敤錛坉ereference錛夊拰鍐椾綑姣旇緝
榪欎釜媯嫻嬪櫒鏌ユ壘涓ょ被闂銆傚畠鏌ユ壘浠g爜璺緞灝嗕細鎴栬呭彲鑳介犳垚 null 鎸囬拡寮傚父鐨勬儏鍐碉紝瀹冭繕鏌ユ壘瀵?null
鐨勫啑浣欐瘮杈冪殑鎯呭喌銆備緥濡傦紝濡傛灉涓や釜姣旇緝鍊奸兘涓?null錛岄偅涔堝畠浠氨鏄啑浣欑殑騫跺彲鑳借〃鏄庝唬鐮侀敊璇侳indBugs 鍦ㄥ彲浠ョ‘瀹氫竴涓間負 null
鑰屽彟涓涓間笉涓?null 鏃訛紝媯嫻嬬被浼肩殑閿欒錛屽娓呭崟 2 鎵紺猴細
娓呭崟 2. Null 鎸囬拡紺轟緥
1 Person person = aMap.get("bob");
2 if (person != null) {
3 person.updateAccessTime();
4 }
5 String name = person.getName();
|
鍦ㄨ繖涓緥瀛愪腑錛屽鏋滅 1 琛岀殑
Map
涓嶅寘鎷竴涓悕涓?#8220;bob”鐨勪漢錛岄偅涔堝湪絎?5 琛岃闂?
person
鐨勫悕瀛楁椂灝變細鍑虹幇 null 鎸囬拡寮傚父銆傚洜涓?FindBugs 涓嶇煡閬?map 鏄惁鍖呭惈“bob”錛屾墍浠ュ畠灝嗙 5 琛屾爣璁頒負鍙兘 null 鎸囬拡寮傚父銆?
媯嫻嬪櫒錛氬垵濮嬪寲涔嬪墠璇誨彇瀛楁
榪欎釜媯嫻嬪櫒瀵繪壘鍦ㄦ瀯閫犲嚱鏁頒腑鍒濆鍖栦箣鍓嶈璇誨彇鐨勫瓧孌點傝繖涓敊璇氬父鏄斺斿敖綆′笉鎬繪槸濡傛鈥斺旂敱浣跨敤瀛楁鍚嶈屼笉鏄瀯閫犲嚱鏁板弬鏁板紩璧風殑錛屽娓呭崟 3 鎵紺猴細
娓呭崟 3. 鍦ㄦ瀯閫犲嚱鏁頒腑璇誨彇鏈垵濮嬪寲鐨勫瓧孌?/strong>
1 public class Thing {
2 private List actions;
3 public Thing(String startingActions) {
4 StringTokenizer tokenizer = new StringTokenizer(startingActions);
5 while (tokenizer.hasMoreTokens()) {
6 actions.add(tokenizer.nextToken());
7 }
8 }
9 }
|
鍦ㄨ繖涓緥瀛愪腑錛岀 6 琛屽皢浜х敓涓涓?null 鎸囬拡寮傚父錛屽洜涓哄彉閲?
actions
榪樻病鏈夊垵濮嬪寲銆?
榪欎簺渚嬪瓙鍙槸 FindBugs 鎵鍙戠幇鐨勯棶棰樼綾葷殑涓灝忛儴鍒嗭紙鏇村淇℃伅璇峰弬闃?
鍙傝冭祫鏂?/a>錛夈傚湪鎾板啓鏈枃鏃訛紝FindBugs 鎻愪緵鎬誨叡 35 涓嫻嬪櫒銆?
寮濮嬩嬌鐢?FindBugs
瑕佽繍琛?FindBugs錛岄渶瑕佷竴涓増鏈?1.4 鎴栬呮洿楂樼殑 Java Development Kit 錛圝DK錛夛紝灝界瀹冨彲浠ュ垎鏋愮敱鑰佺殑 JDK 鍒涘緩鐨勭被鏂囦歡銆傝鍋氱殑絎竴浠朵簨鏄笅杞藉茍瀹夎鏈鏂板彂甯冪殑 FindBugs鈥斺斿綋鍓嶆槸 0.7.1 錛堣鍙傞槄
鍙傝冭祫鏂?/a>錛夈傚垢榪愮殑鏄紝涓嬭澆鍜屽畨鍏ㄦ槸鐩稿綋綆鍗曠殑銆傚湪涓嬭澆浜?zip 鎴栬?tar 鏂囦歡鍚庯紝灝嗗畠瑙e帇緙╁埌鎵閫夌殑鐩綍涓傚氨鏄繖鏍蜂簡鈥斺斿畨瑁呭氨瀹屾垚浜嗐?
瀹?
瑁呭畬鍚庯紝瀵逛竴涓ず渚嬬被榪愯瀹冦傚氨鍍忎竴鑸枃绔犱腑鐨勬儏鍐碉紝鎴戝皢閽堝 Windows 鐢ㄦ埛榪涜璁茶В錛屽茍鍋囧畾閭d簺 Unix
淇′話鑰呭彲浠ョ啛緇冨湴杞寲榪欎簺鍐呭騫惰窡榪涖傛墦寮鍛戒護琛屾彁紺虹鍙峰茍榪涘叆 FindBugs 鐨勫畨瑁呯洰褰曘傚鎴戞潵璇達紝榪欐槸
C:\apps\FindBugs-0.7.3銆?/p>
鍦?FindBugs 涓葷洰褰曚腑錛屾湁鍑犱釜鍊煎緱娉ㄦ剰鐨勭洰褰曘傛枃妗e湪 doc 鐩綍涓紝浣嗘槸瀵規垜浠潵璇存洿閲嶈鐨勬槸錛宐in 鐩綍鍖呭惈浜嗚繍琛?FindBugs 鐨勬壒澶勭悊鏂囦歡錛岃繖浣挎垜浠繘鍏ヤ笅涓閮ㄥ垎銆?/p>
榪愯 FindBugs
鍍?
濡備粖鐨勫ぇ澶氭暟鏁板伐鍏蜂竴鏍鳳紝鍙互浠ュ縐嶆柟寮忚繍琛?FindBugs鈥斺斾粠 GUI銆佷粠鍛戒護琛屻佷嬌鐢?Ant銆佷綔涓?Eclipse 鎻掍歡紼嬪簭鍜屼嬌鐢?
Maven銆傛垜灝嗙畝瑕佹彁鍙婁粠 GUI 榪愯 FindBugs錛屼絾鏄噸鐐規斁鍦ㄧ敤 Ant 鍜屽懡浠よ榪愯瀹冦傞儴鍒嗗師鍥犳槸鐢變簬 GUI
娌℃湁鎻愪緵鍛戒護琛岀殑鎵鏈夐夐」銆備緥濡傦紝褰撳墠涓嶈兘鎸囧畾瑕佸姞鍏ョ殑榪囨護鍣ㄦ垨鑰呭湪 UI 涓帓闄ょ壒瀹氱殑綾匯備絾鏄洿閲嶈鐨勫師鍥犳槸鎴戣涓?FindBugs
鏈濂戒綔涓虹紪璇戠殑闆嗘垚閮ㄥ垎浣跨敤錛岃?UI 涓嶅睘浜庤嚜鍔ㄧ紪璇戙?/p>
浣跨敤 FindBugs UI
浣跨敤 FindBugs UI 寰堢洿瑙傦紝浣嗘槸鏈夊嚑鐐瑰煎緱璇存槑銆傚
鍥?1鎵紺猴紝浣跨敤 FindBugs UI 鐨勪竴涓ソ澶勬槸瀵規瘡涓涓嫻嬪埌鐨勯棶棰樻彁渚涗簡璇存槑銆傚浘 1 鏄劇ず浜嗙己闄?
Naked notify in method鐨勮鏄庛傚姣忎竴縐嶇己闄鋒ā寮忔彁渚涗簡綾諱技鐨勮鏄庯紝鍦ㄧ涓嬈$啛鎮夎繖縐嶅伐鍏鋒椂榪欐槸寰堟湁鐢ㄧ殑銆傜獥鍙d笅闈㈢殑 Source code 閫夐」鍗′篃鍚屾牱鏈夌敤銆傚鏋滃憡璇?FindBugs 鍦ㄤ粈涔堝湴鏂瑰鎵句唬鐮侊紝瀹冨氨浼氬湪杞崲鍒扮浉搴旂殑閫夐」鍗℃椂紿佸嚭鏄劇ず鏈夐棶棰樼殑閭d竴琛屻?
鍊煎緱涓鎻愮殑榪樻湁鍦ㄥ皢 FinBugs 浣滀負 Ant 浠誨姟鎴栬呭湪鍛戒護琛屼腑榪愯 FindBugs 鏃訛紝閫夋嫨
xml
浣滀負
ouput
閫夐」錛屽彲浠ュ皢涓婁竴嬈¤繍琛岀殑緇撴灉瑁呰澆鍒?UI 涓傝繖鏍峰仛鏄悓鏃跺埄鐢ㄥ熀浜庡懡浠よ鐨勫伐鍏峰拰 UI 宸ュ叿鐨勪紭鐐圭殑涓涓緢濂界殑鏂規硶銆?
灝?FindBugs 浣滀負 Ant 浠誨姟榪愯
璁?
鎴戜滑鐪嬩竴涓嬪浣曞湪 Ant 緙栬瘧鑴氭湰涓嬌鐢?FindBugs銆傞鍏堝皢 FindBugs Ant 浠誨姟鎷瘋礉鍒?Ant 鐨?lib 鐩綍涓紝榪欐牱
Ant 灝辯煡閬撴柊鐨勪換鍔°傚皢 FIND_BUGS_HOME\lib\FindBugs-ant.jar 鎷瘋礉鍒?ANT_HOME\lib銆?/p>
鐜板湪鐪嬬湅鍦ㄧ紪璇戣剼鏈腑瑕佸姞鍏ヤ粈涔堟墠鑳戒嬌鐢?FindBugs 浠誨姟銆傚洜涓?FindBugs 鏄竴涓嚜瀹氫箟浠誨姟錛屽皢闇瑕佷嬌鐢?
taskdef
浠誨姟浠ヤ嬌 Ant 鐭ラ亾瑁呰澆鍝竴涓被銆傞氳繃鍦ㄧ紪璇戞枃浠朵腑鍔犲叆浠ヤ笅涓琛屽仛鍒拌繖涓鐐癸細
<taskdef name="FindBugs" classname="edu.umd.cs.FindBugs.anttask.FindBugsTask"/>
|
鍦ㄥ畾涔変簡
taskdef
鍚庯紝鍙互鐢ㄥ畠鐨勫悕瀛?
FindBugs
寮曠敤瀹冦備笅涓姝ヨ鍦ㄧ紪璇戜腑鍔犲叆浣跨敤鏂頒換鍔$殑鐩爣錛屽娓呭崟 4 鎵紺猴細
娓呭崟 4. 鍒涘緩 FindBugs 鐩綍
1 <target name="FindBugs" depends="compile">
2 <FindBugs home="${FindBugs.home}" output="xml" outputFile="jedit-output.xml">
3 <class location="c:\apps\JEdit4.1\jedit.jar" />
4 <auxClasspath path="${basedir}/lib/Regex.jar" />
5 <sourcePath path="c:\tempcbg\jedit" />
6 </FindBugs>
7 </target>
|
璁╂垜浠洿璇︾粏鍦板垎鏋愯繖孌典唬鐮佷腑鎵鍙戠敓鐨勮繃紼嬨?/p>
絎?1 琛岋細 娉ㄦ剰
target
鍙栧喅浜庣紪璇戙備竴瀹氳璁頒綇澶勭悊鐨勬槸綾繪枃浠惰?
涓?/em> 鏄簮鏂囦歡錛岃繖鏍蜂嬌
target
瀵瑰簲浜庣紪璇戠洰鏍囦繚璇佷簡 FindBugs 鍙湪鏈鏂扮殑綾繪枃浠惰繍琛屻侳indBugs 鍙互鐏墊椿鍦版帴鍙楀縐嶈緭鍏ワ紝鍖呮嫭涓緇勭被鏂囦歡銆丣AR 鏂囦歡銆佹垨鑰呬竴緇勭洰褰曘?
絎?2 琛岋細蹇呴』鎸囧畾鍖呭惈 FindBugs 鐨勭洰褰曪紝鎴戞槸鐢?Ant 鐨勪竴涓睘鎬у畬鎴愮殑錛屽儚榪欐牱錛?
<property name="FindBugs.home" value="C:\apps\FindBugs-0.7.3" />
|
鍙夊睘鎬?
output
鎸囧畾 FindBugs 鐨勭粨鏋滀嬌鐢ㄧ殑杈撳嚭鏍煎紡銆傚彲鑳界殑鍊兼湁
xml
銆?
text
鎴栬?
emacs
銆傚鏋滄病鏈夋寚瀹?
outputFile
錛岄偅涔?FindBugs 浼氫嬌鐢ㄦ爣鍑嗚緭鍑恒傚鍓嶆墍榪幫紝XML 鏍煎紡鏈夊彲浠ュ湪 UI 涓鐪嬬殑棰濆濂藉銆?
絎?3 琛岋細
class
鍏冪礌鐢ㄤ簬鎸囧畾瑕?FindBugs 鍒嗘瀽鍝簺 JAR銆佺被鏂囦歡鎴栬呯洰褰曘傚垎鏋愬涓?JAR 鎴栬呯被鏂囦歡鏃訛紝瑕佷負姣忎竴涓枃浠舵寚瀹氫竴涓崟鐙殑
class
鍏冪礌銆傞櫎闈炲姞鍏ヤ簡
projectFile
鍏冪礌錛屽惁鍒欓渶瑕?
class
鍏冪礌銆傛洿澶氱粏鑺傝鍙傞槄 FindBugs 鎵嬪唽銆?
絎?4 琛岋細 鐢ㄥ祵濂楀厓绱?
auxClasspath
鍒楀嚭搴旂敤紼嬪簭鐨勪緷璧栨с傝繖浜涙槸搴旂敤紼嬪簭闇瑕佷絾鏄笉甯屾湜 FindBugs 鍒嗘瀽鐨勭被銆傚鏋滄病鏈夊垪鍑哄簲鐢ㄧ▼搴忕殑渚濊禆鍏崇郴錛岄偅涔?FindBugs 浠嶇劧浼氬敖鍙兘鍦板垎鏋愮被錛屼絾鏄湪鎵句笉鍒頒竴涓己灝戠殑綾繪椂錛屽畠浼氭姳鎬ㄣ備笌
class
鍏冪礌涓鏍鳳紝鍙互鍦?FindBugs 鍏冪礌涓寚瀹氬涓?
auxClasspath
鍏冪礌銆?
auxClasspath
鍏冪礌鏄彲閫夌殑銆?
絎?5 琛岋細 濡傛灉鎸囧畾浜?
sourcePath
鍏冪礌錛岄偅涔?
path
灞炴у簲褰撹〃鏄庝竴涓寘鍚簲鐢ㄧ▼搴忔簮浠g爜鐨勭洰褰曘傛寚瀹氱洰褰曚嬌 FindBugs 鍙互鍦?GUI 涓煡鐪?XML 緇撴灉鏃剁獊鍑烘樉紺哄嚭閿欑殑婧愪唬鐮併傝繖涓厓绱犳槸鍙夌殑銆?
涓婇潰灝辨槸鍩烘湰鍐呭浜嗐傝鎴戜滑鎻愬墠鍑犱釜鏄熸湡銆?
榪囨護鍣?/span>
鎮?
宸茬粡灝?FindBugs
寮曞叆鍒頒簡鍥㈤槦涓紝騫惰繍琛屽畠浣滀負鎮ㄧ殑姣忓皬鏃?姣忔櫄緙栬瘧榪囩▼鐨勪竴閮ㄥ垎銆傚綋鍥㈤槦瓚婃潵瓚婄啛鎮夎繖涓伐鍏鋒椂錛屽嚭浜庢煇浜涘師鍥狅紝鎮ㄥ喅瀹氭墍媯嫻嬪埌鐨勪竴浜涚己闄峰浜庡洟闃熸潵璇翠笉閲?
瑕併備篃璁告偍涓嶅叧蹇冧竴浜涚被鏄惁榪斿洖鍙兘琚伓鎰忎慨鏀圭殑瀵硅薄鈥斺斾篃璁革紝鍍?
JEdit錛屾湁涓涓湡姝i渶瑕佺殑錛坔onest-to-goodness錛夈佸悎娉曠殑鐞嗙敱璋冪敤 System.gc()
銆?
鎬繪槸鍙互閫夋嫨“鍏抽棴”鐗瑰畾鐨?
媯嫻嬪櫒銆傚湪鏇寸粏鍖栫殑姘村鉤涓婏紝鍙互鍦ㄦ寚瀹氱殑涓緇勭被鐢氳嚦鏄柟娉曚腑鏌ユ壘闂鏃訛紝鎺掗櫎鏌愪簺媯嫻嬪櫒銆侳indBugs
鎻愪緵浜嗚繖縐嶇粏鍖栫殑鎺у埗錛屽彲浠ユ帓闄ゆ垨鑰呭寘鍚繃婊ゅ櫒銆傚綋鍓嶅彧鏈夌敤鍛戒護琛屾垨鑰?Ant 鍚姩鐨?FindBugs
涓敮鎸佹帓闄ゅ拰鍖呭惈榪囨護鍣ㄣ傛濡傚叾鍚嶅瓧鎵琛ㄦ槑鐨勶紝浣跨敤鎺掗櫎榪囨護鍣ㄦ潵鎺掗櫎瀵規煇浜涚己闄風殑鎶ュ憡銆傝緝涓哄皯瑙佷絾浠嶇劧鏈夌敤鐨勬槸錛屽寘鍚繃婊ゅ櫒鍙兘鐢ㄤ簬鎶ュ憡鎸囧畾鐨勭己闄楓傝繃婊?
鍣ㄦ槸鍦ㄤ竴涓?XML 鏂囦歡涓畾涔夌殑銆傚彲浠ュ湪鍛戒護琛屼腑鐢ㄤ竴涓帓闄ゆ垨鑰呭寘鍚紑鍏熾佹垨鑰呭湪 Ant 緙栬瘧鏂囦歡涓敤 excludeFilter
鍜?
includeFilter
鎸囧畾瀹冧滑銆傚湪涓嬮潰鐨勪緥瀛愪腑錛屽亣瀹氫嬌鐢ㄦ帓闄ゅ紑鍏熾傝繕瑕佹敞鎰忓湪涓嬮潰鐨勮璁轟腑錛屾垜瀵?“bugcode”銆?#8220;bug” 鍜?#8220;detector”鐨勪嬌鐢ㄥ叿鏈夋煇縐嶇▼搴︾殑浜掓崲鎬с?
鍙互鏈変笉鍚岀殑鏂瑰紡瀹氫箟榪囨護鍣細
- 鍖歸厤涓涓被鐨勮繃婊ゅ櫒銆傚彲浠ョ敤榪欎簺榪囨護鍣?蹇界暐鍦ㄧ壒瀹氱被涓彂鐜扮殑鎵鏈夐棶棰樸?
- 鍖歸厤涓涓被涓壒瀹氱己闄蜂唬鐮侊紙bugcode錛夌殑 榪囨護鍣ㄣ傚彲浠ョ敤榪欎簺榪囨護鍣ㄥ拷鐣ュ湪鐗瑰畾綾諱腑鍙戠幇鐨勪竴浜涚己闄楓?
- 鍖歸厤涓緇勭己闄風殑榪囨護鍣ㄣ傚彲浠ョ敤榪欎簺榪囨護鍣?蹇界暐鎵鍒嗘瀽鐨勬墍鏈夌被涓殑涓緇勭己闄楓?
- 鍖歸厤鎵鍒嗘瀽鐨勪竴涓被涓殑鏌愪簺鏂規硶鐨勮繃婊ゅ櫒銆傚彲浠ョ敤榪欎簺榪囨護鍣ㄥ拷鐣ュ湪涓涓被涓殑涓緇勬柟娉曚腑鍙戠幇鐨勬墍鏈夌己闄楓?
- 鍖歸厤鍦ㄦ墍鍒嗘瀽鐨勪竴涓被涓殑鏂規硶涓彂鐜扮殑鏌愪簺緙洪櫡鐨勮繃婊ゅ櫒銆傚彲浠ョ敤榪欎簺榪囨護鍣ㄥ拷鐣ュ湪涓緇勬柟娉曚腑鍙戠幇鐨勭壒瀹氱己闄楓?/li>
鐭ラ亾浜嗚繖浜涘氨鍙互寮濮嬩嬌鐢ㄤ簡銆傛湁鍏沖叾浠栧畾鍒?FindBugs 鏂規硶鐨勬洿澶氫俊鎭紝璇峰弬闃?FindBugs 鏂囨。銆傜煡閬撳浣曡緗紪璇戞枃浠朵互鍚庯紝灝辮鎴戜滑鏇磋緇嗗湴鍒嗘瀽濡備綍灝?FindBugs 闆嗘垚鍒扮紪璇戣繃紼嬩腑鍚э紒
灝?FindBugs 闆嗘垚鍒扮紪璇戣繃紼嬩腑
鍦ㄥ皢 FindBugs 闆嗘垚鍒扮紪璇戣繃紼嬪綋涓彲浠ユ湁鍑犵閫夋嫨銆傛繪槸鍙互鍦ㄥ懡浠よ鎵ц FindBugs錛屼絾鏄偍寰堝彲鑳藉凡緇忎嬌鐢?Ant 榪涜緙栬瘧錛屾墍浠ユ渶鑷劧鐨勬柟娉曟槸浣跨敤 FindBugs Ant 浠誨姟銆傚洜涓烘垜浠湪
濡備綍榪愯 FindBugs涓鑺備腑璁ㄨ浜嗕嬌鐢?FindBugs Ant 浠誨姟鐨勫熀鏈唴瀹癸紝鎵浠ョ幇鍦ㄨ璁哄簲褰撳皢 FindBugs 鍔犲叆鍒扮紪璇戣繃紼嬩腑鐨勫嚑涓悊鐢憋紝騫惰璁哄嚑涓彲鑳介亣鍒扮殑闂銆?
涓轟粈涔堝簲璇ュ皢 FindBugs 闆嗘垚鍒扮紪璇戣繃紼嬩腑錛?/span>
緇?
甯擱棶鍒扮殑絎竴涓棶棰樻槸涓轟粈涔堣灝?FindBugs
鍔犲叆鍒扮紪璇戣繃紼嬩腑錛熻櫧鐒舵湁澶ч噺鐞嗙敱錛屾渶鏄庢樉鐨勫洖絳旀槸瑕佷繚璇佸敖鍙兘鏃╁湴鍦ㄨ繘琛岀紪璇戞椂鍙戠幇闂銆傚綋鍥㈤槦鎵╁ぇ錛屽茍涓斾笉鍙伩鍏嶅湴鍦ㄩ」鐩腑鍔犲叆鏇村鏂板紑鍙戜漢鍛?
鏃訛紝FindBugs 鍙互浣滀負涓涓畨鍏ㄧ綉錛屾嫻嬪嚭宸茬粡璇嗗埆鐨勭己闄鋒ā寮忋傛垜鎯抽噸鐢沖湪涓綃?FindBugs
璁烘枃涓〃榪扮殑涓浜涜鐐廣傚鏋滆涓瀹氭暟閲忕殑寮鍙戜漢鍛樺叡鍚屽伐浣滐紝閭d箞鍦ㄤ唬鐮佷腑灝變細鍑虹幇緙洪櫡銆傚儚 FindBugs
榪欐牱鐨勫伐鍏峰綋鐒朵笉浼氭壘鍑烘墍鏈夌殑緙洪櫡錛屼絾鏄畠浠細甯姪鎵懼嚭鍏朵腑鐨勯儴鍒嗐傜幇鍦ㄦ壘鍑洪儴鍒嗘瘮瀹㈡埛鍦ㄤ互鍚庢壘鍒板畠浠濂解斺旂壒鍒槸褰撳皢 FindBugs
緇撳悎鍒扮紪璇戣繃紼嬩腑鐨勬垚鏈槸濡傛浣庢椂銆?/p>
涓鏃︾‘瀹氫簡鍔犲叆鍝簺榪囨護鍣ㄥ拰綾伙紝榪愯 FindBugs 灝辨病浠涔堟垚鏈簡錛岃屽甫鏉ョ殑濂藉灝辨槸瀹冧細媯嫻嬪嚭鏂扮己闄楓傚鏋滅紪鍐欑壒瀹氫簬搴旂敤紼嬪簭鐨勬嫻嬪櫒錛屽垯榪欎釜濂藉鍙兘鏇村ぇ銆?/p>
鐢熸垚鏈夋剰涔夌殑緇撴灉
閲?
瑕佺殑鏄璁よ瘑鍒拌繖縐嶆垚鏈?鏁堢泭鍒嗘瀽鍙湁鍦ㄤ笉鐢熸垚澶ч噺璇鏃舵墠鏈夋晥銆傛崲鍙ヨ瘽璇達紝濡傛灉鍦ㄦ瘡嬈$紪璇戞椂錛屼笉鑳界畝鍗曞湴紜畾鏄惁寮曞叆浜嗘柊鐨勭己闄鳳紝閭d箞榪欎釜宸ュ叿鐨勪環鍊煎氨
浼氳鎶墊秷銆傚垎鏋愯秺鑷姩鍖栬秺濂姐傚鏋滀慨澶嶇己闄鋒剰鍛崇潃蹇呴』鍚冨姏鍦板垎鏋愭嫻嬪嚭鐨勫ぇ閲忎笉鐩稿共鐨勭己闄鳳紝閭d箞鎮ㄥ氨涓嶄細緇忓父浣跨敤瀹冿紝鎴栬呰嚦灝戜笉浼氬緢濂藉湴浣跨敤瀹冦?/p>
紜畾涓嶅叧蹇冨摢浜涢棶棰樺茍浠庣紪璇戜腑鎺掗櫎瀹冧滑銆備篃鍙互鎸戝嚭
紜疄鍏蟲敞鐨勪竴灝忛儴鍒嗘嫻嬪櫒騫跺彧榪愯瀹冧滑銆傚彟涓縐嶉夋嫨鏄粠涓埆鐨勭被涓帓闄や竴緇勬嫻嬪櫒錛屼絾鏄叾浠栫殑綾諱笉鎺掗櫎銆侳indBugs 鎻愪緵浜嗕嬌鐢ㄨ繃婊ゅ櫒鐨勬瀬澶х伒媧繪э紝榪欏彲甯姪鐢熸垚瀵瑰洟闃熸湁鎰忎箟鐨勭粨鏋滐紝鐢辨鎴戜滑榪涘叆涓嬩竴鑺傘?
紜畾鐢?FindBugs 鐨勭粨鏋滃仛浠涔?/span>
鍙?
鑳界湅鏉ュ緢鏄劇劧錛屼絾鏄偍鎯充笉鍒版垜鍙備笌鐨勫洟闃熶腑鏈夊灝戝姞鍏ヤ簡綾諱技 FindBugs
榪欐牱鐨勫伐鍏瘋屾病鏈夌湡姝e埄鐢ㄥ畠銆傝鎴戜滑鏇存繁鍏ュ湴鎺㈣榪欎釜闂鈥斺旂敤緇撴灉鍋氫粈涔堬紵鏄庣‘鍥炵瓟榪欎釜闂鏄洶闅劇殑錛屽洜涓鴻繖涓庡洟闃熺殑緇勭粐鏂瑰紡銆佸浣曞鐞嗕唬鐮佹墍鏈夋潈闂
絳夋湁寰堝ぇ鍏崇郴銆備笉榪囷紝涓嬮潰鏄竴浜涙寚瀵鹼細
- 鍙互鑰冭檻灝?FindBugs 緇撴灉鍔犲叆鍒版簮浠g爜綆$悊錛圫CM錛夌郴緇熶腑銆備竴鑸殑緇忛獙鍋氭硶鏄笉灝嗙紪璇戝伐浠訛紙artifact錛夋斁鍒?SCM 緋葷粺涓備笉榪囷紝鍦ㄨ繖縐嶇壒瀹氭儏鍐典笅錛屾墦鐮磋繖涓鍒欏彲鑳芥槸姝g‘鐨勶紝鍥犱負瀹冧嬌鎮ㄥ彲浠ョ洃瑙嗕唬鐮佽川閲忛殢鏃墮棿鐨勫彉鍖栥?
- 鍙互閫夋嫨灝?XML 緇撴灉杞崲涓哄彲浠ュ彂閫佸埌鍥㈤槦鐨勭綉绔欎笂鐨?HTML 鎶ュ憡銆傝漿鎹㈠彲浠ョ敤 XSL 鏍峰紡琛ㄦ垨鑰呰剼鏈疄鐜般傛湁鍏充緥瀛愯鏌ョ湅 FindBugs 緗戠珯鎴栬呴偖浠跺垪琛紙璇峰弬闃?
鍙傝冭祫鏂?/a>錛夈?
- 鍍?FindBugs 榪欐牱鐨勫伐鍏烽氬父浼氭垚涓虹敤浜庢暡鎵撳洟闃熸垨鑰呬釜浜虹殑鏀挎不姝﹀櫒銆傚敖閲忔姷鍒惰繖縐嶅仛娉曟垨鑰呬笉璁╁畠鍙戠敓鈥斺旇浣忥紝瀹冨彧鏄竴涓伐鍏鳳紝瀹冨彲浠ュ府鍔╂敼榪涗唬鐮佺殑璐ㄩ噺銆傛湁浜嗚繖縐嶆濇兂錛屽湪涓嬩竴閮ㄥ垎涓紝鎴戝皢灞曠ず濡備綍緙栧啓鑷畾涔夌己闄鋒嫻嬪櫒銆?/li>
緇撴潫璇?/span>
鎴?
榧撳姳璇昏呭鑷繁鐨勪唬鐮佽瘯鐢ㄩ潤鎬佸垎鏋愬伐鍏鳳紝涓嶇鏄?FindBugs銆丳MD 榪樻槸鍏朵粬鐨勩傚畠浠槸鏈夌敤鐨勫伐鍏鳳紝鍙互鎵懼嚭鐪熸鐨勯棶棰橈紝鑰?FindBugs
鏄湪娑堥櫎璇鏂歸潰鍋氬緱鏈濂界殑宸ュ叿銆傛澶栵紝瀹冪殑鍙彃鍏ョ粨鏋勬彁渚涗簡緙栧啓鏈変環鍊肩殑銆佺壒瀹氫簬搴旂敤紼嬪簭鐨勬嫻嬪櫒鐨勩佹湁鎰忔濈殑嫻嬭瘯妗嗘灦銆傚湪鏈郴鍒楃殑 絎?2 閮ㄥ垎涓紝鎴戝皢灞曠ず濡備綍緙栧啓鑷畾涔夋嫻嬪櫒浠ユ壘鍑虹壒瀹氫簬搴旂敤紼嬪簭鐨勯棶棰樸?
鍙傝冭祫鏂?
鍏充簬浣滆?/span>
 |
|
 |
Chris
Grindstaff 鏄湪鍖楀姞鍒╃灝間簹 Research Triangle Park 宸ヤ綔鐨?IBM 楂樼駭杞歡宸ョ▼甯堛侰hris 鍦?7
宀佹椂緙栧啓浜嗕粬鐨勭涓涓▼搴忥紝褰撴椂浠栬灝忓鑰佸笀璁よ瘑鍒?#8220;閿叆”鍙ュ瓙涓庢墜鍐欏畠浠竴鏍瘋垂鍔涖侰hris 鐩墠鍙備笌浜嗕笉鍚岀殑寮鏀炬簮浠g爜欏圭洰銆備粬澶ч噺浣跨敤
Eclipse 騫剁紪鍐欎簡鍑犱釜嫻佽鐨?Eclipse 鎻掍歡紼嬪簭錛屽彲浠ュ湪浠栫殑 緗戠珯鎵懼埌榪欎簺鎻掍歡紼嬪簭銆傚彲浠ラ氳繃
cgrinds@us.ibm.com鎴栬?
chris@gstaff.org涓?Chrise 鑱旂郴銆?
|