軟體測試必須知道的幾件事
一、為什麼要進行測試?(第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)減少測試資源後,最簡單的方法是限制樣本的規模。規模減少可能出現取樣錯誤,多樣化的樣本發現的問題可能會超過大樣本發現的問題。所以與擴大測試團隊相比,讓測試團隊成員多樣化也可能會發現更多的問