《軟件測(cè)試》課件第5章_第1頁(yè)
《軟件測(cè)試》課件第5章_第2頁(yè)
《軟件測(cè)試》課件第5章_第3頁(yè)
《軟件測(cè)試》課件第5章_第4頁(yè)
《軟件測(cè)試》課件第5章_第5頁(yè)
已閱讀5頁(yè),還剩81頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

項(xiàng)目五DoWork()函數(shù)的測(cè)試5.1問(wèn)題情境5.2問(wèn)題分析5.3任務(wù)設(shè)計(jì)與實(shí)施5.4知識(shí)總結(jié)5.5應(yīng)用實(shí)踐

請(qǐng)?jiān)O(shè)計(jì)一組測(cè)試用例,測(cè)試以下函數(shù)。

voidDoWork(inta,intb,intx)

{

intk=0,j=0;

if((a>1)&&(b==0))

{5.1問(wèn)題情境

k=a*x-1;

j=sqrt(k);

} //語(yǔ)句塊1

if((a==2)||(x>1))

{

j=x*a+10;

} //語(yǔ)句塊2

j=j%3; //語(yǔ)句塊3

}

在這個(gè)程序中有三個(gè)輸入?yún)?shù)a、b和x,有兩個(gè)判定,每個(gè)判定有兩個(gè)條件。5.2問(wèn)題分析

5.3.1用語(yǔ)句覆蓋測(cè)試方法對(duì)DoWork()函數(shù)完成測(cè)試

1.分析程序結(jié)構(gòu)

在這個(gè)程序中有三個(gè)輸入?yún)?shù)a、b和x,在程序中有兩個(gè)判定,每個(gè)判定有兩個(gè)條件。5.3任務(wù)設(shè)計(jì)與實(shí)施

2.設(shè)計(jì)測(cè)試用例

(1)根據(jù)語(yǔ)句覆蓋測(cè)試法的思想,設(shè)計(jì)如下測(cè)試用例:

a

=

1,b

=

0,x

=

3

(2)預(yù)期結(jié)果:程序每一行都被執(zhí)行,即可完成對(duì)程序的語(yǔ)句覆蓋測(cè)試。

3.實(shí)施測(cè)試并書(shū)寫(xiě)測(cè)試報(bào)告

(1)輸入所設(shè)計(jì)的測(cè)試用例。

(2)運(yùn)行并觀(guān)察程序,看是否能達(dá)到語(yǔ)句的全部覆蓋。5.3.2用條件覆蓋測(cè)試方法對(duì)DoWork()函數(shù)完成測(cè)試

1.分析程序結(jié)構(gòu)

在這個(gè)程序中有三個(gè)輸入?yún)?shù)a、b和x,有兩個(gè)判定,每個(gè)判定有兩個(gè)條件。

2.設(shè)計(jì)測(cè)試用例

設(shè)計(jì)的測(cè)試用例如下:

a

=

1,b

=

0,x

=

3

a

=

1,b

=

1,c

=

1

3.實(shí)施測(cè)試并書(shū)寫(xiě)測(cè)試報(bào)告

(1)輸入所設(shè)計(jì)的測(cè)試用例。

(2)運(yùn)行并觀(guān)察程序,看能否達(dá)到條件的全部覆蓋。5.3.3用判定覆蓋測(cè)試方法對(duì)DoWork()函數(shù)完成測(cè)試

1.分析程序結(jié)構(gòu)

在這個(gè)程序中有三個(gè)輸入?yún)?shù)a、b和x,有兩個(gè)判定,每個(gè)判定有兩個(gè)條件。

2.設(shè)計(jì)測(cè)試用例

設(shè)計(jì)的測(cè)試用例如下:

a

=

3,b

=

0,x

=

3

a

=

2,b

=

1,c

=

1

3.實(shí)施測(cè)試并書(shū)寫(xiě)測(cè)試報(bào)告

(1)輸入所設(shè)計(jì)的測(cè)試用例。

(2)運(yùn)行并觀(guān)察程序,看能否達(dá)到判定的全部覆蓋。5.3.4用判定/條件覆蓋測(cè)試方法對(duì)DoWork()函數(shù)完成測(cè)試

1.分析程序結(jié)構(gòu)

在這個(gè)程序中有三個(gè)輸入?yún)?shù)a、b和x,有兩個(gè)判定,每個(gè)判定有兩個(gè)條件。

2.設(shè)計(jì)測(cè)試用例

設(shè)計(jì)的測(cè)試用例如下:

a

=

2,b

=

0,x

=

3

a

=

1,b

=

1,c

=

1

3.實(shí)施測(cè)試并書(shū)寫(xiě)測(cè)試報(bào)告

(1)輸入所設(shè)計(jì)的測(cè)試用例。

(2)運(yùn)行并觀(guān)察程序,看能否達(dá)到判定/條件的全部覆蓋。5.3.5用組合覆蓋測(cè)試方法對(duì)DoWork()函數(shù)完成測(cè)試

1.分析程序結(jié)構(gòu)

在這個(gè)程序中有三個(gè)輸入?yún)?shù)a、b和x,有兩個(gè)判定,每個(gè)判定有兩個(gè)條件。

2.設(shè)計(jì)測(cè)試用例

設(shè)計(jì)的測(cè)試用例如下:

a

=

2,b

=

0,x

=

3

a

=

2,b

=

1,c

=

1

a

=

1,b

=

1,x

=

1

a

=

1,b

=

0,c

=

3

3.實(shí)施測(cè)試,并書(shū)寫(xiě)測(cè)試報(bào)告

(1)輸入所設(shè)計(jì)的測(cè)試用例。

(2)運(yùn)行并觀(guān)察程序,看能否達(dá)到組合的全部覆蓋。

白盒測(cè)試法(WhiteBoxTesting)按照程序內(nèi)部的結(jié)構(gòu)和邏輯驅(qū)動(dòng)測(cè)試程序,通過(guò)測(cè)試來(lái)檢測(cè)產(chǎn)品內(nèi)部動(dòng)作是否按照設(shè)計(jì)說(shuō)明書(shū)的規(guī)定正常進(jìn)行,檢驗(yàn)程序中的每條路徑是否都能按預(yù)定要求正確工作。此方法是將白盒測(cè)試的對(duì)象看做內(nèi)部邏輯結(jié)構(gòu)完全可見(jiàn)的盒子,測(cè)試人員依據(jù)程序內(nèi)部邏輯結(jié)構(gòu)的相關(guān)信息來(lái)設(shè)計(jì)或選擇測(cè)試用例,對(duì)程序所有邏輯路徑進(jìn)行測(cè)試,通過(guò)在不同點(diǎn)、不同分支檢查程序的狀態(tài),來(lái)確定實(shí)際的狀態(tài)是否與預(yù)期的狀態(tài)一致。5.4知識(shí)總結(jié)5.4.1白盒測(cè)試方法的概念

白盒測(cè)試方法的對(duì)象主要是源程序,是利用程序設(shè)計(jì)的控制結(jié)構(gòu)導(dǎo)出測(cè)試用例來(lái)進(jìn)行測(cè)試的,是軟件測(cè)試的主要方法之一。

1.白盒測(cè)試方法的基本知識(shí)

1)白盒測(cè)試方法的分類(lèi)

白盒測(cè)試方法分為如下兩類(lèi):

(1)靜態(tài)測(cè)試。靜態(tài)測(cè)試是測(cè)試中很重要的方法之一,它不要求在計(jì)算機(jī)上實(shí)際執(zhí)行所測(cè)程序,而主要以一些人工的模擬技術(shù)對(duì)軟件進(jìn)行分析和測(cè)試。靜態(tài)測(cè)試大約可以找出25%~60%

的邏輯錯(cuò)誤。

(2)動(dòng)態(tài)測(cè)試。輸入一組預(yù)先按照一定的測(cè)試準(zhǔn)則設(shè)計(jì)的實(shí)例數(shù)據(jù)驅(qū)動(dòng)運(yùn)行程序,檢查程序功能是否符合設(shè)計(jì)要求,發(fā)現(xiàn)程序中的錯(cuò)誤,這一過(guò)程稱(chēng)為動(dòng)態(tài)測(cè)試。

2)白盒測(cè)試的常用技術(shù)

白盒測(cè)試的常用技術(shù)主要有以下幾種:

(1)邏輯覆蓋法。根據(jù)覆蓋目標(biāo)的不同和覆蓋源程序語(yǔ)句的詳盡程度,邏輯覆蓋又可分為語(yǔ)句覆蓋、判定覆蓋、條件覆蓋、條件/判定組合覆蓋、多條件覆蓋、修改條件/判定覆蓋、組合覆蓋和路徑覆蓋。

(2)插樁技術(shù)。軟件動(dòng)態(tài)測(cè)試中,插樁測(cè)試是一個(gè)被廣泛應(yīng)用的測(cè)試方法。插樁測(cè)試就是在源程序中插入語(yǔ)句,然后執(zhí)行程序,通過(guò)打印語(yǔ)句來(lái)獲得動(dòng)態(tài)信息。

(3)基本路徑測(cè)試法?;韭窂綔y(cè)試法是在程序控制流圖的基礎(chǔ)上,通過(guò)分析控制構(gòu)造的環(huán)形復(fù)雜性,導(dǎo)出基本可執(zhí)行的路徑集合,從而設(shè)計(jì)測(cè)試用例的方法。設(shè)計(jì)出的測(cè)試用例要保證在測(cè)試中程序的每個(gè)執(zhí)行語(yǔ)句至少被執(zhí)行一次。

(4)域測(cè)試法。域測(cè)試是一種基于程序結(jié)構(gòu)的測(cè)試方法,它通過(guò)對(duì)程序輸入空間(域)的分析,選擇合適的測(cè)試點(diǎn)進(jìn)行測(cè)試。

(5)符號(hào)測(cè)試。符號(hào)測(cè)試的基本思想是允許程序的輸入不僅僅是具體的數(shù)值數(shù)據(jù),而且還包括符號(hào)值。符號(hào)值可以是基本的符號(hào)變量值,也可以是符號(hào)變量值的表達(dá)式。

(6)

Z路徑覆蓋法。簡(jiǎn)化循環(huán)意義下的路徑覆蓋稱(chēng)為Z路徑覆蓋。簡(jiǎn)化循環(huán)指限制循環(huán)次數(shù),只考慮循環(huán)一次或零次的情況。簡(jiǎn)化循環(huán)的目的是限制循環(huán)的次數(shù)。Z路徑覆蓋對(duì)循環(huán)機(jī)制進(jìn)行簡(jiǎn)化,減少路徑的數(shù)量,使得覆蓋所有路徑成為可能。無(wú)論循環(huán)的形式和循環(huán)體實(shí)際執(zhí)行的次數(shù)是怎樣的,簡(jiǎn)化后的循環(huán)測(cè)試都只考慮執(zhí)行循環(huán)體一次和零次(不執(zhí)行)兩種情況,即考慮執(zhí)行時(shí)進(jìn)入循環(huán)體一次和跳過(guò)循環(huán)體這兩種情況。

(7)程序變異測(cè)試法。程序變異是一種錯(cuò)誤驅(qū)動(dòng)測(cè)試。錯(cuò)誤驅(qū)動(dòng)測(cè)試是指該方法是針對(duì)某類(lèi)特定程序錯(cuò)誤的。經(jīng)過(guò)多年的測(cè)試?yán)碚撗芯亢蛙浖y(cè)試的實(shí)踐,人們逐漸發(fā)現(xiàn)要想找出程序中的所有錯(cuò)誤幾乎是不可能的。比較現(xiàn)實(shí)的解決辦法是將錯(cuò)誤的搜索范圍盡可能地縮小,以利于專(zhuān)門(mén)測(cè)試某類(lèi)錯(cuò)誤是否存在。

2.白盒測(cè)試方法的原則

白盒測(cè)試方法的原則有如下四點(diǎn):

(1)保證一個(gè)模塊中的所有路徑至少被測(cè)試一次。

(2)所有邏輯值都要測(cè)試真和假兩種情況。

(3)檢查程序的內(nèi)部數(shù)據(jù)結(jié)構(gòu)是否有效。

(4)檢查上、下邊界及可操作范圍內(nèi)運(yùn)行的所有循環(huán)。

3.白盒測(cè)試方法的類(lèi)別、依據(jù)和流程

白盒測(cè)試方法的策略是首先進(jìn)行靜態(tài)結(jié)構(gòu)分析,然后采用先靜態(tài)后動(dòng)態(tài)的組合方式進(jìn)行覆蓋測(cè)試,利用靜態(tài)測(cè)試的分析結(jié)果和動(dòng)態(tài)測(cè)試的結(jié)果進(jìn)一步確認(rèn)是否已達(dá)到測(cè)試效果。白盒測(cè)試一般要考慮類(lèi)別、依據(jù)和流程。

1)白盒測(cè)試的類(lèi)別

白盒測(cè)試具體分為以下8大類(lèi):

軟件公用問(wèn)題的測(cè)試;

語(yǔ)言測(cè)試;

SQL語(yǔ)句測(cè)試;

數(shù)據(jù)類(lèi)型測(cè)試;

界面測(cè)試;

數(shù)值對(duì)象測(cè)試;

業(yè)務(wù)對(duì)象測(cè)試;

數(shù)據(jù)管理對(duì)象測(cè)試。

2)白盒測(cè)試的依據(jù)

白盒測(cè)試的依據(jù)有以下6點(diǎn):

軟件需求報(bào)告;

軟件需求規(guī)格說(shuō)明;

程序設(shè)計(jì)文檔;

軟件界面設(shè)計(jì);

編碼規(guī)范;

開(kāi)發(fā)命名標(biāo)準(zhǔn)。

3)白盒測(cè)試的流程

白盒測(cè)試的流程分為界面對(duì)象測(cè)試和業(yè)務(wù)對(duì)象測(cè)試兩種方式。

(1)界面對(duì)象測(cè)試的流程如圖5-1所示。

圖5-1界面對(duì)象測(cè)試的流程圖從圖5-1可以看出,界面對(duì)象測(cè)試流程的優(yōu)點(diǎn)是:便于測(cè)試者從界面層直觀(guān)地錄入數(shù)據(jù);界面對(duì)象測(cè)試流程的缺點(diǎn)是:進(jìn)行回歸測(cè)試時(shí),需要重復(fù)錄入數(shù)據(jù)。

(2)業(yè)務(wù)對(duì)象測(cè)試的流程如圖5-2所示。

圖5-2業(yè)務(wù)對(duì)象測(cè)試的流程圖業(yè)務(wù)對(duì)象測(cè)試是從底層開(kāi)始,逐一向上延伸的。從圖5-2可以看出,業(yè)務(wù)對(duì)象測(cè)試的優(yōu)點(diǎn)是:在進(jìn)行回歸測(cè)試時(shí),不需要重復(fù)輸入數(shù)據(jù),并且程序執(zhí)行一遍就可以了;業(yè)務(wù)對(duì)象測(cè)試的缺點(diǎn)是:需要給中間層編寫(xiě)一個(gè)測(cè)試小程序,根據(jù)程序中類(lèi)的對(duì)象構(gòu)造輸入數(shù)據(jù)并將結(jié)果輸出到控制臺(tái)上。

4.靜態(tài)測(cè)試方法

在白盒測(cè)試中,可以使用各種測(cè)試方法進(jìn)行測(cè)試。但是,在測(cè)試時(shí)要考慮以下5個(gè)問(wèn)題:

(1)測(cè)試中盡量先用自動(dòng)化工具來(lái)進(jìn)行靜態(tài)結(jié)構(gòu)分析。

(2)測(cè)試中建議先從靜態(tài)測(cè)試開(kāi)始,例如靜態(tài)結(jié)構(gòu)分析、代碼走查和靜態(tài)質(zhì)量度量;然后進(jìn)行動(dòng)態(tài)測(cè)試,例如覆蓋率測(cè)試。

(3)將靜態(tài)分析的結(jié)果作為依據(jù),再使用代碼檢查和動(dòng)態(tài)測(cè)試的方式對(duì)靜態(tài)分析結(jié)果進(jìn)行進(jìn)一步的確認(rèn),以提高測(cè)試效率及準(zhǔn)確性。

(4)覆蓋率測(cè)試是白盒測(cè)試中的重要手段,在測(cè)試報(bào)告中可以作為量化指標(biāo)的依據(jù),對(duì)于重點(diǎn)模塊,應(yīng)使用多種覆蓋率標(biāo)準(zhǔn)衡量代碼的覆蓋率。

(5)在不同的測(cè)試階段,測(cè)試的側(cè)重點(diǎn)是不同的。

在單元測(cè)試階段,以程序語(yǔ)法檢查、程序邏輯檢查、代碼檢查、邏輯覆蓋為主。

在集成測(cè)試階段,需要增加靜態(tài)結(jié)構(gòu)分析、靜態(tài)質(zhì)量度量,以接口測(cè)試為主。在系統(tǒng)測(cè)試階段,在真實(shí)系統(tǒng)工作環(huán)境下通過(guò)與系統(tǒng)的需求定義作比較,檢驗(yàn)完整的軟件配置項(xiàng)能否和系統(tǒng)正確連接,發(fā)現(xiàn)軟件與系統(tǒng)/子系統(tǒng)設(shè)計(jì)文檔和軟件開(kāi)發(fā)合同規(guī)定不符合或有矛盾的地方;驗(yàn)證系統(tǒng)是否滿(mǎn)足了需求規(guī)格的定義,找出與需求規(guī)格不相符或有矛盾的地方,從而提出更加完善的方案,確保最終軟件系統(tǒng)滿(mǎn)足產(chǎn)品需求并且遵循系統(tǒng)設(shè)計(jì)的標(biāo)準(zhǔn)和規(guī)定。

在驗(yàn)收測(cè)試階段,按照需求,檢驗(yàn)該產(chǎn)品是否能夠滿(mǎn)足使用要求,有沒(méi)有達(dá)到原設(shè)計(jì)水平,完成的功能怎樣,是否符合用戶(hù)的需求,以達(dá)到預(yù)期目的為主。

1)代碼檢查

代碼檢查是靜態(tài)測(cè)試的主要方法,它包括代碼桌面檢查、走查、代碼審查等。下面對(duì)代碼檢查進(jìn)行詳細(xì)講述。

(1)概述。代碼檢查主要檢查代碼和流程圖設(shè)計(jì)的一致性,代碼結(jié)構(gòu)的合理性,代碼編寫(xiě)的標(biāo)準(zhǔn)性、可讀性,代碼的邏輯表達(dá)的正確性等方面。它包括變量檢查、命名和類(lèi)型審查、程序邏輯審查、程序語(yǔ)法檢查和程序結(jié)構(gòu)檢查等內(nèi)容。

(2)代碼檢查的目的有以下幾點(diǎn):

檢查程序是不是按照某種標(biāo)準(zhǔn)或規(guī)范編寫(xiě)的。

發(fā)現(xiàn)程序缺陷。

發(fā)現(xiàn)程序產(chǎn)生的錯(cuò)誤。

檢查代碼是不是流程圖要求的。

檢查有沒(méi)有遺漏的項(xiàng)目。

使代碼易于移植,因?yàn)榇a經(jīng)常需要在不同的硬件中運(yùn)行,或者使用不同的編譯器編譯。

使代碼易于閱讀、理解和維護(hù)。

(3)代碼檢查需要的文檔。在進(jìn)行代碼檢查前應(yīng)準(zhǔn)備好需求文檔、程序設(shè)計(jì)文檔、程序的源代碼清單、代碼編碼標(biāo)準(zhǔn)、代碼缺陷檢查表和流程圖等。

(4)代碼檢查的方式。代碼檢查的方式有以下三種:

①桌面檢查。桌面檢查是程序員對(duì)源程序代碼進(jìn)行分析、檢驗(yàn),并補(bǔ)充相關(guān)的文檔,發(fā)現(xiàn)程序中的錯(cuò)誤的過(guò)程。由于程序員熟悉自己的程序,可以由程序員自己檢查,這樣可以節(jié)省很多時(shí)間,但要注意避免自己的主觀(guān)判斷。

②走查。走查是程序員和測(cè)試員組成的審查小組通過(guò)邏輯運(yùn)行程序來(lái)發(fā)現(xiàn)問(wèn)題的過(guò)程。小組成員要提前閱讀設(shè)計(jì)規(guī)格書(shū)、程序文本等相關(guān)文檔,輸入測(cè)試用例,使程序運(yùn)行。

走查可分為以下兩個(gè)步驟:

小組負(fù)責(zé)人把材料發(fā)給每個(gè)組員,然后由小組成員提出發(fā)現(xiàn)的問(wèn)題。

通過(guò)記錄,小組成員對(duì)程序邏輯及功能提出自己的疑問(wèn),開(kāi)會(huì)探討發(fā)現(xiàn)的問(wèn)題和解決方法。

③代碼審查。代碼審查是程序員和測(cè)試員組成的審查小組通過(guò)閱讀、討論、分析技術(shù)對(duì)程序進(jìn)行靜態(tài)分析的過(guò)程。

代碼審查可分為以下兩個(gè)步驟:

小組負(fù)責(zé)人把程序文本、規(guī)范、相關(guān)要求、流程圖及設(shè)計(jì)說(shuō)明書(shū)發(fā)給每個(gè)成員。

每個(gè)成員將所發(fā)材料作為審查依據(jù),在由程序員講解程序的結(jié)構(gòu)、邏輯和源程序的過(guò)程中,小組成員可以提出自己的疑問(wèn),程序員也能發(fā)現(xiàn)自己原來(lái)沒(méi)有注意到的問(wèn)題。

為了提高效率,小組在審查會(huì)議前可以準(zhǔn)備一份常見(jiàn)錯(cuò)誤清單,以備參加成員對(duì)照檢查。在實(shí)際應(yīng)用中,代碼審查能快速找到20%~30%

的編碼缺陷和邏輯設(shè)計(jì)缺陷。代碼審查看到的是問(wèn)題本身而非問(wèn)題的征兆,需要耗費(fèi)一些時(shí)間,而且需要知識(shí)和經(jīng)驗(yàn)的積累。

(5)代碼檢查項(xiàng)目。

①目錄文件組織。目錄文件組織要遵循以下原則:

所有的文件名稱(chēng)簡(jiǎn)單明了,見(jiàn)名知意。

文件和模塊分組清晰。

每行代碼在80個(gè)字符以?xún)?nèi)。

每個(gè)文件只包含一個(gè)完整模塊的代碼。

②檢查函數(shù)。檢查函數(shù)要遵循以下原則:

函數(shù)頭清晰地描述了函數(shù)的功能。

函數(shù)的名字清晰地定義了它所要做的事情。

各個(gè)參數(shù)的定義和排序遵循特定的順序。

所有的參數(shù)都是有用的。

函數(shù)參數(shù)接口關(guān)系清晰明了。

函數(shù)所使用的算法都有說(shuō)明。

③數(shù)據(jù)類(lèi)型及變量。數(shù)據(jù)類(lèi)型及變量要遵循以下原則:

每個(gè)數(shù)據(jù)類(lèi)型都有其解釋。

每個(gè)數(shù)據(jù)類(lèi)型都有正確的取值。

數(shù)據(jù)結(jié)構(gòu)盡量簡(jiǎn)單,降低復(fù)雜度。

每一個(gè)變量的命名都明確地表示了其代表的意義。

全部變量的描述要清晰。④檢查條件判斷語(yǔ)句。檢查條件判斷語(yǔ)句要遵循以下原則:

條件檢查和代碼在程序中都有清晰表述。

if/else的使用正確。

數(shù)字、字符和指針判斷明確。

最常見(jiàn)的情況優(yōu)先判斷。

⑤檢查循環(huán)體制。檢查循環(huán)體制要遵循以下原則:

任何循環(huán)不得為空。

循環(huán)體制清晰易懂。

當(dāng)有明確的多次循環(huán)操作時(shí)使用for循環(huán)。

循環(huán)命名要有意義。

循環(huán)終止條件清晰。

⑥檢查代碼注釋。檢查代碼注釋時(shí)要遵循以下原則:

有一個(gè)簡(jiǎn)單的關(guān)于代碼結(jié)構(gòu)的說(shuō)明。

每個(gè)文件和模塊都要有相應(yīng)的解釋。

源代碼能夠自我解釋?zhuān)⑶乙锥?/p>

每個(gè)代碼的解釋說(shuō)明要明確地表達(dá)出代碼的意義。

所有注釋要具體、清晰。

所有無(wú)用的代碼及注釋要?jiǎng)h除。⑦桌面檢查。進(jìn)行桌面檢查時(shí)要注意以下問(wèn)題:

檢查代碼和設(shè)計(jì)的一致性。

代碼對(duì)標(biāo)準(zhǔn)的遵循、可讀性。

代碼邏輯表達(dá)的正確性。

代碼結(jié)構(gòu)的合理性。

程序編寫(xiě)與編寫(xiě)標(biāo)準(zhǔn)的符合性。

程序中不安全、不明確和模糊的部分。

編程風(fēng)格問(wèn)題等。⑧其他檢查。其他檢查包括如下內(nèi)容:

軟件的擴(kuò)展字符、編碼、兼容性、警告/提示信息。

檢查變量的交叉引用表。檢查未說(shuō)明的變量和違反了類(lèi)型規(guī)定的變量,以及變量的引用和使用情況。

檢查標(biāo)號(hào)的交叉引用表,驗(yàn)證所有標(biāo)號(hào)的正確性。

檢查子程序、宏、函數(shù),驗(yàn)證每次調(diào)用與所調(diào)用的位置是否正確,調(diào)用的子程序、宏、函數(shù)是否存在,參數(shù)是否一致。

等價(jià)性檢查。檢查全部等價(jià)變量類(lèi)型的一致性。

常量檢查。確認(rèn)常量的取值和數(shù)制、數(shù)據(jù)類(lèi)型。

標(biāo)準(zhǔn)檢查。檢查程序中是否有違反標(biāo)準(zhǔn)的問(wèn)題。

風(fēng)格檢查。檢查程序的設(shè)計(jì)風(fēng)格。

比較控制流。比較設(shè)計(jì)控制流圖和實(shí)際程序生成的控制流圖的差異。

選擇、激活路徑。在設(shè)計(jì)控制流圖中選擇某條路徑,然后在實(shí)際的程序中激活這條路徑,如果不能激活,則程序可能有錯(cuò)。

補(bǔ)充文檔。根據(jù)以上檢查項(xiàng)目,可以編制代碼規(guī)則、規(guī)范和檢查表等作為測(cè)試用例。

對(duì)照程序的規(guī)格說(shuō)明,詳細(xì)閱讀源代碼,將其與實(shí)際的代碼進(jìn)行比較,從差異中發(fā)現(xiàn)程序的問(wèn)題和錯(cuò)誤。

檢查必須遵守規(guī)定代碼的語(yǔ)法格式和規(guī)則(如排版、注釋、標(biāo)識(shí)符命名、可讀性、變量、函數(shù)、過(guò)程、可測(cè)性、程序效率、質(zhì)量保證、代碼編輯、編譯、審查、代碼測(cè)試、維護(hù)、宏)等各方面的編碼要求。

在進(jìn)行人工代碼檢查時(shí),可以制作代碼走查缺陷表。在缺陷檢查表中,列出工作中遇到的典型錯(cuò)誤,主要包括:

格式部分:

·嵌套的if語(yǔ)句是否正確地縮進(jìn)。

·注釋是否準(zhǔn)確并有意義。

·使用的符號(hào)是否有意義。

·代碼是否與開(kāi)始時(shí)的模塊模式一致。

·是否遵循了全套的編程標(biāo)準(zhǔn)。

入口和出口的連接:

·初始入口和最終出口是否正確。

·被傳送的參數(shù)值是否被正確地設(shè)置了。

·對(duì)關(guān)鍵的被調(diào)用的模塊的意外情況是否有所處理(例如丟失、混亂)。

·對(duì)另一個(gè)模塊的每一次調(diào)用,所需的全部參數(shù)是否傳送給了被調(diào)用的模塊。

存儲(chǔ)器問(wèn)題:

·每一個(gè)域在第一次使用前是否正確地初始化。

·規(guī)定的域是否正確。

·每個(gè)域是否有正確的變量類(lèi)型聲明。

判斷及轉(zhuǎn)移:

·用于判斷的是否是正確的變量。

·是否判斷了正確的條件。

·每個(gè)轉(zhuǎn)移目標(biāo)是否至少被正確地執(zhí)行了一次。

性能:性能是否最佳。

可維護(hù)性:

·清單格式是否適用于提高可讀性。

·各個(gè)程序塊之間是否符合代碼的邏輯意義。

邏輯:

·全部設(shè)計(jì)是否已經(jīng)實(shí)現(xiàn)。

·代碼所做的是否是設(shè)計(jì)規(guī)定的內(nèi)容。

可靠性:從外部接口采集的數(shù)據(jù)是否被確認(rèn)過(guò)。

內(nèi)存設(shè)計(jì):

·數(shù)組或指針的下標(biāo)是否越界。

·是否修改了指向常量的指針的內(nèi)容。

·是否有效地處理了內(nèi)存耗盡的問(wèn)題。

·

是否出現(xiàn)了不規(guī)范指針(指針變量沒(méi)有被初始化,

用free或者delete釋放了內(nèi)存之后,忘記將指針設(shè)置為NULL)。

·是否忘記為數(shù)組和動(dòng)態(tài)內(nèi)存賦初值。

·用malloc或者new申請(qǐng)內(nèi)存之后,是否立即檢查指針值是否為NULL。

關(guān)于類(lèi)的高級(jí)特性:是否違背了繼承和組合的規(guī)則。

2)靜態(tài)結(jié)構(gòu)分析

靜態(tài)結(jié)構(gòu)分析主要是以圖形的方式表現(xiàn)程序的內(nèi)部結(jié)構(gòu),例如函數(shù)調(diào)用關(guān)系圖、函數(shù)內(nèi)部控制流圖。

靜態(tài)結(jié)構(gòu)分析是指測(cè)試者通過(guò)使用測(cè)試工具分析程序源代碼的系統(tǒng)結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)接口、內(nèi)部控制邏輯等內(nèi)部結(jié)構(gòu),生成函數(shù)調(diào)用關(guān)系圖、模塊控制流圖、內(nèi)部文件調(diào)用關(guān)系圖等各種圖形圖表,清晰地標(biāo)識(shí)整個(gè)軟件的組成結(jié)構(gòu)以便于理解,并通過(guò)分析這些圖表(包括控制流分析、數(shù)據(jù)流分析、接口分析、表達(dá)式分析)檢查軟件是否存在缺陷或錯(cuò)誤的過(guò)程。應(yīng)用程序各函數(shù)之間的調(diào)用關(guān)系展示了系統(tǒng)的結(jié)構(gòu),這可以通過(guò)列出所有函數(shù),用連線(xiàn)表示各函數(shù)之間的調(diào)用關(guān)系和作用來(lái)實(shí)現(xiàn)。

靜態(tài)結(jié)構(gòu)主要分析以下內(nèi)容:

檢查函數(shù)的調(diào)用關(guān)系是否正確。

是否存在孤立的函數(shù)沒(méi)有被調(diào)用。

明確函數(shù)被調(diào)用的頻繁度,對(duì)調(diào)用頻繁的函數(shù)可以重點(diǎn)檢查。

3)

SQL語(yǔ)句測(cè)試

SQL語(yǔ)句測(cè)試分為語(yǔ)句檢查和類(lèi)型轉(zhuǎn)換檢查,下面分別介紹。

(1)語(yǔ)句檢查。語(yǔ)句檢查必須檢查的10點(diǎn)內(nèi)容如下:

每個(gè)數(shù)據(jù)庫(kù)對(duì)象都有擁有者。

Table:Database的基本單位,由行和列組成,用于存儲(chǔ)數(shù)據(jù)。

DataType:限制輸入到表中的數(shù)據(jù)類(lèi)型。

Constraint:有主鍵、外鍵、唯一鍵、缺省和檢查五種。

Default:自動(dòng)插入常量值。

Rule:限制表中列的取值范圍。

Trigger:一種特殊類(lèi)型的存儲(chǔ)過(guò)程,當(dāng)有操作影響到它所保護(hù)的數(shù)據(jù)時(shí),它會(huì)自動(dòng)觸發(fā)執(zhí)行。

Index:提高查詢(xún)速度。

View:查看一個(gè)或多個(gè)表的一種方式。

StoredProcedure:一組預(yù)編譯的SQL語(yǔ)句,可以完成指定的操作。

(2)類(lèi)型轉(zhuǎn)換檢查。檢查SQL語(yǔ)句的類(lèi)型轉(zhuǎn)換時(shí),主要是避免顯式或隱含的類(lèi)型轉(zhuǎn)換。

4)代碼檢查的分析與評(píng)價(jià)

代碼檢查的分析與評(píng)價(jià)主要注意的問(wèn)題是:

(1)功能。陳述經(jīng)代碼檢查證實(shí)了的本軟件的功能。

(2)缺陷和限制。陳述經(jīng)代碼檢查測(cè)試證實(shí)了的軟件缺陷和限制,說(shuō)明每項(xiàng)缺陷和限制對(duì)軟件性能的影響,并說(shuō)明全部測(cè)得的性能缺陷的累積影響。軟件的缺陷和限制如下:

數(shù)據(jù)引用錯(cuò)誤:因引用未經(jīng)正確聲明和初始化的變量、常量、數(shù)組、字符串或記錄而導(dǎo)致的軟件缺陷。

注意:數(shù)據(jù)引用錯(cuò)誤是緩沖區(qū)溢出的主要原因,是一個(gè)造成許多軟件安全問(wèn)題的缺陷。

數(shù)據(jù)聲明錯(cuò)誤:其產(chǎn)生的原因是不正確地聲明或使用變量和常量。

計(jì)算錯(cuò)誤。

比較錯(cuò)誤:比較和判斷錯(cuò)誤很可能是由邊界條件問(wèn)題而引起的,所以要特別注意這些地方。一般要檢查的運(yùn)算符包括

<

(小于)、>

(大于)、=

(等于)、!=

(不等于)、1(真)、0(假)。

控制流程錯(cuò)誤:其產(chǎn)生的原因是編程語(yǔ)言中循環(huán)等控制結(jié)構(gòu)未按預(yù)期方式工作,它們通常由計(jì)算錯(cuò)誤或者比較錯(cuò)誤直接或間接造成。

子程序參數(shù)錯(cuò)誤:其產(chǎn)生的原因是軟件子程序不正確地傳遞數(shù)據(jù)。

輸入/輸出錯(cuò)誤:包括文件讀取、接收鍵盤(pán)或者鼠標(biāo)輸入以及向打印機(jī)或者屏幕等輸出設(shè)備寫(xiě)入錯(cuò)誤。

其他錯(cuò)誤:包括編碼錯(cuò)誤以及警告/提示信息錯(cuò)誤。

通過(guò)對(duì)代碼檢查結(jié)果的分析,需標(biāo)明遺留缺陷、局限性和軟件的約束限制等,說(shuō)明該代碼是否已達(dá)到預(yù)定的結(jié)果,判定代碼能否交付使用。審查小組必須做出審查結(jié)果的書(shū)面總結(jié)報(bào)告,以方便開(kāi)發(fā)小組的成員使用。5.4.2邏輯覆蓋測(cè)試

1.測(cè)試覆蓋率

測(cè)試覆蓋率用于確定測(cè)試所執(zhí)行到的覆蓋項(xiàng)的百分比。其中的覆蓋項(xiàng)是指作為測(cè)試基礎(chǔ)的一個(gè)入口或?qū)傩?,比如語(yǔ)句、分支、條件等。

測(cè)試覆蓋率可以表示出測(cè)試的充分性,在測(cè)試分析報(bào)告中可以作為量化指標(biāo)的依據(jù)。測(cè)試覆蓋率越高,效果越好。但提高覆蓋率不是目標(biāo),而是一種手段。測(cè)試覆蓋率包括功能點(diǎn)覆蓋率和結(jié)構(gòu)覆蓋率。功能點(diǎn)覆蓋率主要用于表示軟件已經(jīng)實(shí)現(xiàn)的功能與軟件需要實(shí)現(xiàn)的功能之間的比例關(guān)系。結(jié)構(gòu)覆蓋率包括語(yǔ)句覆蓋率、分支覆蓋率、循環(huán)覆蓋率、路徑覆蓋率等。

2.邏輯覆蓋

根據(jù)覆蓋目標(biāo)的不同和覆蓋源程序語(yǔ)句的詳盡程度,邏輯覆蓋又可分為語(yǔ)句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、組合覆蓋和路徑覆蓋。

圖5-3示例程序流程圖

1)語(yǔ)句覆蓋

語(yǔ)句覆蓋是指選擇足夠多的測(cè)試數(shù)據(jù),使得程序中的每個(gè)可執(zhí)行語(yǔ)句至少被執(zhí)行一次。

(1)主要特點(diǎn)。語(yǔ)句覆蓋是最基本的結(jié)構(gòu)覆蓋要求,要求設(shè)計(jì)足夠多的測(cè)試用例,使得程序中的每條語(yǔ)句至少被執(zhí)行一次。

(2)用例設(shè)計(jì)。如果此時(shí)將A路徑上的語(yǔ)句T

=

1去掉,那么用例如表5-1所示。

表5-1語(yǔ)句覆蓋測(cè)試用例

(3)優(yōu)點(diǎn)??梢院苤庇^(guān)地從源代碼得到測(cè)試用例,無(wú)須細(xì)分每條判定表達(dá)式。

(4)缺點(diǎn)。這種測(cè)試方法僅僅針對(duì)的是程序邏輯中顯式存在的語(yǔ)句,而對(duì)于隱藏的條件和可能到達(dá)的隱式邏輯分支,是無(wú)法測(cè)試的。在本例中將語(yǔ)句T

=

1去掉,那么就少了一條測(cè)試路徑。

在if結(jié)構(gòu)中若源代碼沒(méi)有給出else后面的執(zhí)行分支,那么語(yǔ)句覆蓋測(cè)試就不會(huì)考慮這種情況。但是我們不能排除這種情況以外的分支不會(huì)被執(zhí)行,而往往這種錯(cuò)誤會(huì)經(jīng)常出現(xiàn)。再如,在Do-While結(jié)構(gòu)中,語(yǔ)句覆蓋執(zhí)行其中某一個(gè)條件分支,那么顯然,語(yǔ)句覆蓋對(duì)于多分支的邏輯運(yùn)算是無(wú)法全面反映的,因?yàn)樗魂P(guān)注語(yǔ)句是否運(yùn)行了一次的情況,而不考慮其他情況。

2)判定覆蓋

判定覆蓋通過(guò)設(shè)計(jì)足夠多的測(cè)試用例,使得程序中的每一個(gè)判定至少都獲得一次真值和假值,或者使得程序中的每一個(gè)取真的分支或取假的分支至少被執(zhí)行一次,也稱(chēng)為分支覆蓋。

(1)主要特點(diǎn)。判定覆蓋要求設(shè)計(jì)足夠多的測(cè)試用例,使得程序中每個(gè)判定至少有一次為真值,有一次為假值,即程序中的每個(gè)分支至少被執(zhí)行一次。每個(gè)判斷取真、取假至少一次。

(2)用例設(shè)計(jì)(見(jiàn)表5-2)。表5-2判定覆蓋測(cè)試用例

(3)優(yōu)點(diǎn)。判定覆蓋比語(yǔ)句覆蓋要多幾乎一倍的測(cè)試路徑,當(dāng)然也就具有比語(yǔ)句覆蓋更強(qiáng)的測(cè)試能力。同樣,判定覆蓋也具有和語(yǔ)句覆蓋一樣的簡(jiǎn)單性,無(wú)須細(xì)分每個(gè)判定就可以得到測(cè)試用例。

(4)缺點(diǎn)。大部分的判定語(yǔ)句往往是由多個(gè)邏輯條件組合而成的(例如判定語(yǔ)句中包含AND、OR、CASE),若僅僅判斷其整個(gè)最終結(jié)果,而忽略每個(gè)條件的取值情況,必然會(huì)遺漏部分測(cè)試路徑。

3)條件覆蓋

條件覆蓋是通過(guò)設(shè)計(jì)足夠多的測(cè)試用例,使得程序中每個(gè)判定包含的每個(gè)條件的可能取值(真/假)都至少滿(mǎn)足一次。

(1)主要特點(diǎn)。條件覆蓋要求設(shè)計(jì)足夠多的測(cè)試用例,使得判定中的每個(gè)條件獲得各種可能的結(jié)果,即每個(gè)條件至少有一次為真值,有一次為假值。

(2)用例設(shè)計(jì)(見(jiàn)表5-3)。表5-3條件覆蓋測(cè)試用例

(3)優(yōu)點(diǎn)。顯然條件覆蓋相比判定覆蓋增加了對(duì)符合判定條件的情況的測(cè)試,增加了測(cè)試路徑。

(4)缺點(diǎn)。要達(dá)到條件覆蓋,需要足夠多的測(cè)試用例,但條件覆蓋并不能保證判定覆蓋。條件覆蓋只能保證每個(gè)條件至少有一次為真,而不考慮所有的判定結(jié)果。

4)判定/條件覆蓋

判定/條件覆蓋通過(guò)設(shè)計(jì)足夠多的測(cè)試用例,使得程序中每個(gè)判定包含的每個(gè)條件的所有情況(真/假)至少出現(xiàn)一次,并且每個(gè)判定本身的判定結(jié)果(真/假)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論