靜態測試 靜態方法是指不運行被測程序本身,僅通過分析或檢查源程序的文法、結構、過程、接口等來檢查程序的正確性。靜態方法通過程序靜態特性的分析,找出欠缺和可疑之處,例如不匹配的參數、不適當的循環嵌套和分支嵌套、不允許的遞歸、未使用過的變量、空指針的引用和可疑的計算等。靜態測試結果可用于進一步的查錯,并為測試用例選取提供指導。 動態測試 動態方法是指通過運行被測程序,檢查運行結果與預期結果的差異,并分析運行效率和健壯性等性能,這種方法由三部分組成:構造測試實例、執行程序、分析程序的輸出結果。 它們只是一個測試的不同分類角度而已,同一個測試,既有可能屬于黑盒測試,也有可能屬于測試;既有可能屬于靜態測試,也有可能屬于白盒測試。而且它們之間還有包括交叉的關系,總結以下4句話: ● 黑盒測試有可能是動態測試(運行程序,只看輸入和輸出),也有可能是靜態測試(不運行程序,只是查看界面) ● 白盒測試有可能是動態測試(運行程序,并分析代碼結構),也有可能是靜態測試(不運行程序,只是靜態查看代碼) ● 動態測試有可能是黑盒測試(運行程序,只看輸入和輸出),也有可能是白盒測試(運行程序,并分析代碼結構) ● 靜態測試有可能是黑盒測試(不運行程序,只是查看界面),也有可能是白盒測試(不運行程序,只是靜態查看代碼) 區別一:靜態測試是用于預防的,動態測試是用于矯正的 區別二:多次的靜態測試比動態測試要效率和效益高 區別三:靜態測試綜合測試程序代碼 區別四:在相當短的時間里,靜態測試的覆蓋度能達到100%,而動態測試經常是只能達到50%左右,原因動態測試發現的bug大部分只是在測試實際執行的那部分代碼 區別五:動態測試比靜態測試更花時間 區別六:靜態測試比動態測試更能發現 bug 區別七:靜態測試的執行可以在程序編碼編譯前,動態測試只能在編譯后才能執行 區別八:靜態測試能發現動態測試所不能發現的一些:“Syntax error,code that hard to maintain,code that hard to test,code that does not confirm to coding standard, and ANSI violations” 靜態測試的和動態測試淺析 根據程序是否運行,測試可以分為靜態測試和動態測試。靜態測試就是靜態分析,對模塊的源代碼進行研讀,查找錯誤或收集一些度量數據,并不需要對代碼進行編譯和仿真運行。靜態測試采用人工檢測和計算機輔助靜態分析手段進行檢測,只進行特性分析。 ● 人工檢測:人工檢測是指不依靠計算機而完全靠人工審查或評審軟件。人工檢測這種方法可以有效地發現邏輯設計和編碼錯誤,發現計算機不易發現的問題。 ● 計算機輔助靜態分析:利用靜態分析工具對被測程序進行特性分析,從程序中提取一些信息,以便檢查程序邏輯的各種缺陷和可疑的程序構造。如用錯的局部變量和全局變量,不匹配的參數,潛在的死循環等。靜態分析中還可以用符號代替數值求得程序結果,阻便對程序進行運算規律的檢驗。 靜態測試包括對軟件產品的設計規格說明書的審查,對程序代碼的閱讀、審查等。靜態分析的查錯和分析功能是其他方法所不能替代的.已被當做一種自動化的代碼校驗方法。 動態測試是通過觀察代碼運行時的動作,來提供執行跟蹤、時間分析,以及測試覆蓋度方面的信息。動態測試通過真正運行程序發現錯誤。通過有效的測試用例,對應的輸入腳出關系來分析被測程序的運行情況。 不同的測試方法各自的目標和側重點不一樣,在實際工作中。應將這兩種方法結合起來運用,以達到更完美的效果。 以上的測試方法各有所長,每種方法都可設計出一組有用的例子,用這組測試用例可以比較容易地發現某種類型的錯誤,卻不易發現另一種類型的錯誤。因此在實際測試中,應結合各種測試方法,形成綜合策略。在單元測試主要用白盒測試;在系統測試時主要用黑盒測試,或者以黑盒測試為主要測試方法,白盒測試為輔助方法等。