天天看點

學習日志之software engineering(13)——Validation & Verification

這個過程是在程式設計完成之後對程式進行的一系列檢查,其中validation是在使用者的角度,從産品的外部進行檢查,系統是否可靠,是否對使用者有價值。而verification是從産品的内部檢查其内部的結構是否輸出正确預想的值。前者的對象是stakeholder而後面的對象是designer。

我們進行V&V過程的目的是為了減少defect,之前有講過fault和failure的概念,這裡defect就是這兩者的總稱。在開發過程中越是在靠後的過程檢查defect所需要花費的成本就會越高。這裡給出fault和failure的概念:

fault——The feature of software that causes a failure

failure——An execution event where the software behaves in an unexpected way

defect和這兩者的關系是一個泛化的關系。

學習日志之software engineering(13)——Validation & Verification

V&V技術主要包括兩類,一類是靜态,這一類不需要運作,僅僅是對代碼的分析和糾錯,按我的了解來講應該算是文法編譯一類的技術;另一類就是動态,這一類需要運作程式,通過程式運作的結果來檢查程式的可用性,即為testing。其一般是需要excecutable unit或者system,然後寫一些test case輸入然後觀察輸出結果是否有不同。test的流程主要分為三個階段:write tests->run test->record results。

這三個階段中最重要的步驟就是write test了,這個階段需要閱讀需求檔案和設計檔案并且寫出各種情況下的test case。這個檔案中需要表明的東西有test case的事件名,輸入,以及期望對應的輸出。一系列的test case就組成了test suite,然後運作的結果記錄到一個log中。

運作test case拆開,其過程如下所示:

學習日志之software engineering(13)——Validation & Verification

其中值得注意的是Oracle這個階段,這個玩意一般來說是一幫測試員。他們計算出的結果和運作test case的結果相對比,最後得出測試結果。

一般而言在開發過程中流程整個研發過程有以下三種情況:

scenario1:

開發組把所有的事給做了,這樣做比較适合比較小的團隊。

學習日志之software engineering(13)——Validation & Verification

scenario2:

從開發組中分離出一個專業的測試組,專門寫test case對系統進行測試,然後進行開發-測試過程疊代,這也是開發中用得最多的一種模式。

學習日志之software engineering(13)——Validation & Verification

scenario3:

這種情況是用多個測試組來進行多次測試疊代

學習日志之software engineering(13)——Validation & Verification

在測試過程中test case的編寫是一個很重要的步驟。如果将所有的test case都一一列出來這也是一種方法,成為exhaustive test但是這個方法并不實用,因為有些東西實在是有太多情況需要考慮了,而且那麼多情況運作所需要的時間也很長,是以需要找到一些比較關鍵系統中的點來進行測試。判斷test case的關鍵原則是其reliability和validity。

Valid Criterion: C is valid if and only if whenever P is incorrect C selects at least one test set T which is not successful for P

Reliable Criterion: C is reliable if and only if either every test selected by C is successful or no test selected is successful.

testing也可以分為好幾個層級:Unit tests,Integration tests,System tests

對于最底層的unit test一般測試方法有兩種:黑盒測試 (外部輸入和輸出的關系)和白盒測試(關心Unit内部的結構問題)

對于黑盒測試而言選取test case的方法有:

  • 随機選取
  • Equivalence class partitioning

    step1:define a critiria(這個條件是和定義分組相關的)

    step2:define predicates for each critiria(在這些條件下的滿足條件和不滿足條件,以及各種不同情況的區間判斷條件,這個定義得可以很詳細,取決于測試員自己)

    step3:write test cases(盡量每一個predicates都寫一個test case)

  • Boundary conditions

繼續閱讀