• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 靜態測試和動態測試

    上一篇 / 下一篇  2008-09-27 13:30:41

    MILY: 宋體">靜測試動態測試

    所謂靜態測試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/4左右。程序開發出來不僅是給程序員看得,其他程序員和測試人員也要看得。有了注釋,別人就能很快地了解程序實現的功能。注釋應該包含作者,版本號、創建日期等,以及主要功能模塊的含義。

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

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

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

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

    一行代碼只定義一個變量。

    程序適當加些空行?招胁徽純却,會使程序看起來更清晰。

    程序修改如下:

    /*程序名稱:求兩個實數中的大數

    作者:***

    版本:1.0

    創建時間:2006-10-14

    */

    #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表示

     

     

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

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

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

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

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

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

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

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


    TAG: 動態 靜態

     

    評分:0

    我來說兩句

    顯示全部

    :loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

    日歷

    « 2011-06-09  
       1234
    567891011
    12131415161718
    19202122232425
    2627282930  

    數據統計

    • 訪問量: 807
    • 日志數: 2
    • 建立時間: 2008-09-27
    • 更新時間: 2008-10-08

    RSS訂閱

    Open Toolbar
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>