




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
項目五DoWork()函數(shù)的測試5.1問題情境5.2問題分析5.3任務(wù)設(shè)計與實施5.4知識總結(jié)5.5應(yīng)用實踐
請設(shè)計一組測試用例,測試以下函數(shù)。
voidDoWork(inta,intb,intx)
{
intk=0,j=0;
if((a>1)&&(b==0))
{5.1問題情境
k=a*x-1;
j=sqrt(k);
} //語句塊1
if((a==2)||(x>1))
{
j=x*a+10;
} //語句塊2
j=j%3; //語句塊3
}
在這個程序中有三個輸入?yún)?shù)a、b和x,有兩個判定,每個判定有兩個條件。5.2問題分析
5.3.1用語句覆蓋測試方法對DoWork()函數(shù)完成測試
1.分析程序結(jié)構(gòu)
在這個程序中有三個輸入?yún)?shù)a、b和x,在程序中有兩個判定,每個判定有兩個條件。5.3任務(wù)設(shè)計與實施
2.設(shè)計測試用例
(1)根據(jù)語句覆蓋測試法的思想,設(shè)計如下測試用例:
a
=
1,b
=
0,x
=
3
(2)預(yù)期結(jié)果:程序每一行都被執(zhí)行,即可完成對程序的語句覆蓋測試。
3.實施測試并書寫測試報告
(1)輸入所設(shè)計的測試用例。
(2)運行并觀察程序,看是否能達到語句的全部覆蓋。5.3.2用條件覆蓋測試方法對DoWork()函數(shù)完成測試
1.分析程序結(jié)構(gòu)
在這個程序中有三個輸入?yún)?shù)a、b和x,有兩個判定,每個判定有兩個條件。
2.設(shè)計測試用例
設(shè)計的測試用例如下:
a
=
1,b
=
0,x
=
3
a
=
1,b
=
1,c
=
1
3.實施測試并書寫測試報告
(1)輸入所設(shè)計的測試用例。
(2)運行并觀察程序,看能否達到條件的全部覆蓋。5.3.3用判定覆蓋測試方法對DoWork()函數(shù)完成測試
1.分析程序結(jié)構(gòu)
在這個程序中有三個輸入?yún)?shù)a、b和x,有兩個判定,每個判定有兩個條件。
2.設(shè)計測試用例
設(shè)計的測試用例如下:
a
=
3,b
=
0,x
=
3
a
=
2,b
=
1,c
=
1
3.實施測試并書寫測試報告
(1)輸入所設(shè)計的測試用例。
(2)運行并觀察程序,看能否達到判定的全部覆蓋。5.3.4用判定/條件覆蓋測試方法對DoWork()函數(shù)完成測試
1.分析程序結(jié)構(gòu)
在這個程序中有三個輸入?yún)?shù)a、b和x,有兩個判定,每個判定有兩個條件。
2.設(shè)計測試用例
設(shè)計的測試用例如下:
a
=
2,b
=
0,x
=
3
a
=
1,b
=
1,c
=
1
3.實施測試并書寫測試報告
(1)輸入所設(shè)計的測試用例。
(2)運行并觀察程序,看能否達到判定/條件的全部覆蓋。5.3.5用組合覆蓋測試方法對DoWork()函數(shù)完成測試
1.分析程序結(jié)構(gòu)
在這個程序中有三個輸入?yún)?shù)a、b和x,有兩個判定,每個判定有兩個條件。
2.設(shè)計測試用例
設(shè)計的測試用例如下:
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.實施測試,并書寫測試報告
(1)輸入所設(shè)計的測試用例。
(2)運行并觀察程序,看能否達到組合的全部覆蓋。
白盒測試法(WhiteBoxTesting)按照程序內(nèi)部的結(jié)構(gòu)和邏輯驅(qū)動測試程序,通過測試來檢測產(chǎn)品內(nèi)部動作是否按照設(shè)計說明書的規(guī)定正常進行,檢驗程序中的每條路徑是否都能按預(yù)定要求正確工作。此方法是將白盒測試的對象看做內(nèi)部邏輯結(jié)構(gòu)完全可見的盒子,測試人員依據(jù)程序內(nèi)部邏輯結(jié)構(gòu)的相關(guān)信息來設(shè)計或選擇測試用例,對程序所有邏輯路徑進行測試,通過在不同點、不同分支檢查程序的狀態(tài),來確定實際的狀態(tài)是否與預(yù)期的狀態(tài)一致。5.4知識總結(jié)5.4.1白盒測試方法的概念
白盒測試方法的對象主要是源程序,是利用程序設(shè)計的控制結(jié)構(gòu)導(dǎo)出測試用例來進行測試的,是軟件測試的主要方法之一。
1.白盒測試方法的基本知識
1)白盒測試方法的分類
白盒測試方法分為如下兩類:
(1)靜態(tài)測試。靜態(tài)測試是測試中很重要的方法之一,它不要求在計算機上實際執(zhí)行所測程序,而主要以一些人工的模擬技術(shù)對軟件進行分析和測試。靜態(tài)測試大約可以找出25%~60%
的邏輯錯誤。
(2)動態(tài)測試。輸入一組預(yù)先按照一定的測試準則設(shè)計的實例數(shù)據(jù)驅(qū)動運行程序,檢查程序功能是否符合設(shè)計要求,發(fā)現(xiàn)程序中的錯誤,這一過程稱為動態(tài)測試。
2)白盒測試的常用技術(shù)
白盒測試的常用技術(shù)主要有以下幾種:
(1)邏輯覆蓋法。根據(jù)覆蓋目標的不同和覆蓋源程序語句的詳盡程度,邏輯覆蓋又可分為語句覆蓋、判定覆蓋、條件覆蓋、條件/判定組合覆蓋、多條件覆蓋、修改條件/判定覆蓋、組合覆蓋和路徑覆蓋。
(2)插樁技術(shù)。軟件動態(tài)測試中,插樁測試是一個被廣泛應(yīng)用的測試方法。插樁測試就是在源程序中插入語句,然后執(zhí)行程序,通過打印語句來獲得動態(tài)信息。
(3)基本路徑測試法?;韭窂綔y試法是在程序控制流圖的基礎(chǔ)上,通過分析控制構(gòu)造的環(huán)形復(fù)雜性,導(dǎo)出基本可執(zhí)行的路徑集合,從而設(shè)計測試用例的方法。設(shè)計出的測試用例要保證在測試中程序的每個執(zhí)行語句至少被執(zhí)行一次。
(4)域測試法。域測試是一種基于程序結(jié)構(gòu)的測試方法,它通過對程序輸入空間(域)的分析,選擇合適的測試點進行測試。
(5)符號測試。符號測試的基本思想是允許程序的輸入不僅僅是具體的數(shù)值數(shù)據(jù),而且還包括符號值。符號值可以是基本的符號變量值,也可以是符號變量值的表達式。
(6)
Z路徑覆蓋法。簡化循環(huán)意義下的路徑覆蓋稱為Z路徑覆蓋。簡化循環(huán)指限制循環(huán)次數(shù),只考慮循環(huán)一次或零次的情況。簡化循環(huán)的目的是限制循環(huán)的次數(shù)。Z路徑覆蓋對循環(huán)機制進行簡化,減少路徑的數(shù)量,使得覆蓋所有路徑成為可能。無論循環(huán)的形式和循環(huán)體實際執(zhí)行的次數(shù)是怎樣的,簡化后的循環(huán)測試都只考慮執(zhí)行循環(huán)體一次和零次(不執(zhí)行)兩種情況,即考慮執(zhí)行時進入循環(huán)體一次和跳過循環(huán)體這兩種情況。
(7)程序變異測試法。程序變異是一種錯誤驅(qū)動測試。錯誤驅(qū)動測試是指該方法是針對某類特定程序錯誤的。經(jīng)過多年的測試理論研究和軟件測試的實踐,人們逐漸發(fā)現(xiàn)要想找出程序中的所有錯誤幾乎是不可能的。比較現(xiàn)實的解決辦法是將錯誤的搜索范圍盡可能地縮小,以利于專門測試某類錯誤是否存在。
2.白盒測試方法的原則
白盒測試方法的原則有如下四點:
(1)保證一個模塊中的所有路徑至少被測試一次。
(2)所有邏輯值都要測試真和假兩種情況。
(3)檢查程序的內(nèi)部數(shù)據(jù)結(jié)構(gòu)是否有效。
(4)檢查上、下邊界及可操作范圍內(nèi)運行的所有循環(huán)。
3.白盒測試方法的類別、依據(jù)和流程
白盒測試方法的策略是首先進行靜態(tài)結(jié)構(gòu)分析,然后采用先靜態(tài)后動態(tài)的組合方式進行覆蓋測試,利用靜態(tài)測試的分析結(jié)果和動態(tài)測試的結(jié)果進一步確認是否已達到測試效果。白盒測試一般要考慮類別、依據(jù)和流程。
1)白盒測試的類別
白盒測試具體分為以下8大類:
軟件公用問題的測試;
語言測試;
SQL語句測試;
數(shù)據(jù)類型測試;
界面測試;
數(shù)值對象測試;
業(yè)務(wù)對象測試;
數(shù)據(jù)管理對象測試。
2)白盒測試的依據(jù)
白盒測試的依據(jù)有以下6點:
軟件需求報告;
軟件需求規(guī)格說明;
程序設(shè)計文檔;
軟件界面設(shè)計;
編碼規(guī)范;
開發(fā)命名標準。
3)白盒測試的流程
白盒測試的流程分為界面對象測試和業(yè)務(wù)對象測試兩種方式。
(1)界面對象測試的流程如圖5-1所示。
圖5-1界面對象測試的流程圖從圖5-1可以看出,界面對象測試流程的優(yōu)點是:便于測試者從界面層直觀地錄入數(shù)據(jù);界面對象測試流程的缺點是:進行回歸測試時,需要重復(fù)錄入數(shù)據(jù)。
(2)業(yè)務(wù)對象測試的流程如圖5-2所示。
圖5-2業(yè)務(wù)對象測試的流程圖業(yè)務(wù)對象測試是從底層開始,逐一向上延伸的。從圖5-2可以看出,業(yè)務(wù)對象測試的優(yōu)點是:在進行回歸測試時,不需要重復(fù)輸入數(shù)據(jù),并且程序執(zhí)行一遍就可以了;業(yè)務(wù)對象測試的缺點是:需要給中間層編寫一個測試小程序,根據(jù)程序中類的對象構(gòu)造輸入數(shù)據(jù)并將結(jié)果輸出到控制臺上。
4.靜態(tài)測試方法
在白盒測試中,可以使用各種測試方法進行測試。但是,在測試時要考慮以下5個問題:
(1)測試中盡量先用自動化工具來進行靜態(tài)結(jié)構(gòu)分析。
(2)測試中建議先從靜態(tài)測試開始,例如靜態(tài)結(jié)構(gòu)分析、代碼走查和靜態(tài)質(zhì)量度量;然后進行動態(tài)測試,例如覆蓋率測試。
(3)將靜態(tài)分析的結(jié)果作為依據(jù),再使用代碼檢查和動態(tài)測試的方式對靜態(tài)分析結(jié)果進行進一步的確認,以提高測試效率及準確性。
(4)覆蓋率測試是白盒測試中的重要手段,在測試報告中可以作為量化指標的依據(jù),對于重點模塊,應(yīng)使用多種覆蓋率標準衡量代碼的覆蓋率。
(5)在不同的測試階段,測試的側(cè)重點是不同的。
在單元測試階段,以程序語法檢查、程序邏輯檢查、代碼檢查、邏輯覆蓋為主。
在集成測試階段,需要增加靜態(tài)結(jié)構(gòu)分析、靜態(tài)質(zhì)量度量,以接口測試為主。在系統(tǒng)測試階段,在真實系統(tǒng)工作環(huán)境下通過與系統(tǒng)的需求定義作比較,檢驗完整的軟件配置項能否和系統(tǒng)正確連接,發(fā)現(xiàn)軟件與系統(tǒng)/子系統(tǒng)設(shè)計文檔和軟件開發(fā)合同規(guī)定不符合或有矛盾的地方;驗證系統(tǒng)是否滿足了需求規(guī)格的定義,找出與需求規(guī)格不相符或有矛盾的地方,從而提出更加完善的方案,確保最終軟件系統(tǒng)滿足產(chǎn)品需求并且遵循系統(tǒng)設(shè)計的標準和規(guī)定。
在驗收測試階段,按照需求,檢驗該產(chǎn)品是否能夠滿足使用要求,有沒有達到原設(shè)計水平,完成的功能怎樣,是否符合用戶的需求,以達到預(yù)期目的為主。
1)代碼檢查
代碼檢查是靜態(tài)測試的主要方法,它包括代碼桌面檢查、走查、代碼審查等。下面對代碼檢查進行詳細講述。
(1)概述。代碼檢查主要檢查代碼和流程圖設(shè)計的一致性,代碼結(jié)構(gòu)的合理性,代碼編寫的標準性、可讀性,代碼的邏輯表達的正確性等方面。它包括變量檢查、命名和類型審查、程序邏輯審查、程序語法檢查和程序結(jié)構(gòu)檢查等內(nèi)容。
(2)代碼檢查的目的有以下幾點:
檢查程序是不是按照某種標準或規(guī)范編寫的。
發(fā)現(xiàn)程序缺陷。
發(fā)現(xiàn)程序產(chǎn)生的錯誤。
檢查代碼是不是流程圖要求的。
檢查有沒有遺漏的項目。
使代碼易于移植,因為代碼經(jīng)常需要在不同的硬件中運行,或者使用不同的編譯器編譯。
使代碼易于閱讀、理解和維護。
(3)代碼檢查需要的文檔。在進行代碼檢查前應(yīng)準備好需求文檔、程序設(shè)計文檔、程序的源代碼清單、代碼編碼標準、代碼缺陷檢查表和流程圖等。
(4)代碼檢查的方式。代碼檢查的方式有以下三種:
①桌面檢查。桌面檢查是程序員對源程序代碼進行分析、檢驗,并補充相關(guān)的文檔,發(fā)現(xiàn)程序中的錯誤的過程。由于程序員熟悉自己的程序,可以由程序員自己檢查,這樣可以節(jié)省很多時間,但要注意避免自己的主觀判斷。
②走查。走查是程序員和測試員組成的審查小組通過邏輯運行程序來發(fā)現(xiàn)問題的過程。小組成員要提前閱讀設(shè)計規(guī)格書、程序文本等相關(guān)文檔,輸入測試用例,使程序運行。
走查可分為以下兩個步驟:
小組負責(zé)人把材料發(fā)給每個組員,然后由小組成員提出發(fā)現(xiàn)的問題。
通過記錄,小組成員對程序邏輯及功能提出自己的疑問,開會探討發(fā)現(xiàn)的問題和解決方法。
③代碼審查。代碼審查是程序員和測試員組成的審查小組通過閱讀、討論、分析技術(shù)對程序進行靜態(tài)分析的過程。
代碼審查可分為以下兩個步驟:
小組負責(zé)人把程序文本、規(guī)范、相關(guān)要求、流程圖及設(shè)計說明書發(fā)給每個成員。
每個成員將所發(fā)材料作為審查依據(jù),在由程序員講解程序的結(jié)構(gòu)、邏輯和源程序的過程中,小組成員可以提出自己的疑問,程序員也能發(fā)現(xiàn)自己原來沒有注意到的問題。
為了提高效率,小組在審查會議前可以準備一份常見錯誤清單,以備參加成員對照檢查。在實際應(yīng)用中,代碼審查能快速找到20%~30%
的編碼缺陷和邏輯設(shè)計缺陷。代碼審查看到的是問題本身而非問題的征兆,需要耗費一些時間,而且需要知識和經(jīng)驗的積累。
(5)代碼檢查項目。
①目錄文件組織。目錄文件組織要遵循以下原則:
所有的文件名稱簡單明了,見名知意。
文件和模塊分組清晰。
每行代碼在80個字符以內(nèi)。
每個文件只包含一個完整模塊的代碼。
②檢查函數(shù)。檢查函數(shù)要遵循以下原則:
函數(shù)頭清晰地描述了函數(shù)的功能。
函數(shù)的名字清晰地定義了它所要做的事情。
各個參數(shù)的定義和排序遵循特定的順序。
所有的參數(shù)都是有用的。
函數(shù)參數(shù)接口關(guān)系清晰明了。
函數(shù)所使用的算法都有說明。
③數(shù)據(jù)類型及變量。數(shù)據(jù)類型及變量要遵循以下原則:
每個數(shù)據(jù)類型都有其解釋。
每個數(shù)據(jù)類型都有正確的取值。
數(shù)據(jù)結(jié)構(gòu)盡量簡單,降低復(fù)雜度。
每一個變量的命名都明確地表示了其代表的意義。
全部變量的描述要清晰。④檢查條件判斷語句。檢查條件判斷語句要遵循以下原則:
條件檢查和代碼在程序中都有清晰表述。
if/else的使用正確。
數(shù)字、字符和指針判斷明確。
最常見的情況優(yōu)先判斷。
⑤檢查循環(huán)體制。檢查循環(huán)體制要遵循以下原則:
任何循環(huán)不得為空。
循環(huán)體制清晰易懂。
當(dāng)有明確的多次循環(huán)操作時使用for循環(huán)。
循環(huán)命名要有意義。
循環(huán)終止條件清晰。
⑥檢查代碼注釋。檢查代碼注釋時要遵循以下原則:
有一個簡單的關(guān)于代碼結(jié)構(gòu)的說明。
每個文件和模塊都要有相應(yīng)的解釋。
源代碼能夠自我解釋,并且易懂。
每個代碼的解釋說明要明確地表達出代碼的意義。
所有注釋要具體、清晰。
所有無用的代碼及注釋要刪除。⑦桌面檢查。進行桌面檢查時要注意以下問題:
檢查代碼和設(shè)計的一致性。
代碼對標準的遵循、可讀性。
代碼邏輯表達的正確性。
代碼結(jié)構(gòu)的合理性。
程序編寫與編寫標準的符合性。
程序中不安全、不明確和模糊的部分。
編程風(fēng)格問題等。⑧其他檢查。其他檢查包括如下內(nèi)容:
軟件的擴展字符、編碼、兼容性、警告/提示信息。
檢查變量的交叉引用表。檢查未說明的變量和違反了類型規(guī)定的變量,以及變量的引用和使用情況。
檢查標號的交叉引用表,驗證所有標號的正確性。
檢查子程序、宏、函數(shù),驗證每次調(diào)用與所調(diào)用的位置是否正確,調(diào)用的子程序、宏、函數(shù)是否存在,參數(shù)是否一致。
等價性檢查。檢查全部等價變量類型的一致性。
常量檢查。確認常量的取值和數(shù)制、數(shù)據(jù)類型。
標準檢查。檢查程序中是否有違反標準的問題。
風(fēng)格檢查。檢查程序的設(shè)計風(fēng)格。
比較控制流。比較設(shè)計控制流圖和實際程序生成的控制流圖的差異。
選擇、激活路徑。在設(shè)計控制流圖中選擇某條路徑,然后在實際的程序中激活這條路徑,如果不能激活,則程序可能有錯。
補充文檔。根據(jù)以上檢查項目,可以編制代碼規(guī)則、規(guī)范和檢查表等作為測試用例。
對照程序的規(guī)格說明,詳細閱讀源代碼,將其與實際的代碼進行比較,從差異中發(fā)現(xiàn)程序的問題和錯誤。
檢查必須遵守規(guī)定代碼的語法格式和規(guī)則(如排版、注釋、標識符命名、可讀性、變量、函數(shù)、過程、可測性、程序效率、質(zhì)量保證、代碼編輯、編譯、審查、代碼測試、維護、宏)等各方面的編碼要求。
在進行人工代碼檢查時,可以制作代碼走查缺陷表。在缺陷檢查表中,列出工作中遇到的典型錯誤,主要包括:
格式部分:
·嵌套的if語句是否正確地縮進。
·注釋是否準確并有意義。
·使用的符號是否有意義。
·代碼是否與開始時的模塊模式一致。
·是否遵循了全套的編程標準。
入口和出口的連接:
·初始入口和最終出口是否正確。
·被傳送的參數(shù)值是否被正確地設(shè)置了。
·對關(guān)鍵的被調(diào)用的模塊的意外情況是否有所處理(例如丟失、混亂)。
·對另一個模塊的每一次調(diào)用,所需的全部參數(shù)是否傳送給了被調(diào)用的模塊。
存儲器問題:
·每一個域在第一次使用前是否正確地初始化。
·規(guī)定的域是否正確。
·每個域是否有正確的變量類型聲明。
判斷及轉(zhuǎn)移:
·用于判斷的是否是正確的變量。
·是否判斷了正確的條件。
·每個轉(zhuǎn)移目標是否至少被正確地執(zhí)行了一次。
性能:性能是否最佳。
可維護性:
·清單格式是否適用于提高可讀性。
·各個程序塊之間是否符合代碼的邏輯意義。
邏輯:
·全部設(shè)計是否已經(jīng)實現(xiàn)。
·代碼所做的是否是設(shè)計規(guī)定的內(nèi)容。
可靠性:從外部接口采集的數(shù)據(jù)是否被確認過。
內(nèi)存設(shè)計:
·數(shù)組或指針的下標是否越界。
·是否修改了指向常量的指針的內(nèi)容。
·是否有效地處理了內(nèi)存耗盡的問題。
·
是否出現(xiàn)了不規(guī)范指針(指針變量沒有被初始化,
用free或者delete釋放了內(nèi)存之后,忘記將指針設(shè)置為NULL)。
·是否忘記為數(shù)組和動態(tài)內(nèi)存賦初值。
·用malloc或者new申請內(nèi)存之后,是否立即檢查指針值是否為NULL。
關(guān)于類的高級特性:是否違背了繼承和組合的規(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)分析是指測試者通過使用測試工具分析程序源代碼的系統(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)系圖等各種圖形圖表,清晰地標識整個軟件的組成結(jié)構(gòu)以便于理解,并通過分析這些圖表(包括控制流分析、數(shù)據(jù)流分析、接口分析、表達式分析)檢查軟件是否存在缺陷或錯誤的過程。應(yīng)用程序各函數(shù)之間的調(diào)用關(guān)系展示了系統(tǒng)的結(jié)構(gòu),這可以通過列出所有函數(shù),用連線表示各函數(shù)之間的調(diào)用關(guān)系和作用來實現(xiàn)。
靜態(tài)結(jié)構(gòu)主要分析以下內(nèi)容:
檢查函數(shù)的調(diào)用關(guān)系是否正確。
是否存在孤立的函數(shù)沒有被調(diào)用。
明確函數(shù)被調(diào)用的頻繁度,對調(diào)用頻繁的函數(shù)可以重點檢查。
3)
SQL語句測試
SQL語句測試分為語句檢查和類型轉(zhuǎn)換檢查,下面分別介紹。
(1)語句檢查。語句檢查必須檢查的10點內(nèi)容如下:
每個數(shù)據(jù)庫對象都有擁有者。
Table:Database的基本單位,由行和列組成,用于存儲數(shù)據(jù)。
DataType:限制輸入到表中的數(shù)據(jù)類型。
Constraint:有主鍵、外鍵、唯一鍵、缺省和檢查五種。
Default:自動插入常量值。
Rule:限制表中列的取值范圍。
Trigger:一種特殊類型的存儲過程,當(dāng)有操作影響到它所保護的數(shù)據(jù)時,它會自動觸發(fā)執(zhí)行。
Index:提高查詢速度。
View:查看一個或多個表的一種方式。
StoredProcedure:一組預(yù)編譯的SQL語句,可以完成指定的操作。
(2)類型轉(zhuǎn)換檢查。檢查SQL語句的類型轉(zhuǎn)換時,主要是避免顯式或隱含的類型轉(zhuǎn)換。
4)代碼檢查的分析與評價
代碼檢查的分析與評價主要注意的問題是:
(1)功能。陳述經(jīng)代碼檢查證實了的本軟件的功能。
(2)缺陷和限制。陳述經(jīng)代碼檢查測試證實了的軟件缺陷和限制,說明每項缺陷和限制對軟件性能的影響,并說明全部測得的性能缺陷的累積影響。軟件的缺陷和限制如下:
數(shù)據(jù)引用錯誤:因引用未經(jīng)正確聲明和初始化的變量、常量、數(shù)組、字符串或記錄而導(dǎo)致的軟件缺陷。
注意:數(shù)據(jù)引用錯誤是緩沖區(qū)溢出的主要原因,是一個造成許多軟件安全問題的缺陷。
數(shù)據(jù)聲明錯誤:其產(chǎn)生的原因是不正確地聲明或使用變量和常量。
計算錯誤。
比較錯誤:比較和判斷錯誤很可能是由邊界條件問題而引起的,所以要特別注意這些地方。一般要檢查的運算符包括
<
(小于)、>
(大于)、=
(等于)、!=
(不等于)、1(真)、0(假)。
控制流程錯誤:其產(chǎn)生的原因是編程語言中循環(huán)等控制結(jié)構(gòu)未按預(yù)期方式工作,它們通常由計算錯誤或者比較錯誤直接或間接造成。
子程序參數(shù)錯誤:其產(chǎn)生的原因是軟件子程序不正確地傳遞數(shù)據(jù)。
輸入/輸出錯誤:包括文件讀取、接收鍵盤或者鼠標輸入以及向打印機或者屏幕等輸出設(shè)備寫入錯誤。
其他錯誤:包括編碼錯誤以及警告/提示信息錯誤。
通過對代碼檢查結(jié)果的分析,需標明遺留缺陷、局限性和軟件的約束限制等,說明該代碼是否已達到預(yù)定的結(jié)果,判定代碼能否交付使用。審查小組必須做出審查結(jié)果的書面總結(jié)報告,以方便開發(fā)小組的成員使用。5.4.2邏輯覆蓋測試
1.測試覆蓋率
測試覆蓋率用于確定測試所執(zhí)行到的覆蓋項的百分比。其中的覆蓋項是指作為測試基礎(chǔ)的一個入口或?qū)傩裕热缯Z句、分支、條件等。
測試覆蓋率可以表示出測試的充分性,在測試分析報告中可以作為量化指標的依據(jù)。測試覆蓋率越高,效果越好。但提高覆蓋率不是目標,而是一種手段。測試覆蓋率包括功能點覆蓋率和結(jié)構(gòu)覆蓋率。功能點覆蓋率主要用于表示軟件已經(jīng)實現(xiàn)的功能與軟件需要實現(xiàn)的功能之間的比例關(guān)系。結(jié)構(gòu)覆蓋率包括語句覆蓋率、分支覆蓋率、循環(huán)覆蓋率、路徑覆蓋率等。
2.邏輯覆蓋
根據(jù)覆蓋目標的不同和覆蓋源程序語句的詳盡程度,邏輯覆蓋又可分為語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、組合覆蓋和路徑覆蓋。
圖5-3示例程序流程圖
1)語句覆蓋
語句覆蓋是指選擇足夠多的測試數(shù)據(jù),使得程序中的每個可執(zhí)行語句至少被執(zhí)行一次。
(1)主要特點。語句覆蓋是最基本的結(jié)構(gòu)覆蓋要求,要求設(shè)計足夠多的測試用例,使得程序中的每條語句至少被執(zhí)行一次。
(2)用例設(shè)計。如果此時將A路徑上的語句T
=
1去掉,那么用例如表5-1所示。
表5-1語句覆蓋測試用例
(3)優(yōu)點??梢院苤庇^地從源代碼得到測試用例,無須細分每條判定表達式。
(4)缺點。這種測試方法僅僅針對的是程序邏輯中顯式存在的語句,而對于隱藏的條件和可能到達的隱式邏輯分支,是無法測試的。在本例中將語句T
=
1去掉,那么就少了一條測試路徑。
在if結(jié)構(gòu)中若源代碼沒有給出else后面的執(zhí)行分支,那么語句覆蓋測試就不會考慮這種情況。但是我們不能排除這種情況以外的分支不會被執(zhí)行,而往往這種錯誤會經(jīng)常出現(xiàn)。再如,在Do-While結(jié)構(gòu)中,語句覆蓋執(zhí)行其中某一個條件分支,那么顯然,語句覆蓋對于多分支的邏輯運算是無法全面反映的,因為它只關(guān)注語句是否運行了一次的情況,而不考慮其他情況。
2)判定覆蓋
判定覆蓋通過設(shè)計足夠多的測試用例,使得程序中的每一個判定至少都獲得一次真值和假值,或者使得程序中的每一個取真的分支或取假的分支至少被執(zhí)行一次,也稱為分支覆蓋。
(1)主要特點。判定覆蓋要求設(shè)計足夠多的測試用例,使得程序中每個判定至少有一次為真值,有一次為假值,即程序中的每個分支至少被執(zhí)行一次。每個判斷取真、取假至少一次。
(2)用例設(shè)計(見表5-2)。表5-2判定覆蓋測試用例
(3)優(yōu)點。判定覆蓋比語句覆蓋要多幾乎一倍的測試路徑,當(dāng)然也就具有比語句覆蓋更強的測試能力。同樣,判定覆蓋也具有和語句覆蓋一樣的簡單性,無須細分每個判定就可以得到測試用例。
(4)缺點。大部分的判定語句往往是由多個邏輯條件組合而成的(例如判定語句中包含AND、OR、CASE),若僅僅判斷其整個最終結(jié)果,而忽略每個條件的取值情況,必然會遺漏部分測試路徑。
3)條件覆蓋
條件覆蓋是通過設(shè)計足夠多的測試用例,使得程序中每個判定包含的每個條件的可能取值(真/假)都至少滿足一次。
(1)主要特點。條件覆蓋要求設(shè)計足夠多的測試用例,使得判定中的每個條件獲得各種可能的結(jié)果,即每個條件至少有一次為真值,有一次為假值。
(2)用例設(shè)計(見表5-3)。表5-3條件覆蓋測試用例
(3)優(yōu)點。顯然條件覆蓋相比判定覆蓋增加了對符合判定條件的情況的測試,增加了測試路徑。
(4)缺點。要達到條件覆蓋,需要足夠多的測試用例,但條件覆蓋并不能保證判定覆蓋。條件覆蓋只能保證每個條件至少有一次為真,而不考慮所有的判定結(jié)果。
4)判定/條件覆蓋
判定/條件覆蓋通過設(shè)計足夠多的測試用例,使得程序中每個判定包含的每個條件的所有情況(真/假)至少出現(xiàn)一次,并且每個判定本身的判定結(jié)果(真/假)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人醫(yī)院轉(zhuǎn)讓合同范本
- 印章刻制合同范本
- 道路山皮石回填施工方案
- 周口水泥仿木欄桿施工方案
- 區(qū)域銷售合同范本
- 買賣磚簡易合同范本
- 2025建筑安全員知識題庫及答案
- 南京 旅游 合同范例
- 與農(nóng)民工簽訂勞務(wù)合同范本
- 2025年天津市安全員C證(專職安全員)考試題庫
- GB/T 5916-2008產(chǎn)蛋后備雞、產(chǎn)蛋雞、肉用仔雞配合飼料
- 《中小學(xué)教育懲戒規(guī)則》(試用)試題及答案
- GB/T 30516-2014高粘高彈道路瀝青
- GB/T 23723.1-2009起重機安全使用第1部分:總則
- 安全測試工具、蹭網(wǎng)利器wifiphisher新增漢化版
- 中學(xué)教育-中學(xué)生心理健康量表參考范本
- 外科病人體液失衡-課件
- 生物氧化 Biological Oxidation課件
- 電力拖動自動控制系統(tǒng)-運動控制系統(tǒng)(第5版)習(xí)題答案
- 贛美版四年級美術(shù)下冊全冊課件匯總
- 工會專業(yè)知識考試題庫
評論
0/150
提交評論