近來看到和聽到幾個關於 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 Test)這個詞還是在我的顧問客戶那裡。據我的理解,這個翻譯只是字面翻譯,顯然並不能代表 Smoke Testing 的真實含義,換句話說煙霧測試 (Smoke Test)只是 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 結果對後續工作的影響不一樣。