parasoft Jtest 使用教程:RuleWizard與BugDetective靜態(tài)分析
RuleWizard
RuleWizard(僅在Architect and Server edition中提供)允許您為Java代碼語(yǔ)法、JSP代碼和代碼風(fēng)格問(wèn)題創(chuàng)建自定義的代碼規(guī)范規(guī)則。Jtest可以自動(dòng)實(shí)施任何在 RuleWizard 中創(chuàng)建的有效規(guī)則。通過(guò)創(chuàng)建和檢查自定義規(guī)則,團(tuán)隊(duì)可以驗(yàn)證獨(dú)特的項(xiàng)目和組織需求、以及防止最常見(jiàn)的錯(cuò)誤重復(fù)出現(xiàn)。
使用 RuleWizard,就能以圖形化的方式創(chuàng)建規(guī)則(通過(guò)創(chuàng)建流程圖形式的規(guī)則表示法),或者自動(dòng)創(chuàng)建規(guī)則(通過(guò)提供演示樣本規(guī)則違例的代碼)。編寫(xiě)或修改規(guī)則時(shí),無(wú)需任何編碼或解析器的知識(shí)。
打開(kāi) RuleWizard的方法有兩種:
- 選擇 “Jtest > Launch RuleWizard(Jtest > 啟動(dòng) RuleWizard)”。
- 單擊Test Configurations面板的 “Static(靜態(tài))”選項(xiàng)卡中的 “New(新建)”按鈕
- 然后就會(huì)打開(kāi) RuleWizard GUI。“RuleWizard User's Guide”(《RuleWizard 用戶指南》)(通過(guò)在 RuleWizard GUI 中選擇 “Help > Documentation(幫助 > 文檔)”可閱讀此書(shū))包含關(guān)于如何修改、創(chuàng)建和保存自定義規(guī)則的信息。
BugDetective靜態(tài)分析
BugDetective 是一類新的靜態(tài)分析技術(shù),該技術(shù)使用了幾種分析技巧,包括模擬應(yīng)用程序執(zhí)行路徑,以識(shí)別可能觸發(fā)運(yùn)行時(shí)缺陷的路徑。檢測(cè)到的缺陷包括,空指針異常、資源泄漏、SQL注入和其他安全漏洞問(wèn)題。
注意:如需使用 BugDetective,則需要用Server Edition (服務(wù)器版)。
BugDetective 是一類新的靜態(tài)分析技術(shù),該技術(shù)使用了幾種分析技巧,包括模擬應(yīng)用程序執(zhí)行路徑,以識(shí)別可能觸發(fā)運(yùn)行時(shí)缺陷的路徑。檢測(cè)到的缺陷包括,空指針異常、資源泄漏、SQL注入和其他安全漏洞問(wèn)題。
由于該分析涉及到識(shí)別和跟蹤復(fù)雜路徑,它會(huì)暴露通??商颖芫幋a規(guī)則靜態(tài)分析和單元測(cè)試的錯(cuò)誤,這些錯(cuò)誤難以通過(guò)手動(dòng)測(cè)試或檢查找到。對(duì)于那些具有遺留代碼庫(kù)和嵌入式代碼(這些情況下,此類錯(cuò)誤的運(yùn)行時(shí)檢測(cè)效果較差或根本不可能)的用戶而言,BugDetective可在不執(zhí)行代碼的情況下顯露錯(cuò)誤的功能,就特別重要。
BugDetective獨(dú)特的靜態(tài)分析通過(guò)搜索代碼中的 “可疑點(diǎn)”,開(kāi)始分析正在測(cè)試的源碼。可疑點(diǎn)是潛在的錯(cuò)誤點(diǎn)。這些可疑點(diǎn)在 BugDetective 規(guī)則中被定義。只要識(shí)別了可疑點(diǎn),BugDetective 就調(diào)查導(dǎo)致該可疑點(diǎn)的可能執(zhí)行路徑,并檢查是否有任何確實(shí)違反BugDetective規(guī)則的路徑存在。如果找到了這樣的路徑,就報(bào)告一個(gè)違例。
例如,檢測(cè)可能的 “除數(shù)為零”情形的規(guī)則就規(guī)定,任何使用了"/" 或 "%" 運(yùn)算符的點(diǎn)都是可疑的。然后它檢查分母中的變量,在導(dǎo)致它為零的任何可能執(zhí)行路徑的點(diǎn)中,是否能保持零值。如果是的話,則會(huì)報(bào)告一條錯(cuò)誤。
對(duì)于每個(gè)發(fā)現(xiàn)的錯(cuò)誤,分層結(jié)構(gòu)流路徑數(shù)據(jù)都會(huì)詳細(xì)準(zhǔn)確地列出導(dǎo)致被識(shí)別錯(cuò)誤的完整執(zhí)行路徑,并以顯現(xiàn)出錯(cuò)誤的那一代碼行作為結(jié)束。為減少每個(gè)被發(fā)現(xiàn)問(wèn)題的診斷和糾正所需要的時(shí)間和工作量,流路徑詳細(xì)信息還會(huì)補(bǔ)充擴(kuò)展注釋(例如,一條關(guān)于 “避免空指針解除引用”違例的描述就包含這樣的注釋,描述哪些變量、在流路徑的哪一點(diǎn)包含 null 值)。
為使分析過(guò)程更靈活、更適合于項(xiàng)目的獨(dú)特要求,可以參數(shù)化某些規(guī)則。因此,BugDetective 甚至可以用來(lái)檢測(cè)與特定的 API 使用相關(guān)的違例。
通過(guò)使用 BugDetective,開(kāi)發(fā)團(tuán)隊(duì)可以獲得以下關(guān)鍵好處:
- 用現(xiàn)有資源執(zhí)行更綜合的測(cè)試:BugDetective 對(duì)其它測(cè)試技術(shù)進(jìn)行了補(bǔ)充,允許您發(fā)現(xiàn)一些問(wèn)題,如果不使用 BugDetective,那么可能需要開(kāi)發(fā)、執(zhí)行和維護(hù)復(fù)雜的測(cè)試用例才能發(fā)現(xiàn)這些問(wèn)題。
- 自動(dòng)識(shí)別通過(guò)了多個(gè)單元的錯(cuò)誤:傳統(tǒng)的自動(dòng)單元測(cè)試生成功能可有助于您識(shí)別單個(gè)編譯單元內(nèi)的錯(cuò)誤。這很關(guān)鍵。不過(guò),大多數(shù)開(kāi)發(fā)人員在已執(zhí)行了徹底的單元級(jí)別測(cè)試、糾正了所有明顯的問(wèn)題、集成了代碼之后不久,就會(huì)遇到諸如空指針解除引用之類的問(wèn)題。這些問(wèn)題需要好幾天才能診斷出來(lái),因?yàn)樗鼈儺a(chǎn)生于模糊或復(fù)雜的執(zhí)行路徑,而該路徑已通過(guò)了多個(gè)函數(shù),甚至多個(gè)編譯單元。通過(guò)使用 BugDetective,可以自動(dòng)識(shí)別相同的問(wèn)題。
- 關(guān)注實(shí)際錯(cuò)誤和設(shè)計(jì)缺陷:BugDetective 自動(dòng)識(shí)別獨(dú)立于數(shù)據(jù)或獨(dú)立于流的錯(cuò)誤,并具有合理的必然性。當(dāng) BugDetective 報(bào)告一條違例時(shí),通常情況是,存在一個(gè)設(shè)計(jì)缺陷,該缺陷因?yàn)橐粋€(gè)簡(jiǎn)單的違例(例如除數(shù)為零或資源泄漏)而明顯地暴露自己。
- 查找 API 誤用:實(shí)際上,許多錯(cuò)誤是因?yàn)橐藻e(cuò)誤的自變量調(diào)用了某個(gè)API,或者沒(méi)有正確地處理API返回的值。例如,當(dāng)參數(shù) 1 為 true 時(shí),某個(gè)API可能預(yù)期參數(shù) 2 將有一個(gè)非空自變量,或者該 API 可能將對(duì)象中的某個(gè)字段設(shè)置為null。通過(guò)執(zhí)行過(guò)程間分析,BugDetective 可以指出此類 API 使用中的不一致性。
查看更多parasoft測(cè)試產(chǎn)品
<詳詢客服>獲取更多活動(dòng)信息