所有優秀的開發人員都能夠成為優秀的測試人員嗎?[2] 軟件測試
加速學習
正如特性和產品無法單獨工作一樣,它們也無法保持一成不變。產品和技術以比以前任何時候都快的速度向前發展。優秀的測試人員將不斷地學習,更重要的是,需要快速地學習。SVT 測試人員的學習環境非常具有挑戰性。通常在該特性尚處于設計階段時,沒有可用的文檔,代碼庫可能很不穩定,但是 SVT 測試人員必須對其進行研究。當他們開始真正理解該特性時,發布日期已迫在眉睫。所以,許多 SVT 測試人員根據經驗、通過反復試驗來了解相關的特性。盡管這通常是一種有效的學習方式,但是對于測試人員來說,僅僅依靠這種單一的學習機制還是不夠的,因為這樣難以分辨特性的行為是來自于設計還是由錯誤產生的。這還隱含著另外一個危險,是否將來自開發人員的所有信息都認為是正確無誤的,對于這一點,我更傾向于作一名學生。
一種更好的學習方法是從該特性打算解決的問題入手,無論它是業務問題或是技術問題,然后了解該特性如何解決問題的關鍵思想。特性的功能表現了這些關鍵思想的具體形式。換句話說,優秀的 SVT 測試人員將用更多的時間來研究問題,而不是解決方案。測試是一種度量用該特性作為問題解決方案的能力的方法。
開發測試場景
SVT 測試人員開發出好的測試場景,以便高效地演習該特性,這需要全面地了解特性及其相關的特性、以及它打算解決的問題。大多數情況下,測試場景無法按照最初的預期工作。這正是測試的目的,即找出具體的問題。優秀的 SVT 測試人員能夠分析系統中每個組件所扮演的角色、確定問題、找出系統中的瓶頸、收集相關的證據以證實他們的預測。如果系統的行為繼續與預期相反,測試人員可以重新設計測試方案或對該特性的設計提出質疑??傊?,優秀的 SVT 測試人員同時也是優秀的系統分析師。例如,我們的一個測試應用程序著重對 J2EE 功能(如 EJB 組件、Web 服務,等等)進行測試。然而,該系統在數據訪問邏輯中存在瓶頸,所以當 CPU 使用率較高時,這個測試場景就成了壓力測試,盡管壓力特性并不是這項測試的任務。
權衡風險和實用性
所有測試人員常常面對的另一個挑戰是實用性和優先順序設置。通常,幾乎不可能測試“所有情況”??梢赃M行測試的整個范圍通常太大,難以在給定的時間內完成測試工作,當多個特性組合在一起時測試的范圍將變得更大,其排列組合呈指數上升。對于中間件產品,如 WebSphere Application Server,您可以在其基礎上構建各種應用程序。應用程序的設計方式是無限的。因此,問題變成了如何對測試場景進行優先順序設置,以及多少測試工作能夠實現成本和效益之間的最優化。這仍然取決于客戶價值、技術采用周期和該特性打算解決的問題。然而,優先順序可能被取消,重要的測試場景可能缺失,所以始終存在著一定的不確定性,但是優秀的 SVT 測試人員將注意到危險的存在、積極地確定相關的危險、并根據進展的情況對它們進行管理。在產品發布之前,他們記錄下假設和遺漏之處,并在發布之后,根據客戶反饋信息進行確認和修正。通過使用經過證實的 SVT 方法學中的檢查、平衡和預防措施,最終將彌補這種內在的不確定性。
測試人員應該是程序員
我堅信,優秀的 SVT 測試人員應該是優秀的程序員,并且我這樣認為是出于下面幾個原因:
◆除非使用某種技術,否則無法完整地理解它。
◆如果沒有基本編程技能,測試人員無法進行研究、調試、并逐步確定問題的根本原因,而這將幫助開發人員更好地解決問題。
◆測試人員需要具有足夠的編程技能,以便與開發人員進行有效交流,并且可能更重要的是,贏得開發團體的尊重。
根據我的經驗,對于那些不具備很好的編程技能的測試人員,他們的測試效率比較低,并且他們的意見也常常被開發人員忽視,而對于那些具有很好的編程技能的測試人員,他們可以更快地解決問題,并且他們的反饋信息也得到更高的重視。