近來看到和聽到幾個關於 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 結果對後續工作的影響不一樣。