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