0%

軟體測試種類

1. 單元測試

最小單位、測試範圍小、測試速度快

  • 越是符合SOLID的架構則Unit Test越好寫

1.1. 舉例

最小單位在實際的角度來說,不同場點嚴謹有不同做法。

舉例來說,以class為最小單位,那我們就針對每個method去做測試,看class method 是否符合他的文件(method comment)所說的功能

2. 整合測試

測試範圍介於單元測試與E2E測試之間

測試速度慢

多個單元互相整合再一起做測試。主要針對不同模組互動下去做測試

需要準備更完整的模擬環境來完成測試工作

可以針對必要的咚咚去做整合測試即可

2.1. 舉例

資料庫連接的部分是一個模組

而讀取資料庫的資料進來說,做一些商業邏輯的部分又是另一個模組

我們想針對這兩個模組的互動去做測試,看看他們的互動後會不會產生各種奇琶結果。

測試案例成為整合測試的關鍵點是:測試案例是否包含與外部環境交互的邏輯,如時間、Session、Cookie、資料庫,硬體,網路等等不受程式控制的因素。

簡單來說,若測試案例無與外部環境交互的邏輯,則可以將測試案例視為單元測試:
單元測試只與系統內部的程式交互

反之,若測試案例中包含與外部環境交互的邏輯,那麼這個測試案例就是一個整合測試:
整合測試會與外部環境交互

3. 端對端測試

測試範圍大

以USER的角度去做測試,通常需要模擬最完整的環境去做測試

對選各種我寫的功能,看看這些功能是不是做了他們應該要做的事情

也就是針對User Interface使用者介面去做測試

目前的End to End 的framework很多

比較流行的有https://www.selenium.dev/

4. 寫測試須知

  • 不是所有的程式都可以測試
  • 實際寫過測試,才知道之前寫的code能不能被測試

5. 如何命名測試function名稱

  • 要被測試的方法名稱
  • 測試的情境(input)
  • 預期行為(output)

6. 測試function的內容架構

  • 準備
  • 執行
  • 驗證

7. 什麼是好的測試

8. 應該避免的測試寫法

9. 再提升一點

  • 同一個測試,用不同參數組合測試-參數化測試
    • 每個assert都要執行到(parameterized,self.subTest())
  • 搭配面對面的code review勝過100% 覆蓋率

9.1. 參數化測試案例

10. 軟體工具

市面上現有的 E2E 框架非常多,知名的有 ProtractorCasperJSNightwatch.jsTestcafeCypress 等等。

11. 問題

11.1. 何謂最小單位

11.2. 撰寫測試程式的價值

11.3. 誰該學單元測試?

12. 參考連結

12.1. 未看

http://www.tw511.com/24/276/9932.html
https://www.cnblogs.com/Neeo/articles/11809457.html

https://jchu.cc/2018/08/16-test.html

[Day 01] 自動化測試最簡單也最困難

https://ithelp.ithome.com.tw/articles/10214329