版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、高效單元測試補充 Parasoft Jtest(2) 林若欽林若欽第四部分第四部分 Junit Junit擴展擴展高效單元測試2本章內(nèi)容:qBugDetective 進行靜態(tài)代碼分析qJtest動態(tài)測試動態(tài)測試q樁函數(shù)高效單元測試31、BugDetective 進行靜態(tài)代碼分析 簡介(1)n軟件缺陷主要分為以下三種:n需求實現(xiàn)不正確 因為需求未被正確地實現(xiàn),導致軟件未如預期那樣工作。n需求缺失或不完整 由于客戶/開發(fā)者未預見到某些功能的必要性并且未給出相應需求或者由于開發(fā)者沒有成功實現(xiàn)相應的需求,造成軟件不能完成某些必要的操作或者處理某些特定情景。n用戶誤操作 軟件設計時未考慮用戶誤操作的影響
2、,從而導致軟件形成不可預知的路徑。高效單元測試41、BugDetective 進行靜態(tài)代碼分析 簡介(2)n建立一個強健的回歸測試套件(robust regression suite)是檢測需求實現(xiàn)正確性最有效的方法,而負面測試(negative testing)則是防止誤操作的最佳方法。盡管如此,查找需求缺失還是一項很棘手的工作,因為開發(fā)者并不知道所查找的是什么。數(shù)據(jù)流分析是目前唯一已知能幫助開發(fā)者解決這些問題的自動化測試技術,它允許開發(fā)者在不運行程序的前提下分析代碼中的路徑。例如,假設數(shù)據(jù)流分析在Java程序中查找到一處空指針異常。通過檢查造成該異常的路徑,并且推敲造成該潛在程序終止的條件
3、,開發(fā)者也許能找到缺失的需求 諸如設計計劃階段未預見到的情況等。如果開發(fā)者只注重于編寫驗證需求的測試用例,這些問題是不可能被發(fā)現(xiàn)的。高效單元測試51、BugDetective 進行靜態(tài)代碼分析 簡介(3)n除了需求缺失,數(shù)據(jù)流分析還能發(fā)現(xiàn)代碼結構上存在的問題以及應用程序中的邏輯錯誤。類似于模式匹配靜態(tài)分析、單元測試、http單元測試、容器測試(in-container tests)、模塊測試、API測試以及其它所有用來驗證軟件的測試一樣,數(shù)據(jù)流分析也應該被用作回歸測試套件的一個部分。這樣,自動日常地運行包括數(shù)據(jù)流分析和所有其它測試在內(nèi)的完整回歸測試套件就能確定用戶的代碼修改添加是否引入了新問題
4、、破壞了既有功能或者造成其它未預見到的副作用。高效單元測試61.、靜態(tài)代碼流分析- 背景n靜態(tài)代碼分析這個術語對軟件業(yè)的不同人有著不同的含義。在業(yè)界主要有以下兩種靜態(tài)代碼分析方法:n(1)執(zhí)行程序或者基于數(shù)據(jù)流的分析;n(2)基于模式(pattern-based)的分析。n對于需要執(zhí)行程序的這種方法,靜態(tài)代碼分析意味著從邏輯上執(zhí)行程序,有時甚至僅僅是符號化地執(zhí)行程序來查找諸如內(nèi)存崩潰、泄漏以及異常等問題。這種測試的主要優(yōu)點在于不需要測試用例就可以查找代碼中的問題。當開發(fā)者正在編寫某些代碼時,這時他們對代碼的細節(jié)是了如指掌的,這也是預防代碼缺陷以及安全性漏洞的最佳時機,這種執(zhí)行程序的分析方法能為
5、開發(fā)者提供在桌面環(huán)境下迅速查找軟件缺陷以及安全性漏洞所必需的“及時反饋”。高效單元測試71.、Parasoft的靜態(tài)代碼分析以及BugDetective技術nParasoft的靜態(tài)代碼分析技術支持基于數(shù)據(jù)流以及基于模式的這兩種靜態(tài)代碼分析方法。Parasoft的這種基于數(shù)據(jù)流的靜態(tài)代碼分析技術被稱為BugDetective,它能方便地為用戶檢測出跨越多個方法、類或者包的運行時問題以及程序不穩(wěn)定性因素(諸如空指針異常、SQL以及其它注入、資源泄漏以及Java中的無效迭代等);n使用Parasoft BugDetective,開發(fā)者能在早期發(fā)現(xiàn)、診斷并且修復基于模式的靜態(tài)代碼分析和/或單元測試所不
6、能檢測到的軟件錯誤。在早期發(fā)現(xiàn)這些缺陷能節(jié)省軟件開發(fā)過程中花在診斷以及可能的重復工作上的大量時間。n在Parasoft Jtest中,BugDetective包含以下兩個用途:n1. 用作Jtest靜態(tài)代碼分析工具以檢測代碼中包含的上述缺陷。n2. 用以與Jtest單元測試引擎協(xié)同使用以驗證單元測試中所報告的異常在實際運行時 是否會被觸發(fā)。高效單元測試81.、BugDetective的優(yōu)點(1)n利用現(xiàn)有資源完成更全面的測試:利用現(xiàn)有資源完成更全面的測試:nBugDetective很好的補充了其它的測試技術,它允許用戶在沒有測試用例的情況下發(fā)現(xiàn)代碼中的問題,從而免去了用戶開發(fā)、執(zhí)行以及維護復雜
7、的測試用例的麻煩。通過檢測程序中的潛在分支,BugDetective為用戶提供了一個傳統(tǒng)測試方法難以完成的路徑覆蓋率(path coverage)分析。因此,BugDetective通常能夠檢查出測試未覆蓋到的程序在處理一些罕見情況下出現(xiàn)的問題。此外,如果對代碼進行了修改,用戶可以直接搜尋其中的缺陷而不必更新或重新生成測試用例。n自動查找跨越多個類的缺陷:自動查找跨越多個類的缺陷:n傳統(tǒng)的自動化單元測試工具只能幫助用戶查找包含在同一個類中的缺陷。這一差異很關鍵。大多數(shù)對類進行了深入測試的開發(fā)者都是先修改有明顯問題的代碼,然后還是遇到了諸如空指針異常一類錯誤,并且這樣的錯誤一般都需要數(shù)天的時間才
8、能被診斷出來,因為其原因往往是由隱蔽或復雜且又跨越多個函數(shù)甚至是多個封裝的執(zhí)行路徑造成的。使用BugDetective能夠在瞬間發(fā)現(xiàn)這些問題。高效單元測試91.、BugDetective的優(yōu)點(2)n注重于實際運行中會出現(xiàn)的缺陷及誤操作:注重于實際運行中會出現(xiàn)的缺陷及誤操作:nBugDetective能自動準確地發(fā)現(xiàn)與數(shù)據(jù)或數(shù)據(jù)流相關的缺陷。在大多數(shù)情況下,BugDetective所報告的沖突都是在實際中的誤操作(而不是單元測試所查找到的可能或假設的誤操作)。例如,除非下述代碼中的strlen函數(shù)被程序調(diào)用并且被賦予一個空值,否則BugDetective不會報告任何沖突,而單元測試則不管向st
9、rlen賦空值與否都會報告代碼有問題:public int strlen (string str)Return str.length();高效單元測試101.5、與BugDetective協(xié)同工作nBugDetective這種獨特靜態(tài)分析技術能判斷應用程序的執(zhí)行路徑是否與用作規(guī)則的“可疑行為”的特征相符。每發(fā)現(xiàn)一處缺陷,BugDetective都詳細列舉出造成該缺陷的完整執(zhí)行路徑,并以缺陷自我暴露處的代碼為終結。為了縮短診斷及修復缺陷的時間并降低其難度,BugDetective對數(shù)據(jù)流路徑的細節(jié)加入了擴充標注(如針對空指針異常沖突的描述就包括了在任一時刻執(zhí)行路徑中包含空值的變量)。高效單元測試
10、111.、Bugdetective 靜態(tài)數(shù)據(jù)流分析的具體操作流程n1)打開隨書附帶的例程com.embest.eclipse.jtest.demo,展開這個工程,找到com.embest.eclipse.jtest.demo.bugdetectiveAndParameteredTest包下的“NullPointer.java”文件。n2)在菜單欄中依次選擇菜單 “Jtest”-“Test Using”-“Builtin”-“ BugDetective (License Required)”,如下圖示。高效單元測試12高效單元測試13開始Bugdetective自動化檢測,如圖所示。高效單元測試
11、143)檢測完成后,在這個對話框中可以查看相關信息:高效單元測試154)在菜單欄中依次選擇菜單項“Jtest”-“Show View”-“Tasks”,在Jtest視圖中依次展開節(jié)點,可以查看比較詳細的Error信息,如圖示:高效單元測試16結果分析n通過上圖可以清楚看到有兩個比較重要的點: n沖突源點(沖突源點(Violation origin): 這是沖突的“根源”。通常,這是“錯誤數(shù)據(jù)”的發(fā)源地。例如,在空指針異常規(guī)則中,其沖突源點也就是空值的源頭,本例子中的第19行和第20行。n 沖突節(jié)點(沖突節(jié)點(Violation point):): 這是對“錯誤數(shù)據(jù)”的使用導致在程序中產(chǎn)生缺陷的
12、節(jié)點。在空指針異常這個例子當中,該點既是變量間接引用該空值的地方,本例子中的第29行和第39行。高效單元測試17n5)右鍵單擊報告中的沖突(用黃色提示圖標顯示出的節(jié)點)并在快捷菜單中選擇相應的命令(Show Violation Origin或者Show Violation Point)能夠讓用戶方便地訪問沖突源點以及沖突節(jié)點。例如,“空指針異常”規(guī)則的沖突將會彈出Show Violation Origin(賦空值處)和Show Violation Point(發(fā)生空指針異常處)命令來幫助用戶理解代碼中產(chǎn)生該異常的原因。高效單元測試186)用戶也可以右鍵選擇沖突源點和沖突節(jié)點,在彈出的菜單中選擇
13、“Go to”,如圖所示,即可定位到源代碼中出錯的位置,如圖所示。高效單元測試197)當然用戶也可以雙擊Jtest視圖中的沖突源點和沖突節(jié)點,來查看源代碼中源點和節(jié)點的位置。上述三種方法都可以定位到源代碼中可能存在bug的地方,如圖所示:高效單元測試20n8)由于第19行為變量sFirstLine對象賦值null,那么在第29行就存在隱含的問題:當程序執(zhí)行完try這個模塊后,還存在sFirstLine為null的可能性,那么在第29行使用該對象的屬性的時候,就拋出異常。n如果測試人員發(fā)現(xiàn)代碼中隱含的bug,那么請及時通知軟件開發(fā)人員。如果是開發(fā)人員發(fā)現(xiàn),或者開發(fā)人員受到測試人員的報告,則應及時
14、修正。高效單元測試211.7小結nBugDetective的這種獨特的數(shù)據(jù)流分析技術能幫助軟件開發(fā)團隊在不實際運行代碼的情況下發(fā)現(xiàn)關鍵的運行時缺陷,同時,它還能驗證單元測試用例所暴露出的缺陷是否是在運行時會表現(xiàn)出來的“實際缺陷”。BugDetective能檢測出很多能夠逃避模式匹配靜態(tài)分析以及單元測試的缺陷,而且這些缺陷往往也是人工測試以及檢測所難以發(fā)現(xiàn)的。n當BugDetective同模式匹配靜態(tài)分析、單元測試、容器測試(針對Java而言)、API測試、模塊測試等測試一起構成完整的回歸測試套件時,它能幫助開發(fā)團隊:q 迅捷可靠地修改代碼 幫助開發(fā)團隊迅速建立一個回歸測試安全網(wǎng),它能在缺陷被引
15、入代碼后迅速地將其定位出來,并且還能幫助開發(fā)團隊確定代碼修改是否破壞了其既有功能性,即使項目龐大的代碼庫沒有通過測試或者只進行了很少量的測試。q 控制開發(fā)成本以及項目結點 盡早發(fā)現(xiàn)錯誤,以最低成本最迅速地對這些錯誤進行修復,同時廣泛地測試潛在用戶路徑以查找難以發(fā)現(xiàn)的問題,避免推遲軟件發(fā)布周期以及發(fā)布補丁包的可能。q優(yōu)化開發(fā)資源 自動糾正約80%的編碼問題,節(jié)約大量花在逐行審查代碼以及調(diào)試上的時間,使開發(fā)者能更加著重于檢查設計、算法以及實現(xiàn)等方面的問題。q低風險地享受前沿技術帶來的便捷 降低測試復雜的企業(yè)級程序的難度(如SOA/Web服務程序以及Java EE應用程序等)。q獲取對Java代碼的
16、質(zhì)量以及完成程度有個可視化的報告 提供按需定制的客觀代碼資源的評估并且以質(zhì)量和項目節(jié)點為目標全程跟蹤開發(fā)流程。高效單元測試22動態(tài)測試指通過人工或者利用工具運行程序進行檢查,分析程序的執(zhí)行狀態(tài)和程序的外部表現(xiàn)。動態(tài)測試通過運行被測程序,檢查運行結果與預期結果的差異,并分析運行效率和健壯性等性能,由構造測試實例、執(zhí)行程序、分析程序的輸出結果三部分組成。單元測試、集成測試、確認測試、系統(tǒng)測試、驗收測試、白盒測試、黑盒測試等都是動態(tài)測試。 Jtest的自動化動態(tài)測試完成單元測試、集成測試、白盒測試、黑盒測試等工作,可以自定義所執(zhí)行測試的級別和范圍,以便體現(xiàn)用戶不同的需求和測試習慣。 關于Jtest的
17、容器測試、回歸測試、覆蓋率分析以及Tracer測試將按照獨立的章節(jié)進行詳細介紹。 2 Jtest動態(tài)測試動態(tài)測試 引述高效單元測試232.1 基于Jtest自動化測試nJtest提供了高效的方法執(zhí)行白盒測試。完全自動執(zhí)行所有的白盒測試過程,自動生成和執(zhí)行精心設計的測試用例。自動標記任何運行失敗,并以一種簡單的圖示化結構顯示。 nJtest允許定制白盒測試用例的生成,和在什么層次上(項目、文件、類或方法)執(zhí)行測試;Jtest通過自動生成大量測試用例,向程序注入數(shù)據(jù)流,考察程序是否會由于非法數(shù)據(jù)的輸入而產(chǎn)生異常,導致程序不可控,從而檢測程序的堅固性。 n同時,Jtest根據(jù)程序功能定義好每個入口,
18、自動生成大量的功能性的測試用例,對程序進行功能測試,從而檢測程序的功能。通過自動化黑盒測試的大部分操作,減輕了這類測試的負擔。 高效單元測試242.1.1了解和熟悉自動化單元測試配置n1)啟動Jtest后,在菜單欄依次選擇菜單項:“Jtest”-“Test Configurations”,在彈出的Test Configurations對話框的左邊樹形視圖中,依次展開結點“Builtin”-“Unit Testing”,如圖所示,在Unit Testing結點下列出了Parasoft Jtest 單元測試所有方法。如“Generate Unit Tests”,用來自動化生成單元測試用例;“Run
19、 Unit Tests”,用來自動化執(zhí)行測試用例,等等。后面重點介紹樁函數(shù),回歸測試,容器測試,以及Monitoring測試。 n2)對如何自定義和修改配置在前面講靜態(tài)測試時做了詳細的講述,這里在使用自定義配置來進行動態(tài)測試,是一樣的,不做詳細贅述。 高效單元測試252.2 自動化生成并執(zhí)行測試用例下面講述如何使用Parasoft Jtest的自動化單元測試功能。 1)打開例程com.embest.eclipse.jtest.demo。 2)選定目標進行測試,用戶可針對文件、包或工程進行測試。這里展開com.embest.eclipse.jtest.demo,選擇com.embest.ecli
20、pse.jtest.demo.bugdetectiveAndParameteredTest分支,選擇SortArrayList.java文件。3) 自動生成測試用例。 打開菜單依次選擇菜單項“Jtest”-“Test Using”-“Builtin”-“Unit Testing”-“Generate Unit Tests”;開始針對要測試的源碼生成單元測試用例; 高效單元測試26在執(zhí)行完成后,在工作空間中會生成在原來工程名后添加了.jtest的工程 高效單元測試274)用戶可以通過在Test Configurations對話框中,復制此配置到User-Defined結點下,然后進行編輯修改配置
21、:依次在編輯界面上選擇標簽頁GenerationTest Class,如圖所示: 高效單元測試285)在Test Class中可以進行對生產(chǎn)的用例進行配置,對輸出的Class進行的名稱或者路徑需要修改,可以通過點擊選擇按鈕“Edit”打開對話框Edit Pattern for Unit Test Classes,如圖所示,進行修改編輯,在每個參數(shù)的編輯框中可以通過點擊按鈕“Add Variable”在打 開的對話框Add Variable中選擇抽取對應的參數(shù)。 高效單元測試296)依次展開生成的工程,如圖所示,工程包和文件都是遵照之前的配置生成的, 其中文件SortArrayListTest.
22、java為生成的用例文件。 高效單元測試30n7)在生成的測試用例中,用戶可以查看到對于被測文件的每個方法,都會根據(jù)不同的條件,產(chǎn)生相對應的測試用例。如果用例中出現(xiàn)一些exception,會以注釋的方式出現(xiàn)相對應的用例處,以提示用戶。另外用戶可以在Test configurations中將Run Unit Tests或者General and Run Unit Tests復制到User Defined結點下進行設置, 通過選擇標簽頁Execution Severities,打開Severities標簽頁,如圖所示: 高效單元測試31n8)在Initial Severity Levels組中,點
23、擊Add按鈕,打開Specify exception and severity對話框,在Exception文本框中輸入java.lang.NullPointerException異常,然后在Severity組合框中設置安全等級,這里設置為Severity 1,如圖示: 完成后點擊Ok,最后在關閉Test Configurations對話框的之前,點擊按鈕Apply,將先編輯的配置應用。再此選擇被測文件,使用配置的測試規(guī)則,進行測試,本例使用Run Unit Tests再次進行測試。測試完成后,在Jtest視圖中查看到以下問題: 高效單元測試322.3 提取參數(shù)化的測試用例1)在生成測試用例后,
24、用戶還可以在生成的對應測試工程中右鍵選擇測試文件SortArrayListTest.java,在打開的菜單中依次選擇菜單項JtestExtract Parameterized Test Case,如圖示: 高效單元測試332)打開Test Case Parameterization對話框,選擇通過生成含有探索和邊角用例值的Excel工作薄,如圖所示,如果不需要其他配置,直接使用默認配置點擊按鈕“Finish”: 高效單元測試34完成后在測試用例的目錄中生成Excel文件,如圖所示: 高效單元測試35在用例文件中,會自動添加一段代碼,如圖示高效單元測試363)將文件保存,選擇菜單Jtest Te
25、st Using Builtin Run Unit Tests。 測試結果如圖所示: 高效單元測試372.4總結本節(jié)舉例講述如何利用Parasoft Jtest的自動化單元測試功能。開發(fā)測試人員首先使用工具對待測代碼自動生成測試用例,然后自動化執(zhí)行測試用例。此類測試可暴露意料之外的異常,并檢查類在結構方面是否合理;助于開發(fā)測試人員在早期發(fā)現(xiàn)程序存在的問題,并提高程序的堅固性。 高效單元測試38樁函數(shù)提供被調(diào)函數(shù)的占位,使得可以獨立地進行單元測試而不依賴外部文件或函數(shù)。在使用樁函數(shù)時,Jtest 會重定向執(zhí)行流程,調(diào)用一個樁函數(shù)替代原有函數(shù)。 樁函數(shù)主要有兩個用途: 將正在測試的代碼從集成環(huán)境中
26、隔離出來。 在不可能影響函數(shù)行為、且需要使用替代實施的情況下進行測試。 用戶可以為任何測試用例定義自己的樁函數(shù),不管是自動生成的測試用例還是用戶定義的測試用例。當用戶使用用戶定義的樁函數(shù)時,可以完全控制外部函數(shù)的返回值 無需具有真正可用的外部函數(shù)。 3 樁函數(shù) 引述高效單元測試393.1 Jtest樁函數(shù)的使用1) 打開菜單欄依次選擇菜單項Jtest Test Configurations,打開Test Configurations對話框,在此對話框中,依次展開左邊樹形視圖的結點Builtin Unit Testing。在Unit Testing結點下,可以看到有幾項如General Aggressive Stubs and Run Tests、General External Stubs and Run Tests等,如圖所示。這些定制的規(guī)則,可以根據(jù)用戶的不同需求使用。一般來說,在Generate Unit Tests中已經(jīng)默認配置了對樁函數(shù)的使用,只是用戶定制的要求不同。高效單元測試40n2)對樁函數(shù)的使用的例程,是Jtest自帶的工程,可以通過菜單項FileNewOther打開New 對話框,在New對話框中展開節(jié)點Jtest,選擇其子節(jié)點Jte
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 照片濾鏡調(diào)色課程設計
- 二手車交易平臺營業(yè)員銷售總結
- 春游課程設計
- 家具設計師工作總結
- 風險防控方案計劃
- 法律服務行業(yè)風險防范方案
- 化工行業(yè)衛(wèi)生防護要點
- 物流運輸行業(yè)咨詢服務經(jīng)驗總結
- 藥店衛(wèi)生管理措施
- 金融領域的投資顧問職責
- 進階練12 材料作文(滿分范文20篇)(解析版)-【挑戰(zhàn)中考】備戰(zhàn)2024年中考語文一輪總復習重難點全攻略(浙江專用)
- 骨質(zhì)疏松的中醫(yī)中藥治療
- 衛(wèi)浴銷售部門年終總結
- 2024年高考真題-化學(天津卷) 含解析
- 安徽省蕪湖市2023-2024學年高二上學期期末考試 物理 含解析
- 2024年招投標培訓
- 人教A版(新教材)高中數(shù)學選擇性必修第三冊學案2:7 1 1 條件概率
- 北京郵電大學《數(shù)據(jù)庫系統(tǒng)》2023-2024學年期末試卷
- 防火門工程施工組織設計方案
- 期末(試題)-2024-2025學年北師大版(三起)(2024)英語三年級上冊
- 2023-2024學年江蘇省徐州市九年級(上)期末物理試卷
評論
0/150
提交評論