code

2017年11月11日 星期六

Software Testing 1 - test basics

Validation & Verification

validation = 達到使用者的需求功能
verification = 做出來的需求功能,有正確implement

這兩個面向都正確,才能說這個software正確


好的Test Cases特徵

1. 一次只測試一個部分
2. 測試的目的必須要明確符合規範
3. 描述方式要簡單清楚
4. 範圍要小
5. 要獨立,不依賴任何其他test cases
6. 要最可能精簡
7. 要跟spec/requirement相關
8. 要能重複結果
9. 描述用詞要一致


Software Development Life Cycle (SDLC) model

理想上來說,testing應該要發生在SDLC的各個階段:
1. 需求分析階段:  分析需求是否能測試
2. 系統設計階段: 發展test coverage plan, 以及設計usability test
3. 實作階段: 實作unit tests / automatic tests
4. 整合階段: integration tests
5. 發布階段: UAT (user acceptance test) / usability test (scenario based)
6. 營運階段: regression test如果有任何code change

以上是理想狀態 XD


白箱與黑箱測試

白箱:測試者能 access source code,e.g. unit tests
黑箱:白箱的相反,e.g. UAT


Test Coverage

有三種coverages:

1. code coverage: 理想上是100% statement coverage,也就是所有的code都有tests“照顧”到。很多開發framework都有code coverage tools,例如Android Studio。

又可依照詳細程度分為statement coverage / path coverage / branch coverage

2. data coverage: 測試涵蓋一些代表性的input數據。我們通常不可能有100% data coverage,例如不可能測試所有的integers。不過可以測試一些特殊cases:


  • boundary condition - 各種邊界值
  • typical data - 代表性的input
  • pre / post conditions - input前後的facts
  • bad data - 測試不合API的值,例如null / 極多極少量 / 空集合 / 未初始化
3. model-based coverage: 這個採用分析整個程式與input domain來建立test case的測試模型,算是非常分析導向的,在此略過了,因為我現實上應該不會採用這樣的approach。


Unit Test

通常這是開發者的責任,可以視為開發過程跟寫code一樣重要的產出,某些agile methods可以讓testers跟developers一起合作寫出unit tests。

unit tests最好是很小的單位,例如function / method / class,而且最好能100% code coverage。
如果有100 code coverage,不能保證沒有bug,但是能提高code change時的信心與品質,特別是需要做refactoring的時候


Functional Test 

這應該就是integration test,測試整個program的inputs / outputs / features。
這可以算是黑箱測試,你要假裝不知道整個program的implementation。

當然最好是automated tests。

沒有留言:

張貼留言