總之,測試代碼的編寫應該從被測試的對象是否滿足需要的層面進行,而不是其他。
和誤解之三一樣,可能很多人并不承認這一點。但是他們卻又不能比較清楚的說出二者的差別來。這樣,在他們進行測試代碼的編寫時就會比較迷茫。本小節結試圖給出一些區分單元測試和驗收測試的一些原則來。
我們還以經常用來和軟件進行類比的建筑為例,首先給大家一個感性的認識。單元測試可以類比為一個建筑的質檢人員對建筑進行的檢測,他關注的重點是建筑的內部結構、地基、框架以及墻壁是否垂直等。他的檢測是要保證建筑的各個部分是正常的、安全的,換句話說,就是要保證施工滿足建筑上面的質量標準。驗收測試可以類比為建筑的使用者來對建筑進行的檢測。首先,他認為這個建筑是滿足規定的工程質量的,這是有建筑的質檢人員來保證的。使用者關注的重點是住在這個建筑的中的感受。他關心建筑的外觀是否美觀、各個房間的大小是否合適,窗戶的位置是否合適,是否能夠滿足家庭的需要等。這里,建筑的使用者執行的就是驗收測試,他是從用戶的角度出發的。建筑的質檢人員執行的就是單元測試,他是從構建者的角度出發的。
正是這種角度的不同決定了單元測試和驗收測試之間的區別。它們是對系統的不同的方面進行的測試,二者是互相補充的。不管我們在系統的構建中使用了多么聰明的方法,不管我們的系統是多么的靈活,但是首先我們的產品必須是可用的,否則我們所做的就是浪費時間,從這一點上來說驗收測試要比單元測試顯得更加重要。
還以上一小節給出的案例為例,案例中所使用的測試方法僅僅是從系統是否健壯的角度出發進行的,即使系統從不崩潰也不能證明那是一個可用的系統。因為測試根本就不是從用戶使用的角度出發的,測試者本應該和用戶一起來編寫驗收測試。單元測試保證我們把事情作對,而驗收測試則保證我們做正確的事情。
關于單元測試和驗收測試之間的明確劃分,沒有一個通用的標準,只有通過自己的不斷實踐來增加這方面的經驗。你進行的有關測試的實踐越多,你就會越清晰的感覺到單元測試和驗收測試之間的界限所在。下面給出一些指導原則,在你編寫測試代碼時可能會有幫助。
如果一個單元測試要跨越類的邊界,那么它可能應該是一個驗收測試
如果一個單元測試變的非常復雜,那么它可能應該是一個驗收測試
如果一個單元測試經常要隨著用戶需求的變化而改變,那么它可能應該是一個驗收測試
如果一個單元測試比它要測試的代碼本身要難以編寫,那么它可能應該是一個驗收測試
結論
測試是用來保證軟件開發過程的高效性,以及保證開發出來的軟件產品的高質量和可用性的。軟件開發本身就是一件非常困難的事情,這也決定了有效的測試決不是簡單的依靠一些測試工具就可以進行的。在使用工具的同時,我們更要加強關于測試的培訓、教育,使大家對于測試首先有一個正確的認識。只有這樣,我們才能夠更加有效、高效的使用工具,才能夠使測試真正起到它應有的作用。希望本文能夠對大家在進行測試方面的工作時有所幫助。
參考文獻
Extreme Programming Explained: Embrace Change,Kent Beck,1999
文章來源于領測軟件測試網 http://www.kjueaiud.com/