酷知百科網

位置:首頁 > 遊戲數碼 > 互聯網

軟件測試之單元測試

互聯網5.82K

測試階段,軟件測試分爲單元測試、集成測試、系統測試、驗收測試。本篇經驗介紹單元測試

操作方法

(01)單元測試的概念:單元測試就是對軟件中最小的可測試單元進行檢查和驗證。

軟件測試之單元測試

(02)如果一個公司裏有一個職位是測試工程師,那麼測試工程師一一般情況下是不會接觸到單元測試的。單元測試一般是針對代碼的,所以一般是由開發人員進行的。一個開發人員開發代碼不僅僅是編碼,其實是包括編碼+單元測試。只有透過了單元測試後,才能將代碼提交到SVN等上。所以,單元測試的一個特性是:單元測試一般是針對代碼的,所以一般是由開發人員進行的。

軟件測試之單元測試 第2張

(03)爲什麼要進行單元測試呢?一個BUG隱藏的時間越久,修復這個BUG的代價就越大,根據調查發現,一個BUG最後修復要比開始就修復的成本高10倍。而單元測試是最早發現BUG的一個階段,也是修改BUG付出代價最小的一個階段,所以單元測試是非常重要的。

軟件測試之單元測試 第3張

(04)可是,許多軟件項目在開發的過程中根本就沒有單元測試,甚至許多開發人員從來沒有寫過單元測試,這是爲什麼呢?首先比較重要的一點是,現在許多軟件項目都特別的強調進度,而單元測試的代碼可能比實際項目的代碼還要多,除去單元測試確實減少了很多時間,但卻是以項目質量以及後續大量的產品維護爲代價,其實是得不償失的;而且,有許多開發人員就是爲了寫單元測試而寫單元測試,就像是應付差事、應付領導,沒有意識到單元測試的重要性,根本發現不了問題。種種原因導致,許多軟件項目中單元測試都缺失了,這其實是項目管理的責任。

(05)單元測試是一個方法層面的測試,也是粒度最細的測試。用於測試每一個函數、每一個類以及類的每一個方法的功能。舉例說明:類似於C的面向過程的,其測試單元爲每一個函數,函數有輸入數據的參數,也有返回值,我們做單元測試的目的就是保證不同的輸入,其輸出都正確,函數中的每一個邏輯,比如if、else等邏輯都可以走的到,確保這個函數的健壯性。如果是java這種面向對象,其測試單元就是每一個類,測試這個類包括裏面的每一個方法的正確性。

軟件測試之單元測試 第4張

(06)單元測試就是測試一個螺絲釘本身的功能。我們不會去關注這個螺絲釘具體用在什麼地方,和其他零件是否能很好的匹配,我們只關心這個螺絲釘本身有沒有問題,是否符合需求

軟件測試之單元測試 第5張

(07)單元測試的另一個原則就是儘量保證各個測試用例是相互獨立的。比如,我在一個函數A中調用了函數B,現在對函數A進行單元測試,結果出現了問題,那麼問題到底是函數A導致的,還是函數B導致的呢?甚至函數B中又調用了函數C,那我還要去了解函數C的實現嗎?肯定是不行的。所以我們一般會模擬函數B,寫一個模擬b函數,這個函數b將模擬函數B返回一些值給函數A,保證我們寫的函數b沒有問題(只是返回一個值),從而保證在測試函數A的時候,不會受到函數B的影響。

軟件測試之單元測試 第6張

(08)單元測試有非常多的好處:可以儘早的發現缺陷;有利於重構;簡化集成,保證最小單元的穩定性和正確性,之後再搞系統測試的時候,就不需要花時間去確認單元內部是否有問題了;減少文檔,現在提倡代碼級文檔,不需要手動去維護一個專門的文檔,浪費大量的時間。

(09)下面簡單介紹一下幾種單元測試框架JUnit就是一個Java語言的單元測試框架,是一個開放原始碼的Java測試框架,用於編寫和執行可重複的測試。

軟件測試之單元測試 第7張

(10)Instrumentation,是基於JUnit的一個測試框架,可用來測試android的組件。

(11)NunitNUnit是一個單元測試框架,專門針對於來寫的,Nunit和JUnit看起來很像,其實Nunit就是基於JUnit而來的。

軟件測試之單元測試 第8張

(12)PHPUnit看名字就知道,測試PHP的,它是一款輕量級的php測試框架,可以透過命令操控測試腳本,而且功能酷炫,使用起來還特別簡單

軟件測試之單元測試 第9張

(13)CppUnit目前針對C++項目的測試工具中,開源的CppUnit是最著名的測試工具之一。使用CppUnit做C++項目的單元測試非常的方便

軟件測試之單元測試 第10張

特別提示

單元測試不可能覆蓋全部的路徑,不可能無休止的進行測試