Testing 測試,這是很多很多很多工程師會遺漏或是不足的部分,當每次有修改程式,就一定要做測試,這裡先不提要手動還是自動測試,重點是在於測試新的功能與被調整的程式,是否有錯誤、是否合乎需求、是否滿足效能,這都是很重要的事情,有測試成功才得以防範系統錯誤;另外,我自己在帶新進人員進入專案的時候,第一件事情也是要他們測試現行系統,這是一個很快速了解系統的方式,待流程熟悉之後,再來看程式碼,會上手比較容易。然而,現在也因為DevOps的觀念越來越重要,很多自動化導入,測試的地位就相對的提升更多,也有很多公司有聘請專門的測試團隊來保證產品品質,例如:測試工程師、產品可靠度分析師....,那究竟應該如何做測試?測試的目的目標是什麼?測試的種類有哪些?我們現在就來探討看看
軟體測試有一句很經典的定義:在規定的條件下對程式進行操作,以發現程式錯誤,衡量軟體品質,並對其是否能滿足設計要求進行評估的過程。
而測試的目的是為了:
- 確認系統可以在規定環境或多個不同環境正常啟動,且可以使用
- 評估系統功能是否有滿足需求
- 驗證在所有情境下的產出是正確的
- 確保系統的效能合格
測試層級分為四層:
- 單元測試 Unit Testing:最基礎的測試單位,主要測試目標是單元,例如:Java裡的一個Class
- 整合測試 Integration Testing:也稱作組裝測試,叫做組裝,顧名思義,就是把單元組合起來後的測試,也就是針對系統介面和整合後的功能做測試
- 系統測試 System Testing:這是整合測試的再更上一階,針對功能、介面、可靠性、易用性和效能做測試
- 回歸測試 Operational Acceptance Testing:主要是上線後維護階段的測試,確保沒有因為功能
常用的測試方法:
- 黑箱測試 Black-box Testing:測試功能本身,而不是針對程式碼,測試案例要按照需求提供Input,來對比Output是否合乎預期,此方法適合用於整合測試、系統測試
- 白箱測試 White-box Testing:測試程式結構本身,針對程式碼、流程,不單單只看需求而已,適用於單元測試、整合測試
我自己在經驗過的專案中常安排的測試活動:
- Smoke Testing 煙霧測試:主要是針對每日更新的程式,消除表面的錯誤,減少後期的負擔,也就是類似確保其可以被建置,只要能Build成功,其他功能面測試就是其他測試的事情
- Alpha Testing:通常是系統有一定完成度後的第一階段測試,主要是內部進行的,下一階段為Beta測試
- Beta Testing:當Alpha測試完成之後會進行的,此階段會開放給外部使用者一同測試
- Automated Testing 自動化測試:當偵測到程式碼有異動調整時,自動將相關的測試內容開始測試
- Stress Testing 壓力測試:主要針對單一時間點可接收最大使用者使用的量做測試
- Performance Testing 效能測試:主要針對系統功能的回應速度做測試,一般常見網頁若回應時間超過3秒就算太久了
- Security Testing 安全性測試:針對一些資安部分以及駭客常用攻擊手法做測試
- A/B Testing:是提供兩套版本隨機給使用者使用,並觀測其回饋,已得到更進一步的使用者體驗改善空間
以上就是關於Software Testing軟體測試中,比較常見的觀念,在DevOps裡面Automated Testing是相當重要的觀念,因此下一篇會著重探討
參考資料、延伸閱讀:
下集預告:Automated Testing 自動化測試