FindBugs使用手册教案资料文档格式.docx
- 文档编号:14075373
- 上传时间:2022-10-18
- 格式:DOCX
- 页数:8
- 大小:192.05KB
FindBugs使用手册教案资料文档格式.docx
《FindBugs使用手册教案资料文档格式.docx》由会员分享,可在线阅读,更多相关《FindBugs使用手册教案资料文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
版本号
修订人
批准人
1
创建《FindBugs使用手册》
2011-07-12
V1.0
李远卓
1、FindBugs简介
FindBugs是用于java代码检查的一种静态分析工具,它检查类或者JAR文件,将字节码与一组缺陷模式进行对比以发现可能的问题。
有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。
FindBugs专注于找出潜在程序错误,而不是编码风格问题,目的在于提高程序的健壮性。
2、FindBugs的检查规则
FindBugs提出了超过200种规则,这些规则可主要分为如下类别:
2.1Correctness(正确性)
这些问题涉及到可能在某些方面不正确的代码。
如:
代码有无限递归,或者读取为写入的字段,这类问题几乎无疑是程序的错误。
例1:
使用未初始化的类成员,可能导致NullPointException
代码:
publicclassFindBugsTest{
privateListitems;
publicvoidaddItem(Stringitem){
items.add(item);
}
}
FindBugs检测结果:
Bug:
Readofunwrittenfielditems
Patternid:
NP_UNWRITTEN_FIELD,type:
NP,category:
CORRECTNESS
Theprogramisdereferencingafieldthatdoesnotseemtoeverhaveanon-nullvaluewrittentoit.Dereferencingthisvaluewillgenerateanullpointerexception.
例2:
不使用方法的返回值
StringaString="
bob"
;
aString.replace('
b'
'
p'
);
com.nxy.test.FindBugsTest.testString()ignoresreturnvalueofString.replace(char,char)
RV_RETURN_VALUE_IGNORED,type:
RV,category:
Thereturnvalueofthismethodshouldbechecked.Onecommoncauseofthiswarningistoinvokeamethodonanimmutableobject,thinkingthatitupdatestheobject.Forexample,inthefollowingcodefragment,
StringdateString=getHeaderField(name);
dateString.trim();
theprogrammerseemstobethinkingthatthetrim()methodwillupdatetheStringreferencedbydateString.ButsinceStringsareimmutable,thetrim()functionreturnsanewStringvalue,whichisbeingignoredhere.Thecodeshouldbecorrectedto:
dateString=dateString.trim();
2.2Badpractice(不良实践)
这类问题明确违反建议的编程标准。
删除异常,或未关闭文件,或未数据库连接资源等。
例3:
未关闭打开的文件输出流资源
publicvoidtestFileNotClosed(){
try{
FileOutputStreamfos=newFileOutputStream("
D:
\test.txt"
fos.write(0);
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
}
}
com.nxy.test.FindBugsTest.testFileNotClosed()mayfailtoclosestream
OS_OPEN_STREAM,type:
OS,category:
BAD_PRACTICE
ThemethodcreatesanIOstreamobject,doesnotassignittoanyfields,passittoothermethodsthatmightcloseit,orreturnit,anddoesnotappeartoclosethestreamonallpathsoutofthemethod.
Thismayresultinafiledescriptorleak.
Itisgenerallyagoodideatouseafinallyblocktoensurethatstreamsareclosed.
2.3Performance(性能)
这类规则的目的在于检测潜在的性能问题。
代码创建了不需要的对象,或者在循环中使用字符串连接而不是使用StringBuffer。
例4:
使用newString(String)构造函数创建字符串
Stringstr=newString("
string"
com.nxy.test.FindBugsTbineString()invokesinefficientnewString(String)constructor
DM_STRING_CTOR,type:
Dm,category:
PERFORMANCE
Usingthejava.lang.String(String)constructorwastesmemorybecausetheobjectsoconstructedwillbefunctionallyindistinguishablefromtheStringpassedasaparameter.
JustusetheargumentStringdirectly.
2.4Multithreadedcorrectness(多线程正确性)
这是一类特殊的问题,涉及到同步和多线程代码有关的问题。
例5:
在构造方法中start线程
publicFindBugsTest(){
Threadthread=newThread();
thread.start();
newcom.nxy.test.FindBugsTest()invokesThread.start()
SC_START_IN_CTOR,type:
SC,category:
MT_CORRECTNESS
Theconstructorstartsathread.Thisislikelytobewrongiftheclassiseverextended/subclassed,sincethethreadwillbestartedbeforethesubclassconstructorisstarted.
例6:
同一成员变量的getter和setter方法的同步性不统一
privateStringname;
publicsynchronizedStringgetName(){
returnname;
publicvoidsetName(Stringname){
this.name=name;
Inconsistentsynchronizationofcom.nxy.test.FindBugsTest.name;
locked50%oftime
IS2_INCONSISTENT_SYNC,type:
IS,category:
Thefieldsofthisclassappeartobeaccessedinconsistentlywithrespecttosynchronization.
Thisbugreportindicatesthatthebugpatterndetectorjudgedthat
1、Theclasscontainsamixoflockedandunlockedaccesses,
2、Atleastonelockedaccesswasperformedbyoneoftheclass'
sownmethods,and
3、Thenumberofunsynchronizedfieldaccesses(readsandwrites)wasnomorethanonethirdofallaccesses,withwritesbeingweighedtwiceashighasreads
Atypicalbugmatchingthisbugpatternisforgettingtosynchronizeoneofthemethodsinaclassthatisintendedtobethread-safe.
Youcanselect
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FindBugs 使用手册 教案 资料
![提示](https://static.bdocx.com/images/bang_tan.gif)