軟件測試方法——靜態測試與動態測試


從測試方法的角度可以分為手工測試和自動化測試。

1、靜態測試

    所謂靜態測試static testing)就是不實際運行被測軟件,而只是靜態地檢查程序代碼界面或文檔中可能存在的錯誤的過程。

    從概念中我們可以知道,其包括對代碼測試、界面測試和文檔測試三個方面:

    對於代碼測試,主要測試代碼是否符合相應的標准和規范。

    對於界面測試,主要測試軟件的實際界面與需求中的說明是否相符。

    對於文檔測試,主要測試用戶手冊和需求說明是否符合用戶的實際需求。

    其中后兩者的測試容易一些,只要測試人員對用戶需求很熟悉,並比較細心就很容易發現界面和文檔中的缺陷。而對程序代碼的靜態測試要復雜得多,需要我們按照相應的代碼規范模板來逐行檢查程序代碼。那么我們從哪里獲得這個規范模板呢?其實沒有一個統一的標准,每個公司內部一般都有自己的編碼規范,比如《c/c++編碼規范》,你只需要按照上面的條目逐條測試就可以了。當然很白盒測試工具中就自動集成了各種語言的編碼規范,比如parasoft公司的C++Test就集成了C/C++的編碼規范,我們只要點擊一個按鈕,這些工具就會自動幫助我們檢測代碼中不符合語法規范的地方,非常方便。

    下面我們舉一個實際的例子。

       C語言程序的靜態分析和動態分析

#include <stdio.h>

Max(float x, float y)

{

float z;

z=x>y?x:y;

return(z);

}

Main()

{

float a, b;

int c;

scanf(“%f, %f”&a,&b);

c=max(a,b);

printf(“Max is %d\n”, c);

}

    這段C語言編寫的小程序,比較簡單,實現的功能為:在主函數里輸入兩個單精度的數ab,然后調用max子函數來求ab中的大數,最后將大數輸出。

    我們現在就對代碼進行靜態分析,主要根據一些C語言的基礎知識來檢查。

    我們把問題分為兩種,一種必須修改的,另一種建議修改的。

    必須修改的問題有三個:

   (1)程序沒有注釋。注釋是程序中非常重要的組成部分,一般占到總行書的1/4左右。程序開發出來不僅是給程序員看得,其他程序員和測試人員也要看得。有了注釋,別人就能很快地了解程序實現的功能。注釋應該包含作者,版本號、創建日期等,以及主要功能模塊的含義

   (2)子函數max沒有返回值的類型。由於類型為單精度,我們可以在max()前面加一個float類型聲明。

   (3)精度丟失問題。大家注意“c=max(a,b)”語句,我們知道c的類型為整型int ,而max(a,b)的返回值z為單精度float, 將單精度的數賦值給一個整型的數,c語言的編譯器會自動地進行類型轉換,將小數部分去掉,比如z=2.5,賦給c則為2,最后輸出的結果就不是ab 中的大數,而是大數的整數部分。

    建議修改的問題也有三個;

      (1)Main函數沒有返回值類型和參數列表。雖然main函數沒有返回值和參數,但是我們組后將其改為void main(void),來表明main函數的返回值和參數都為空,因為在有的白盒測試工具的編碼規范中,如果不寫void會認為是個錯誤。

    (2)一行代碼只定義一個變量。

    (3)程序適當加些空行。空行不占內存,會使程序看起來更清晰。

程序修改如下:

#include <stdio.h>

float max(float x, float y)//返回兩個單精度數中的大數

{

float z;

z=x>y?x:y;

return(z);

}

main()

{

float a;

float b;

int c;

 

scanf(“%f, %f”&a,&b);

c=max(a,b);

printf(“Max is %d\n”, c);

}

 

    根據上面的分析,我們來編寫一個簡單的C語言代碼規范

規范編號

規范內容

是否通過

1

一行代碼只做一件事情

 

2

代碼行的最大長度控制在70-80字,否則不便於閱讀和打印

 

3

函數和函數之間,定義語句和執行語句之間加空行

 

4

在程序開頭加注釋,說明程序的基本信息;在重要的函數模快處加注釋,說明函數的功能

 

5

低層次的語句比高層次的縮進一個tab4個空格)

 

6

不要漏掉函數的參數和返回值,如果沒有,用void表示

 

 

2. 動態測試

    動態測試(dynamic testing),指的是實際運行被測程序,輸入相應的測試數據,檢查實際輸出結果和預期結果是否相符的過程,所以判斷一個測試屬於動態測試還是靜態的,唯一的標准就是看是否運行程序。

    我們還是以剛才的那段代碼為例,實際運行修改后的程序,輸入1.2 和3.5兩個實數,按回車,得到結果3.500000,與我們預期的相符合。

    這是一個動態測試的過程。可能有的讀者會問,以上過程不也是黑盒測試的過程馬?黑盒白盒、動態靜態,它們之間有什么關系呢?

    它們只是測試的不同角度而已,同一個測試,既有可能是黑盒測試,也有可能是動態測試;既有可能是靜態測試,也有可能是白盒測試。

    黑盒測試有可能是動態測試(運行程序,看輸入輸出),也有可能是靜態測試(不運行,只看界面)

    白盒測試有可能是動態測試(運行程序並分析代碼結構),也有可能是靜態測試(不運行程序,只靜態察看代碼)

    動態測試有可能是黑盒測試(運行,只看輸入輸出),也有可能是白盒測試 (運行並分析代碼結構)

    靜態測試有可能是黑盒測試(不運行,只察看界面),也有可能是白盒測試(不運行,只察看代碼)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM