軟體測試的一個原則是盡早地發現問題。作為測試專家,應該考慮的問題也是如何更早地發現缺陷以及有效地解決缺陷。
有沒有辦法讓問題“提前”暴露呢?
發現問題的可行方法:
分析方法:也可歸類為靜态測試,主要使用邏輯分析推理的方法發現缺陷和評估問題的嚴重性,并根據所處的階段得到解決的方法。由于缺陷沒有經過測試證明,而是通過分析的方法推導認定的,這裡稱其為“潛在的”缺陷,但由于理據充分,本質上這個缺陷和測試發現的缺陷是一樣的。在提出了解決方法之後,對設計分析時認為有問題的場景進行模拟,如果在這種場景下沒有出現此前認為會出現的問題,那麼這個缺陷解決方案就被認為是可以接受的。分析方法不需要等待缺陷目标的開發完成并使用測試進行驗證,這種方法對分析人員技能要求較高,他們在需求分析和設計方面的經驗必須比較豐富,才能準确定位問題所在。
測試方法:設計出有針對性的場景,并在測試環境上模拟該場景。如果測試的輸出和預期輸出有差異,則證明問題存在。使用此方法前提是測試的場景能夠在測試環境中正常工作。
無論使用分析方法還是測試方法發現的問題,都通過建立缺陷來跟蹤。
Bug:一般指系統存在的問題或者需要加強的細節。
如何更早地、有效地發現問題,是測試專家的一項非常有技術含量的工作,而測試專家的另一項由技術含量的工作,就是發現問題後的問題分析。

問題分析常用的系統方法有兩種
自頂向下(Top-Down):
其着眼處在于整體。使用該方法,首先應該認同的一個觀點是,系統整體的問題時系統某個部分的原因引起的,而這個局部的問題放大後悔在系統的宏觀級别上表現出來。
自底向上(Buttom-Up):
對分析者的能力要求較高,前提是,承認缺陷的全部或部分是由于系統局部細節的問題引起的。分析時,根據系統表面看到的蛛絲馬迹,直接判斷出現問題的根源,并驗證這個判斷是否正确。作為分析人員,首先應該對系統的這些細節及其在整體中的作用比較熟悉,其次要擁有直達問題根源的“直覺”。
在分析錯綜複雜的問題,如系統級别的結構問題或性能問題時,這兩種方法能夠有效地定位問題,而它們的本質也正是準确地重制和定位問題。隻要問題得以有效重制和定位,離找到解決的辦法也就不遠了。
發現、定位和解決問題的方法,是測試人員的核心技能。作為測試專家,核心的能力其實還是思考能力。五花八門的測試方法和技術,得通過自己的實踐、總結和思考,轉化為系統的測試方法論。當一套屬于你自己的測試方法論已經形成的時候,意味着你已經從專家成長為高手了。
像外行一樣思考——追求一種新的方法或者角度,僅僅考慮某個問題是否可能存在或者某種方法是否能解決問題,不考慮方法是否有理論依據,也避免過多地考慮可行性。
執行測試消耗了很大一部分時間,而正常項目(不含自動化任務)的任務把可用時間的90%都占用了,也就是說,分析解決問題的時間很有限,那麼測試工程師通過什麼方法更有效地完成測試任務呢?