系統(tǒng)單元測試規(guī)范4JAVA單元測試指引_第1頁
系統(tǒng)單元測試規(guī)范4JAVA單元測試指引_第2頁
系統(tǒng)單元測試規(guī)范4JAVA單元測試指引_第3頁
系統(tǒng)單元測試規(guī)范4JAVA單元測試指引_第4頁
系統(tǒng)單元測試規(guī)范4JAVA單元測試指引_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、JAVA單元測試指引1. 背景系統(tǒng)的規(guī)模及復雜度與時間及業(yè)務的拓展成正比。隨著系統(tǒng)的規(guī)模不斷變大,各子系統(tǒng)內(nèi)的業(yè)務邏輯的新增,系統(tǒng)的代碼總數(shù)也在不斷的增加。部分業(yè)務在時間的推移上會發(fā)生變化引起系統(tǒng)在代碼層面上的重構,系統(tǒng)代碼在軟件工程的生命周期中不斷的迭代和變化。代碼的新增以及重構都需要通過嚴格測試才能部署上線,公司目前對于上線功能采取的多數(shù)是黑盒測試,并未使用白盒測試對研發(fā)人員編寫的代碼進行更高的覆蓋測試。而研發(fā)人員平時在功能開發(fā)完成后進行自測的時候使用的方式也因為個人喜好或各種原因沒有形成統(tǒng)一。因此,系統(tǒng)若能在編譯、部署、上線的時候能夠?qū)λ泄δ芏歼M行盡可能全面的白盒測試將會有助于降低系統(tǒng)

2、在升級過程中的故障率,提高系統(tǒng)升級的速度。若能夠通過更全面的測試發(fā)現(xiàn)代碼中的隱藏缺陷,便能提升代碼的健壯性,使系統(tǒng)在長期運行中發(fā)生更少的問題。2. 需求研發(fā)人員在功能開發(fā)結(jié)束之后應當同時提交該功能的單元測試用例代碼,并且該單元測試用例代碼需要滿足以下幾點需求:2.1. 功能覆蓋1) 每個單元測試代碼中需要覆蓋該功能的所有輸入和輸出,并對輸出進行校驗。2) 最終目標每個系統(tǒng)的所有測試用例代碼需要覆蓋系統(tǒng)的所有功能。(存量系統(tǒng)在后續(xù)分階段補充)2.2. 測試顆?;?) 單元測試用例只測試小顆粒的功能。2) 一個單元測試用例只涉及到一個被測模塊,避免牽扯到太多的模塊。2.3. 測試自動化1) 單元測

3、試的輸入,輸出以及校驗全部自動化,不需要人工干預。2) 系統(tǒng)編譯的時候需要自動將所有單元測試執(zhí)行一次,任意單元測試不通過不允予通過發(fā)布。2.4. 持續(xù)維護1) 新添加的功能和模塊需要添加相對應的單元測試用例。2) 重構或業(yè)務邏輯變更涉及到的功能和模塊代碼變化需要更新相對應的單元測試用例。3. 方案基于公司在JAVA語言方面多數(shù)系統(tǒng)是采用Maven進行構建的現(xiàn)狀以及Maven在系統(tǒng)構建的優(yōu)勢,故采用Maven進行系統(tǒng)構建+Junit進行用例測試的方案實現(xiàn)。研發(fā)人員可以借助Cobertura對自己編寫的測試用例進行代碼覆蓋分析,以便對測試代碼進行調(diào)整和優(yōu)化。3.1. Maven1) Maven不僅

4、僅能構建項目,同時還是一個依賴管理工具,一個項目管理工具,提供中央倉庫幫助我們自動下載構件,也允許我們上傳自己開發(fā)的jar包供各系統(tǒng)使用,這些都是自動化的非常方便。2) Maven提供的免費中央倉庫涵蓋了非常非常多的開源庫,能滿足絕大多數(shù)系統(tǒng)的使用需求。3) Maven對于目錄結(jié)構有要求,約定優(yōu)于配置,項目間切換就省去了學習成本。4) Maven項目對單元測試支持很友好,約定的test目錄用來編寫單元測試代碼,maven在進行系統(tǒng)編譯的時候自動執(zhí)行test目錄里測試用例,一旦出現(xiàn)用例不通過maven自動打包發(fā)布。5) Maven構建的系統(tǒng)默認集成了Junit單元測試工具。3.2. Junit1

5、) 簡單易用的單元測試工具,通過斷言校驗期望值與實際值的差異。2) 支持圖形交互,測試結(jié)果簡潔明了。3) 提供異常堆棧方便跟蹤錯誤代碼。3.3. JaCoCo1) 簡介JaCoCo是一個開源的覆蓋率工具(官網(wǎng)地址: /JaCoCo/ ),它針對的開發(fā)語言是java,其使用方法很靈活,可以嵌入到Ant、Maven中;可以作為Eclipse插件,可以使用其JavaAgent技術監(jiān)控Java程序等等。2) 覆蓋率概況標示綠色的為行覆蓋充分,標紅色的為未覆蓋的行,黃色菱形的為分支部分覆蓋,綠色菱形為分支完全覆蓋。3) JaCoCo的使用方式:Ø Ap

6、ache Ant方式Task coverage、Task agent、Task dump、Task merge、Task report、Task instrumentØ 命令行方式使用方式說明:主要放在JAVA_OPTS中,比如:由AgentOptions的getVMArgument方法加載,各參數(shù)入AgentOptions的對應參數(shù),為后續(xù)操作做為輸入。系統(tǒng)在jvm停止的時候會dump覆蓋率信息。Ø Apache Maven方式(1)項目已jar包方式打包,引入junit和jacoco。(2)Build時執(zhí)行instrument、report、check。(3)覆蓋率生成

7、到target/jacoco.exec4. 測試覆蓋4.1. 代碼覆蓋度單元測試中對每個被測邏輯體內(nèi)的代碼覆蓋有以下幾種方法,其覆蓋的程度按照順序遞增。這里借助一個示例對覆蓋方法做一個簡單的說明,供各位進行參考。假定被測邏輯入下圖(長方形內(nèi)為代碼語句):4.1.1. 語句覆蓋語句覆蓋是最起碼的結(jié)構覆蓋要求,語句覆蓋要求設計足夠多的測試用例,使得程序中每條語句至少被執(zhí)行一次。對應的用例如下:4.1.2. 分支(判定)覆蓋它要求設計足夠多的測試用例,使得程序中每個判定至少有一次為真值,有一次為假值,即:程序中的每個分支至少執(zhí)行一次。每個判斷的取真、取假至少執(zhí)行一次。對應的用例如下:4.1.3. 條

8、件覆蓋條件覆蓋要求設計足夠多的測試用例,使得判定中的每個條件獲得各種可能的結(jié)果,即每個條件至少有一次為真值,有一次為假值。對應的測試用例如下:4.1.4. 分支(判定)-條件覆蓋判定-條件覆蓋就是設計足夠的測試用例,得使判斷中每個條件的所有可能取值至少執(zhí)行一次,同時每個判斷本身所有可能結(jié)果也至少執(zhí)行一次。對應的測試用例如下:4.1.5. 條件組合覆蓋要求設計足夠多的測試用例,使得每個判定中條件結(jié)果的所有可能組合至少出現(xiàn)一次。滿足“條件組合覆蓋”的測試用例是一定滿足“判定覆蓋”、“條件覆蓋”和“判定/條件覆蓋”的。對應的測試用例如下:4.1.6. 路徑覆蓋路徑覆蓋的含義是,選取足夠多的測試數(shù)據(jù),

9、使程序的每條可能路徑都至少執(zhí)行一次(如果程序圖中有環(huán),則要求每個環(huán)至少經(jīng)過一次)。對應的測試用例如下:4.2. 原則由于根據(jù)程序的邏輯復雜程度以及程序設計上的差異性,某些代碼想要完成特定的測試覆蓋幾乎是無法完成的,所以原則上不要求所有測試用例都能完成最高的代碼覆蓋度。因此在條件允許的情況,盡量完成更高的測試覆蓋度,最低要求是語句覆蓋。5. 建議執(zhí)行規(guī)范考慮到規(guī)范的的復雜度與實施效果不成正比的關系,在單元測試方案的規(guī)范中只取最核心的幾項進行規(guī)范化以便降低實施的難度的同時提高交付的系統(tǒng)的質(zhì)量。5.1. 提交test測試包Maven項目在main目錄同級下默認了一個test包用于存放測試代碼以及測試

10、用配置文件,maven項目所編寫的所有測試用代碼和配置文件必須提交到SVN。5.2. 每個模塊或類提交對應的測試類每個模塊或服務類有對應同名的測試類。測試類中每個方法只進行一項最簡單的單元測試,并且測試的方法必須有含義且與測試的邏輯相符合。5.3. 測試用例至少達到語句覆蓋編寫測試代碼的研發(fā)人員需要使用Cobertura或其他工具自檢提交的單元測試代碼,最低要求測試的覆蓋率達到語句覆蓋級別。5.4. 系統(tǒng)編譯時需要執(zhí)行所有測試類編譯機進行系統(tǒng)編譯打包的時候需要執(zhí)行test包底下的所有測試用例,必須所有測試用例都通過才允許打包部署。6. 實施6.1. 新項目新項目采用maven構建,并且系統(tǒng)在生命周期內(nèi)按照規(guī)范持續(xù)交付產(chǎn)出

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論