詳細介紹一下 Smoke Testing(冒煙測試)
近來看到和聽到幾個關于 Smoke Testing 的說法,也曾幾次被顧問客戶問及 Smoke Testing,感覺大家似乎對 Smoke Testing 的概念都相當模糊。據說軟件測試中的 Smoke Testing 最早源于微軟,而在實踐中,我曾就此詢問過美國微軟的幾個開發人員,他們的說法也莫衷一是。根據我搜集的一些資料,結合微軟的實際測試工作,現將 Smoke Testing 綜合介紹一下。
【誤區】
先說說大家對 Smoke Testing 理解中的問題。查了一下網上有關 Smoke Testing 的資料,發現所有關于這方面的信息不外乎來源于兩個:
- 翻譯過來的定義——關于 Smoke Testing 的定義能查到不少,內容基本是一致的,但是定義很表觀且陳舊,和當前國際上大軟件企業中的 Smoke Testing 實踐并不十分相符。
- 以訛傳訛的理解——比如:
- 完全沿用 Smoke Testing 的原始意義——這是在理解一些外來專用語上常犯的一種錯誤。
- 想當然地理解為“用抽煙的功夫就能完成的測試”——這貌似有道理,但卻是最荒謬的,因為 Smoke Testing 并不見得比常規的測試花費更少的時間,而且在正式的軟件測試工作環境里是沒有人抽煙的。
- 籠統地把所有粗淺的測試都作為 Smoke Testing;這顯然是因為對 Smoke Testing 定義中的簡單測試或者初級測試等等單詞斷章取義的理解。
- 認為 Smoke Testing 就是 BVT——這是因為 Smoke Testing 定義的模糊與過時。
那么真正的 Smoke Testing 是什么意思呢?
【Smoke Testing 釋義】
Smoke Testing 的概念最早源于制造業,用于測試管道。測試時,用鼓風機往管道里灌煙,看管壁外面是否有煙冒出來,以便檢驗管道是否有縫隙。這一測試顯然比較初級,更深層一點的測試至少要進行滲油測試、帶壓測試等等。Smoke Testing 只是一種初級、直觀的測試。
軟件測試中的 Smoke Testing 實際上用的是其引申含義,而且是引申了不止一道的含義,在這里,Smoke Testing 其實是個俚語就跟很多其他源于美國軟件行業的名詞一樣。
以前我并不知道 Smoke Testing 有適當的中文翻譯,最早聽到冒煙測試這個詞還是在我的顧問客戶那里。據我的理解,這個翻譯只是字面翻譯,顯然并不能代表 Smoke Testing 的真實含義,換句話說冒煙測試只是 Smoke Testing 的字譯而非意譯。
Smoke Testing 在軟件測試中的意義,應該說取的是其原始概念中的目的而非手段。通過 Smoke Testing,在軟件代碼正式編譯并交付測試之前,先盡量消除其表面的錯誤,減少后期測試的負擔。因此可以說,Smoke Testing 是預測試。
【Smoke Testing 的執行】
按照現有定義的說法,Smoke Testing 的執行似乎是在每日構建(daily build)完成時進行的,從這一點來看似乎說的就是 BVT。因此國內有人更加引申一步理解,把研發后期所做的一些不全面的集成測試也認為是 Smoke Testing。
實際上 Smoke Testing 的執行是在代碼評審(code review)之后、每日構建(daily build)之前完成的工作關于這一點,如果大家認真查閱國外同行關于 Smoke Testing 的介紹是不難找到敘述的。
【軟件研發不同階段的 Smoke Testing】
在實際的軟件測試工作中,Smoke Testing 在軟件研發的不同階段有所不同。大體可以分為三類:
-
形成集成測試版本以前Smoke Testing 是隨著代碼的不斷開發必做的一項工作,目的是驗證各個單元能夠成功執行,并保證測試版本能夠順利集成。
-
形成集成測試版本以后在代碼 check in 到 daily build 之前執行 Smoke Testing,以保證新的或者更改過的代碼不破壞集成版本的完成性和穩定性。
-
后期預測試 Bug 的修正后期 daily build 相對穩定時,針對每個 Bug 所做的 Bug Fix 都要先在干凈的 build 中進行 Smoke Testing,測試通過的 Bug Fix 才能 check in 到新的 daily build 中。
【Smoke Testing 與 BVT】
從 Smoke Testing 的定義上看,BVT 似乎可以看作是 Smoke Testing,但在實際當中 BVT 是與 Smoke Testing 完全獨立的一個概念,這是基于以下幾個方面:
- Smoke Testing 與 BVT 的執行階段不一樣。
- Smoke Testing 與 BVT 的內容不一樣。
- Smoke Testing 與 BVT 結果對后續工作的影響不一樣。
關于 BVT,我將另具文介紹。