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。
沒有留言:
張貼留言