我們到底需要什么樣的測試?


首先要說明的是,這篇文章完全不是討論“我們是否需要專職QA”這個問題的,也不是討論“各種情況下QA或測試工程需要做什么”,而是從我自身對測試的認知和個人經驗出發,說一說我對不同特點的產品需要的測試的看法。

本文討論的前提是:“不同的產品需要不同的測試”。當我提到“產品”時,除了產品本身所對外展現的特性外,還會隱含地包含了該產品開發團隊的狀況。

這篇文章沒有把行業作為一個划分的維度,是因為我相信,即使在同一個行業中,也存在各種截然不同的產品。


測試是為質量服務的,測試活動圍繞質量進行。這個定義是我們今天討論的出發點。ISO 9126模型給出了一個多層次的質量模型定義,該定義包括了各個正交維度的質量屬性,這些質量屬性中既有面向用戶的,也有面向開發的。

但在實際的測試工作中,一旦提到產品質量,大部分人更容易將其理解成“用戶質量”,也就是“最終用戶所能感受到的軟件的質量(例如,軟件的功能性、性能、安全性等等)”。

“用戶質量”是用戶所能夠直接感受到的產品的“好壞”,也是用戶是否願意為產品付錢的主要原因。因此,在測試中重視“用戶質量”是必然的。

設想一下,如果A公司要為B客戶開發一個軟件,只要該軟件最終能夠達到B用戶的要求,A公司就能拿到錢,通常這也就意味着A公司“成功的完成了該軟件的開發”。

從這個角度來說,“用戶質量”就是軟件開發是否成功的標准。

然而,如果深入看待整個軟件開發過程,事情就沒有這么簡單了。A公司為客戶B開發的軟件並非是一錘子買賣,而是需要不斷的維護和升級的,B用戶不斷提出新的需求,而這些新的需求都要被加入到軟件中去。

在這種情況下,從效益出發,A公司就不能僅僅考慮最終的產出是否能夠滿足B客戶的要求了,而是必須想辦法保證產品在持續演進的過程中始終保持好的可維護性和可測試性,這樣A公司才能以較低的成本讓這個產品持續成功。

因此,如果不把軟件開發看成一錘子買賣,而將該軟件的生命周期的維護過程考慮進去,我們就不得不關注“用戶質量”之外的“開發質量”,這里的“開發質量”就是指產品內在的,是否容易被修改、是否容易被移植、是否容易被驗證的特點。

1.“用戶質量”和“開發質量”就是我通常用來分析一個產品究竟需要什么樣的測試的第一個因素。

在這個維度下,我們可以很容易地理解,如果一個產品僅僅是 “一次性”的產品(也即,開發后不再需要維護和持續演化),那么測試的重點一定就是“用戶質量”(只需要關心該產品是否在用戶面前表現得夠好就可以了);

代碼是不是夠爛,設計是不是不合理並不重要。而如果一個產品是需要持續演進較長時間的,那就必須關心代碼和設計的質量(“開發質量”)。

例如,一個采用付費下載方式進行銷售的小游戲,開發團隊通常不會花太多的時間和精力在保證產品具有良好的“開發質量”上,而寧願花更多的時間去調整外部的細節表現,音效,圖像上。

2. 另一個直接決定了產品需要什么樣的測試的緯度是“產品對缺陷的容忍程度”。

測試工程師有時候喜歡把“零缺陷”作為標榜測試工作的口號(我在很長一段時間內也是如此),但,仔細想想,如果發現一個缺陷的成本比讓這個缺陷留在產品中帶來的損失更大,那是否還值得去發現這個缺陷?

我想,從項目的角度來說,答案是不言而喻的。測試是一個資源權衡的活動,也是一個基於風險的活動,因此,產品的缺陷帶來的影響越小,影響越容易被消除(修復),這個缺陷的價值就越小,值得投入用來發現缺陷的資源也就越少。

拿互聯網產品和傳統的桌面產品來比較,對桌面型產品來說,缺陷的修復成本足夠高(只能通過軟件召回或是發布補丁的方式),因此對缺陷的容忍度就低;

而對於互聯網產品來說,由於其產品的修復成本足夠低(對一個已知的缺陷,可能只需要花上幾分鍾到幾十分鍾就能完全修復了),因此相對而言,其對缺陷的容忍程度更高(當然,對於那些會導致用戶數據損失或是帶來其他不可逆破壞的缺陷,那又另當別論了),對互聯網產品開發來說,及時識別缺陷(發現那些用戶已經遇到的缺陷),快速定位缺陷和快速修復缺陷的能力往往要比在系統測試階段發現缺陷的能力更重要。

而要能有強大的識別缺陷和定位缺陷的能力,就必須依靠產品內建的“開發質量”了。

再以醫療行業的某些軟件為例,對涉及到醫療器械的控制軟件(如自動注射器,心臟起搏器等),其對缺陷的容忍程度就非常低,原因很簡單,因為這類缺陷可能帶來的后果太嚴重。


3. 第三個因素是“有效的測試方式”。

對互聯網產品來說,最有效的測試方式也許並不是找一堆專職的測試工程師在公司內部盡可能地覆蓋每一個功能細節,讓真正的用戶來對產品進行測試在很多情況下也許是更好的選擇。

無論是FB,Google等公司提倡的dog food(讓全部員工來進行測試),還是在實際產品上進行的a/b testing, 或是游戲公司通常喜歡采用的內測方式,都是典型的讓用戶參與測試的方法。

另外,根據產品不同的特性,適合采用手工測試還是自動化測試的方式來進行測試也是一個值得考慮的點。

4. 第四個因素則是“產品的開發團隊所處的狀況”,因此,對同一個組織來說,在組織發展的不同階段,所需要的測試也是不同的。

“苦逼的團隊是做不出有愛的產品的”,自然,“苦逼”的團隊也不可能達成好的測試。因為讓每個人疲於奔命的是總也無法完成的任務和無止境的加班,恐怕都沒有停下來思考如何改進的機會。

以上就是我對“什么樣的產品需要什么樣的測試”這個問題的理解。在這四個因素的指導下,再回頭來考慮不同軟件產品的測試,就很容易理解為何不同的產品,不同的企業會采用很不相同的測試方式。

例如,FB沒有專職的測試工程師,因為通常意義上關注“用戶質量”的測試工程師並不能在這個組織中發揮大的價值,只有對開發有深入了解的開發工程師才能真正的在提高“開發質量”方面發揮作用。

而對於許多國內的以“做項目”為主的軟件企業來說,也就很好理解為什么他們只需要“能像客戶一樣發現產品中的缺陷的”的測試了。

更多精彩內容:


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com