系統測試——代碼質量檢查、單元測試、性能測試、自動構建、項目管理


根據軟件開發的過程和由細節到外部的順序,將軟件測試划分為5個階段:

1)代碼質量檢查:對代碼的格式、潛在的Bug進行檢查,常用的工具有Checkstyle、PMD、FindBugs;
2)單元測試:對代碼的功能進行測試,常用的工具有JUnit、EasyMock;
3)性能測試:對代碼的性能進行測試,常用的工具有JMeter、Profiler;
4)自動構建:對代碼進行自動構建和持續集成測試、部署,常用的工具有Ant、Maven、CruiseControl;
5)項目管理:對軟件測試中的Bug進行跟蹤和知識管理,常用的工具有JIRA、Confluence。
 
一、代碼質量檢查
1、Checkstyle是一個開源代碼格式的分析工具,側重於遵循Java編碼約定(例如行長度和縮進)而不是Bug模式。
    檢查內容:
        Javadoc注釋、命名約定、標題、Import語句、體積大小、空白、修飾符、塊、代碼問題、類設計、混合檢查。
 
2、PMD是一個開源Java源碼分析器,它分析Java源代碼並找出潛在的Bug。
    檢查內容:
        1)基本(rulesets/basic.xml)——規則的一個基本合集:catch塊不該為空,無論何時重寫equals(),都要重寫hashCode()等。
        2)命名(rulesets/naming.xml)——對標准Java命名規范的測試:變量名稱不應太短;方法名稱不應過長;類名稱應以大寫字母開頭;方法和字段應當以小寫字母開頭等。
        3)未使用的代碼(rulesets/unusedcode.xml)——查找從未使用的私有字段和本地變量、執行不到的語句、從未調用的私有方法等。
        4)設計(rulesets/design.xml)——檢查各種設計良好的原則,例如switch語句應當有default塊,應當避免深度嵌套的if塊,不應當給參數重新賦值,不應該對double值進行相等比較。
        5)導入語句(rulesets/imports.xml)——檢查import語句的問題,比如同一個類被導入兩次或者被導入java.lang的類中。
        6)JUnit測試(rulesets/junit.xml)——查找測試用例和測試方法的特定問題,例如方法名稱的正確拼寫,以及suite()方法是不是static和public。
        7)字符串(rulesets/string.xml)——找出處理字符串遇到的常見問題,例如重復的字符串標量,調用String構造函數,對String變量調用toString()方法。
        8)括號(rulesets/braces.xml)——檢查for、if、while和else語句是否使用了括號。
        9)代碼尺寸(rulesets/codesize.xml)——測試過長的方法、有太多方法的類,以及重構方面的類似問題。
        10)JavaBean(rulesets/javabeans.xml)——查看JavaBean組件是否違反JavaBean編碼規范,比如沒有序列化的Bean類。
        11)終結函數(finalizer):因為在Java語言中finalize()方法不是那么普遍,所以它們的使用規則雖然很詳細,但是人們對它們不是很熟悉,這類檢查查找finalize()方法的各種問題,例如空的終結函數、調用其他方法的finalize()方法、對finalize()的顯示調用等。
        12)克隆(relesets/clone.xml)——用戶clone()方法的新規則,凡是重寫clone()方法的類都必須實現Cloneable,clone()方法應該調用super.clone(),而clone()方法應該聲明拋出CloneNotSupportedException異常,即使實際上沒有拋出異常,也要如此。
        13)耦合(rulesets/coupling.xml)——查找類之間過度耦合的跡象,比如導入內容太多;在超類型或接口就已經夠用的時候使用子類的類型;類中的字段、變量和返回類型過多等。
        14)嚴格的異常(rulesets/strictexception.xml)——針對異常的測試:不應該聲明該方法而拋出java.lang.Exception異常,不應該將異常用於流控制,不應該捕獲Throwable等。
        15)有爭議的(rulesets/controversial.xml)——PMD的有些規則是有能力的Java程序員可以接受的,但還是有一些爭議。這個規則集合包含一些更有問題的檢驗,其中包括把null賦值給變量、方法中有多個返回點,以及從sun包導入等。
        16)日志(rulesets/logging-java.xml)——查找java.util.logging.Logger的不當使用,包括非終狀態(Nonfinal)、非靜態的記錄器,以及在一個類中有多個記錄器。
 
3、FindBugs是另一個開源靜態代碼分析工具,它與PMD的不同之處在於,它分析編譯后的字節碼,而不是分析源代碼。
    檢查內容:
        1)方法名的首字母要小寫。
        2)類名的首字母要大寫。
        3)方法沒有拋出異常。
        4)equals()對數組對象和非數組對象的比較。
        5)空對象的檢查。
        6)Public Static方法暴露內部細節。
        7)Inconsistent Synchronization方法的使用。
        8)Synchronize使用在同一個變量上。
        9)變量違背使用。
        10)重復的if測試條件。
        11)重復的空置檢查。
        12)沒有拋出異常時卻捕獲了異常。
 
 
二、單元測試
1、以JUnit為核心的測試框架。
        1)JUnit:是一個開源的Java單元測試框架,用來編寫白盒測試代碼。
        2)Cactus:一個基於JUnit框架的簡單測試框架,能夠實現服務端的代碼測試,例如Servlet、HttpServletRequest、HttpServletResponse、HttpSession等。
        3)DbUnit:為數據庫驅動的項目提供的一個對JUnit的擴展,除了提供一些常用功能外,它還可以將你的數據庫置於一個測試輪回之間的狀態。
        4)TestNG:是根據JUnit和NUnit思想而構建的一個測試框架,但是TestNG增加了許多新的功能,使得它變得更加強大與容易使用。
        5)XMLUnit:用來比較兩張XML之間的不同,展示XML利用XSLT來校驗XML。
        6)StrutsTestCase:是JunitTestCase類的擴展,提供基於Struts框架的代碼測試。
        7)SpringUnit:用於Java軟件單元和綜合測試的開源框架,它把Spring的依賴注入容器與JUnit的測試框架相結合來實現數據驅動測試。
        8)Ejb3Unit:是JUnit的一個擴展,用於在容器外對EJB3實體(Entity)和會話(Session)Bean進行自動測試。
 
2、模擬測試框架。
        1)EasyMock:為Mock Objects提供接口並在JUnit測試中利用Java的proxy設計模式生成它們的實例。Mock方法是單元測試中常見的一種技術,它的主要作用是模擬一些在應用中不容易構造或者比較復雜的對象,例如Servlet、HttpServeltRequest、HttpServeltResponse、HttpSession、ResultSet等,從而把測試與測試邊界以外的對象隔離開。編寫自定義的Mock對象需要額外的編碼工作,同時也可能引入錯誤。EasyMock提供了根據指定接口動態構建Mock對象的方法,避免了手工編寫Mock對象。EasyMock是一套通過簡單的方法對於指定的接口或類生成Mock(模擬)對象的類庫,它能利用對接口或類的模擬來輔助單元測試。它提供對接口的模擬,能夠通過錄制、回放、檢查3步來完成測試過程,可以驗證方法的調用種類、次數、順序,可以令Mock對象返回指定的值或拋出指定的異常。通過EasyMock,我們可以方便地構造Mock對象從而令單元測試順利進行。
        EasyMock采用“記錄/回放”的工作模式,基本使用步驟如下:
            · 創建Mock對象的控制對象Control;
            · 從控制對象中獲取所需要的Mock對象;
            · 記錄測試方法中所使用到的方法和返回值;
            · 設置Control對象到“回放”模式;
            · 進行測試;
            · 在測試完畢后,確認Mock對象已經執行了剛才定義的所有操作。
        2)jMock:利用Mock Objects思想來對Java Code進行測試。jMock容易擴展,讓你快速簡單地定義Mock Objects,因此不必打破程序間的關聯;讓你超越對象之間交互作用而帶來的測試局限,減少你測試的脆弱性。
        3)MockLib:是一個很小的包,所以可以輕易地動態創建一個模擬對象,可以從模擬的系統中拋出異常來確保你的系統能夠正確處理錯誤,它同樣也是一個線程安全的模擬對象庫。
 
 
三、性能測試
1、使用JMeter進行壓力測試
        JMeter是Apache組織的開放源代碼項目,可以用於測試靜態或者動態資源的性能(JSP文件、Servlets、Perl腳本、Java對象、數據庫和查詢、FTP服務器或者其他的資源)。JMeter用於模擬在服務器、網絡或者其他對象上附加高負載以測試他們提供服務的受壓能力,或者分析他們提供的服務在不同負載條件下的總性能情況。要進行測試,首先需要創建測試計划。測試計划描述了執行測試過程中JMeter的執行過程和步驟,一個完整的測試計划包括一個或者多個線程組(Thread Groups)、邏輯控制(Logic Controller)、實例產生控制器(Sample Generating Controllers)、偵聽器(Listener)、定時器(Timer)、比較(Assertions)、配置元素(Configure Elements)。打開JMeter時,它已經建立了一個默認的測試計划,一個JMeter應用的實例只能建立或者打開一個測試計划。
 
2、使用Profiler檢查內存泄露
        工具有:Optimizeit Profiler、JProbe Profiler、JinSight、Rational公司的Purify等。
 
 
四、自動構建
1、Ant已經成為業界的標准,許多的源代碼網站都使用Ant作為項目編譯的工具,使用它可以進行項目的編譯、打包、運行、文檔生成等各種任務。
2、Maven是一個Ant為基礎的打包工具,Maven的編譯及所有的腳本都有一個基礎,就是POM(Project Object Model)。Maven對所依賴的包有明確的定義,並且基於中央倉庫進行編譯。
3、使用CruseContrl進行持續集成。
 
 
五、項目管理
1、使用JIRA進行項目的Bug的發布、跟蹤和管理
2、使用Confluence構建Wiki知識網站
        
 
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM