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

下載本文檔

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

文檔簡(jiǎn)介

軟件測(cè)試

軟件測(cè)試的目的和原則

軟件測(cè)試用例設(shè)計(jì)

軟件測(cè)試策略

軟件測(cè)試種類

程序調(diào)試1軟件測(cè)試的目的和原則軟件測(cè)試的目的軟件測(cè)試的原則軟件測(cè)試的對(duì)象測(cè)試信息流測(cè)試與軟件開(kāi)發(fā)各階段的關(guān)系2軟件測(cè)試的目的基于不同的立場(chǎng),存在著兩種完全不同的測(cè)試目的。從用戶的角度出發(fā),普遍希望通過(guò)軟件測(cè)試暴露軟件中隱藏的錯(cuò)誤和缺陷,以考慮是否可接受該產(chǎn)品。從軟件開(kāi)發(fā)者的角度出發(fā),則希望測(cè)試成為表明軟件產(chǎn)品中不存在錯(cuò)誤的過(guò)程,驗(yàn)證該軟件已正確地實(shí)現(xiàn)了用戶的要求,確立人們對(duì)軟件質(zhì)量的信心。3Myers軟件測(cè)試目的(1)測(cè)試是程序的執(zhí)行過(guò)程,目的在于發(fā)現(xiàn)錯(cuò)誤;(2)一個(gè)好的測(cè)試用例在于能發(fā)現(xiàn)至今未發(fā)現(xiàn)的錯(cuò)誤;(3)一個(gè)成功的測(cè)試是發(fā)現(xiàn)了至今未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試。42.軟件測(cè)試的目的

為了發(fā)現(xiàn)錯(cuò)誤,并盡可能地為修正錯(cuò)誤提供更多的信息。為了證明軟件有錯(cuò)誤,而不是證明軟件沒(méi)有錯(cuò)誤。缺陷測(cè)試的“成敗”就在于能否發(fā)現(xiàn)錯(cuò)誤!5換言之,測(cè)試的目的是想以最少的時(shí)間和人力,系統(tǒng)地找出軟件中潛在的各種錯(cuò)誤和缺陷。如果我們成功地實(shí)施了測(cè)試,我們就能夠發(fā)現(xiàn)軟件中的錯(cuò)誤。測(cè)試的附帶收獲是,它能夠證明軟件的功能和性能與需求說(shuō)明相符合。實(shí)施測(cè)試收集到的測(cè)試結(jié)果數(shù)據(jù)為可靠性分析提供了依據(jù)。

測(cè)試不能表明軟件中不存在錯(cuò)誤,它只能說(shuō)明軟件中存在錯(cuò)誤。

63.軟件測(cè)試的認(rèn)識(shí)誤區(qū)測(cè)試是開(kāi)發(fā)后期的一個(gè)階段軟件測(cè)試技術(shù)要求不高,比編程容易多了軟件測(cè)試就是運(yùn)行一下軟件,看看結(jié)果對(duì)不對(duì)。軟件測(cè)試是測(cè)試人員的事,與開(kāi)發(fā)人員無(wú)關(guān)。軟件自動(dòng)測(cè)試效率高,將取代軟件手工測(cè)試。千萬(wàn)不要將“測(cè)試”與“調(diào)試”混為一談!7

測(cè)試(test)

調(diào)試(debug)以已知條件開(kāi)始,使用預(yù)先定義的程序,有預(yù)知的結(jié)果以不可知內(nèi)部條件開(kāi)始,結(jié)果一般不可預(yù)見(jiàn)有計(jì)劃被動(dòng)的由獨(dú)立的測(cè)試組,在不了解軟件設(shè)計(jì)的條件下完成由程序作者進(jìn)行發(fā)現(xiàn)錯(cuò)誤找出錯(cuò)誤位置,排除8軟件測(cè)試的原則1.應(yīng)當(dāng)把“盡早地和不斷地進(jìn)行軟件測(cè)試”作為軟件開(kāi)發(fā)者的座右銘。2.測(cè)試用例應(yīng)由測(cè)試輸入數(shù)據(jù)和對(duì)應(yīng)的預(yù)期輸出結(jié)果這兩部分組成。3.程序員應(yīng)避免檢查自己的程序。4.在設(shè)計(jì)測(cè)試用例時(shí),應(yīng)包括合理的輸入條件和不合理的輸入條件。95.充分注意測(cè)試中的群集現(xiàn)象。

經(jīng)驗(yàn)表明,測(cè)試后程序中殘存的錯(cuò)誤數(shù)目與該程序中已發(fā)現(xiàn)的錯(cuò)誤數(shù)目成正比。6.嚴(yán)格執(zhí)行測(cè)試計(jì)劃,排除測(cè)試的隨意性。7.應(yīng)當(dāng)對(duì)每一個(gè)測(cè)試結(jié)果做全面檢查。8.妥善保存測(cè)試計(jì)劃,測(cè)試用例,出錯(cuò)統(tǒng)計(jì)和最終分析報(bào)告,為維護(hù)提供方便。

10所有的測(cè)試都應(yīng)追溯到用戶需求;Bug的80-20原則:測(cè)試發(fā)現(xiàn)的錯(cuò)誤中80%很可能起源于20%的模塊中;窮舉測(cè)試是不可能的;程序修改后要回歸測(cè)試。應(yīng)由獨(dú)立的第三方來(lái)構(gòu)造測(cè)試。(開(kāi)發(fā)和測(cè)試隊(duì)伍分別建立)11測(cè)試的方法與分類手工測(cè)試自動(dòng)測(cè)試靜態(tài)測(cè)試動(dòng)態(tài)測(cè)試黑盒測(cè)試白盒測(cè)試單元測(cè)試集成測(cè)試系統(tǒng)測(cè)試驗(yàn)收測(cè)試12

軟件測(cè)試的對(duì)象

軟件測(cè)試并不等于程序測(cè)試。軟件測(cè)試應(yīng)貫穿于軟件定義與開(kāi)發(fā)的整個(gè)期間。需求分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)以及程序編碼等各階段所得到的文檔,包括需求規(guī)格說(shuō)明、概要設(shè)計(jì)規(guī)格說(shuō)明、詳細(xì)設(shè)計(jì)規(guī)格說(shuō)明以及源程序,都應(yīng)成為軟件測(cè)試的對(duì)象。13為把握軟件開(kāi)發(fā)各個(gè)環(huán)節(jié)的正確性,需要進(jìn)行各種確認(rèn)和驗(yàn)證工作。確認(rèn)(Validation),是一系列的活動(dòng)和過(guò)程,目的是想證實(shí)在一個(gè)給定的外部環(huán)境中軟件的邏輯正確性。

需求規(guī)格說(shuō)明確認(rèn)程序確認(rèn)(靜態(tài)確認(rèn)、動(dòng)態(tài)確認(rèn))

驗(yàn)證(Verification),試圖證明在軟件生存期各個(gè)階段,以及階段間的邏輯協(xié)調(diào)性、完備性和正確性。1415測(cè)試信息流16測(cè)試信息流軟件配置:軟件需求規(guī)格說(shuō)明、軟件設(shè)計(jì)規(guī)格說(shuō)明、源代碼等;測(cè)試配置:測(cè)試計(jì)劃、測(cè)試用例、測(cè)試程序等;測(cè)試工具:測(cè)試數(shù)據(jù)自動(dòng)生成程序、靜態(tài)分析程序、動(dòng)態(tài)分析程序、測(cè)試結(jié)果分析程序、以及驅(qū)動(dòng)測(cè)試的測(cè)試數(shù)據(jù)庫(kù)等等。17測(cè)試結(jié)果分析:比較實(shí)測(cè)結(jié)果與預(yù)期結(jié)果,評(píng)價(jià)錯(cuò)誤是否發(fā)生。排錯(cuò)(調(diào)試):對(duì)已經(jīng)發(fā)現(xiàn)的錯(cuò)誤進(jìn)行錯(cuò)誤定位和確定出錯(cuò)性質(zhì),并改正這些錯(cuò)誤,同時(shí)修改相關(guān)的文檔。修正后的文檔再測(cè)試:直到通過(guò)測(cè)試為止。18通過(guò)收集和分析測(cè)試結(jié)果數(shù)據(jù),對(duì)軟件建立可靠性模型利用可靠性分析,評(píng)價(jià)軟件質(zhì)量:

軟件的質(zhì)量和可靠性達(dá)到可以接受的程度;

所做的測(cè)試不足以發(fā)現(xiàn)嚴(yán)重的錯(cuò)誤;如果測(cè)試發(fā)現(xiàn)不了錯(cuò)誤,可以肯定,測(cè)試配置考慮得不夠細(xì)致充分,錯(cuò)誤仍然潛伏在軟件中。19測(cè)試與軟件開(kāi)發(fā)各階段的關(guān)系軟件開(kāi)發(fā)過(guò)程是一個(gè)自頂向下,逐步細(xì)化的過(guò)程軟件計(jì)劃階段定義軟件作用域軟件需求分析建立軟件信息域、功能和性能需求、約束等軟件設(shè)計(jì)把設(shè)計(jì)用某種程序設(shè)計(jì)語(yǔ)言轉(zhuǎn)換成程序代碼

20測(cè)試過(guò)程是依相反順序安排的自底向上,逐步集成的過(guò)程。返21軟件測(cè)試與開(kāi)發(fā)的階段關(guān)系需求文檔驗(yàn)收測(cè)試設(shè)計(jì)規(guī)格系統(tǒng)測(cè)試框架設(shè)計(jì)集成測(cè)試詳細(xì)設(shè)計(jì)單元測(cè)試軟件編碼程序/測(cè)試人員測(cè)試人員測(cè)試人員用戶/測(cè)試人員程序員22測(cè)試用例設(shè)計(jì)兩種常用的測(cè)試方法黑盒測(cè)試白盒測(cè)試23黑盒測(cè)試這種方法是把測(cè)試對(duì)象看做一個(gè)黑盒子,測(cè)試人員完全不考慮程序內(nèi)部的邏輯結(jié)構(gòu)和內(nèi)部特性,只依據(jù)程序的需求規(guī)格說(shuō)明書(shū),檢查程序的功能是否符合它的功能說(shuō)明。黑盒測(cè)試又叫做功能測(cè)試或數(shù)據(jù)驅(qū)動(dòng)測(cè)試。24黑盒測(cè)試需求說(shuō)明產(chǎn)生被測(cè)程序測(cè)試結(jié)果輸出比較測(cè)試用例25黑盒測(cè)試方法是在程序接口上進(jìn)行測(cè)試,主要是為了發(fā)現(xiàn)以下錯(cuò)誤:

是否有不正確或遺漏了的功能?

在接口上,輸入能否正確地接受?能否輸出正確的結(jié)果?

是否有數(shù)據(jù)結(jié)構(gòu)錯(cuò)誤或外部信息(例如數(shù)據(jù)文件)訪問(wèn)錯(cuò)誤?

性能上是否能夠滿足要求?

是否有初始化或終止性錯(cuò)誤?

26用黑盒測(cè)試發(fā)現(xiàn)程序中的錯(cuò)誤,必須在所有可能的輸入條件和輸出條件中確定測(cè)試數(shù)據(jù),來(lái)檢查程序是否都能產(chǎn)生正確的輸出。但這是不可能的。27假設(shè)一個(gè)程序P有輸入量X和Y及輸出量Z。在字長(zhǎng)為32位的計(jì)算機(jī)上運(yùn)行。若X、Y取整數(shù),按黑盒方法進(jìn)行窮舉測(cè)試:可能采用的測(cè)試數(shù)據(jù)組:

232×232

=264

如果測(cè)試一組數(shù)據(jù)需要1毫秒,一年工作365×24小時(shí),完成所有測(cè)試需5億年。28黑盒測(cè)試黑盒測(cè)試的方法:等價(jià)類測(cè)試邊界值測(cè)試基于決策表的測(cè)試錯(cuò)誤推測(cè)法29白盒測(cè)試此方法把測(cè)試對(duì)象看做一個(gè)透明的盒子,它允許測(cè)試人員利用程序內(nèi)部的邏輯結(jié)構(gòu)及有關(guān)信息,設(shè)計(jì)或選擇測(cè)試用例,對(duì)程序所有邏輯路徑進(jìn)行測(cè)試。通過(guò)在不同點(diǎn)檢查程序的狀態(tài),確定實(shí)際的狀態(tài)是否與預(yù)期的狀態(tài)一致。因此白盒測(cè)試又稱為結(jié)構(gòu)測(cè)試或邏輯驅(qū)動(dòng)測(cè)試。30軟件人員使用白盒測(cè)試方法,主要想對(duì)程序模塊進(jìn)行如下的檢查:對(duì)程序模塊的所有獨(dú)立的執(zhí)行路徑至少測(cè)試一次;對(duì)所有的邏輯判定,取“真”與取“假”的兩種情況都至少測(cè)試一次;在循環(huán)的邊界和運(yùn)行界限內(nèi)執(zhí)行循環(huán)體;測(cè)試內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性,等。31白盒測(cè)試測(cè)試用例被測(cè)程序源程序分析覆蓋情況分析執(zhí)行路徑32對(duì)一個(gè)具有多重選擇和循環(huán)嵌套的程序,不同的路徑數(shù)目可能是天文數(shù)字。給出一個(gè)小程序的流程圖,它包括了一個(gè)執(zhí)行20次的循環(huán)。包含的不同執(zhí)行路徑數(shù)達(dá)520條,對(duì)每一條路徑進(jìn)行測(cè)試需要1毫秒,假定一年工作365×24小時(shí),要想把所有路徑測(cè)試完,需3170年。3334因?yàn)椴豢赡苓M(jìn)行窮盡測(cè)試,所以軟件測(cè)試不可能發(fā)現(xiàn)程序中的所有錯(cuò)誤即:通過(guò)測(cè)試并不能證明程序是正確的我們的目的是要通過(guò)測(cè)試保證軟件的可靠性35白盒測(cè)試白盒測(cè)試方法:邏輯覆蓋基本路徑測(cè)試數(shù)據(jù)流測(cè)試36測(cè)試流程制定測(cè)試計(jì)劃設(shè)計(jì)測(cè)試用例執(zhí)行測(cè)試寫(xiě)測(cè)試報(bào)告消除軟件缺陷審批審批回歸測(cè)試完成測(cè)試完成準(zhǔn)則啟動(dòng)準(zhǔn)則37測(cè)試用例為達(dá)到最佳的測(cè)試效果或高效的揭露隱藏的錯(cuò)誤而精心設(shè)計(jì)的少量測(cè)試數(shù)據(jù),稱之為測(cè)試用例。一般而言,測(cè)試用例是為實(shí)施一次測(cè)試而向被測(cè)系統(tǒng)提供的輸入數(shù)據(jù)、操作或各種環(huán)境設(shè)置。一個(gè)測(cè)試用例就是一個(gè)文檔,描述輸入、動(dòng)作、或者時(shí)間和一個(gè)期望的結(jié)果,其目的是確定應(yīng)用程序的某個(gè)特性是否正常的工作。38測(cè)試用例設(shè)計(jì)的基本準(zhǔn)則測(cè)試用例的代表性:能夠代表并覆蓋各種合理的和不合理、合法的和非法的、邊界的和越界的、以及極限的輸入數(shù)據(jù)、操作和環(huán)境設(shè)置等;測(cè)試結(jié)果的可判定性:測(cè)試執(zhí)行結(jié)果的正確性是可判定的,每一個(gè)測(cè)試用例都應(yīng)有相應(yīng)的期望結(jié)果;測(cè)試結(jié)果的可再現(xiàn)性:對(duì)同樣的測(cè)試用例,系統(tǒng)的執(zhí)行結(jié)果應(yīng)當(dāng)是相同的。39測(cè)試用例的特征最有可能抓住錯(cuò)誤的;不是重復(fù)的、多余的;一組相似測(cè)試用例中最有效的;不要太簡(jiǎn)單,也不要太復(fù)雜。一個(gè)好的測(cè)試用例在于能發(fā)現(xiàn)至今未發(fā)現(xiàn)的錯(cuò)誤一個(gè)成功的測(cè)試在于發(fā)現(xiàn)了至今未發(fā)現(xiàn)的錯(cuò)誤40測(cè)試用例模板

編制人審定人時(shí)間軟件名稱編號(hào)/版本測(cè)試用例用例編號(hào)參考信息(參考的文檔及章節(jié)號(hào)或功能項(xiàng)):輸入說(shuō)明(列出選用的輸入項(xiàng),覆蓋正常、異常情況):輸出說(shuō)明(逐條與輸入項(xiàng)對(duì)應(yīng),列出預(yù)期輸出):環(huán)境要求(測(cè)試要求的軟、硬件、網(wǎng)絡(luò)要求):特殊規(guī)程要求:用例間的依賴關(guān)系:41邏輯覆蓋

語(yǔ)句覆蓋

判定覆蓋

條件覆蓋

判定-條件覆蓋

條件組合覆蓋

路徑覆蓋。邏輯覆蓋是以程序內(nèi)部的邏輯結(jié)構(gòu)為基礎(chǔ)的設(shè)計(jì)測(cè)試用例的技術(shù)。它屬白盒測(cè)試。42例(A>1)

and

(B=0)(A=2)

or

(X>1)X=X/AX=X+1TTFFabdce43L1(ace)={(A>1)and(B=0)}and{(A=2)or(X/A>1)}=(A>1)and(B=0)and(A=2)or(A>1)and(B=0)and(X/A>1)=(A=2)and(B=0)

or

(A>1)and(B=0)and(X/A>1)

44L2(abd)=not{(A>1)and(B=0)}

andnot{(A=2)or(X>1)}={not(A>1)ornot(B=0)}and

{not(A=2)andnot(X>1)}=

not(A>1)andnot(A=2)andnot(X>1)

or

not(B=0)and

not(A=2)andnot(X>1)45L3(abe)=not{(A>1)and(B=0)}and

{(A=2)or(X>1)}={not(A>1)ornot(B=0)}and

{(A=2)or(X>1)}=not(A>1)and(A=2)

or

not(A>1)and

(X>1)

or

not(B=0)and(A=2)

or

not(B=0)and(X>1)46L4(acd)={(A>1)and(B=0)}

andnot

{(A=2)or(X/A>1)}=(A>1)and(B=0)andnot(A=2)and

not(X/A>1)47語(yǔ)句覆蓋

語(yǔ)句覆蓋就是設(shè)計(jì)若干個(gè)測(cè)試用例,運(yùn)行被測(cè)程序,使得每一可執(zhí)行語(yǔ)句至少執(zhí)行一次。在圖例中,正好所有的可執(zhí)行語(yǔ)句都在路徑L1上,所以選擇路徑L1設(shè)計(jì)測(cè)試用例,就可以覆蓋所有的可執(zhí)行語(yǔ)句。

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

【輸入的(A,B,X),輸出的(A,B,X)】為圖例設(shè)計(jì)滿足語(yǔ)句覆蓋的測(cè)試用例是:

【(2,0,4),(2,0,3)】覆蓋ace【L1】(A=2)and(B=0)

or

(A>1)and(B=0)and(X/A>1)

49

判定覆蓋判定覆蓋就是設(shè)計(jì)若干個(gè)測(cè)試用例,運(yùn)行被測(cè)程序,使得程序中每個(gè)判斷的取真分支和取假分支至少經(jīng)歷一次。判定覆蓋又稱為分支覆蓋。對(duì)于圖例,如果選擇路徑L1和L2,就可得滿足要求的測(cè)試用例:50【(2,0,4),(2,0,3)】覆蓋ace【L1】

【(1,1,1),(1,1,1)】覆蓋abd【L2】(A=2)and(B=0)

or

(A>1)and(B=0)and(X/A>1)

not(A>1)andnot(A=2)andnot(X>1)

ornot(B=0)and

not(A=2)andnot(X>1)51如果選擇路徑L3和L4,還可得另一組可用的測(cè)試用例:

【(2,1,1),(2,1,2)】覆蓋abe【L3】

【(3,0,1),(3,1,1)】覆蓋acd【L4】

not(A>1)and(X>1)

ornot(B=0)and

(A=2)

ornot(B=0)and(X>1)(A>1)and(B=0)andnot(A=2)and

not(X/A>1)52條件覆蓋條件覆蓋就是設(shè)計(jì)若干個(gè)測(cè)試用例,運(yùn)行被測(cè)程序,使得程序中每個(gè)判斷的每個(gè)條件的可能取值至少執(zhí)行一次。在圖例中,我們事先可對(duì)所有條件的取值加以標(biāo)記。例如,對(duì)于第一個(gè)判斷:條件A>1取真為,取假為

條件B=0取真為,取假為

53對(duì)于第二個(gè)判斷:條件A=2取真為,取假為

條件X>1取真為,取假為測(cè)試用例

覆蓋分支

條件取值【(2,0,4),(2,0,3)】L1(c,e)

【(1,0,1),(1,0,1)】L2(b,d)【(2,1,1),(2,1,2)】L3(b,e)或54

測(cè)試用例

覆蓋分支

條件取值【(1,0,3),(1,0,4)】L3(b,e)【(2,1,1),(2,1,2)】L3(b,e)

判定-條件覆蓋判定-條件覆蓋就是設(shè)計(jì)足夠的測(cè)試用例,使得判斷中每個(gè)條件的所有可能取值至少執(zhí)行一次,每個(gè)判斷中的每個(gè)條件的可能取值至少執(zhí)行一次。55

測(cè)試用例

覆蓋分支

條件取值【(2,0,4),(2,0,3)】L1(c,e)【(1,1,1),(1,1,1)】L2(b,d)(A=2)and(B=0)

or

(A>1)and(B=0)and(X/A>1)

not(A>1)andnot(A=2)andnot(X>1)

ornot(B=0)and

not(A=2)andnot(X>1)56

andorA>1TB=0TX=X/ATFFA=2TFX>1FX=X+157條件組合覆蓋條件組合覆蓋就是設(shè)計(jì)足夠的測(cè)試用例,運(yùn)行被測(cè)程序,使得每個(gè)判斷的所有可能的條件取值組合至少執(zhí)行一次。記①A>1,B=0作

②A>1,B≠0作

③A≯1,B=0作

④A≯1,B≠0作58

⑤A=2,X>1作

⑥A=2,X≯1作

⑦A≠2,X>1作

⑧A≠2,X≯1作

測(cè)試用例

覆蓋條件

覆蓋組合【(2,0,4),(2,0,3)】(L1) ①,⑤【(2,1,1),(2,1,2)】(L3) ②,⑥【(1,0,3),(1,0,4)】(L3) ③,⑦【(1,1,1),(1,1,1)】(L2) ④,⑧59路徑測(cè)試路徑測(cè)試就是設(shè)計(jì)足夠的測(cè)試用例,覆蓋程序中所有可能的路徑。

測(cè)試用例

通過(guò)路徑

覆蓋條件【(2,0,4),(2,0,3)】ace(L1)

【(1,1,1),(1,1,1)】abd

(L2)

【(1,1,2),(1,1,3)】abe

(L3)

【(3,0,3),(3,0,1)】acd

(L4)

60

條件測(cè)試路徑選擇

當(dāng)程序中判定多于一個(gè)時(shí),形成的分支結(jié)構(gòu)可以分為兩類:嵌套型分支結(jié)構(gòu)和連鎖型分支結(jié)構(gòu)。對(duì)于嵌套型分支結(jié)構(gòu),若有n個(gè)判定語(yǔ)句,需要n+1個(gè)測(cè)試用例;對(duì)于連鎖型分支結(jié)構(gòu),若有n個(gè)判定語(yǔ)句,需要有2n個(gè)測(cè)試用例,覆蓋它的2n條路徑。6162循環(huán)測(cè)試路徑選擇循環(huán)分為4種不同類型:簡(jiǎn)單循環(huán)、連鎖循環(huán)、嵌套循環(huán)和非結(jié)構(gòu)循環(huán)。

(1)簡(jiǎn)單循環(huán)

①零次循環(huán):從循環(huán)入口到出口

②一次循環(huán):檢查循環(huán)初始值

③二次循環(huán):檢查多次循環(huán)

④m次循環(huán):檢查在多次循環(huán)

⑤最大次數(shù)循環(huán)、比最大次數(shù)多一次、少一次的循環(huán)。63例:求最小值k=i;for(j=i+1;j<=n;j++)

if(A[j]<A[k])k=j;

64k=i;j=i+1;j<=n?A[j]<A[k]?k=jj++fdcabe65測(cè)試用例選擇66

對(duì)最內(nèi)層循環(huán)做簡(jiǎn)單循環(huán)的全部測(cè)試。所有其它層的循環(huán)變量置為最小值;

逐步外推,對(duì)其外面一層循環(huán)進(jìn)行測(cè)試。測(cè)試時(shí)保持所有外層循環(huán)的循環(huán)變量取最小值,所有其它嵌套內(nèi)層循環(huán)的循環(huán)變量取“典型”值。。

③反復(fù)進(jìn)行,直到所有各層循環(huán)測(cè)試完畢。(2)

嵌套循環(huán)6768

對(duì)全部各層循環(huán)同時(shí)取最小循環(huán)次數(shù),或者同時(shí)取最大循環(huán)次數(shù)(3)連鎖循環(huán)

如果各個(gè)循環(huán)互相獨(dú)立,則可以用與簡(jiǎn)單循環(huán)相同的方法進(jìn)行測(cè)試。但如果幾個(gè)循環(huán)不是互相獨(dú)立的,則需要使用測(cè)試嵌套循環(huán)的辦法來(lái)處理。(4)非結(jié)構(gòu)循環(huán)

這一類循環(huán)應(yīng)該使用結(jié)構(gòu)化程序設(shè)計(jì)方法重新設(shè)計(jì)測(cè)試用例。

69基本路徑測(cè)試基本路徑測(cè)試方法把覆蓋的路徑數(shù)壓縮到一定限度內(nèi),程序中的循環(huán)體最多只執(zhí)行一次。它是在程序控制流圖的基礎(chǔ)上,分析控制構(gòu)造的環(huán)路復(fù)雜性,導(dǎo)出基本可執(zhí)行路徑集合,設(shè)計(jì)測(cè)試用例的方法。設(shè)計(jì)出的測(cè)試用例要保證在測(cè)試中,程序的每一個(gè)可執(zhí)行語(yǔ)句至少要執(zhí)行一次。

701.程序的控制流圖符號(hào)○為控制流圖的一個(gè)結(jié)點(diǎn),表示一個(gè)或多個(gè)無(wú)分支的PDL語(yǔ)句或源程序語(yǔ)句。箭頭為邊,表示控制流的方向。71在選擇或多分支結(jié)構(gòu)中,分支的匯聚處應(yīng)有一個(gè)匯聚結(jié)點(diǎn)。邊和結(jié)點(diǎn)圈定的區(qū)域叫做區(qū)域,當(dāng)對(duì)區(qū)域計(jì)數(shù)時(shí),圖形外的區(qū)域也應(yīng)記為一個(gè)區(qū)域。如果判斷中的條件表達(dá)式是由一個(gè)或多個(gè)邏輯運(yùn)算符

(OR,AND,...)

連接的復(fù)合條件表達(dá)式,則需改為一系列只有單個(gè)條件的嵌套的判斷。7273742.程序環(huán)路復(fù)雜性程序的環(huán)路復(fù)雜性給出了程序基本路徑集中的獨(dú)立路徑條數(shù),這是確保程序中每個(gè)可執(zhí)行語(yǔ)句至少執(zhí)行一次所必需的測(cè)試用例數(shù)目的上界。從控制流圖來(lái)看,一條獨(dú)立路徑是至少包含有一條在其它獨(dú)立路徑中從未有過(guò)的邊的路徑。75例如,在圖示的控制流圖中,一組獨(dú)立的路徑是

path1:1-11

path2:1-2-3-4-5-10-1-11

path3:1-2-3-6-8-9-10-1-11

path4:1-2-3-6-7-9-10-1-11路徑path1,path2,path3,path4組成了控制流圖的一個(gè)基本路徑集。763.導(dǎo)出測(cè)試用例導(dǎo)出測(cè)試用例,確?;韭窂郊械拿恳粭l路徑的執(zhí)行。根據(jù)判斷結(jié)點(diǎn)給出的條件,選擇適當(dāng)?shù)臄?shù)據(jù)以保證某一條路徑可以被測(cè)試到—用邏輯覆蓋方法。77每個(gè)測(cè)試用例執(zhí)行之后,與預(yù)期結(jié)果進(jìn)行比較。如果所有測(cè)試用例都執(zhí)行完畢,則可以確信程序中所有的可執(zhí)行語(yǔ)句至少被執(zhí)行了一次。必須注意,一些獨(dú)立的路徑(如例中的路徑1),往往不是完全孤立的,有時(shí)它是程序正常的控制流的一部分,這時(shí),這些路徑的測(cè)試可以是另一條路徑測(cè)試的一部分。

78黑盒測(cè)試的測(cè)試用例設(shè)計(jì)

等價(jià)類劃分

邊界值分析

錯(cuò)誤推測(cè)法

因果圖79等價(jià)類劃分等價(jià)類劃分是一種典型的黑盒測(cè)試方法,使用這一方法時(shí),完全不考慮程序的內(nèi)部結(jié)構(gòu),只依據(jù)程序的規(guī)格說(shuō)明來(lái)設(shè)計(jì)測(cè)試用例。等價(jià)類劃分方法把所有可能的輸入數(shù)據(jù),即程序的輸入域劃分成若干部分,然后從每一部分中選取少數(shù)有代表性的數(shù)據(jù)做為測(cè)試用例。80使用這一方法設(shè)計(jì)測(cè)試用例要經(jīng)歷劃分等價(jià)類(列出等價(jià)類表)和選取測(cè)試用例兩步。劃分等價(jià)類

等價(jià)類是指某個(gè)輸入域的子集合。在該子集合中,各個(gè)輸入數(shù)據(jù)對(duì)于揭露程序中的錯(cuò)誤都是等效的。測(cè)試某等價(jià)類的代表值就等價(jià)于對(duì)這一類其它值的測(cè)試。81等價(jià)類的劃分有兩種不同的情況:

有效等價(jià)類:是指對(duì)于程序的規(guī)格說(shuō)明來(lái)說(shuō),是合理的,有意義的輸入數(shù)據(jù)構(gòu)成的集合。

無(wú)效等價(jià)類:是指對(duì)于程序的規(guī)格說(shuō)明來(lái)說(shuō),是不合理的,無(wú)意義的輸入數(shù)據(jù)構(gòu)成的集合。在設(shè)計(jì)測(cè)試用例時(shí),要同時(shí)考慮有效等價(jià)類和無(wú)效等價(jià)類的設(shè)計(jì)。82劃分等價(jià)類的原則。

(1)

如果輸入條件規(guī)定了取值范圍,或值的個(gè)數(shù),則可以確立一個(gè)有效等價(jià)類和兩個(gè)無(wú)效等價(jià)類。

83例如,在程序的規(guī)格說(shuō)明中,對(duì)輸入條件有一句話:

“……項(xiàng)數(shù)可以從1到999……”

則有效等價(jià)類是“1≤項(xiàng)數(shù)≤999”兩個(gè)無(wú)效等價(jià)類是“項(xiàng)數(shù)<1”或“項(xiàng)數(shù)>999”。在數(shù)軸上表示成:84

(2)如果輸入條件規(guī)定了輸入值的集合,或者是規(guī)定了“必須如何”的條件,這時(shí)可確立一個(gè)有效等價(jià)類和一個(gè)無(wú)效等價(jià)類。例如,在Pascal語(yǔ)言中對(duì)變量標(biāo)識(shí)符規(guī)定為“以字母打頭的……串”。那么所有以字母打頭的構(gòu)成有效等價(jià)類,而不在此集合內(nèi)(不以字母打頭)的歸于無(wú)效等價(jià)類。85

(3)如果輸入條件是一個(gè)布爾量,則可以確定一個(gè)有效等價(jià)類和一個(gè)無(wú)效等價(jià)類。

(4)如果規(guī)定了輸入數(shù)據(jù)的一組值,而且程序要對(duì)每個(gè)輸入值分別進(jìn)行處理。這時(shí)可為每一個(gè)輸入值確立一個(gè)有效等價(jià)類,此外針對(duì)這組值確立一個(gè)無(wú)效等價(jià)類,它是所有不允許的輸入值的集合。86例如,在教師上崗方案中規(guī)定對(duì)教授、副教授、講師和助教分別計(jì)算分?jǐn)?shù),做相應(yīng)的處理。因此可以確定4個(gè)有效等價(jià)類為教授、副教授、講師和助教,一個(gè)無(wú)效等價(jià)類,它是所有不符合以上身分的人員的輸入值的集合。

(5)如果規(guī)定了輸入數(shù)據(jù)必須遵守的規(guī)則,則可以確立一個(gè)有效等價(jià)類(符合規(guī)則)和若干個(gè)無(wú)效等價(jià)類(從不同角度違反規(guī)則)。87例如,Pascal語(yǔ)言規(guī)定“一個(gè)語(yǔ)句必須以分號(hào)‘;’結(jié)束”。這時(shí),可以確定一個(gè)有效等價(jià)類“以‘;’結(jié)束”,若干個(gè)無(wú)效等價(jià)類“以‘:’結(jié)束”、“以‘,’結(jié)束”、“以‘’結(jié)束”、“以LF結(jié)束”等。確立測(cè)試用例

在確立了等價(jià)類之后,建立等價(jià)類表,列出所有劃分出的等價(jià)類。

88再?gòu)膭澐殖龅牡葍r(jià)類中按以下原則選擇測(cè)試用例:

(1)

為每一個(gè)等價(jià)類規(guī)定一個(gè)唯一編號(hào);

(2)

設(shè)計(jì)一個(gè)新的測(cè)試用例,使其盡可能多地覆蓋尚未被覆蓋的有效等價(jià)類,重復(fù)這一步,直到所有的有效等價(jià)類都被覆蓋為止;

(3)

設(shè)計(jì)一個(gè)新的測(cè)試用例,使其僅覆蓋一個(gè)尚未被覆蓋的無(wú)效等價(jià)類,重復(fù)這一步,直到所有的無(wú)效等價(jià)類都被覆蓋為止。89

用等價(jià)類劃分法設(shè)計(jì)測(cè)試用例的實(shí)例

在某一PASCAL語(yǔ)言版本中規(guī)定:“標(biāo)識(shí)符是由字母開(kāi)頭,后跟字母或數(shù)字的任意組合構(gòu)成。有效字符數(shù)為8個(gè),最大字符數(shù)為80個(gè)?!?并且規(guī)定:“標(biāo)識(shí)符必須先說(shuō)明,再使用?!薄霸谕徽f(shuō)明語(yǔ)句中,標(biāo)識(shí)符至少必須有一個(gè)?!?/p>

90用等價(jià)類劃分方法,建立輸入等價(jià)類表:91下面選取了9個(gè)測(cè)試用例,它們覆蓋了所有的等價(jià)類。

①VARx,T1234567:REAL;

BEGINx:=3.414;

T1234567:=2.732;

...…(1),(2),(4),(8),(9),(12),(14)

②VAR:REAL;

(3)

③VARx,:REAL;(5)

92④VART12345678:REAL;

(6)⑤VART12345......:REAL;

(7)

多于80個(gè)字符⑥VART$:CHAR;

(10)⑦VARGOTO:INTEGER;

(11)⑧VAR2T:REAL;

(13)⑨VARPAR:REAL;

(15)

BEGIN......

PAP:=SIN(3.14*0.8)/6;93邊界值分析邊界值分析也是一種黑盒測(cè)試方法,是對(duì)等價(jià)類劃分方法的補(bǔ)充。人們從長(zhǎng)期的測(cè)試工作經(jīng)驗(yàn)得知,大量的錯(cuò)誤是發(fā)生在輸入或輸出范圍的邊界上,而不是在輸入范圍的內(nèi)部。因此針對(duì)各種邊界情況設(shè)計(jì)測(cè)試用例,可以查出更多的錯(cuò)誤。

94比如,在做三角形計(jì)算時(shí),要輸入三角形的三個(gè)邊長(zhǎng):A、B和C。我們應(yīng)注意到這三個(gè)數(shù)值應(yīng)當(dāng)滿足

A>0、B>0、C>0、

A+B>C、A+C>B、B+C>A,才能構(gòu)成三角形。但如果把六個(gè)不等式中的任何一個(gè)大于號(hào)“>”錯(cuò)寫(xiě)成大于等于號(hào)“≥”,那就不能構(gòu)成三角形。問(wèn)題恰出現(xiàn)在容易被疏忽的邊界附近。95這里所說(shuō)的邊界是指,相當(dāng)于輸入等價(jià)類和輸出等價(jià)類而言,稍高于其邊界值及稍低于其邊界值的一些特定情況。使用邊界值分析方法設(shè)計(jì)測(cè)試用例,首先應(yīng)確定邊界情況。應(yīng)當(dāng)選取正好等于,剛剛大于,或剛剛小于邊界的值做為測(cè)試數(shù)據(jù),而不是選取等價(jià)類中的典型值或任意值做為測(cè)試數(shù)據(jù)。

96錯(cuò)誤推測(cè)法人們也可以靠經(jīng)驗(yàn)和直覺(jué)推測(cè)程序中可能存在的各種錯(cuò)誤,從而有針對(duì)性地編寫(xiě)檢查這些錯(cuò)誤的例子。這就是錯(cuò)誤推測(cè)法。錯(cuò)誤推測(cè)法的基本想法是:列舉出程序中所有可能有的錯(cuò)誤和容易發(fā)生錯(cuò)誤的特殊情況,根據(jù)它們選擇測(cè)試用例。97因果圖因果圖的適用范圍

如果在測(cè)試時(shí)必須考慮輸入條件的各種組合,可使用一種適合于描述對(duì)于多種條件的組合,相應(yīng)產(chǎn)生多個(gè)動(dòng)作的形式來(lái)設(shè)計(jì)測(cè)試用例,這就需要利用因果圖。

因果圖方法最終生成的就是判定表。它適合于檢查程序輸入條件的各種組合情況。98用因果圖生成測(cè)試用例的基本步驟

(1)

分析軟件規(guī)格說(shuō)明描述中,哪些是原因(即輸入條件或輸入條件的等價(jià)類),哪些是結(jié)果(即輸出條件),并給每個(gè)原因和結(jié)果賦予一個(gè)標(biāo)識(shí)符。

(2)

分析軟件規(guī)格說(shuō)明描述中的語(yǔ)義,找出原因與結(jié)果之間,原因與原因之間對(duì)應(yīng)的是什么關(guān)系?根據(jù)這些關(guān)系,畫(huà)出因果圖。

99

(3)

由于語(yǔ)法或環(huán)境限制,有些原因與原因之間,原因與結(jié)果之間的組合情況不可能出現(xiàn)。為表明這些特殊情況,在因果圖上用一些記號(hào)標(biāo)明約束或限制條件。

(4)

把因果圖轉(zhuǎn)換成判定表。

(5)

把判定表的每一列拿出來(lái)作為依據(jù),設(shè)計(jì)測(cè)試用例。

100在因果圖中出現(xiàn)的基本符號(hào)

通常在因果圖中用Ci表示原因,用Ei表示結(jié)果,各結(jié)點(diǎn)表示狀態(tài),可取值“0”或“1”。“0”表示某狀態(tài)不出現(xiàn),“1”表示某狀態(tài)出現(xiàn)。主要的原因和結(jié)果之間的關(guān)系有:101表示約束條件的符號(hào)

為了表示原因與原因之間,結(jié)果與結(jié)果之間可能存在的約束條件,在因果圖中可以附加一些表示約束條件的符號(hào)。102

例如,有一個(gè)處理單價(jià)為5角錢的飲料的自動(dòng)售貨機(jī)軟件測(cè)試用例的設(shè)計(jì)。其規(guī)格說(shuō)明如下:

若投入5角錢或1元錢的硬幣,押下〖橙汁〗或〖啤酒〗的按鈕,則相應(yīng)的飲料就送出來(lái)。若售貨機(jī)沒(méi)有零錢找,則一個(gè)顯示〖零錢找完〗的紅燈亮,這時(shí)在投入1元硬幣并押下按鈕后,飲料不送出來(lái)而且1元硬幣也退出來(lái);若有零錢找,則顯示〖零錢找完〗的紅燈滅,在送出飲料的同時(shí)退還5角硬幣。”103(1)分析這一段說(shuō)明,列出原因和結(jié)果

原因:1.

售貨機(jī)有零錢找

2.

投入1元硬幣

3.

投入5角硬幣

4.

押下橙汁按鈕

5.

押下啤酒按鈕

建立中間結(jié)點(diǎn),表示處理中間狀態(tài)

11.

投入1元硬幣且押下飲料按鈕

12.

押下〖橙汁〗或〖啤酒〗的按鈕

13.

應(yīng)當(dāng)找5角零錢并且售貨機(jī)有零錢找

14.

錢已付清

104

結(jié)果:21.

售貨機(jī)〖零錢找完〗燈亮

22.

退還1元硬幣

23.

退還5角硬幣

24.

送出橙汁飲料

25.

送出啤酒飲料

(2)畫(huà)出因果圖。所有原因結(jié)點(diǎn)列在左 邊,所有結(jié)果結(jié)點(diǎn)列在右邊。

(3)

由于2與3,4與5不能同時(shí)發(fā)生,

分別加上約束條件E。

(4)因果圖

(5)轉(zhuǎn)換成判定表105

106

107108軟件測(cè)試的策略測(cè)試過(guò)程按4個(gè)步驟進(jìn)行,即單元測(cè)試、組裝測(cè)試、確認(rèn)測(cè)試和系統(tǒng)測(cè)試。開(kāi)始是單元測(cè)試,集中對(duì)用源代碼實(shí)現(xiàn)的每一個(gè)程序單元進(jìn)行測(cè)試,檢查各個(gè)程序模塊是否正確地實(shí)現(xiàn)了規(guī)定的功能。109110組裝測(cè)試把已測(cè)試過(guò)的模塊組裝起來(lái),主要對(duì)與設(shè)計(jì)相關(guān)的軟件體系結(jié)構(gòu)的構(gòu)造進(jìn)行測(cè)試。確認(rèn)測(cè)試則是要檢查已實(shí)現(xiàn)的軟件是否滿足了需求規(guī)格說(shuō)明中確定了的各種需求,以及軟件配置是否完全、正確。系統(tǒng)測(cè)試把已經(jīng)經(jīng)過(guò)確認(rèn)的軟件納入實(shí)際運(yùn)行環(huán)境中,與其它系統(tǒng)成份組合在一起進(jìn)行測(cè)試。111單元測(cè)試(UnitTesting)單元測(cè)試又稱模塊測(cè)試,是針對(duì)軟件設(shè)計(jì)的最小單位─程序模塊,進(jìn)行正確性檢驗(yàn)的測(cè)試工作。其目的在于發(fā)現(xiàn)各模塊內(nèi)部可能存在的各種差錯(cuò)。單元測(cè)試需要從程序的內(nèi)部結(jié)構(gòu)出發(fā)設(shè)計(jì)測(cè)試用例。多個(gè)模塊可以平行地獨(dú)立進(jìn)行單元測(cè)試。1121.單元測(cè)試的內(nèi)容在單元測(cè)試時(shí),測(cè)試者需要依據(jù)詳細(xì)設(shè)計(jì)說(shuō)明書(shū)和源程序清單,了解該模塊的I/O條件和模塊的邏輯結(jié)構(gòu),主要采用白盒測(cè)試的測(cè)試用例,輔之以黑盒測(cè)試的測(cè)試用例,使之對(duì)任何合理的輸入和不合理的輸入,都能鑒別和響應(yīng)。

113114(1)模塊接口測(cè)試在單元測(cè)試的開(kāi)始,應(yīng)對(duì)通過(guò)被測(cè)模塊的數(shù)據(jù)流進(jìn)行測(cè)試。測(cè)試項(xiàng)目包括:調(diào)用本模塊的輸入?yún)?shù)是否正確;本模塊調(diào)用子模塊時(shí)輸入給子模塊的參數(shù)是否正確;全局量的定義在各模塊中是否一致;

115在做內(nèi)外存交換時(shí)要考慮:文件屬性是否正確;

OPEN與CLOSE語(yǔ)句是否正確;緩沖區(qū)容量與記錄長(zhǎng)度是否匹配;在進(jìn)行讀寫(xiě)操作之前是否打開(kāi)了文件;在結(jié)束文件處理時(shí)是否關(guān)閉了文件;正文書(shū)寫(xiě)/輸入錯(cuò)誤,

I/O錯(cuò)誤是否檢查并做了處理。

116(2)局部數(shù)據(jù)結(jié)構(gòu)測(cè)試不正確或不一致的數(shù)據(jù)類型說(shuō)明使用尚未賦值或尚未初始化的變量錯(cuò)誤的初始值或錯(cuò)誤的缺省值變量名拼寫(xiě)錯(cuò)或書(shū)寫(xiě)錯(cuò)不一致的數(shù)據(jù)類型全局?jǐn)?shù)據(jù)對(duì)模塊的影響

117(3)路徑測(cè)試選擇適當(dāng)?shù)臏y(cè)試用例,對(duì)模塊中重要的執(zhí)行路徑進(jìn)行測(cè)試。應(yīng)當(dāng)設(shè)計(jì)測(cè)試用例查找由于錯(cuò)誤的計(jì)算、不正確的比較或不正常的控制流而導(dǎo)致的錯(cuò)誤。對(duì)基本執(zhí)行路徑和循環(huán)進(jìn)行測(cè)試可以發(fā)現(xiàn)大量的路徑錯(cuò)誤。118(4)錯(cuò)誤處理測(cè)試出錯(cuò)的描述是否難以理解出錯(cuò)的描述是否能夠?qū)﹀e(cuò)誤定位顯示的錯(cuò)誤與實(shí)際的錯(cuò)誤是否相符對(duì)錯(cuò)誤條件的處理正確與否在對(duì)錯(cuò)誤進(jìn)行處理之前,錯(cuò)誤條件是否已經(jīng)引起系統(tǒng)的干預(yù)等119(5)邊界測(cè)試注意數(shù)據(jù)流、控制流中剛好等于、大于或小于確定的比較值時(shí)出錯(cuò)的可能性。對(duì)這些地方要仔細(xì)地選擇測(cè)試用例,認(rèn)真加以測(cè)試。如果對(duì)模塊運(yùn)行時(shí)間有要求的話,還要專門進(jìn)行關(guān)鍵路徑測(cè)試,以確定最壞情況下和平均意義下影響模塊運(yùn)行時(shí)間的因素。

1202.單元測(cè)試的步驟模塊并不是一個(gè)獨(dú)立的程序,在考慮測(cè)試模塊時(shí),同時(shí)要考慮它和外界的聯(lián)系,用一些輔助模塊去模擬與被測(cè)模塊相聯(lián)系的其它模塊。

驅(qū)動(dòng)模塊(driver)

樁模塊(stub)──存根模塊121122如果一個(gè)模塊要完成多種功能,可以將這個(gè)模塊看成由幾個(gè)小程序組成。必須對(duì)其中的每個(gè)小程序先進(jìn)行單元測(cè)試要做的工作,對(duì)關(guān)鍵模塊還要做性能測(cè)試。對(duì)支持某些標(biāo)準(zhǔn)規(guī)程的程序,更要著手進(jìn)行互聯(lián)測(cè)試。有人把這種情況特別稱為模塊測(cè)試,以區(qū)別單元測(cè)試。123組裝測(cè)試(IntegratedTesting)組裝測(cè)試(集成測(cè)試、聯(lián)合測(cè)試)通常,在單元測(cè)試的基礎(chǔ)上,需要將所有模塊按照設(shè)計(jì)要求組裝成為系統(tǒng)。這時(shí)需要考慮的問(wèn)題是:在把各個(gè)模塊連接起來(lái)的時(shí)侯,穿越模塊接口的數(shù)據(jù)是否會(huì)丟失;

一個(gè)模塊的功能是否會(huì)對(duì)另一個(gè)模塊的功能產(chǎn)生不利的影響;

124

各個(gè)子功能組合起來(lái),能否達(dá)到預(yù)期要求的父功能;

全局?jǐn)?shù)據(jù)結(jié)構(gòu)是否有問(wèn)題;

單個(gè)模塊的誤差累積起來(lái),是否會(huì)放大,從而達(dá)到不能接受的程度。在單元測(cè)試的同時(shí)可進(jìn)行組裝測(cè)試,發(fā)現(xiàn)并排除在模塊連接中可能出現(xiàn)的問(wèn)題,最終構(gòu)成要求的軟件系統(tǒng)。

125

子系統(tǒng)的組裝測(cè)試特別稱為部件測(cè)試,它所做的工作是要找出組裝后的子系統(tǒng)與系統(tǒng)需求規(guī)格說(shuō)明之間的不一致。通常,把模塊組裝成為系統(tǒng)的方式有兩種一次性組裝方式增殖式組裝方式

1261.一次性組裝方式

(bigbang)它是一種非增殖式組裝方式。也叫做整體拼裝。使用這種方式,首先對(duì)每個(gè)模塊分別進(jìn)行模塊測(cè)試,然后再把所有模塊組裝在一起進(jìn)行測(cè)試,最終得到要求的軟件系統(tǒng)。1271282.增殖式組裝方式這種組裝方式又稱漸增式組裝首先對(duì)一個(gè)個(gè)模塊進(jìn)行模塊測(cè)試,然后將這些模塊逐步組裝成較大的系統(tǒng)在組裝的過(guò)程中邊連接邊測(cè)試,以發(fā)現(xiàn)連接過(guò)程中產(chǎn)生的問(wèn)題通過(guò)增殖逐步組裝成為要求的軟件系統(tǒng)。

129(1)自頂向下的增殖方式這種組裝方式將模塊按系統(tǒng)程序結(jié)構(gòu),沿控制層次自頂向下進(jìn)行組裝。自頂向下的增殖方式在測(cè)試過(guò)程中較早地驗(yàn)證了主要的控制和判斷點(diǎn)。選用按深度方向組裝的方式,可以首先實(shí)現(xiàn)和驗(yàn)證一個(gè)完整的軟件功能。130131(2)自底向上的增殖方式這種組裝的方式是從程序模塊結(jié)構(gòu)的最底層的模塊開(kāi)始組裝和測(cè)試。因?yàn)槟K是自底向上進(jìn)行組裝,對(duì)于一個(gè)給定層次的模塊,它的子模塊(包括子模塊的所有下屬模塊)已經(jīng)組裝并測(cè)試完成,所以不再需要樁模塊。在模塊的測(cè)試過(guò)程中需要從子模塊得到的信息可以直接運(yùn)行子模塊得到。

132自頂向下增殖的方式和自底向上增殖的方式各有優(yōu)缺點(diǎn)。一般來(lái)講,一種方式的優(yōu)點(diǎn)是另一種方式的缺點(diǎn)。133

不同測(cè)試策略的比較 自頂向下結(jié)合的優(yōu)點(diǎn):

不需要測(cè)試驅(qū)動(dòng)程序,能在早期實(shí)現(xiàn)并驗(yàn)證系統(tǒng)的主要功能,能較早發(fā)現(xiàn)上層??斓慕涌阱e(cuò)誤。 自頂向下結(jié)合的缺點(diǎn): 需要存根程序,可能遇到與此相聯(lián)系的測(cè)試?yán)щy,低層關(guān)鍵模塊中的錯(cuò)誤發(fā)現(xiàn)較晚,而且用這種方法在早期不能充分展開(kāi)人力。 自底向上測(cè)試方法的優(yōu)缺點(diǎn)剛好相反。134(3)混合增殖式測(cè)試衍變的自頂向下的增殖測(cè)試首先對(duì)輸入/輸出模塊和引入新算法模塊進(jìn)行測(cè)試;

再自底向上組裝成為功能相當(dāng)完整且相對(duì)獨(dú)立的子系統(tǒng);

然后由主模塊開(kāi)始自頂向下進(jìn)行增殖測(cè)試。135自底向上

自頂向下的增殖測(cè)試首先對(duì)含讀操作的子系統(tǒng)自底向上直至根結(jié)點(diǎn)模塊進(jìn)行組裝和測(cè)試;

然后對(duì)含寫(xiě)操作的子系統(tǒng)做自頂向下的組裝與測(cè)試?;貧w測(cè)試這種方式采取自頂向下的方式測(cè)試被修改的模塊及其子模塊;

然后將這一部分視為子系統(tǒng),再自底向上測(cè)試。136關(guān)鍵模塊問(wèn)題在組裝測(cè)試時(shí),應(yīng)當(dāng)確定關(guān)鍵模塊,對(duì)這些關(guān)鍵模塊及早進(jìn)行測(cè)試。關(guān)鍵模塊的特征:

①滿足某些軟件需求;

②在程序的模塊結(jié)構(gòu)中位于較高的層次(高層控制模塊);

③較復(fù)雜、較易發(fā)生錯(cuò)誤;

④有明確定義的性能要求。

137確認(rèn)測(cè)試(ValidationTesting)確認(rèn)測(cè)試又稱有效性測(cè)試。任務(wù)是驗(yàn)證軟件的功能和性能及其它特性是否與用戶的要求一致。對(duì)軟件的功能和性能要求在軟件需求規(guī)格說(shuō)明書(shū)中已經(jīng)明確規(guī)定。它包含的信息就是軟件確認(rèn)測(cè)試的基礎(chǔ)。1381391.進(jìn)行有效性測(cè)試(黑盒測(cè)試)有效性測(cè)試是在模擬的環(huán)境(可能就是開(kāi)發(fā)的環(huán)境)下,運(yùn)用黑盒測(cè)試的方法,驗(yàn)證被測(cè)軟件是否滿足需求規(guī)格說(shuō)明書(shū)列出的需求。首先制定測(cè)試計(jì)劃,規(guī)定要做測(cè)試的種類。還需要制定一組測(cè)試步驟,描述具體的測(cè)試用例。140通過(guò)實(shí)施預(yù)定的測(cè)試計(jì)劃和測(cè)試步驟,確定軟件的特性是否與需求相符;所有的文檔都是正確且便于使用;同時(shí),對(duì)其它軟件需求,例如可移植性、兼容性、出錯(cuò)自動(dòng)恢復(fù)、可維護(hù)性等,也都要進(jìn)行測(cè)試141在全部軟件測(cè)試的測(cè)試用例運(yùn)行完后,所有的測(cè)試結(jié)果可以分為兩類:

測(cè)試結(jié)果與預(yù)期的結(jié)果相符。這說(shuō)明軟件的這部分功能或性能特征與需求規(guī)格說(shuō)明書(shū)相符合,從而這部分程序被接受。

測(cè)試結(jié)果與預(yù)期的結(jié)果不符。這說(shuō)明軟件的這部分功能或性能特征與需求規(guī)格說(shuō)明不一致,因此要為它提交一份問(wèn)題報(bào)告。

1422.軟件配置復(fù)查軟件配置復(fù)查的目的是保證軟件配置的所有成分都齊全;各方面的質(zhì)量都符合要求;具有維護(hù)階段所必需的細(xì)節(jié);而且已經(jīng)編排好分類的目錄。應(yīng)當(dāng)嚴(yán)格遵守用戶手冊(cè)和操作手冊(cè)中規(guī)定的使用步驟,以便檢查這些文檔資料的完整性和正確性。143驗(yàn)收測(cè)試(AcceptanceTesting)在通過(guò)了系統(tǒng)的有效性測(cè)試及軟件配置審查之后,就應(yīng)開(kāi)始系統(tǒng)的驗(yàn)收測(cè)試。驗(yàn)收測(cè)試是以用戶為主的測(cè)試。軟件開(kāi)發(fā)人員和QA(質(zhì)量保證)人員也應(yīng)參加。由用戶參加設(shè)計(jì)測(cè)試用例,使用生產(chǎn)中的實(shí)際數(shù)據(jù)進(jìn)行測(cè)試。144在測(cè)試過(guò)程中,除了考慮軟件的功能和性能外,還應(yīng)對(duì)軟件的可移植性、兼容性、可維護(hù)性、錯(cuò)誤的恢復(fù)功能等進(jìn)行確認(rèn)。確認(rèn)測(cè)試應(yīng)交付的文檔有:確認(rèn)測(cè)試分析報(bào)告最終的用戶手冊(cè)和操作手冊(cè)項(xiàng)目開(kāi)發(fā)總結(jié)報(bào)告。

145系統(tǒng)測(cè)試(SystemTesting)系統(tǒng)測(cè)試,是將通過(guò)確認(rèn)測(cè)試的軟件,作為整個(gè)基于計(jì)算機(jī)系統(tǒng)的一個(gè)元素,與計(jì)算機(jī)硬件、外設(shè)、某些支持軟件、數(shù)據(jù)和人員等其它系統(tǒng)元素結(jié)合在一起,在實(shí)際運(yùn)行環(huán)境下,對(duì)計(jì)算機(jī)系統(tǒng)進(jìn)行一系列的組裝測(cè)試和確認(rèn)測(cè)試。系統(tǒng)測(cè)試的目的在于通過(guò)與系統(tǒng)的需求定義作比較,發(fā)現(xiàn)軟件與系統(tǒng)的定義不符合或與之矛盾的地方。146α測(cè)試和β測(cè)試在軟件交付使用之后,用戶將如何實(shí)際使用程序,對(duì)于開(kāi)發(fā)者來(lái)說(shuō)是無(wú)法預(yù)測(cè)的。α測(cè)試是由一個(gè)用戶在開(kāi)發(fā)環(huán)境下進(jìn)行的測(cè)試,也可以是公司內(nèi)部的用戶在模擬實(shí)際操作環(huán)境下進(jìn)行的測(cè)試。147α測(cè)試的目的是評(píng)價(jià)軟件產(chǎn)品的FLURPS(即功能、局域化、可使用性、可靠性、性能和支持)。尤其注重產(chǎn)品的界面和特色。α測(cè)試可以從軟件產(chǎn)品編碼結(jié)束之時(shí)開(kāi)始,或在模塊(子系統(tǒng))測(cè)試完成之后開(kāi)始,也可以在確認(rèn)測(cè)試過(guò)程中產(chǎn)品達(dá)到一定的穩(wěn)定和可靠程度之后再開(kāi)始。

148β測(cè)試是由軟件的多個(gè)用戶在實(shí)際使用環(huán)境下進(jìn)行的測(cè)試。這些用戶返回有關(guān)錯(cuò)誤信息給開(kāi)發(fā)者。測(cè)試時(shí),開(kāi)發(fā)者通常不在測(cè)試現(xiàn)場(chǎng)。因而,β測(cè)試是在開(kāi)發(fā)者無(wú)法控制的環(huán)境下進(jìn)行的軟件現(xiàn)場(chǎng)應(yīng)用。在β測(cè)試中,由用戶記下遇到的所有問(wèn)題,包括真實(shí)的以及主觀認(rèn)定的,定期向開(kāi)發(fā)者報(bào)告。149β測(cè)試主要衡量產(chǎn)品的FLURPS。著重于產(chǎn)品的支持性,包括文檔、客戶培訓(xùn)和支持產(chǎn)品生產(chǎn)能力。只有當(dāng)α測(cè)試達(dá)到一定的可靠程度時(shí),才能開(kāi)始β測(cè)試。它處在整個(gè)測(cè)試的最后階段。同時(shí),產(chǎn)品的所有手冊(cè)文本也應(yīng)該在此階段完全定稿。150測(cè)試種類軟件測(cè)試是由一系列不同的測(cè)試組成。主要目的是對(duì)以計(jì)算機(jī)為基礎(chǔ)的系統(tǒng)進(jìn)行充分的測(cè)試。功能測(cè)試 功能測(cè)試是在規(guī)定的一段時(shí)間內(nèi)運(yùn)行軟件系統(tǒng)的所有功能,以驗(yàn)證這個(gè)軟件系統(tǒng)有無(wú)嚴(yán)重錯(cuò)誤。151可靠性測(cè)試 如果系統(tǒng)需求說(shuō)明書(shū)中有對(duì)可靠性的要求,則需進(jìn)行可靠性測(cè)試。

①平均失效間隔時(shí)間MTBF(MeanTimeBetweenFailures)是否超過(guò)規(guī)定時(shí)限?

②因故障而停機(jī)的時(shí)間MTTR(MeanTimeToRepairs)在一年中應(yīng)不超過(guò)多少時(shí)間。

152強(qiáng)度測(cè)試 強(qiáng)度測(cè)試是要檢查在系統(tǒng)運(yùn)行環(huán)境不正常乃至發(fā)生故障的情況下,系統(tǒng)可以運(yùn)行到何種程度的測(cè)試。例如:把輸入數(shù)據(jù)速率提高一個(gè)數(shù)量級(jí),確定輸入功能將如何響應(yīng)。設(shè)計(jì)需要占用最大存儲(chǔ)量或其它資源的測(cè)試用例進(jìn)行測(cè)試。

153

設(shè)計(jì)出在虛擬存儲(chǔ)管理機(jī)制中引起“顛簸”的測(cè)試用例進(jìn)行測(cè)試。設(shè)計(jì)出會(huì)對(duì)磁盤(pán)常駐內(nèi)存的數(shù)據(jù)過(guò)度訪問(wèn)的測(cè)試用例進(jìn)行測(cè)試。強(qiáng)度測(cè)試的一個(gè)變種就是敏感性測(cè)試。在程序有效數(shù)據(jù)界限內(nèi)一個(gè)小范圍內(nèi)的一組數(shù)據(jù)可能引起極端的或不平穩(wěn)的錯(cuò)誤處理出現(xiàn),或者導(dǎo)致極度的性能下降的情況發(fā)生。此測(cè)試用以發(fā)現(xiàn)可能引起這種不穩(wěn)定性或不正常處理的某些數(shù)據(jù)組合。

154性能測(cè)試性能測(cè)試是要檢查系統(tǒng)是否滿足在需求說(shuō)明書(shū)中規(guī)定的性能。特別是對(duì)于實(shí)時(shí)系統(tǒng)或嵌入式系統(tǒng)。性能測(cè)試常常需要與強(qiáng)度測(cè)試結(jié)合起來(lái)進(jìn)行,并常常要求同時(shí)進(jìn)行硬件和軟件檢測(cè)。通常,對(duì)軟件性能的檢測(cè)表現(xiàn)在以下幾個(gè)方面:響應(yīng)時(shí)間、吞吐量、輔助存儲(chǔ)區(qū),例如緩沖區(qū),工作區(qū)的大小等、處理精度,等等。155恢復(fù)測(cè)試 恢復(fù)測(cè)試是要證實(shí)在克服硬件故障(包括掉電、硬件或網(wǎng)絡(luò)出錯(cuò)等)后,系統(tǒng)能否正常地繼續(xù)進(jìn)行工作,并不對(duì)系統(tǒng)造成任何損害。為此,可采用各種人工干預(yù)的手段,模擬硬件故障,故意造成軟件出錯(cuò)。并由此檢查:

錯(cuò)誤探測(cè)功能──系統(tǒng)能否發(fā)現(xiàn)硬件失效與故障;156

能否切換或啟動(dòng)備用的硬件;在故障發(fā)生時(shí)能否保護(hù)正在運(yùn)行的作業(yè)和系統(tǒng)狀態(tài);在系統(tǒng)恢復(fù)后能否從最后記錄下來(lái)的無(wú)錯(cuò)誤狀態(tài)開(kāi)始繼續(xù)執(zhí)行作業(yè),等等。

掉電測(cè)試:其目的是測(cè)試軟件系統(tǒng)在發(fā)生電源中斷時(shí)能否保護(hù)當(dāng)時(shí)的狀態(tài)且不毀壞數(shù)據(jù),然后在電源恢復(fù)時(shí)從保留的斷點(diǎn)處重新進(jìn)行操作。

157啟動(dòng)/停止測(cè)試 這類測(cè)試的目的是驗(yàn)證在機(jī)器啟動(dòng)及關(guān)機(jī)階段,軟件系統(tǒng)正確處理的能力。 這類測(cè)試包括

反復(fù)啟動(dòng)軟件系統(tǒng)

(例如,操作系統(tǒng)自舉、網(wǎng)絡(luò)的啟動(dòng)、應(yīng)用程序的調(diào)用等)

在盡可能多的情況下關(guān)機(jī)。158配置測(cè)試這類測(cè)試是要檢查計(jì)算機(jī)系統(tǒng)內(nèi)各個(gè)設(shè)備或各種資源之間的相互聯(lián)結(jié)和功能分配中的錯(cuò)誤。它主要包括以下幾種:配置命令測(cè)試:驗(yàn)證全部配置命令的可操作性(有效性);特別對(duì)最大配置和最小配置要進(jìn)行測(cè)試。軟件配置和硬件配置都要測(cè)試。

159

循環(huán)配置測(cè)試:證明對(duì)每個(gè)設(shè)備物理與邏輯的,邏輯與功能的每次循環(huán)置換配置都能正常工作。

修復(fù)測(cè)試:檢查每種配置狀態(tài)及哪個(gè)設(shè)備是壞的。并用自動(dòng)的或手工的方式進(jìn)行配置狀態(tài)間的轉(zhuǎn)換。160安全性測(cè)試 安全性測(cè)試是要檢驗(yàn)在系統(tǒng)中已經(jīng)存在的系統(tǒng)安全性、保密性措施是否發(fā)揮作用,有無(wú)漏洞。力圖破壞系統(tǒng)的保護(hù)機(jī)構(gòu)以進(jìn)入系統(tǒng)的主要方法有以下幾種:正面攻擊或從側(cè)面、背面攻擊系統(tǒng)中易受損壞的那些部分;以系統(tǒng)輸入為突破口,利用輸入的容錯(cuò)性進(jìn)行正面攻擊;

161

申請(qǐng)和占用過(guò)多的資源壓垮系統(tǒng),以破壞安全措施,從而進(jìn)入系統(tǒng);故意使系統(tǒng)出錯(cuò),利用系統(tǒng)恢復(fù)的過(guò)程,竊取用戶口令及其它有用的信息;通過(guò)瀏覽殘留在計(jì)算機(jī)各種資源中的垃圾(無(wú)用信息),以獲取如口令,安全碼,譯碼關(guān)鍵字等信息;瀏覽全局?jǐn)?shù)據(jù),期望從中找到進(jìn)入系統(tǒng)的關(guān)鍵字;瀏覽那些邏輯上不存在,但物理上還存在的各種記錄和資料等。162可使用性測(cè)試可使用性測(cè)試主要從使用的合理性和方便性等角度對(duì)軟件系統(tǒng)進(jìn)行檢查,發(fā)現(xiàn)人為因素或使用上的問(wèn)題。要保證在足夠詳細(xì)的程度下,用戶界面便于使用;對(duì)輸入量可容錯(cuò)、響應(yīng)時(shí)間和響應(yīng)方式合理可行、輸出信息有意義、正確并前后一致;出錯(cuò)信息能夠引導(dǎo)用戶去解決問(wèn)題;軟件文檔全面、正規(guī)、確切。163可支持性測(cè)試 這類測(cè)試是要驗(yàn)證系統(tǒng)的支持策略對(duì)于公司與用戶方面是否切實(shí)可行。它所采用的方法是

試運(yùn)行支持過(guò)程(如對(duì)有錯(cuò)部分打補(bǔ)丁的過(guò)程,熱線界面等);對(duì)其結(jié)果進(jìn)行質(zhì)量分析;

評(píng)審診斷工具;

維護(hù)過(guò)程、內(nèi)部維護(hù)文檔;

修復(fù)一個(gè)錯(cuò)誤所需平均最少時(shí)間。164安裝測(cè)試 安裝測(cè)試的目的不是找軟件錯(cuò)誤,而是找安裝錯(cuò)誤。在安裝軟件系統(tǒng)時(shí),會(huì)有多種選擇。要分配和裝入文件與程序庫(kù)布置適用的硬件配置進(jìn)行程序的聯(lián)結(jié)。而安裝測(cè)試就是要找出在這些安裝過(guò)程中出現(xiàn)的錯(cuò)誤。165安裝測(cè)試是在系統(tǒng)安裝之后進(jìn)行測(cè)試。它要檢驗(yàn):用戶選擇的一套任選方案是否相容;系統(tǒng)的每一部分是否都齊全;所有文件是否都已產(chǎn)生并確有所需要的內(nèi)容;硬件的配置是否合理,等等。

166過(guò)程測(cè)試在一些大型的系統(tǒng)中,部分工作由軟件自動(dòng)完成,其它工作則需由各種人員,包括操作員,數(shù)據(jù)庫(kù)管理員,終端用戶等,按一定規(guī)程同計(jì)算機(jī)配合,靠人工來(lái)完成。指定由人工完成的過(guò)程也需經(jīng)過(guò)仔細(xì)的檢查,這就是所謂的過(guò)程測(cè)試。167互連測(cè)試互連測(cè)試是要驗(yàn)證兩個(gè)或多個(gè)不同的系統(tǒng)之間的互連性。兼容性測(cè)試這類測(cè)試主要想驗(yàn)證軟件產(chǎn)品在不同版本之間的兼容性。有兩類基本的兼容性測(cè)試:

向下兼容交錯(cuò)兼容168容量測(cè)試容量測(cè)試是要檢驗(yàn)系統(tǒng)的能力最高能達(dá)到什么程度。例如,對(duì)于編譯程序,讓它處理特別長(zhǎng)的源程序;對(duì)于操作系統(tǒng),讓它的作業(yè)隊(duì)列“滿員”;對(duì)于信息檢索系統(tǒng),讓它使用頻率達(dá)到最大。 在使系統(tǒng)的全部資源達(dá)到“滿負(fù)荷”的情形下,測(cè)試系統(tǒng)的承受能力。

169文檔測(cè)試 這種測(cè)試是檢查用戶文檔(如用戶手冊(cè))的清晰性和精確性。用戶文檔中所使用的例子必須在測(cè)試中一一試過(guò),確保敘述正確無(wú)誤。170調(diào)試(Debug)軟件調(diào)試是在進(jìn)行了成功的測(cè)試之后才開(kāi)始的工作。它與軟件測(cè)試不同,調(diào)試的任務(wù)是進(jìn)一步診斷和改正程序中潛在的錯(cuò)誤。調(diào)試活動(dòng)由兩部分組成:

確定程序中可疑錯(cuò)誤的確切性質(zhì)和位置。

對(duì)程序(設(shè)計(jì),編碼)進(jìn)行修改,排除這個(gè)錯(cuò)誤。

171調(diào)試工作是一個(gè)具有很強(qiáng)技巧性的工作。軟件運(yùn)行失效或出現(xiàn)問(wèn)題,往往只是潛在錯(cuò)誤的外部表現(xiàn),而外部表現(xiàn)與內(nèi)在原因之間常常沒(méi)有明顯的聯(lián)系。如果要找出真正的原因,排除潛在的錯(cuò)誤,不是一件易事??梢哉f(shuō),調(diào)試是通過(guò)現(xiàn)象,找出原因的一個(gè)思維分析的過(guò)程。

172調(diào)試的步驟(1)從錯(cuò)誤的外部表現(xiàn)形式入手,確定程序中出錯(cuò)位置;(2)研究有關(guān)部分的程序,找出錯(cuò)誤的內(nèi)在原因;(3)修改設(shè)計(jì)和代碼,以排除這個(gè)錯(cuò)誤;(4)重復(fù)進(jìn)行暴露了這個(gè)錯(cuò)誤的原始測(cè)試或某些有關(guān)測(cè)試。

173從技術(shù)角度來(lái)看,查找錯(cuò)誤的難度在于:

現(xiàn)象與原因所處的位置可能相距甚遠(yuǎn)。當(dāng)其它錯(cuò)誤得到糾正時(shí),這一錯(cuò)誤所表現(xiàn)出的現(xiàn)象可能會(huì)暫時(shí)消失,但并未實(shí)際排除?,F(xiàn)象實(shí)際上是由一些非錯(cuò)誤原因(例如,舍入不精確)引起的。174

現(xiàn)象可能是由于一些不容易發(fā)現(xiàn)的人為錯(cuò)誤引起的。錯(cuò)誤是由于時(shí)序問(wèn)題引起的,與處理過(guò)程無(wú)關(guān)。現(xiàn)象是由于難于精確再現(xiàn)的輸入狀態(tài)(例如,實(shí)時(shí)應(yīng)用中輸入順序不確定)引起?,F(xiàn)象可能是周期出現(xiàn)的。在軟、硬件結(jié)合的嵌入式系統(tǒng)中常常遇到。

175幾種主要的調(diào)試方法調(diào)試的關(guān)鍵在于推斷程序內(nèi)部的錯(cuò)誤位置及原因??梢圆捎靡韵路椒ǎ簭?qiáng)行排錯(cuò) 這種調(diào)試方法目前使用較多,效率較低。它不需要過(guò)多的思考,比較省腦筋。例如:

通過(guò)內(nèi)存全部打印來(lái)調(diào)試,在這大量的數(shù)據(jù)中尋找出錯(cuò)的位置。176

在程序特定部位設(shè)置打印語(yǔ)句,把打印語(yǔ)句插在出錯(cuò)的源程序的各個(gè)關(guān)鍵變量改變部位、重要分支部位、子程序調(diào)用部位,跟蹤程序的執(zhí)行,監(jiān)視重要變量的變化。

自動(dòng)調(diào)試工具。利用某些程序語(yǔ)言的調(diào)試功能或?qū)iT的交互式調(diào)試工具,分析程序的動(dòng)態(tài)過(guò)程,而不必修改程序。

177

應(yīng)用以上任一種方法之前,都應(yīng)當(dāng)對(duì)錯(cuò)誤的征兆進(jìn)行全面徹底的分析,得出對(duì)出錯(cuò)位置及錯(cuò)誤性質(zhì)的推測(cè),再使用一種適當(dāng)?shù)恼{(diào)試方法來(lái)檢驗(yàn)推測(cè)的正確性?;厮莘ㄕ{(diào)試

這是在小程序中常用的一種有效的調(diào)試方法。

一旦發(fā)現(xiàn)了錯(cuò)誤,人們先分析錯(cuò)誤征兆,確定最先發(fā)現(xiàn)“癥狀”的位置。178

然后,人工沿程序的控制流程,向回追蹤源程序代碼,直到找到錯(cuò)誤根源或確定錯(cuò)誤產(chǎn)生的范圍。例如,程序中發(fā)現(xiàn)錯(cuò)誤處是某個(gè)打印語(yǔ)句。通過(guò)輸出值可推斷程序在這一點(diǎn)上變量的值。再?gòu)倪@一點(diǎn)出發(fā),回溯程序的執(zhí)行過(guò)程,反復(fù)考慮:“如果程序在這一點(diǎn)上的狀態(tài)(變量的值)是這樣,那么程序在上一點(diǎn)的狀態(tài)一定是這樣...”,直到找到錯(cuò)誤的位置。

179歸納法調(diào)試歸納法是一種從特殊推斷一般的系統(tǒng)化思考方法。歸納法調(diào)試的基本思想是:從一些線索(錯(cuò)誤征兆)著手,通過(guò)分析它們之間的關(guān)系來(lái)找出錯(cuò)誤。

收集有關(guān)的數(shù)據(jù)

列出所有已知的測(cè)試用例和程序執(zhí)行結(jié)果。看哪些輸入數(shù)據(jù)的運(yùn)行結(jié)果是正確的,哪些輸入數(shù)據(jù)的運(yùn)行結(jié)果有錯(cuò)誤。

180

組織數(shù)據(jù)

由于歸納法是從特殊到一般的推斷過(guò)程,所以需要組織整理數(shù)據(jù),以發(fā)現(xiàn)規(guī)律。常以3W1H形式組織可用的數(shù)據(jù):“What”列出一般現(xiàn)象;“Where”說(shuō)明發(fā)現(xiàn)現(xiàn)象的地點(diǎn);“When”列出現(xiàn)象發(fā)生時(shí)所有已知情況;“How”說(shuō)明現(xiàn)象的范圍和量級(jí);181182“Yes”描述出現(xiàn)錯(cuò)誤的3W1H;“No”作為比較,描述了沒(méi)有錯(cuò)誤的3W1H。通過(guò)分析找出矛盾來(lái)。

提出假設(shè) 分析線索之間的關(guān)系,利用在線索結(jié)構(gòu)中觀察到的矛盾現(xiàn)象,設(shè)計(jì)一個(gè)或多個(gè)關(guān)于出錯(cuò)原因的假設(shè)。如果一個(gè)假設(shè)也提不出來(lái),歸納過(guò)程就需要收集更多的數(shù)據(jù)。此時(shí),應(yīng)當(dāng)再設(shè)計(jì)與執(zhí)行一些測(cè)試用例,以獲得更多的數(shù)據(jù)。

183

證明假設(shè)把假設(shè)與原始線索或數(shù)據(jù)進(jìn)行比較,若它能完全解釋一切現(xiàn)象,則假設(shè)得到證明;否則,就認(rèn)為假設(shè)不合理,或不完全,或是存在多個(gè)錯(cuò)誤,以致只能消除部分錯(cuò)誤。184演繹法調(diào)試

演繹法是一種從一般原理或前提出發(fā),經(jīng)過(guò)排除和精化的過(guò)程來(lái)推導(dǎo)出結(jié)論的思考方法。演繹法排錯(cuò)是測(cè)試人員首先根據(jù)已有的測(cè)試用例,設(shè)想及枚舉出所有可能出錯(cuò)的原因做為假設(shè);然后再用原始測(cè)試數(shù)據(jù)或新的測(cè)試,從中逐個(gè)排除不可能正確的假設(shè);最后,再用測(cè)試數(shù)據(jù)驗(yàn)證余下的假設(shè)確是出錯(cuò)的原因。185

列舉所有可能出錯(cuò)原因的假設(shè)

把所有可能的錯(cuò)誤原因列成表。通過(guò)它們,可以組織、分析現(xiàn)有數(shù)據(jù)。

利用已有的測(cè)試數(shù)據(jù),排除不正確的假設(shè)

仔細(xì)分析已有的數(shù)據(jù),尋找矛盾,力求排除前一步列出所有原因。如果所有原因都被排除了,則需要補(bǔ)充一些數(shù)據(jù)(測(cè)試用例),以建立新的假設(shè)。186

改進(jìn)余下的假設(shè)

利用已知的線索,進(jìn)一步改進(jìn)余下的假設(shè),使之更具體化,以便可以精確地確定出錯(cuò)位置。

證明余下的假設(shè)187調(diào)試原則在調(diào)試方面,許多原則本質(zhì)上是心理學(xué)方面的問(wèn)題。調(diào)試由兩部分組成,調(diào)試原則也分成兩組。確定錯(cuò)誤的性質(zhì)和位置的原則用頭腦去分析思考與錯(cuò)誤征兆有關(guān)的信息。避開(kāi)死胡同。188

只把調(diào)試工具當(dāng)做輔助手段來(lái)使用。利用調(diào)試工具,可以幫助思考,但不能代替思考。避免用試探法,最多只能把它當(dāng)做最后手段。修改錯(cuò)誤的原則在出現(xiàn)錯(cuò)誤的地方,很可能還有別的錯(cuò)誤。189

修改錯(cuò)誤的一個(gè)常見(jiàn)失誤是只修改了這個(gè)錯(cuò)誤的征兆或這個(gè)錯(cuò)誤的表現(xiàn),而沒(méi)有修改錯(cuò)誤的本身。當(dāng)心修正一個(gè)錯(cuò)誤的同時(shí)有可能會(huì)引入新的錯(cuò)誤。修改錯(cuò)誤的過(guò)程將迫使人們暫時(shí)回到程序設(shè)計(jì)階段。修改源代碼程序,不要改變目標(biāo)代碼。

1907.7軟件可靠性

7.7.1基本概念

1.軟件可靠性的定義 軟件可靠性——程序在給定的時(shí)間間隔內(nèi),按照規(guī)格說(shuō)明書(shū)的規(guī)定成功地運(yùn)行的概率。

2.軟件的可用性 軟件可用性——程序在給定的時(shí)間點(diǎn),按照規(guī)格說(shuō)明書(shū)的規(guī)定,成功地運(yùn)行的概率。191

7.7.2估算平均無(wú)故障時(shí)間(MTTF)的方法

1.符號(hào)

ET——測(cè)試之前程序中故障總數(shù);

IT——程序長(zhǎng)度(機(jī)器指令總數(shù));

τ——測(cè)試(包括調(diào)試)時(shí)間;

Ed(τ)——在0至τ期間發(fā)現(xiàn)的錯(cuò)誤數(shù);

Ec(τ)——在0至r期間改正的錯(cuò)誤數(shù)。192

2.基本假定(1)在類似的程序中,單位長(zhǎng)度里的故障數(shù)ET/IT近似為常數(shù)。(2)失效率正比于軟件中剩余的(潛藏的)故障數(shù),而平均無(wú)故障時(shí)間MTTF與剩余的故障數(shù)成反比。

3.估算平均無(wú)故障時(shí)間 經(jīng)驗(yàn)表明,平均無(wú)故障時(shí)間與單位長(zhǎng)度程序中剩余的故障數(shù)成反比,即

其中K為常數(shù),它的值應(yīng)該根據(jù)經(jīng)驗(yàn)選取。K的典型值是200。193

4.估計(jì)故障總數(shù)的方法(1)植入故障法 在測(cè)試之前由專人在程序中隨機(jī)地植入一些故障,測(cè)試之后,根據(jù)測(cè)試小組發(fā)現(xiàn)的故障中原有的和植入的兩種故障的比例,來(lái)估計(jì)程序中原有故障的總數(shù)ET

。(2)分別測(cè)試法 分別測(cè)試法使用兩個(gè)測(cè)試員(或測(cè)試小組),彼此獨(dú)立地測(cè)試同一個(gè)程序的兩個(gè)副本,把其中一個(gè)測(cè)試員發(fā)現(xiàn)的故障作為有標(biāo)記的故障。194

7.7.3程序正確性證明 正確性證明的基本思想是證明程序能完成預(yù)定的功能。因此,應(yīng)該提供對(duì)程序功能的 嚴(yán)格數(shù)學(xué)說(shuō)明,然后根據(jù)程序代碼證明程序確實(shí)能實(shí)現(xiàn)它的功能說(shuō)明。1957.9自動(dòng)測(cè)試工具

7.9.1測(cè)試數(shù)據(jù)生成程序 這種程序可以為測(cè)試某個(gè)系統(tǒng)而自動(dòng)產(chǎn)生大量輸入數(shù)據(jù),但是它不能自動(dòng)產(chǎn)生預(yù)期的

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論