靜態測試技術

靜態測試是通過分析代碼來發現錯誤,所依據的只能是數據和代碼的自然屬性,對業務屬性則一無所知。靜態測試並不需要執行軟件,通過審查軟件的設計、體系結構和代碼,從而找出軟件缺陷的過程,有時也稱為結構化分析。

這就是這類方法的極限,即靜態測試方法做到極致,也只能發現一小部分錯誤。另外,靜態分析只能基於現有代碼,不能發現代碼缺失造成的錯誤。

靜態測試常用的方法有:代碼走查、數據流分析、控制流分析和信息流分析。

代碼走查

代碼走查(code walkthrough)是開發人員與架構師集中討論代碼的過程,檢查代碼的邏輯和語法是否正確。

代碼走查的作用主要包括以下幾個方面:

 2)檢查代碼邏輯是否存在問題;

 3)對源代碼進行重構;

 4)分享開發經驗。

代碼走查過程中需要注意的是,不應該匆匆忙忙地完成一次代碼走查,需要充分地、認真地對待,同時在代碼走查過程中可以學習其他工程師的經驗。在走查過程中不能用自己的編程思維看待代碼,代碼走查的目的是確定代碼是否正確。

控制流分析

控制流分析方法主要是將程序流程圖轉換為控制流程圖,通過控制流程圖來分析程序中可能存在的問題,通過分析控制流程圖主要發現以下幾類問題:

(1)轉向並不存在的標號。

(2)沒有用的語句標號。

(3)從程序入口進入後無法達到的語句。

(4)不能達到停機語句的語句。

在控制流程圖中只有以下兩種圖形符號:

(1)結點:以標為編號的圓圈表示,它代表了程序流程圖中矩形框所表示的處理、菱形所表示的兩個或多個出口判斷以及兩至多條流線相交的匯合點。

(2)控制流線或弧:以箭頭表示,它與程序流程圖中的流線是一致的,表明了控制的順序。

為方便記錄,一般會在控制流線上標有名字,如a、b、c 等。

控制流分析步驟如下:

(1)確定所有程序元素。

(2)根據程序元素之間的相互關係得到控制流程圖。

(3)將控制流程圖轉換成控制流矩陣。

(4)通過數據結構的形式把控制流矩陣表示出來。

(5)藉助算法對控制流進行分析,找出存在的問題。

【實例】根據代碼畫出的控制流程圖如圖10-5 所示。

靜態測試技術

靜態測試技術

數據流分析

數據流分析最初是隨著編譯系統要生成有效的目標碼而出現的,這類方法主要用於代碼優化。近年來數據流分析方法在確認系統中也得到成功的運用。通過數據流分析可以查找代碼中引用但未定義的變量等錯誤,查找以前未使用的變量再次賦值等數據流異常的情況。數據流分析法的關鍵是數據的定義和引用。

數據的定義:如果程序中某一語句執行時能改變某程序變量M 的值,則稱M 是被該語句定義的。

數據的引用:如果語句的執行引用了內存中變量N 的值,則稱該語句引用變量N。

數據流分析方法主要是發現以下兩種錯誤:

(1)變量未定義但被引用。

(2)變量定義但未被引用。

數據流分析方法使用步驟如下:

(1)根據代碼畫出控制流程圖。

(2)根據控制流程圖畫出數據流表。

(3)分析數據流表。

(4)根據分析結果對代碼進行修正和優化。

【實例】根據代碼畫出的控制流程圖如圖10-6 所示。

靜態測試技術

靜態測試技術

對數據流分析表進行分析,可以發現以下問題:

(1)語句2 中使用的變量M 在之前的語句中並未定義。

(2)語句5 中定義的變量N,在後面一直未使用。

(3)語句7 中定義的變量Z,在語句8 中被重新定義了,這樣會出現異常警告。

信息流分析

信息流分析主要是驗證程序變量間信息的傳輸。程序的信息關係可以通過輸入變量與語句關係、語句與輸出變量關係和輸入變量與輸出變量關係三個表來導出。

輸入變量與語句關係:輸入變量直接或間接影響語句的執行。

語句與輸出變量關係:語句執行直接或間接影響變量的輸出。

輸入變量與輸出變量關係:輸入變量直接或間接影響輸出變量。

信息流分析的步驟如下:

(1)根據代碼得到三個關係表:輸入變量與語句關係表、語句與輸出變量關係表、輸入與輸出變量關係表。

(2)分析輸入變量與語句關係表,查看對未定義的變量所有可能的引用,根據語句的執行情況來判斷是哪個輸入變量未定義。

(3)分析語句與輸出變量關係表,查看所有可能會影響輸出變量取值的語句,根據語句的執行情況來判斷是哪條語句導致輸出變量錯誤。

(4)分析輸入變量與輸出變量關係表,查看所有可能影響輸出變量取值的輸入變量,判斷輸出變量會不會由一些非法的變量導出。

信息流主要分析以下內容:

(1)能夠列出對輸入變量的所有可能的引用。

(2)在程序的任何指定點檢查其執行可能影響某一輸出變量值的語句。

(3)輸入輸出關係提供一種檢查,看每個輸出值是否由相關的輸入值而不是其他值導出。

【實例】如以下代碼段(此代碼為偽代碼):

靜態測試技術

根據代碼分析出輸入變量與語句關係表、語句與輸出變量關係表和輸入變量與輸出變量關係表,如圖10-7 所示。

靜態測試技術

輸入變量與語句關係表中,由於輸入變量M、N 的大小直接影響while 語句的循環次數,所以輸入變量與語句3、4、5 是有關係的。

語句與輸出變量關係表中,語句1、2、3 和4 與輸出變量的關係比較容易理解,較難理解的是語句5 與輸出變量Q 和R 都有關係,因為語句影響輸出變量R 的值,而R 的值又影響while 語句的循環次數,所以間接影響輸出變量Q 的值。

輸入變量與輸出變量的關係表比較容易理解,輸入變量M、N 決定輸出變量Q 和R 的大小。


分享到:


相關文章: