一、為什么要進行測試?(第1章)
1、人類的思維不完美
我們的思維是不完美,無論我們多想盡力的完成一項工作,都會可能會在某一點上出錯。我們要讓自己做出的決定比不進行測試的時候要更好。
2、通過測試決定軟件產品是否能賣出去
作為軟件生產者,我們要通過測試來了解軟件產品是否能夠賣出去。要從客戶的角度去進行測試。
3、決定可能有風險
風險的評估存在主觀性:1.風險是針對未來進行評估的,未來可能會發生任何事情;2.不同人對同一種風險的感受是不同的。
通過測試獲取的信息能夠降低決策帶來的風險。
4、測試可以提供降低風險的信息
因為不同的人,不同的項目,不同的時間都意味着對風險的不同理解。需要設計對應的測試來回答不同的問題。
1)軟件是否能夠做我們希望它做的工作?
2)如果軟件不能做我們希望它做的工作,需要多掃工作才能解決這個問題?
3)軟件是否做了我們不希望它做的事?
4)軟件是否能夠達到我們的預期(有沒有實現其目的)?
5)軟件能夠做用戶希望它做的事嗎(用戶滿意嗎)?
6)軟件是否滿足了其他的商業要求?(計划外的維護和技術支持)
7)失敗的可能性和后果嚴重性如何?
通過設計測試用例和執行測試計划,可以提供以上問題答案的信息。
5、相關常識
1)試圖進行完美的測試,會讓你完蛋
2)測試人員的職責是為決定提供信息(但不是所有信息),做決定是經理要做的。
3)在做決定時應考慮所有相關信息,需要考慮開發人員、測試人員和用戶等人的意見。
4)因害怕未按計划交付產品,就交付滿是錯誤的產品,可能導致公司巨大損失。
5)測試只是收集有關產品的信息,測試本身不會修復發現的錯誤。測試不會改進產品,改進是由那些修復測試發現缺陷的人實現的。
6)不存在一個“測試階段”只進行測試,測試應該是貫穿於整個項目。
二、什么時候可以不進行測試?(第2章)
如果存在任何原因導致不需要使用測試結果提供的信息,就沒有必要進行測試。測試得到的信息不可靠,也沒有必要測試。
1、測試后風險增加
軟件行業的經理經常需要做出帶風險的決定,通常在獲得部分信息的情況下做出決定是比較保險的。但有些時候經測試獲得信息可能會增加決定的風險。
1)對項目進行太多測試,可能推遲發布產品而不能及早進入市場;
2)測試提供的信息,開發人員因測試提供的信息,進行的程序修復可能會破壞程序其他部分的運行;
3)測試發現問題,但是並未引起重視進行修復,可能會導致后續的問題。
2、對測試反饋的信息無動於衷
需要解釋並使用測試產生的信息。
1)測試人員提交測試報告后,應對報告進行仔細審核,找到有用的信息;
2)測試人員不清楚怎么測試,應對他們進行培訓;
3)測試人員不能很好理解軟件,應對他們進行培訓;
3、因感性而非理性所做的決定
人們存在一種感情傾向,不希望發現自己犯了錯誤。所以人們會做出與理性使用信息沒有關系的決定。
4、不良的測試
考慮不周的測試或者執行過程不佳的測試都屬於“不良測試”。這樣的測試會讓人認為產品的質量高於實際質量,導致提前交付。或者產品質量低於實際質量,導致推遲交付,損失效益。這都是不可取的。
5、產品沒有准備好接受測試
有以下幾種情況,說明產品尚未准備好接受測試,那么就沒有必要進行測試,情況如下:
1)測試是否有助於解決產品存在的至少一個問題?
2)是否希望知道該問題的答案?
3)是否只是漫不經心地對待測試結果?需要對測試發現的問題追根究底。
4)是否預先和測試人員就通過測試的標准達成一致?
5)如果不能,怎樣才算通過測試?
6)是否認為測試的結果會替你做出決定?不可能從純技術的角度做出商業決定。可以使用測試得到的信息來支持商業決策。
7)測試結果能否是你改變決定?
6、相關常識
1)既然雇佣測試人員,就要相信他們的測試結果。如果不信任他們,要么是選錯了人,要么就需要幫助他們提高可信度。
2)不能讓測試人員代替經理做決定,他們只是提供信息。
3)不使用測試提供的信息,就最好不要進行測試。
4)在做出決定時,要冷靜並控制好自己的情緒,盡量用理性進行決定。
5)要對測試數據進行評估。數字本身只是數字。要學會問:獲得這一數字的過程是什么?這個數字有何含義?
6)測試是一項技術開發支持活動,需要和需求、設計、編程、文檔、制造及支持過程協調起來。同時要給開發人員必要時間和資源來修復測試中發現的問題。
7)不要催促測試人員進行測試,測試是非常精細的工作。催促測試人員容易產生危險的有誤導性的結果,尤其在測試人員感到害怕、疲勞或變現憤世嫉俗時。
8)測試經理也需要了解測試過程,所以需要任命有測試經驗的人擔任測試經理。
9)很多看起來非理性的決定在不同的價值取向下是理性的。記住這一原則,可以避免經理、測試人員和開發人員之間的許多沖突。
10)測試產生的信息用途很多,交付產品后進行測試,可以收集對客服和支持人員有用的信息。
三、為什么不進行窮舉測試?(第3章)
本章主要介紹不對所有可能性進行測試的原因,對於經理和測試人員,都應該了解測試是一種采樣過程,需要了解采樣給測試所帶來的風險。
1、可進行測試的數目是無限的
如果不能查看代碼內部邏輯,可輸入的測試用例是無限的。當然還有在不同配置下進行測試,不同制造商、不同驅動程序、不同操作系統、測試執行的順序、不同的內存等等。這樣算來可測試的用例確實是無限多。
2、測試最多只是采樣
由於我們無法測試所有可能性,任何實際的測試集(測試用例)都是某種程度的樣本——代表整個可能測試集合的一個部分或片段。所以測試就是用樣本集對程序進行采樣。
采樣也是一個心理過程,也是一個感性過程。令某人滿意的樣本也許會讓另一個人覺得不滿意。
我們如何決定采那些樣?如何知道是否獲取足夠大的樣本來充分代表所有情況?如何知道獲得了合適的樣本?
3、用有限資源和時間進行良好的測試
1)希望測試能夠覆蓋所有令人感興趣的條件;
有些缺陷是測試員偶然發現,而不是精心設計的用例發現的。有沒有什么心理學方法可以幫助發現更多令人吃驚的缺陷?
2)希望講測試集減少到可以管理、可以承受的程度。
首先,認識到測試集都是一種采樣方法,然后無論你有多少資源,都要盡可能選擇那些具有最強代表性的測試集。
4、相關常識
1)要理解測試即是采樣過程,不管用哪種方法,都要准備好應對出現采樣錯誤的可能性。
2)獲取信息的成本可能超過信息帶來的好處。某些測試可能花費大量力氣,但是效果並不好。
3)人不能進行窮舉測試,測試工具更不能。
3)減少測試資源后,最簡單的方法是限制樣本的規模。規模減少可能出現采樣錯誤,多樣化的樣本發現的問題可能會超過大樣本發現的問題。所以與擴大測試團隊相比,讓測試團隊成員多樣化也可能會發現更多的問題。