西北民族大學數學與計算機科學學院 妥澤花
隨著IT行業的高速發展,軟件的開發已經成為助力提升國家經濟水平的重要手段。與此同時,軟件產品的升級也成為公司提升軟件產品自身價值的不二選擇。軟件升級的本質是功能的提升與完善,如何評判軟件產品的好與壞,軟件測試是必不可少的環節。本文主要針對軟件測試方法中的黑盒測試與白盒測試進行比較探究,研究這兩種截然不同的測試方法對軟件產品的測評影響。
黑盒測試其實是我們平常所說的“功能測試”,它主要測試的是產品功能是否可以實現,不在乎產品內部的結構,只針對產品的功能做出檢測評價。測試過程中,通常會將程序看作一個不能打開的黑盒子,在測試人員無法從外面看見產品內部結構的情況下,對軟件界面和軟件功能進行測試。由于無法看清產品的內部結構,《軟件需求規格說明書》成為幫助軟件測試人員明確測試目標的主要依據。
白盒測試又被稱為“透明盒測試”或“結構測試”。在測試時,將程序看作一個“白盒子”(或“透明盒”),程序的內部結構透明化,對軟件產品進行測試。但有一個必要條件,那就是,測試人員在測試之前必須對產品的內部結構進行熟悉和掌握,從而通過各種編程語言設計測試用例,實現軟件的測試。測試大部分情況下,都是對數據的引用與定義進行數據測試。其次,還包括對程序的邏輯路徑進行覆蓋測試。
眾所周知,黑盒測試與白盒測試是軟件測試方法中兩種相對的方法。對于不同的程序、開發軟件應使用不同的測試方法對其進行測試。用何種測試方法主要取決于軟件產品的功能設計、邏輯設計等。現對如何從這兩種測試方法中進行選擇做出探究。
隨著軟件技術的不斷成熟與完善,軟件測試的規模和復雜度在不斷地加大,軟件測試也逐漸形成了一套完整的體系,逐漸走向規范化。
從兩者的定義出發,黑盒測試的測試出發點就比較明確了,即功能是否可以實現。由于無法得知產品的邏輯結構,所以這種方法不能幫助測試人員進行全面的測試。而白盒測試則不同,白盒測試的測試出發點是:根據產品的內部結構測試產品的功能是否可以實現。因測試人員對產品有了事先的了解,所以測試人員可以將測試的過程更加精細化、完整化。
顯而易見,這兩種測試方法的測試出發點確實是不同的,這使得兩種方法在進行測試時的關注點也不同,繼而側重點也會有所差異的。使用不同的測試方法,設計測試用例的思路基本上都是固定的。這種固定思維有時可以幫助測試人員更快的制定測試用例,但有可能會阻礙測試人員發現一些比較容易忽視的錯誤。
有測試經驗的人員肯定知道黑盒測試和白盒測試的測試覆蓋范圍是不同的。即便是同一個程序,用不同的測試方法所設計的測試用例也是不同的。為什么會有所差異呢?下面做出具體分析。
首先,軟件規格說明書(Specification)是黑盒進行測試的依據。因此,軟件規格說明書中所記錄的功能需求、性能需求是它設計測試用例的主要依據。軟件規格說明書中要求的多少也就決定了黑盒測試設計用例的多少。
與黑盒測試不同,白盒測試會更加關注代碼本身,所以測試用例的數量與代碼的復雜程度、代碼的數量等息息相關。這些因素,不僅使測試用例的數量劇增,更使得測試任務所需要的執行時間劇增,極大可能會使測試人員無法按時完成測試任務。
從理論的角度上講,白盒測試是可以進行完全的覆蓋測試的。但是,由于其他未知的、無法控制的因素,可能很難作到全面覆蓋。不過,它依舊是項目研發驗證測試覆蓋率的重要手段。
可以得出,白盒測試的覆蓋范圍是廣而全,即覆蓋面廣、測試全面;而黑盒測試的覆蓋范圍則是準而明,即測試用例精準、設計目標明確。雖然白盒測試更加全面,但黑盒測試也有屬于它的優點。因為黑盒測試設計的測試用例數量較少,所以可以有效縮減測試時間,并且降低測試成本。
兩種測試方法對測試人員的要求如表1所示。

表1 兩種測試方法對測試人員的不同要求
看過兩種測試方法對測試人員的要求的人可能會說,黑盒測試不需要研究代碼,那黑盒測試肯定比白盒測試簡單。事實并非如此,有時候黑盒測試比白盒測試更加具有挑戰性。由于對內部結構的不清楚,就會加大測試的難度。通過對IT行業測試人員數量的探究發現,有很多轉行的人,都會選擇做“黑盒測試”,因為它的起點比較低,更容易上手,但是要想更好的完成測試還是需要專業的測試人員。
軟件開發是有階段性的,軟件的開發是一步步發展而來的,從無到有,這是需要過程的。按照開發過程的時間進行劃分,可以將其劃分為前、中、后期三個階段。這三個階段對軟件開發人員的要求不同,對軟件測試人員的要求也不同。而這兩種相對的測試方法也在不同的階段發揮著它們的作用。具體情況,如圖1所示。

圖1 軟件開發階段兩種測試方法的使用情況
在軟件開發的前期階段,主要進行需求分析、概要設計以及詳細設計。前期的代碼量并不是很多,測試人員一般會采用白盒測試進行測試,通過它可以更好的完成測試任務。前期會根據客戶需求所書寫軟件的需求說明書和設計文檔進行測試,故而,前期的測試任務是十分重要的,它不僅關系到客戶的直接利益,更對后面的工作有不可忽視的影響。前面做好了,可以很大程度的幫助測試人員完成之后的任務,也可以有效的避免一些不必要的軟件缺陷。最重要的一點是,前期測試發現的問題越多,修復所需要的花費也就會越少。因為前期的修復并沒有那么復雜,成本相對后期就會較低。
在中期,一般都是將兩種方法相結合的方式進行測試。這種聯合使用會幫助測試人員更快找到出現的錯誤和問題。
到了開發階段的后期,會進行系統測試和確認測試,這個時候黑盒測試就發揮了極其重要的作用。后期的檢查更加注重軟件產品功能的完整性和可使用性。利用黑盒測試可以更高效、更準確的測試軟件的功能及其使用情況。后期就會從“用戶”的角度進行試測,作為用戶肯定會更加注重產品的使用體驗。因此,黑盒測試在系統測試和確認測試中起著無法替代的作用。
盡管每個階段用到的方法不同,但每個階段所使用的方法也不是一成不變的,這要根據軟件自身的要求進行選擇。兩種方法相輔相成,往往會使得測試更加完美。
結語:軟件測試貫穿于軟件開發的整個過程中,測試過程中產生的問題不一定都是由程序員編寫的代碼所引起的,也有可能是由于前期階段的需求分析不到位,邏輯結構設計不合理等導致的。所以,在開發的過程中要不斷地進行測試,并作好編寫測試報告的工作,從而幫助開發團隊順利推進開發工作。軟件測試人員就像是整個項目過程中“后勤保障”,時時刻刻存在,是不可缺少的一部分。
根據從兩種測試方法的測試出發點、覆蓋范圍、適用階段及對測試人員的要求的研究可以發現兩者之間的不同。黑盒測試盡管是不同于白盒測試的測試方法,但是可以看出白盒測試其實是對黑盒測試的補充與完善。選擇哪種測試方法取決于軟件的需求規格說明書。在測試一個軟件產品時,可能會選擇其中一種方法進行測試,但大多數的情況下,需要將這兩種方法相結合起來進行測試。測試人員盡可能多的發現Bug,就會更好地幫助開發人員完成他們的編碼工作。如何進行選擇,需要根據測試任務的需求進行抉擇。選擇時也可以參考一些開發人員的意見,并且把保障軟件質量放在第一位。