單元測試(Unit Testing)
單元測試,又稱模塊測試。對軟件的組成單位進行測試,其目的是檢驗軟件基本組成單位的正確性。測試的對象是軟件里測試的最小單位:模塊。
測試階段:編碼后或者編碼前(TDD:測試驅動開發)
測試對象:最小模塊
測試人員:白盒測試工程師或開發人員
測試依據:代碼和注釋+詳細文檔
測試方法:白盒測試
測試內容:模塊接口測試、局部數據結構測試、獨立執行路徑測試、錯誤處理路徑測試、邊界條件測試
補充說明:
(1)學習測試依據時,我們可以對比軟件測試的“V”模型結合記憶
(2)白盒測試不是單元測試,單元測試是白盒測試
(3)測試驅動開發(TDD):測試人員先編寫測試用例,開發人員根據測試用例寫程序
單元測試的目的
單元測試的目的在於發現各模塊內部可能存在的各種錯誤,主要是基於白盒測試。(也就是說,在單元測試過程中,用的最多的是白盒測試方法,也可能會有灰盒或者黑盒。單元測試和白盒測試是不同的划分,不存在包含關系)。
在單元測試階段對應的文檔是詳細設計文檔(LLD);對應的代碼就是單元代碼,因此單元測試的目的主要有3點:
1、驗證代碼是與設計相符合的;
2、發現設計和需求中存在的錯誤;
3、發現在編碼過程中引入的錯誤。
單元測試的特點
1. 程序單元是應用的最小可測試部件,通常基於類或者類的方法進行測試。
2. 程序單元和其他單元是相互獨立的。
3. 單元測試的執行速度很快
4. 單元測試發現的問題相對容易定位。
5. 單元測試通常由開發人員來完成。
6. 通過了解代碼的實現邏輯進行測試,通常稱之為白盒測試。
單元測試過程
測試四部曲:
1. 初始化數據
2. 執行要測試的業務
3. 驗證測試的數據
4. 清理數據
單元測試策略
1、孤立的單元測試策略(Isolation Unit Testing)
方法:不考慮每個模塊與其它模塊之間的關系,為每個模塊設計樁模塊和驅動模塊,每個模塊進行獨立的單元測試。
優點:這個方法比較簡單,最容易操作,可以達到很高的結構覆蓋率,可以並行開展,該方法是純粹的單元測試。
缺點:樁函數和驅動函數工作量很大,效率低。
2、自頂向下的單元測試策略(Top Down Unit Testing)
方法:先對最頂層的單元進行測試,把頂層所調用的單元做成樁模塊,其次對第二層進行測試,使用上面已經測試過的單元做驅動模塊,以此類推,直到測試完所有模塊。
優點:可以節省驅動函數的開發工作,效率高。
缺點:隨着被測單元一個一個被加入,測試過程將變得越來越復雜,並且開發和維護的成本將增加。
3、自底向上的單元測試策略(Bottom Up Unit Testing)
方法:先對最底層的模塊進行單元測試,將模擬調用該模塊的模塊設置為驅動模塊,然后再對上面一層做單元測試,用下面已經測試好的模塊做樁模塊,以此類推,直到測試完所有模塊。
優點:可以節省樁函數的開發工作量,測試效率較高。
缺點:不是純粹的單元測試,底層函數的測試質量對上層函數的測試將產生很大影響。
單元測試工具
JavaScript單元測試工具 JsTestDriver和Venus和Buster.JS
C單元測試工具 greatest
C++單元測試工具 QTRunner和ECUT
單元測試維護工具 Unitils
Qt單元測試工具 QTestlib
存儲過程單元測試工具 SQLUnit
數據庫單元測試工具 DbUnit
NoSQL的單元測試工具 NoSQLUnit
單元測試框架
Arquillian、The Grinder、
JUnit 和TestNG是一個 Java 語言的單元測試框架;
AndroidJUnit4 是Android的單元測試框架;
C++ 單元測試框架 cipra
Python單元測試框架 PyUnit、unittest、pytest
Python 模擬測試框架 CaptureMock
gtest是一個跨平台的(Liunx、Mac OS X、Windows、Cygwin、Windows CE and Symbian)C++單元測試框架,由google公司發布。
集成測試(Integration Testing)
集成測試也稱聯合測試(聯調)、組裝測試:將程序模塊采用適當的集成策略組裝起來,對系統的接口及集成后的功能進行正確性檢測的測試工作。集成主要目的是檢查軟件單位之間的接口是否正確。
測試階段:一般是單元測試之后
測試對象:模塊間的接口
測試人員:白盒測試工程師或開發工程師
測試依據:單元測試的文檔+概要設計文檔
測試方法:黑盒測試與白盒測試(灰盒測試)
測試內容:模塊之間數據傳輸、模塊之間功能沖突、模塊組裝功能的正確性、全局數據結構、單模塊缺陷對系統的影響
補充說明:
單元測試是一個模塊內部的測試,集成測試是在模塊之間進行測試(至少兩個)。
集成測試的目的
集成測試的目標是按照設計要求使用那些通過單元測試的構件來構造程序結構。單個模塊具有高質量但不足以保證整個系統的質量。有許多隱蔽的失效是高質量模塊間發生非預期交互而產生的。
以下兩種測試技術是用於集成測試:
1)功能性測試。使用黑盒測試技術針對被測模塊的接口規格說明進行測試。
2)非功能性測試。對模塊的性能或可靠性進行測試。
另外,集成測試的必要性還在於一些模塊雖然能夠單獨地工作,但並不能保證連接起來也能正常工作。程序在某些局部反映不出來的問題,有可能在全局上會暴露出來,影響功能的實現。此外,在某些開發模式中,如迭代式開發,設計和實現是迭代進行的。在這種情況下,集成測試的意義還在於它能間接地驗證概要設計是否具有可行性。
集成測試是確保各單元組合在一起后能夠按既定意圖協作運行,並確保增量的行為正確。它所測試的內容包括單元間的接口以及集成后的功能。使用黑盒測試方法測試集成的功能。並且對以前的集成進行回歸測試。
集成測試的內容
集成測試的內容包括模塊之間接口以及集成后的功能。它主要使用黑盒測試方法測試繼承的功能,並對以前的集成進行回歸測試。具體來說,集成測試的內容包括以下方面:
(1)、將各個具有相互調用關系的模塊組裝起來時,檢查相應模塊接口的數據是否會丟失。
(2)、判斷各個子功能組合起來是否能夠達到預期要求的父功能。
(3)、檢查一個模塊的功能是否對其他模塊的功能產生不良影響。
(4)、檢查全局數據結構是否正確,以及在完成模塊功能的過程中是否會被異常修改。
(5)、單個模塊的誤差累計起來,是否會放大到不可接受的程度。
集成測試過程
1.計划階段: 依據需求規格說明書、概要設計文檔和開發計划,擬定軟件集成測試計划;
2設計階段:依據被測對象的結構、待集成模塊、接口、集成測試策略、測試工具等進行分析,擬定集成測試設計方案;
3實現階段:主要進行集成測試用例設計和集成測試代碼設計;
4執行階段: 執行測試,生成測試報告。
集成測試原則
1.所有的公共接口都要被測試到;
2.關鍵模塊必須進行充分的測試;
3.集成測試應該按一定的層次進行;
4.集成測試的策略應該綜合考慮質量、進度、成本;
5.當測試計划中的結束標准滿足時,集成測試結束;
6.集成測試根據集成測試的計划和方案進行,防止測試的隨意性;
7.項目管理者保證測試用例經過審查;
8.測試的執行結果應該如實的被記錄。
集成測試技術和步驟
技術:
以黑盒測試技術為主、白盒測試技術為輔(灰盒測試技術)
步驟:
與集成測試策略相關
集成測試策略
基於功能分解的集成測試:非漸增式集成、漸增式集成、瞬時集成。
瞬時集成測試策略又稱大爆炸測試、一次性集成。首先對每個模塊分別進行模塊測試,然后將所有模塊集成起來在一起進行測試,最終得到要求的軟件系統。
集成測試工具
Jenkins持續集成自動化構建發布工具
開源的 Restful Api 集成測試工具 Hitchhiker
集成測試的三個級別
由於集成的力度不同,一般可以把集成測試划分為三個級別:
1、模塊內集成測試。
2、子系統內集成測試。
3、子系統間集成測試。
系統測試(System Testing)
系統測試:將軟件系統看成是一個系統的測試。包括對功能、性能以及軟件所運行的軟硬件環境進行測試。時間大部分在系統測試執行階段,包括回歸測試和冒煙測試。
測試階段:集成測試階段之后
測試對象:整個系統(軟件、硬件)
測試人員:黑盒測試工程師
測試依據:需求規格說明文檔
測試方法:黑盒測試
測試內容:功能、界面、可靠性、易用性、性能、兼容性、安全性等
補充說明:
(1)系統測試是從完整的角度,廣面去看待問題,不再看模塊;
(2)雖然系統測試包括冒煙測試和回歸測試,但三者之間是有嚴格的先后順序的,即:先冒煙、再系統、后回歸。
系統測試的目的
系統測試的目的是驗證最終軟件系統是否滿足用戶規定的需求。
系統測試目標
1、 確保系統測試的活動是按計划進行的;
2、 驗證軟件產品是否與系統需求用例不相符合或與之矛盾;
3、 建立完善的系統測試缺陷記錄跟蹤庫;
4、 確保軟件系統測試活動及其結果及時通知相關小組和個人。
系統測試主要分為以下幾種:
1.恢復測試
2.安全測試
3.強度測試
4.性能測試
系統測試原則
1、測試機構要獨立;
2、要精心設計測試計划,包括負載測試、壓力測試、用戶界面測試、可用性測試、逆向測試、安裝測試、驗收測試;
3、要進行回歸測試;
4、測試要遵從經濟性原則。
系統測試的方法
功能測試:功能測試屬於黑盒測試,是系統測試中最基本的測試。功能測試主要根據產品的需求規格說明和測試需求列表,驗證產品是否符合需求規格說明。
協議一致性測試:主要用於分布式系統。在分布式系統中,很多功能的實現是通過多台計算機相互協作來完成的,這要求計算機之間能相互交換信息,所以需要制定一些規則(協議)。對協議進行測試,通常包括:協議一致性測試、協議性能測試、協議互操作性測試、協議健壯性測試。
性能測試:主要用於實時系統和嵌入式系統,性能測試是指測試軟件在集成系統中的運行性能,目標是量度系統的性能和預先定義的目標有多大差距。一種典型的性能測試是壓力測試,當系統同時接收極大數量的用戶和用戶請求時,需要測量系統的應對能力。性能測試要有工具的支持,在某種情況下,測試人員必須自己開發專門的接口工具。
壓力測試:又稱強度測試,是在各種超負荷的情況下觀察系統的運行情況的測試。
容量測試:在系統正常運行的范圍內測試並確定系統能夠處理的數據容量。容量測試是面向數據的,主要目的就是檢測系統可以處理目標內確定的數據容量。
安全性測試:安全性測試就是要驗證系統的保護機制是否抵御入侵者的攻擊。保護測試是安全性測試中一種常見的測試,主要用於測試系統的信息保護機制。評價安全機制的性能與安全功能本身一樣重要,其中安全性的性能主要包括:有效性、生存性、精確性、反應時間、吞吐量。
失效恢復測試:驗證系統從軟件或者硬件失效中恢復的能力。失效恢復測試采用各種人為干預方式使軟件出錯,造成人為的系統失效,進而檢測系統的恢復能力。如果恢復需要人為干預,則應考慮平均修復時間是否在限定的范圍內。
備份測試:備份測試是失效恢復測試的補充,目的是驗證系統在軟件或者硬件失效的實踐中備份其數據的能力。
GUI測試:GUI測試與用戶友好性測試和可操作性測試有重復,但GUI測試更關注對圖形界面的測試。GUI測試分為兩個部分,一方面是界面實現與界面設計的情況要符合;另一方面是要確認界面能夠正確處理事件。
GUI測試設計測試用例一般要從以下4方面考慮:
(1)划分界面元素,並根據界面的復雜性進行分層。通常把界面划分為三個層次,第一層是界面原子層;第二層是界面組合元素層;第三層是一個完整的窗口。
(2)在不同的界面層次確定不同的測試策略。
(3)進行測試數據分析,提取測試用例。
(4)使用自動化測試工具進行腳本化工作。
健壯性測試:又稱容錯測試,用於測試系統在出故障時,是否能夠自動恢復或者忽略故障繼續運行。健壯性測試的一般方法是軟件故障插入測試,在軟件故障插入測試中,需要關注三個方面:目標系統、故障類型和插入故障的方法。
兼容性測試:檢驗被測的應用系統對其他系統的兼容性。
易用性測試:與可操作性類似。檢測用戶在理解和使用系統方面是否方便。易用性測試是面向用戶的系統測試,包括對被測系統的系統功能、系統發布、幫助文本和過程等的測試。最好在開發階段就開始進行。
安裝測試驗證成功安裝系統的能力。
文檔測試:主要是針對系統提交給用戶的文檔進行驗證。文檔測試的目標是驗證用戶文檔的正確性並保證操作手冊的過程能正常工作。
在線幫助測試:用於檢驗系統的實時在線幫助的可操作性和准確性。
數據轉換測試:目標是驗證已存在數據的轉換並載入一個新的數據庫是否有效。
驗收測試(Acceptance Testing)
驗收測試(交付測試):是部署軟件之前的最后一個測試操作。它是技術測試的最后一個階段,也稱為交付測試。是以用戶為主的測試,軟件開發人員和質量保證人員也應參加,由用戶參加設計測試用例,使用用戶界面輸入測試數據,並分析測試的輸出結果。
驗收測試的目的是確保軟件准備就緒,按照項目合同、任務書、雙方約定的驗收依據文檔,向軟件購買者系統測試展示該軟件系統滿足原始需求。
測試階段:系統測試通過后
測試對象:整個系統(包括軟硬件)
測試人員:主要是最終用戶或者需求方
測試依據:用戶需求、驗收標准
測試方法:黑盒測試
測試內容:同系統測試(功能、各類文檔等)
補充說明:
驗收測試包括alpha測試和beta測試。alpha測試是由一個用戶在開發環境下進行的測試,也可以是公司內部的用戶在模擬實際操作環境下進行的測試。Beta測試由軟件的最終用戶們在一個或多個客房場所進行。
驗收測試分類
用戶驗收測試可以分為兩個大的部分:軟件配置審核和可執行程序測試,其大致順序可分為:文檔審核、源代碼審核、配置腳本審核、測試程序或腳本審核、可執行程序測試。
驗收測試策略
實施驗收測試的常用策略有三種,它們分別是:
1· 正式驗收
2· 非正式驗收或 Alpha 測試
3· Beta 測試
您選擇的策略通常建立在合同需求、組織和公司標准以及應用領域的基礎上。
驗收測試過程
1. 軟件需求分析:了解軟件功能和性能要求、軟硬件環境要求等,並特別要了解軟件的質量要求和驗收要求。
2. 編制《驗收測試計划》和《項目驗收准則》:根據軟件需求和驗收要求編制測試計划,制定需測試的測試項,制定測試策略及驗收通過准則,並經過客戶參與的計划評審。
3. 測試設計和測試用例設計:根據《驗收測試計划》和《項目驗收准則》編制測試用例,並經過評審。
4. 測試環境搭建:建立測試的硬件環境、軟件環境等。(可在委托客戶提供的環境中進行測試)
5. 測試實施:測試並記錄測試結果。
6. 測試結果分析:根據驗收通過准則分析測試結果,作出驗收是否通過及測試評價。
7. 測試報告:根據測試結果編制缺陷報告和驗收測試報告,並提交給客戶。
驗收測試的內容
通常可以包括:安裝(升級)、啟動與關機、功能測試(正例、重要算法、邊界、時序、反例、錯誤處理)、性能測試(正常的負載、容量變化)、壓力測試(臨界的負載、容量變化)、配置測試、平台測試、安全性測試、恢復測試(在出現掉電、硬件故障或切換、網絡故障等情況時,系統是否能夠正常運行)、可靠性測試等。