軟件工程第7章 實(shí)現(xiàn)_第1頁(yè)
軟件工程第7章 實(shí)現(xiàn)_第2頁(yè)
軟件工程第7章 實(shí)現(xiàn)_第3頁(yè)
軟件工程第7章 實(shí)現(xiàn)_第4頁(yè)
軟件工程第7章 實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩78頁(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)介

第7章實(shí)現(xiàn)1編碼2軟件測(cè)試基礎(chǔ)3單元測(cè)試4集成測(cè)試5確認(rèn)測(cè)試6白盒測(cè)試技術(shù)7黑盒測(cè)試技術(shù)8調(diào)試9軟件可靠性1.實(shí)現(xiàn):包括編碼和測(cè)試。2.編碼:就是把軟件設(shè)計(jì)結(jié)果翻譯成用某種程序設(shè)計(jì)語(yǔ)言書寫的程序。3.測(cè)試:1)無(wú)論怎樣強(qiáng)調(diào)軟件測(cè)試的重要性和它對(duì)軟件可靠性的影響都不過(guò)分;2)測(cè)試的目的就是在軟件投入生產(chǎn)性運(yùn)行之前,盡可能多地發(fā)現(xiàn)軟件中的錯(cuò)誤;3)軟件測(cè)試在軟件生命周期中橫跨兩個(gè)階段;4)調(diào)試:是測(cè)試階段最困難的工作。1.程序設(shè)計(jì)語(yǔ)言是人和計(jì)算機(jī)通信的最基本的工具,它的特點(diǎn)必然會(huì)影響人的思維和解題方式,因此,編碼之前的一項(xiàng)重要工作就是選擇一種適當(dāng)?shù)某绦蛟O(shè)計(jì)語(yǔ)言。2.匯編語(yǔ)言和高級(jí)語(yǔ)言7.1編碼

7.1.1選擇程序設(shè)計(jì)語(yǔ)言1)匯編語(yǔ)言:使用匯編語(yǔ)言編碼需要把軟件設(shè)計(jì)翻譯成機(jī)器操作的序列,由于這兩種表示方法很不相同,因此匯編程序設(shè)計(jì)既困難又容易出差錯(cuò)。2)高級(jí)語(yǔ)言一般都容許用戶給程序變量和子程序賦予含義鮮明的名字,通過(guò)名字很容易把程序?qū)ο蠛退鼈兯淼膶?shí)體聯(lián)系起來(lái);此外,高級(jí)語(yǔ)言使用的符號(hào)和概念更符合人的習(xí)慣。因此,用高級(jí)語(yǔ)言寫的程序容易閱讀,容易測(cè)試,容易調(diào)試,容易維護(hù)。3.選擇程序設(shè)計(jì)語(yǔ)言的理想標(biāo)準(zhǔn):.理想的模塊化機(jī)制;.可讀性好的控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu);.良好的獨(dú)立編譯機(jī)制。4.實(shí)用標(biāo)準(zhǔn):.系統(tǒng)用戶的要求;.可以使用的編譯程序;.可以得到的軟件工具;.工程規(guī)模;.程序員的知識(shí);.軟件可移植性要求.軟件的應(yīng)用領(lǐng)域◆好程序的一個(gè)重要標(biāo)準(zhǔn)是:源程序代碼的邏輯簡(jiǎn)明清晰、易讀易懂1.程序內(nèi)部的文檔2.數(shù)據(jù)說(shuō)明3.語(yǔ)句構(gòu)造4.輸入輸出5.效率7.1.2編碼風(fēng)格?表面看來(lái),軟件測(cè)試的目的與軟件工程所有其他階段的目的都相反;?測(cè)試階段的根本目標(biāo):是盡可能多地發(fā)現(xiàn)并排除軟件中潛藏的錯(cuò)誤,最終把一個(gè)高質(zhì)量的軟件系統(tǒng)交給用戶使用;?但是,僅就測(cè)試本身而言,它的目標(biāo)可能和許多人原來(lái)設(shè)想的很不相同。7.2軟件測(cè)試基礎(chǔ)G.Myers給出了關(guān)于測(cè)試的一些規(guī)則,這些規(guī)則也可以看作是測(cè)試的目標(biāo)或定義:1)

測(cè)試是為了發(fā)現(xiàn)程序中的錯(cuò)誤而執(zhí)行程序的過(guò)程;2)

好的測(cè)試方案是極可能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試方案;3)

成功的測(cè)試是發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試。7.2.1軟件測(cè)試的目標(biāo)為了能設(shè)計(jì)出有效的測(cè)試方案,軟件工程師必須深入理解并正確運(yùn)用指導(dǎo)軟件測(cè)試的基本準(zhǔn)則。所有測(cè)試都應(yīng)該能追溯到用戶需求;應(yīng)該遠(yuǎn)在測(cè)試開始之前就制定出測(cè)試計(jì)劃;把Pareto原理應(yīng)用到軟件測(cè)試中;Pareto原理:測(cè)試發(fā)現(xiàn)的錯(cuò)誤中的80%很可能是由程序中20%的模塊造成的;應(yīng)該從“小規(guī)?!睖y(cè)試開始,并逐步進(jìn)行“大規(guī)?!睖y(cè)試;5.窮舉測(cè)試是不可能的;6.為了達(dá)到最佳的測(cè)試效果,應(yīng)該由獨(dú)立的第三方從事測(cè)試工作。7.2.2軟件測(cè)試準(zhǔn)則1.白盒測(cè)試法

是可以把程序看成裝在一個(gè)透明的白盒子里,測(cè)試者完全知道程序的結(jié)構(gòu)和處理算法。這種方法按照程序內(nèi)部的邏輯測(cè)試程序,檢測(cè)程序中的主要執(zhí)行通路是否都能按預(yù)定要求正確工作。

是知道產(chǎn)品的內(nèi)部工作過(guò)程,可以通過(guò)測(cè)試來(lái)檢驗(yàn)產(chǎn)品內(nèi)部動(dòng)作是否按照規(guī)格說(shuō)明書的規(guī)定正常進(jìn)行。

因此,白盒測(cè)試又稱為結(jié)構(gòu)測(cè)試。7.2.3測(cè)試方法2.黑盒測(cè)試法

是把程序看作一個(gè)黑盒子,完全不考慮程序的內(nèi)部結(jié)構(gòu)和處理過(guò)程。也就是說(shuō),黑盒測(cè)試是在程序接口進(jìn)行的測(cè)試,它只檢查程序功能是否能按照規(guī)格說(shuō)明書的規(guī)定正常使用,程序是否能適當(dāng)?shù)亟邮蛰斎霐?shù)據(jù)并產(chǎn)生正確的輸出信息,程序運(yùn)行過(guò)程中能否保持外部信息的完整性。

是已經(jīng)知道了產(chǎn)品應(yīng)該具有的功能,可以通過(guò)測(cè)試來(lái)檢驗(yàn)是否每個(gè)功能都能正常使用。

因此,黑盒測(cè)試又稱為功能測(cè)試?!舸笮蛙浖到y(tǒng)的測(cè)試過(guò)程基本上由下述幾個(gè)步驟組成:1.模塊測(cè)試模塊測(cè)試的目的是保證每個(gè)模塊作為一個(gè)單元能正確運(yùn)行,所以模塊測(cè)試通常又稱為單元測(cè)試。在這個(gè)測(cè)試步驟中所發(fā)現(xiàn)的往往是編碼和詳細(xì)設(shè)計(jì)的錯(cuò)誤。7.2.4測(cè)試步驟2.子系統(tǒng)測(cè)試子系統(tǒng)測(cè)試是把經(jīng)過(guò)單元測(cè)試的模塊放在一起形成一個(gè)子系統(tǒng)來(lái)測(cè)試。3.系統(tǒng)測(cè)試系統(tǒng)測(cè)試是把經(jīng)過(guò)測(cè)試的子系統(tǒng)裝配成一個(gè)完整的系統(tǒng)來(lái)測(cè)試。4.驗(yàn)收測(cè)試

驗(yàn)收測(cè)試把軟件系統(tǒng)作為單一的實(shí)體進(jìn)行測(cè)試;

驗(yàn)收測(cè)試的目的是驗(yàn)證系統(tǒng)確實(shí)能夠滿足用戶的需要,在這個(gè)測(cè)試步驟中發(fā)現(xiàn)的往往是系統(tǒng)需求說(shuō)明書中的錯(cuò)誤。驗(yàn)收測(cè)試也稱為確認(rèn)測(cè)試。5.平行運(yùn)行

平行運(yùn)行:就是同時(shí)運(yùn)行新開發(fā)出來(lái)的系統(tǒng)和將被它取代的舊系統(tǒng),以便比較新舊兩個(gè)系統(tǒng)的處理結(jié)果。這樣做的具體目的有如下幾點(diǎn):(1)可以在準(zhǔn)生產(chǎn)環(huán)境中運(yùn)行新系統(tǒng)而又不冒風(fēng)險(xiǎn);(2)用戶能有一段熟悉新系統(tǒng)的時(shí)間;(3)可以驗(yàn)證用戶指南和使用手冊(cè)之類的文檔;(4)能夠以準(zhǔn)生產(chǎn)模式對(duì)新系統(tǒng)進(jìn)行全負(fù)荷測(cè)試,可以用測(cè)試結(jié)果驗(yàn)證性能指標(biāo)。測(cè)試階段的輸入信息有兩類:(1)軟件配置:包括需求說(shuō)明書、設(shè)計(jì)說(shuō)明書和源程序清單等;

(2)測(cè)試配置:包括測(cè)試計(jì)劃和測(cè)試方案。所謂測(cè)試方案不僅僅是測(cè)試時(shí)使用的輸入數(shù)據(jù),

還應(yīng)該包括每組輸入數(shù)據(jù)預(yù)定要檢驗(yàn)的功能,以及每組輸入數(shù)據(jù)預(yù)期應(yīng)該得到的正確輸出。7.2.5測(cè)試階段的信息流圖1測(cè)試階段的信息流

單元測(cè)試又稱為模塊測(cè)試,集中檢測(cè)軟件設(shè)計(jì)的最小單元——模塊;通常,單元測(cè)試和編碼軟件屬于過(guò)程的同一個(gè)階段。

在編寫出源程序代碼并通過(guò)了編譯程序的語(yǔ)法檢查之后,就可以對(duì)重要的執(zhí)行通路進(jìn)行測(cè)試,以便發(fā)現(xiàn)模塊內(nèi)部的錯(cuò)誤。

單元測(cè)試主要使用白盒測(cè)試技術(shù),而且對(duì)多個(gè)模塊的測(cè)試可以并行地進(jìn)行。

可以應(yīng)用人工測(cè)試和計(jì)算機(jī)測(cè)試這樣兩種不同類型的測(cè)試方法,完成單元測(cè)試工作。7.3單元測(cè)試1.模塊接口

首先應(yīng)該對(duì)通過(guò)模塊接口的數(shù)據(jù)流進(jìn)行測(cè)試,如果數(shù)據(jù)不能正確地進(jìn)出,所有其他測(cè)試都是不切實(shí)際的。2.局部數(shù)據(jù)結(jié)構(gòu)

對(duì)于模塊來(lái)說(shuō),局部數(shù)據(jù)結(jié)構(gòu)是常見的錯(cuò)誤來(lái)源。

應(yīng)該仔細(xì)設(shè)計(jì)測(cè)試方案,以便發(fā)現(xiàn)局部數(shù)據(jù)說(shuō)明、初始化、默認(rèn)值等方面的錯(cuò)誤。7.3.1測(cè)試重點(diǎn)3.重要的執(zhí)行通路

由于通常不可能進(jìn)行窮盡測(cè)試,因此,在單元測(cè)試期間選擇最有代表性、最可能發(fā)現(xiàn)錯(cuò)誤的執(zhí)行通路進(jìn)行測(cè)試十分關(guān)鍵;

應(yīng)該設(shè)計(jì)測(cè)試方案用來(lái)發(fā)現(xiàn)由于錯(cuò)誤的計(jì)算、不正確的比較或不適當(dāng)?shù)目刂屏鞫斐傻腻e(cuò)誤。4.出錯(cuò)處理通路

好的設(shè)計(jì)應(yīng)該能預(yù)見出現(xiàn)錯(cuò)誤的條件,并且設(shè)置適當(dāng)?shù)奶幚礤e(cuò)誤的通路,以便在真的出現(xiàn)錯(cuò)誤時(shí)執(zhí)行相應(yīng)的出錯(cuò)處理通路或干凈地結(jié)束處理。

不僅應(yīng)該在程序中包含出錯(cuò)處理通路,而且應(yīng)該認(rèn)真測(cè)試這種通路。5.邊界條件

邊界測(cè)試是單元測(cè)試中最后的也可能是最重要的任務(wù)。

軟件常常在它的邊界上失效,故使用剛好小于、剛好等于和剛好大于最大值或最小值的數(shù)據(jù)結(jié)構(gòu)、控制量和數(shù)據(jù)值的測(cè)試方案,非??赡馨l(fā)現(xiàn)軟件中的錯(cuò)誤?!羧斯y(cè)試源程序可以由編寫者本人非正式地進(jìn)行,也可以由審查小組正式進(jìn)行。后者稱為代碼審查。◆審查小組最好由下述4人組成:組長(zhǎng);(2)程序的設(shè)計(jì)者;(3)程序的編寫者;(4)程序的測(cè)試者。7.3.2代碼審查

◆審查方法:

方法1:▲小組成員應(yīng)該先研究設(shè)計(jì)說(shuō)明書,力求理解這個(gè)設(shè)計(jì)?!鵀榱藥椭斫?,可以先由設(shè)計(jì)者扼要地介紹他的設(shè)計(jì)。▲再由程序的編寫者解釋他是怎樣用程序代碼實(shí)現(xiàn)這個(gè)設(shè)計(jì)的,通常是逐個(gè)語(yǔ)句地講述程序的邏輯。▲對(duì)照程序設(shè)計(jì)常見錯(cuò)誤清單,分析審查這個(gè)程序。當(dāng)發(fā)現(xiàn)錯(cuò)誤時(shí)由組長(zhǎng)記錄下來(lái),審查會(huì)繼續(xù)進(jìn)行。

方法2:▲稱為預(yù)排:▲由一個(gè)人扮演“測(cè)試者”,其他人扮演“計(jì)算機(jī)”?!鴷?huì)前測(cè)試者準(zhǔn)備好測(cè)試方案,會(huì)上由扮演計(jì)算機(jī)的成員模擬計(jì)算機(jī)執(zhí)行被測(cè)試的程序?!诖蠖鄶?shù)情況下,通過(guò)向程序員提出關(guān)于他的程序的邏輯和他編寫程序時(shí)所做的假設(shè)的疑問(wèn),可以發(fā)現(xiàn)的錯(cuò)誤比由測(cè)試方案直接發(fā)現(xiàn)的錯(cuò)誤多?!裟K不是一個(gè)獨(dú)立的程序,因此必須為每個(gè)單元測(cè)試開發(fā)驅(qū)動(dòng)軟件和(或)存根軟件?!趄?qū)動(dòng)程序:就是一個(gè)“主程序”,它接收測(cè)試數(shù)據(jù),把這些數(shù)據(jù)傳送給被測(cè)試的模塊,并且印出有關(guān)的結(jié)果。◆存根程序代替被測(cè)試的模塊所調(diào)用的模塊。因此存根程序也可以稱為“虛擬子程序”。7.3.3計(jì)算機(jī)測(cè)試圖7.2正文加工系統(tǒng)的層次圖Ⅰ.TESTSTUB(*測(cè)試正文編輯模塊用的存根程序*) 初始化; 輸出信息“進(jìn)入了正文編輯程序”; 輸出“輸入的控制信息是”CFUNCT; 輸出緩沖區(qū)中的字符串; IFCFUNCT=CHANGE THEN 把緩沖區(qū)中第二個(gè)字改為*** ELSE 在緩沖區(qū)的尾部加??? END IF; 輸出緩沖區(qū)中的新字符串;ENDTESTSTUBⅡ.TESTDRIVER(*測(cè)試正文編輯模塊用的驅(qū)動(dòng)程序*) 說(shuō)明長(zhǎng)度為2500個(gè)字符的一個(gè)緩沖區(qū); 把CFUNCT置為希望測(cè)試的狀態(tài); 輸入字符串; 調(diào)用正文編輯模塊; 停止或再次初啟;ENDTESTDRIVER◆集成測(cè)試包括子系統(tǒng)測(cè)試和系統(tǒng)測(cè)試;◆集成測(cè)試是測(cè)試和組裝軟件的系統(tǒng)化技術(shù),主要目標(biāo)是發(fā)現(xiàn)與接口有關(guān)的問(wèn)題?!粲赡K組裝成程序時(shí)有兩種方法:

1.非漸增式測(cè)試方法2.漸增式測(cè)試方法3.比較7.4集成測(cè)試◆當(dāng)使用漸增方式把模塊結(jié)合到程序中去時(shí),有自頂向下和自底向上兩種集成策略。7.4.1自頂向下集成◆思想:從主控制模塊開始,沿著程序的控制層次向下移動(dòng),逐漸把各個(gè)模塊結(jié)合起來(lái)。在把附屬于(及最終附屬于)主控制模塊的那些模塊組裝到程序結(jié)構(gòu)中去時(shí),或者使用深度優(yōu)先的策略,或者使用寬度優(yōu)先的策略?!羯疃葍?yōu)先的結(jié)合方法:先組裝在軟件結(jié)構(gòu)的一條主控制通路上的所有模塊?!舳鴮挾葍?yōu)先的結(jié)合方法:是沿軟件結(jié)構(gòu)水平地移動(dòng),把處于同一個(gè)控制層次上的所有模塊組裝起來(lái)。圖7.3自頂向下結(jié)合◆把模塊結(jié)合進(jìn)軟件結(jié)構(gòu)的具體過(guò)程由下述4個(gè)步驟完成:1.對(duì)主控制模塊進(jìn)行測(cè)試,測(cè)試時(shí)用存根程序代替所有直接附屬于主控制模塊的模塊;2.根據(jù)選定的結(jié)合策略(深度優(yōu)先或?qū)挾葍?yōu)先),每次用一個(gè)實(shí)際模塊代換一個(gè)存根程序;3.在結(jié)合進(jìn)一個(gè)模塊的同時(shí)進(jìn)行測(cè)試;4.為了保證加入模塊沒有引進(jìn)新的錯(cuò)誤,可能需要進(jìn)行回歸測(cè)試(即,全部或部分地重復(fù)以前做過(guò)的測(cè)試)?!魪牡诙介_始不斷地重復(fù)進(jìn)行上述過(guò)程,直到構(gòu)造起完整的軟件結(jié)構(gòu)為止?!糇皂斚蛳录傻膬?yōu)點(diǎn):自頂向下的結(jié)合策略能夠在測(cè)試的早期對(duì)主要的控制或關(guān)鍵的抉擇進(jìn)行檢驗(yàn)。如果主要控制確實(shí)有問(wèn)題,早期認(rèn)識(shí)到這類問(wèn)題是很有好處的,可以及早想辦法解決?!糇皂斚蛳录煞椒ǖ膯?wèn)題:最常見的是:為了充分地測(cè)試軟件系統(tǒng)的較高層次,需要在較低層次上的處理?!艚鉀Q方法:

1.把許多測(cè)試推遲到用真實(shí)模塊代替了存根程序以后再進(jìn)行;這種方法失去了在特定的測(cè)試和組裝特定的模塊之間的精確對(duì)應(yīng)關(guān)系,這可能導(dǎo)致在確定錯(cuò)誤的位置和原因時(shí)發(fā)生困難。2.從層次系統(tǒng)的底部向上組裝軟件?!糇缘紫蛏蠝y(cè)試從軟件結(jié)構(gòu)最低層的模塊開始組裝和測(cè)試?!糇缘紫蛏蠝y(cè)試不需要存根程序?!糇缘紫蛏系慕Y(jié)合策略:1.把低層模塊組合成實(shí)現(xiàn)某個(gè)特定的軟件子功能的族;2.寫一個(gè)驅(qū)動(dòng)程序(是用于測(cè)試的控制程序),協(xié)調(diào)測(cè)試數(shù)據(jù)的輸入和輸出;3.對(duì)由模塊組成的子功能族進(jìn)行測(cè)試;

4.去掉驅(qū)動(dòng)程序,沿軟件結(jié)構(gòu)自下向上移動(dòng),把子功能族組合起來(lái)形成更大的子功能族。上述第二步到第四步實(shí)質(zhì)上構(gòu)成了一個(gè)循環(huán)。7.4.2自底向上集成圖7.4自底向上結(jié)合◆自頂向下測(cè)試方法的主要優(yōu)點(diǎn)是:1.不需要測(cè)試驅(qū)動(dòng)程序;

2.能夠在測(cè)試階段的早期實(shí)現(xiàn)并驗(yàn)證系統(tǒng)的主要功能,而且能在早期發(fā)現(xiàn)上層模塊的接口錯(cuò)誤。◆自頂向下測(cè)試方法的主要缺點(diǎn)是:

1.需要存根程序,可能遇到與此相聯(lián)系的測(cè)試?yán)щy;

2.低層關(guān)鍵模塊中的錯(cuò)誤發(fā)現(xiàn)較晚,

3.而且用這種方法在早期不能充分展開人力??梢钥闯?,自底向上測(cè)試方法的優(yōu)缺點(diǎn)與自頂向下測(cè)試方法的優(yōu)缺點(diǎn)剛好相反。7.4.3不同集成測(cè)試策略的比較◆混合策略:

1.改進(jìn)的自頂向下測(cè)試方法基本上使用自頂向下的測(cè)試方法,但是在早期使用自底向上的方法測(cè)試軟件中的少數(shù)關(guān)鍵模塊。它的缺點(diǎn)也比自頂向下方法多一條,即測(cè)試關(guān)鍵模塊時(shí)需要驅(qū)動(dòng)程序。

2.混合法對(duì)軟件結(jié)構(gòu)中較上層使用的自頂向下方法與對(duì)軟件結(jié)構(gòu)中較下層使用的自底向上方法相結(jié)合。當(dāng)被測(cè)試的軟件中關(guān)鍵模塊比較多時(shí),這種混合法可能是最好的折衷方法?!艋貧w測(cè)試:是指重新執(zhí)行已經(jīng)做過(guò)的測(cè)試的某個(gè)子集,以保證上述這些變化沒有帶來(lái)非預(yù)期的副作用?!舾鼜V義地說(shuō),回歸測(cè)試就是用于保證由于調(diào)試或其他原因引起的變化,不會(huì)導(dǎo)致非預(yù)期的軟件行為或額外錯(cuò)誤的測(cè)試活動(dòng)。7.4.4回歸測(cè)試◆確認(rèn)測(cè)試:也稱為驗(yàn)收測(cè)試,它的目標(biāo)是驗(yàn)證軟件的有效性?!趄?yàn)證:指的是保證軟件正確地實(shí)現(xiàn)了某個(gè)特定要求的一系列活動(dòng),◆確認(rèn):指的是為了保證軟件確實(shí)滿足了用戶需求而進(jìn)行的一系列活動(dòng)?!糗浖行缘囊粋€(gè)簡(jiǎn)單定義是:如果軟件的功能和性能如同用戶所合理期待的那樣,軟件就是有效的。7.5確認(rèn)測(cè)試◆

確認(rèn)測(cè)試必須有用戶積極參與,或者以用戶為主進(jìn)行;◆

確認(rèn)測(cè)試通常使用黑盒測(cè)試法;◆

應(yīng)該仔細(xì)設(shè)計(jì)測(cè)試計(jì)劃和測(cè)試過(guò)程,測(cè)試計(jì)劃包括要進(jìn)行的測(cè)試的種類及進(jìn)度安排,測(cè)試過(guò)程規(guī)定了用來(lái)檢測(cè)軟件是否與需求一致的測(cè)試方案。通過(guò)測(cè)試和調(diào)試要保證軟件能滿足所有功能要求;能達(dá)到每個(gè)性能要求,文檔資料是準(zhǔn)確而完整的,此外,還應(yīng)該保證軟件能滿足其他預(yù)定的要求?!?/p>

確認(rèn)測(cè)試有下述兩種可能的結(jié)果:1.功能和性能與用戶要求一致,軟件是可以接受的;2.功能和性能與用戶要求有差距。7.5.1確認(rèn)測(cè)試的范圍◆確認(rèn)測(cè)試的一個(gè)重要內(nèi)容是復(fù)查軟件配置?!魪?fù)查的目的是保證軟件配置的所有成分都齊全,質(zhì)量符合要求,文檔與程序完全一致,具有完成軟件維護(hù)所必須的細(xì)節(jié),而且已經(jīng)編好目錄。7.5.3Alpha和Beta測(cè)試◆如果軟件是專為某個(gè)客戶開發(fā)的,可以進(jìn)行一系列驗(yàn)收測(cè)試,以便用戶確認(rèn)所有需求都得到滿足?!羧绻粋€(gè)軟件是為許多客戶開發(fā)的,在這種情況下,絕大多數(shù)軟件開發(fā)商都使用被稱為Alpha測(cè)試和Beta測(cè)試的過(guò)程,來(lái)發(fā)現(xiàn)那些看起來(lái)只有最終用戶才能發(fā)現(xiàn)的錯(cuò)誤。7.5.2軟件配置復(fù)查◆Alpha測(cè)試由用戶在開發(fā)者的場(chǎng)所進(jìn)行,并且在開發(fā)者對(duì)用戶的“指導(dǎo)”下進(jìn)行測(cè)試。開發(fā)者負(fù)責(zé)記錄發(fā)現(xiàn)的錯(cuò)誤和使用中遇到的問(wèn)題??傊?,Alpha測(cè)試是在受控的環(huán)境中進(jìn)行的?!鬊eta測(cè)試由軟件的最終用戶們?cè)谝粋€(gè)或多個(gè)客戶場(chǎng)所進(jìn)行,Beta測(cè)試是軟件在開發(fā)者不能控制的環(huán)境中的“真實(shí)”應(yīng)用。用戶記錄在Beta測(cè)試過(guò)程中遇到的一切問(wèn)題,并且定期把這些問(wèn)題報(bào)告給開發(fā)者。接收到在Beta測(cè)試期間報(bào)告的問(wèn)題之后,開發(fā)者對(duì)軟件產(chǎn)品進(jìn)行必要的修改,并準(zhǔn)備向全體客戶發(fā)布最終的軟件產(chǎn)品?!?/p>

設(shè)計(jì)測(cè)試方案:1)是測(cè)試階段的關(guān)鍵技術(shù)問(wèn)題;2)所謂測(cè)試方案:包括具體的測(cè)試目的,應(yīng)該輸入的測(cè)試數(shù)據(jù)和預(yù)期的結(jié)果。3)設(shè)計(jì)測(cè)試方案的基本目標(biāo)是:確定一組最可能發(fā)現(xiàn)某個(gè)錯(cuò)誤或某類錯(cuò)誤的測(cè)試數(shù)據(jù)。7.6白盒測(cè)試技術(shù)◆所謂邏輯覆蓋:是對(duì)一系列測(cè)試過(guò)程的總稱,這組測(cè)試過(guò)程逐漸進(jìn)行越來(lái)越完整的通路測(cè)試。

1.語(yǔ)句覆蓋

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

2)為了使每個(gè)語(yǔ)句都執(zhí)行一次,程序的執(zhí)行路徑應(yīng)該是sacbed,為此只需要輸入下面的測(cè)試數(shù)據(jù)(實(shí)際上X可以是任意實(shí)數(shù)):A=2,B=0,X=43)語(yǔ)句覆蓋是很弱的邏輯覆蓋標(biāo)準(zhǔn)。7.6.1邏輯覆蓋圖7.5被測(cè)試模塊的流程圖例1.設(shè)計(jì)下列偽碼程序的語(yǔ)句覆蓋和路徑覆蓋測(cè)試用例:STARTINPUT(A,B,C)IFA>5THENX=5ELSEX=1ENDIFIFB>10THENY=20ELSEY=2ENDIFIFC>15THENZ=30ELSEZ=3ENDIFPRINT(X,Y,Z)STOP語(yǔ)句覆蓋的典型測(cè)試用例:1)3個(gè)判定表達(dá)式的值全為假輸入:A=1,B=1,C=1

預(yù)期的輸出:X=1,Y=2,Z=32)3個(gè)判定表達(dá)式的值全為真輸入:A=10,B=20,C=30

預(yù)期的輸出:X=10,Y=20,Z=30路徑覆蓋的測(cè)試用例:1)(T,T,T)5)(F,F,F)2)(T,T,F)6)(F,F,T)3)(T,F,F)7)(F,T,F)4)(T,F,T)8)(F,T,T)2.判定覆蓋1)判定覆蓋又叫分支覆蓋;2)含義是:不僅每個(gè)語(yǔ)句必須至少執(zhí)行一次,而且每個(gè)判定的每種可能的結(jié)果都應(yīng)該至少執(zhí)行一次,也就是每個(gè)判定的每個(gè)分支都至少執(zhí)行一次。3)能夠覆蓋路徑sacbed和sabd或者sacbd和sabed的測(cè)試數(shù)據(jù),都滿足判定覆蓋標(biāo)準(zhǔn)。

Ⅰ.A=3,B=0,X=3;TFⅡ.A=2,B=1,X=1;FT4)判定覆蓋比語(yǔ)句覆蓋強(qiáng),但是對(duì)程序邏輯的覆蓋程度仍然不高.3.條件覆蓋1)含義是:不僅每個(gè)語(yǔ)句至少執(zhí)行一次,而且使判定表達(dá)式中的每個(gè)條件都取到各種可能的結(jié)果。

Ⅰ.A=2,B=0,X=4;sacbedⅡ.A=1,B=1,X=1;sabd2)條件覆蓋通常比判定覆蓋強(qiáng),因?yàn)樗古卸ū磉_(dá)式中每個(gè)條件都取到了兩個(gè)不同的結(jié)果,判定覆蓋卻只關(guān)心整個(gè)判定表達(dá)式的值。a:A>1,A≤1,B=0,B≠0;b:A=2,A≠2,X>1,X≤1;4.判定/條件覆蓋1)含義是:選取足夠多的測(cè)試數(shù)據(jù),使得判定表達(dá)式中的每個(gè)條件都取到各種可能的值,而且每個(gè)判定表達(dá)式也都取到各種可能的結(jié)果。2)Ⅰ.A=2,B=0,X=4;sacbed,TTⅡ.A=1,B=1,X=1;sabd,FF3)有時(shí)判定/條件覆蓋也并不比條件覆蓋更強(qiáng)。5.條件組合覆蓋1)它要求選取足夠多的測(cè)試數(shù)據(jù),使得每個(gè)判定表達(dá)式中條件的各種可能組合都至少出現(xiàn)一次。2)顯然,滿足條件組合覆蓋標(biāo)準(zhǔn)的測(cè)試數(shù)據(jù),也一定滿足判定覆蓋、條件覆蓋和判定/條件覆蓋標(biāo)準(zhǔn)。因此,條件組合覆蓋是前述幾種覆蓋標(biāo)準(zhǔn)中最強(qiáng)的。3)但是,滿足條件組合覆蓋標(biāo)準(zhǔn)的測(cè)試數(shù)據(jù)并不一定能使程序中的每條路徑都執(zhí)行到,如sacbd。。對(duì)于左圖,共有8種可能的條件組合:1.A>1,B=02.A>1,

B≠03.A≤1,B=04.A≤1,B≠05.A=2,X>16.A=2,X≤17.A≠2,X>18.A≠2,X≤1Ⅰ.A=2,B=0,X=4;sacbed,1和5,TTⅡ.A=2,B=1,X=1;sabed,2和6,

FTⅢ.A=1,B=0,X=2;sabed,3和7,FTⅣ.A=1,B=1,X=1;sabd,4和8,FF例2.設(shè)計(jì)下列偽碼程序的分支覆蓋和條件組合覆蓋測(cè)試用例:STARTINPUT(A,B,C,D)IF(A>0)AND(B>O)THENX=A+BELSEX=A-BENDIFIF(C>A)OR(D<B)THENY=C-DELSEY=C+DENDIFPRINT(X,Y)STOP6.點(diǎn)覆蓋1)圖論中點(diǎn)覆蓋的概念定義如下:如果連通圖G的子圖G′是連通的,而且包含G的所有結(jié)點(diǎn),則稱

G′是G的點(diǎn)覆蓋。2)在正常情況下流圖是連通的有向圖,滿足點(diǎn)覆蓋標(biāo)準(zhǔn)要求。3)可以選取足夠多的測(cè)試數(shù)據(jù),使得程序執(zhí)行路徑至少經(jīng)過(guò)流圖的每個(gè)結(jié)點(diǎn)一次,由于流圖的每個(gè)結(jié)點(diǎn)與一條或多條語(yǔ)句相對(duì)應(yīng),顯然,點(diǎn)覆蓋標(biāo)準(zhǔn)和語(yǔ)句覆蓋標(biāo)準(zhǔn)是相同的。7.邊覆蓋1)圖論中邊覆蓋的定義是:如果連通圖G的子圖G″是連通的,而且包含G的所有邊,則稱G″是G的邊覆蓋。2)為了滿足邊覆蓋的測(cè)試標(biāo)準(zhǔn),要求選取足夠多測(cè)試數(shù)據(jù),使得程序執(zhí)行路徑至少經(jīng)過(guò)流圖中每條邊一次。通常邊覆蓋和判定覆蓋是一致的。8.路徑覆蓋含義是,選取足夠多測(cè)試數(shù)據(jù),使程序的每條可能路徑都至少執(zhí)行一次(如果程序圖中有環(huán),則要求每個(gè)環(huán)至少經(jīng)過(guò)一次)。1.基本路徑測(cè)試1)基本路徑測(cè)試是TomMcCabe提出的一種白盒測(cè)試技術(shù)。2)使用這種技術(shù)設(shè)計(jì)測(cè)試用例時(shí),首先計(jì)算程序的環(huán)形復(fù)雜度,并用V(G)為指南定義執(zhí)行路徑的基本集合,從該基本集合導(dǎo)出的測(cè)試用例可以保證程序中的每條語(yǔ)句至少執(zhí)行一次,而且每個(gè)條件在執(zhí)行時(shí)都將分別取真、假兩種值。7.6.2控制結(jié)構(gòu)測(cè)試★使用基本路徑測(cè)試技術(shù)設(shè)計(jì)測(cè)試用例的步驟如下:

第一步,根據(jù)過(guò)程設(shè)計(jì)結(jié)果畫出相應(yīng)的流圖。例:用基本路徑測(cè)試技術(shù)測(cè)試下面的用PDL描述的求平均值過(guò)程。1.畫出流圖PROCEDUREaverage;/*這個(gè)過(guò)程計(jì)算不超過(guò)100個(gè)在規(guī)定值域內(nèi)的有效數(shù)字的平均值;同時(shí)計(jì)算有效數(shù)字的總和及個(gè)數(shù)。*/ INTERFACERETURNSaverage,total.input,total.valid;INTERFACEACCEPTSvalue,minimum,maximum;TYPEvalue[1…100]ISSCALARARRAY;TYPEaverage,total.input,total.valid; minimum,maximum,sumISSCALAR;TYPEiISINTEGER;1: i=1; total.input=total.valid=0; sum=0;2: DOWHILEvalue[i]<>-9993: ANDtotal.input<1004: incrementtotal.inputby1;5: IFvalue[i]>=minimum6: ANDvalue[i]<=maximum7: THENincrementtotal.validby1; sum=sum+value[i];8: ENDIF11:THENaverage=sum/total.valid;

incrementiby1;12:ELSEaverage=-999;9: ENDDO13:ENDIF10:IFtotal.valid>0ENDaverage10: IFtotal.valid>011: THENaverage=sum/total.valid;12: ELSEaverage=-999;13: ENDIF ENDaverage圖7.6求平均值過(guò)程的流圖第二步,計(jì)算流圖的環(huán)形復(fù)雜度。第三步,確定線性獨(dú)立路徑的基本集合。1)所謂獨(dú)立路徑:是指至少引入程序的一個(gè)新處理語(yǔ)句集合或一個(gè)新條件的路徑,用流圖術(shù)語(yǔ)描述,獨(dú)立路徑至少包含一條在定義該路徑之前不曾用過(guò)的邊。2)使用基本路徑測(cè)試法設(shè)計(jì)測(cè)試用例時(shí),程序的環(huán)形復(fù)雜度決定了程序中獨(dú)立路徑的數(shù)量,而且這個(gè)數(shù)是確保程序中所有語(yǔ)句至少被執(zhí)行一次所需的測(cè)試數(shù)量的上界?!粝旅媪谐隽?條獨(dú)立路徑:路徑1:1—2—10—11—13路徑2:1—2—10—12—13路徑3:1—2—3—10—11—13路徑4:1—2—3—4—5—8—9—2—...路徑5:1—2—3—4—5—6—8—9—2—...路徑6:1—2—3—4—5—6—7—8—9—2—...路徑4,5,6后面的省略號(hào)表示,可以后接通過(guò)控制結(jié)構(gòu)其余部分的任意路徑。第四步,設(shè)計(jì)可強(qiáng)制執(zhí)行基本集合中每條路徑的測(cè)試用例。◆可以測(cè)試上一步得出的基本集合的測(cè)試用例如下:1.路徑1的測(cè)試用例:value[k]=有效輸入值,其中k<i;value[i]=-999,其中2≤i≤100;預(yù)期結(jié)果:基于k的正確平均值和總數(shù)?!镒⒁猓郝窂?無(wú)法獨(dú)立測(cè)試,必須作為路徑4、5和6的一部分來(lái)測(cè)試。2.路徑2的測(cè)試用例:value[1]=-999;預(yù)期結(jié)果:average=-999,其他都保持初始值。3.路徑2的測(cè)試用例:試圖處理101個(gè)或更多值;前100個(gè)數(shù)值應(yīng)該是有效輸入值;預(yù)期結(jié)果:前100個(gè)數(shù)的平均值,總數(shù)為100?!镒⒁猓郝窂?也無(wú)法獨(dú)立測(cè)試,必須作為路徑4、5和6的一部分來(lái)測(cè)試。4.路徑4的測(cè)試用例:value[i]=有效輸入值,其中i<100;value[k]<minimum,其中k<i;預(yù)期結(jié)果:基于k的正確平均值和總數(shù)。5.路徑5的測(cè)試用例:value[i]=有效輸入值,其中i<100;value[k]>maximum,其中k<i;預(yù)期結(jié)果:基于k的正確平均值和總數(shù)。6.路徑6的測(cè)試用例:value[i]=有效輸入值,其中i<100;預(yù)期結(jié)果:基于i的正確平均值和總數(shù)?!艨偨Y(jié):在測(cè)試過(guò)程中,執(zhí)行每個(gè)測(cè)試用例并把實(shí)際輸出結(jié)果與預(yù)期結(jié)果相比較。一旦執(zhí)行完所有測(cè)試用例,就可以確保程序中所有語(yǔ)句都至少被執(zhí)行了一次,而且每個(gè)條件都分別取過(guò)true值和false值?!魬?yīng)該注意:某些獨(dú)立路徑不能以獨(dú)立的方式測(cè)試,也就是說(shuō),程序的正常流程不能形成獨(dú)立執(zhí)行該路徑所需要的數(shù)據(jù)組合。在這種情況下,這些路徑必須作為另一個(gè)路徑的一部分來(lái)測(cè)試。例3.使用基本路徑測(cè)試方法,設(shè)計(jì)測(cè)試下面列出的偽碼程序的測(cè)試用例。

1:STARTINPUT(A,B,C,D)2:IF(A>0)3:AND(B>O)4:THENX=A+B5:ELSEX=A-B6:ENDIF7:IF(C>A)8:OR(D<B)9:THENY=C-D10:ELSEY=C+D11:ENDIF12:PRINT(X,Y)STOP

路徑1:1—2—3—4—6—7—9—11—12路徑2:1—2—5—6—7—9—11—12路徑3:1—2—3—5—6—7—9—11—12路徑4:1—2—3—4—6—7—8—9—11—12路徑5:1—2—3—4—6—7—8—10—11—12

2.條件測(cè)試(1)用條件測(cè)試技術(shù)設(shè)計(jì)出的測(cè)試用例,能夠檢查程序模塊中包含的邏輯條件。(2)邏輯條件可以是1個(gè)簡(jiǎn)單條件or復(fù)合條件?!艉?jiǎn)單條件

.可以是一個(gè)布爾變量或一個(gè)關(guān)系表達(dá)式;

.前可加NOT算符;

.關(guān)系表達(dá)式的形式:E1<關(guān)系算符>E2其中,E1和E2是算術(shù)表達(dá)式,而<關(guān)系算符>是下列算符之一:“<”,“≤”,“=”,“≠”,“>”或“≥”。◆復(fù)合條件

.由兩個(gè)或多個(gè)簡(jiǎn)單條件、布爾算符和括弧組成;.布爾算符有OR(“|”),AND(“&”)和NOT?!魲l件成分的類型包括布爾算符、布爾變量、布爾括?。ɡㄗ『?jiǎn)單條件或復(fù)合條件)、關(guān)系算符及算術(shù)表達(dá)式。◆如果條件不正確,則至少條件的一個(gè)成分不正確?!粢虼耍瑮l件錯(cuò)誤的類型如下:

.布爾算符錯(cuò)(布爾算符不正確,遺漏布爾算符或有多余的布爾算符)

.布爾變量錯(cuò)

.布爾括弧錯(cuò)

.關(guān)系算符錯(cuò).算術(shù)表達(dá)式錯(cuò)(3)條件測(cè)試策略1)分支測(cè)試

.可能是最簡(jiǎn)單的條件測(cè)試策略,.對(duì)于復(fù)合條件C來(lái)說(shuō),C的真分支和假分支以及C中的每個(gè)簡(jiǎn)單條件,都應(yīng)該至少執(zhí)行一次。2)域測(cè)試.要求對(duì)一個(gè)關(guān)系表達(dá)式執(zhí)行3個(gè)或4個(gè)測(cè)試。.對(duì)于形式為E1<關(guān)系算符>E2的關(guān)系表達(dá)式來(lái)說(shuō),需要3個(gè)測(cè)試分別使E1的值大于、等于或小于E2的值。3)包含n個(gè)變量的布爾表達(dá)式需要2n個(gè)(每個(gè)變量分別取真或假這兩個(gè)可能值的組合數(shù))測(cè)試。該策略僅在n很小時(shí)才是實(shí)用的。4)BRO條件測(cè)試策略(branchandrelationaloperator)◆由K.C.Tai提出的;◆前提條件:如果在條件中所有布爾變量和關(guān)系算符都只出現(xiàn)一次而且沒有公共變量,則BRO測(cè)試保證能發(fā)現(xiàn)該條件中的分支錯(cuò)和關(guān)系算符錯(cuò)?!魷y(cè)試原理:利用條件C的條件約束來(lái)設(shè)計(jì)測(cè)試用例。例1:考慮條件C1:B1&B2,其中B1和B2是布爾變量。

C1的條件約束為(D1,D2),按BRO測(cè)試策略要求,約束集(t,t),(f,t),(t,f)被C1的執(zhí)行所覆蓋。例2:考慮條件C2:B1&(E1=E2),其中B1是布爾變量,E1和E2是算術(shù)表達(dá)式。C2的條件約束為

(D1,D2),C2的約束集為:

(t,=),(f,=),(t,>),(t,<)例3:考慮條件C3:(E1>E2)&(E1=E2),其中E1、E2E3、E4是算術(shù)表達(dá)式。C3的條件約束為

(D1,D2),C3的約束集為:

(>,=),(=,=),(<,=),(>,>),(>,<)3.循環(huán)測(cè)試1)循環(huán)測(cè)試是一種白盒測(cè)試技術(shù),它專注于測(cè)試循環(huán)結(jié)構(gòu)的有效性。2)在結(jié)構(gòu)化的程序中通常只有3種循環(huán),即簡(jiǎn)單循環(huán)、串接循環(huán)和嵌套循環(huán)。如圖7.7所示。1.黑盒測(cè)試:又叫功能測(cè)試。2.黑盒測(cè)試著重測(cè)試軟件的功能,并不能取代白盒測(cè)試。3.白盒測(cè)試技術(shù)主要應(yīng)用在測(cè)試過(guò)程的早期,而黑盒測(cè)試主要用于測(cè)試過(guò)程的后期。4.應(yīng)用黑盒測(cè)試技術(shù),能夠設(shè)計(jì)出滿足下述標(biāo)準(zhǔn)的測(cè)試用例集:1)所設(shè)計(jì)出的測(cè)試用例能夠減少為達(dá)到合理測(cè)試所需要設(shè)計(jì)的測(cè)試用例的總數(shù);2)所設(shè)計(jì)出的測(cè)試用例能夠告訴我們,是否存在某些類型的錯(cuò)誤,而不是僅僅指出與特定測(cè)試相關(guān)的錯(cuò)誤是否存在。7.7黑盒測(cè)試技術(shù)1.等價(jià)劃分技術(shù)把程序的輸入域劃分成若干個(gè)數(shù)據(jù)類,據(jù)此導(dǎo)出測(cè)試用例。2.等價(jià)劃分法的目的:力圖設(shè)計(jì)出能發(fā)現(xiàn)若干類程序錯(cuò)誤的測(cè)試用例,從而減少必須設(shè)計(jì)的測(cè)試用例的數(shù)目。3.合理假設(shè):如果把所有可能的輸入數(shù)據(jù)劃分成若干個(gè)等價(jià)類,則可合理地做出下述假定:每類中的一個(gè)典型值在測(cè)試中的作用與這一類中所有其他值的作用相同。4.結(jié)論:因此,可以從每個(gè)等價(jià)類中只取一組數(shù)據(jù)作為測(cè)試數(shù)據(jù)。這樣選取的測(cè)試數(shù)據(jù)最有代表性,最可能發(fā)現(xiàn)程序中的錯(cuò)誤。7.7.1等價(jià)劃分5.使用等價(jià)劃分法設(shè)計(jì)測(cè)試方案的步驟:1)需要?jiǎng)澐州斎霐?shù)據(jù)的等價(jià)類;為此需要研究程序的功能說(shuō)明,從而確定輸入數(shù)據(jù)的有效等價(jià)類和無(wú)效等價(jià)類。2)設(shè)計(jì)一個(gè)新的測(cè)試方案以盡可能多地覆蓋尚未被覆蓋的有效等價(jià)類,重復(fù)這一步驟直到所有有效等價(jià)類都被覆蓋為止;3)設(shè)計(jì)一個(gè)新的測(cè)試方案,使它覆蓋一個(gè)而且只覆蓋一個(gè)尚未被覆蓋的無(wú)效等價(jià)類,重復(fù)這一步驟直到所有無(wú)效等價(jià)類都被覆蓋為止。

◆劃分等價(jià)類的啟發(fā)式規(guī)則:1)如果規(guī)定了輸入值的范圍,則可劃分出一個(gè)有效的等價(jià)類(輸入值在此范圍內(nèi)),兩個(gè)無(wú)效的等價(jià)類(輸入值小于最小值或大于最大值);2)如果規(guī)定了輸入數(shù)據(jù)的個(gè)數(shù),則類似地也可以劃分出一個(gè)有效的等價(jià)類和兩個(gè)無(wú)效的等價(jià)類;3)如果規(guī)定了輸入數(shù)據(jù)的一組值,而且程序?qū)Σ煌斎胫底霾煌幚恚瑒t每個(gè)允許的輸入值是一個(gè)有效的等價(jià)類,此外還有一個(gè)無(wú)效的等價(jià)類(任一個(gè)不允許的輸入值);4)如果規(guī)定了輸入數(shù)據(jù)必須遵循的規(guī)則,則可以劃分出一個(gè)有效的等價(jià)類(符合規(guī)則)和若干個(gè)無(wú)效的等價(jià)類(從各種不同角度違反規(guī)則);5)如果規(guī)定了輸入數(shù)據(jù)為整型,則可以劃分出正整數(shù)、零和負(fù)整數(shù)等3個(gè)有效類;6)如果程序的處理對(duì)象是表格,則應(yīng)該使用空表,以及含一項(xiàng)或多項(xiàng)的表。◆總結(jié):1)為了正確劃分等價(jià)類,一要注意積累經(jīng)驗(yàn),二要正確分析被測(cè)程序的功能。2)在劃分無(wú)效的等價(jià)類時(shí)還必須考慮編譯程序的檢錯(cuò)功能。3)這些啟發(fā)式規(guī)則也同樣適用于輸出數(shù)據(jù)。例1:設(shè)計(jì)下程序的測(cè)試方案,假設(shè)有一個(gè)把數(shù)字串轉(zhuǎn)變成整數(shù)的函數(shù)strtoint。運(yùn)行程序的計(jì)算機(jī)字長(zhǎng)16位,用二進(jìn)制補(bǔ)碼表示整數(shù)。這個(gè)函數(shù)是用Pascal語(yǔ)言編寫的,它的說(shuō)明如下:functionstrtoint(dstr:shortstr):integer;函數(shù)的參數(shù)類型是shortstr,它的說(shuō)明是:typeshortstr=array[1..6]ofchar;幾點(diǎn)說(shuō)明:1)被處理的數(shù)字串是右對(duì)齊的;2)如果數(shù)字串比6個(gè)字符短,則在它的左邊補(bǔ)空格。3)如果數(shù)字串是負(fù)的,則負(fù)號(hào)和最高位數(shù)字緊相鄰(負(fù)號(hào)在最高位數(shù)字左邊一位)。4)考慮到pascal編譯程序的固有的檢錯(cuò)功能,◆測(cè)試時(shí)不需要使用長(zhǎng)度≠6的數(shù)組作為實(shí)在參數(shù);◆更不需要使用任何非字符數(shù)組類型的實(shí)在參數(shù)。分析這個(gè)程序的規(guī)格說(shuō)明,可劃分出如下等價(jià)類:◆有效輸入的等價(jià)類有:1)1~6個(gè)數(shù)字字符組成的數(shù)字串(最高位數(shù)字不是零);2)最高位數(shù)字是零的數(shù)字串;3)最高位數(shù)字左鄰是負(fù)號(hào)的數(shù)字串;◆無(wú)效輸入的等價(jià)類有:(4)空字符串(全是空格);(5)左部填充的字符既不是零也不是空格;(6)最高位數(shù)字右面由數(shù)字和空格混合組成;(7)最高位數(shù)字右面由數(shù)字和其他字符混合組成;(8)負(fù)號(hào)與最高位數(shù)字之間有空格;◆合法輸出的等價(jià)類有:(9)在計(jì)算機(jī)能表示的最小負(fù)整數(shù)和零之間的負(fù)整數(shù);(10)零;(11)在零和計(jì)算機(jī)能表示的最大正整數(shù)之間的正整數(shù);◆非法輸出的等價(jià)類有:(12)比計(jì)算機(jī)能表示的最小負(fù)整數(shù)還小的負(fù)整數(shù);(13)比計(jì)算機(jī)能表示的最大正整數(shù)還大的正整數(shù)。根據(jù)上面劃分出的等價(jià)類,可以設(shè)計(jì)出下述測(cè)試方案:(1)1~6個(gè)數(shù)字組成的數(shù)字串,輸出是合法的正整數(shù);輸入:’1’預(yù)期的輸出:1(2)最高位數(shù)字是零的數(shù)字串,輸出是合法的正整數(shù);輸入:’000001’預(yù)期的輸出:1(3)負(fù)號(hào)與最高位數(shù)字緊相鄰,輸出是合法的負(fù)整數(shù);輸入:’-00001’預(yù)期的輸出:-1(4)最高位數(shù)字是零,輸出也是零;輸入:’000000’預(yù)期的輸出:0(5)太小的負(fù)整數(shù);輸入:’-47561’預(yù)期的輸出:“錯(cuò)誤——無(wú)效輸入”(6)太大的負(fù)整數(shù);輸入:’132767’預(yù)期的輸出:“錯(cuò)誤——無(wú)效輸入”(7)空字符串;輸入:’

’預(yù)期的輸出:“錯(cuò)誤——沒有數(shù)字”(8)字符串左部既不是零也不是空格;輸入:’×××××1’預(yù)期的輸出:“錯(cuò)誤——填充錯(cuò)”(9)最高位數(shù)字后面有空格;輸入:’12’預(yù)期的輸出:“錯(cuò)誤——無(wú)效輸入”(10)最高位數(shù)字后面有其他字符;輸入:’1××2’預(yù)期的輸出:“錯(cuò)誤——無(wú)效輸入”(11)負(fù)號(hào)與最高位數(shù)字之間有空格;輸入:’-12’預(yù)期的輸出:“錯(cuò)誤——負(fù)號(hào)位置錯(cuò)”。1.經(jīng)驗(yàn)表明,處理邊界情況時(shí)程序最容易發(fā)生錯(cuò)誤。因此,設(shè)計(jì)使程序運(yùn)行在邊界情況附近的測(cè)試方案,暴露出程序錯(cuò)誤的可能性更大一些。2.使用邊界值分析方法設(shè)計(jì)測(cè)試方案首先應(yīng)該確定邊界情況;3.通常輸入等價(jià)類和輸出等價(jià)類的邊界,就是應(yīng)該著重測(cè)試的程序邊界情況;4.按照邊界值分析法,應(yīng)該選取剛好等于、稍小于和稍大于等價(jià)類邊界值的數(shù)據(jù)作為測(cè)試數(shù)據(jù),而不是選取每個(gè)等價(jià)類內(nèi)的典型值或任意值作為測(cè)試數(shù)據(jù)。7.7.2邊界值分析(12)能輸出剛好等于最小值的負(fù)整數(shù);輸入:’-32768’預(yù)期的輸出:“-32768”(13)能輸出剛好等于最大值的正整數(shù);輸入:’32767’預(yù)期的輸出:“32767”原來(lái)用等價(jià)劃分法設(shè)計(jì)出來(lái)的測(cè)試方案5最好改為:(14)使輸出剛剛小于最小的負(fù)整數(shù);輸入:’-32769’預(yù)期的輸出:“錯(cuò)誤——無(wú)效輸入”原來(lái)的測(cè)試方案6最好改為:(15)使輸出剛剛大于最大的正整數(shù);輸入:’32768’預(yù)期的輸出:“錯(cuò)誤——無(wú)效輸入”

7-5某圖書館有一個(gè)使用CRT終端的信息檢索系統(tǒng),該系統(tǒng)有下列4個(gè)基本檢索命令要求:(1)設(shè)計(jì)測(cè)試數(shù)據(jù)以全面測(cè)試系統(tǒng)的正常操作;(2)設(shè)計(jì)測(cè)試數(shù)據(jù)以測(cè)試系統(tǒng)的非正常操作。答:(1)測(cè)試系統(tǒng)正常操作的測(cè)試數(shù)據(jù)1)順序執(zhí)行下列3個(gè)命令:Browse(keyword)Select(L)Display(N)其中,keyword是正確的關(guān)鍵字;L是執(zhí)行命令browse后屏幕上顯示的約20個(gè)行號(hào)中的一個(gè);N是執(zhí)行命令S后列出的索引號(hào)中的一個(gè)。2)順序執(zhí)行下列2個(gè)命令:

Find(name)Display(N)其中,name是已經(jīng)的作者姓名;N是執(zhí)行命令find后列出的索引號(hào)中的一個(gè)。針對(duì)若干個(gè)不同的name重復(fù)執(zhí)行上述命令序列。(2)測(cè)試系統(tǒng)非正常操作的測(cè)試數(shù)據(jù)1)用過(guò)長(zhǎng)的關(guān)鍵字作為命令browse的參數(shù),例如:b(reliabilitysoftwareandhardwarecombined)預(yù)期的輸出:系統(tǒng)截短過(guò)長(zhǎng)的關(guān)鍵字,例如上述命令中的關(guān)鍵字可能被截短為:reliabilitysoftware2)用不正確的關(guān)鍵字作為命令browse的參數(shù),例如:b(aardvark)預(yù)期的輸出:顯示出最接近的匹配結(jié)果,3)用比執(zhí)行命令browse后列出的最大行號(hào)大1的數(shù)作為命令s的參數(shù),預(yù)期的輸出:“命令s的參數(shù)不在行號(hào)列表中”4)用數(shù)字和標(biāo)點(diǎn)符號(hào)作為命令browse和命令find的參數(shù),預(yù)期的輸出:“參數(shù)類型錯(cuò)”5)用字母字符作為命令select和命令display的參數(shù),預(yù)期的輸出:“參數(shù)類型錯(cuò)”6)用0和負(fù)數(shù)作為命令select和命令display的參數(shù),預(yù)期的輸出:“參數(shù)類型錯(cuò)”7)命令順序錯(cuò),例如,沒執(zhí)行命令b就執(zhí)行命令s,或沒執(zhí)行命令s就執(zhí)行命令d預(yù)期的輸出:“命令順序錯(cuò)”8)命令語(yǔ)法錯(cuò),例如,遺漏命令名b、s、d或f;或命令參數(shù)沒用圓括號(hào)括起來(lái)預(yù)期的輸出:“命令語(yǔ)法錯(cuò)”9)命令參數(shù)空,例如,b()、s()、d()或f()預(yù)期的輸出:系統(tǒng)提供默認(rèn)參數(shù)或給出出錯(cuò)信息10)使用拼錯(cuò)了的作者姓名作為參數(shù)f的參數(shù)預(yù)期的輸出:“找不到這位作者的著作”。1.等價(jià)劃分法和邊界值分析法都只孤立地考慮各個(gè)輸入數(shù)據(jù)的測(cè)試功效,而沒有考慮多個(gè)輸入數(shù)據(jù)的組合效應(yīng),可能會(huì)遺漏了輸入數(shù)據(jù)易于出錯(cuò)的

組合情況。2.錯(cuò)誤推測(cè)法在很大程度上靠直覺和經(jīng)驗(yàn)進(jìn)行。3.它的基本想法是列舉出程序中可能有的錯(cuò)誤和容易發(fā)生錯(cuò)誤的特殊情況,并且根據(jù)它們選擇測(cè)試方案。4.選擇輸入數(shù)據(jù)組合的方法:

1)決策樹

2)計(jì)算機(jī)測(cè)試和人工檢查代碼結(jié)合起來(lái)7.7.3錯(cuò)誤推測(cè)◆

調(diào)試是在測(cè)試發(fā)現(xiàn)錯(cuò)誤之后排除錯(cuò)誤的過(guò)程?!?/p>

軟件工程師在評(píng)估測(cè)試結(jié)果時(shí),往往僅面對(duì)著軟件錯(cuò)誤的癥狀,也就是說(shuō),軟件錯(cuò)誤的外部表現(xiàn)和它的內(nèi)在原因之間可能并沒有明顯的聯(lián)系。◆

調(diào)試就是把癥狀和原因聯(lián)系起來(lái)的尚未被人深入認(rèn)識(shí)的智力過(guò)程。7.8調(diào)試圖7.8調(diào)試過(guò)程7.8.1調(diào)試過(guò)程◆

調(diào)試的目標(biāo):是尋找軟件錯(cuò)誤的原因并改正錯(cuò)誤?!?/p>

這需要系統(tǒng)地分析、直覺和運(yùn)氣,才能實(shí)現(xiàn)上述目標(biāo)?!?/p>

一般,有下列3種調(diào)試途徑可以采用:1.蠻干法

2.回溯法3.原因排除法7.8.2調(diào)試途徑1.蠻干法◆

按照“讓計(jì)算機(jī)自己尋找錯(cuò)誤”的策略,在這樣生成的信息海洋的某個(gè)地方發(fā)現(xiàn)錯(cuò)誤原因的線索?!?/p>

蠻干法可能是尋找軟件錯(cuò)誤原因的最低效的方法。僅當(dāng)所有其他方法都失敗了的情況下,才應(yīng)該使用這種方法。

2.回溯法◆

回溯是一種相當(dāng)常用的調(diào)試方法;◆

具體做法是,從發(fā)現(xiàn)癥狀的地方開始,人工沿程序的控制流往回追蹤分析源程序代碼,直到找出錯(cuò)誤原因?yàn)橹?◆

當(dāng)調(diào)試小程序時(shí)這種方法是有效的,但是,隨著程序規(guī)模擴(kuò)大,應(yīng)該回溯的路徑數(shù)目也變得越來(lái)越大,以至徹底回溯變成完全不可能了。3.原因排除法1)對(duì)分查找法◆基本思路:如果已經(jīng)知道每個(gè)變量在程序內(nèi)若干個(gè)關(guān)鍵點(diǎn)的正確值,則可以用賦值語(yǔ)句或輸入語(yǔ)句在程序中點(diǎn)附近“注入”這些變量的正確值,然后運(yùn)行程序并檢查所得到的輸出。如果輸出結(jié)果是正確的,則錯(cuò)誤原因在程序的前半部分;反之,錯(cuò)誤原因在程序的后半部分。對(duì)錯(cuò)誤原因所在的那部分再重復(fù)使用這個(gè)方法,直到把出錯(cuò)范圍縮小到容易診斷的程度為止。2)歸納法◆

是從個(gè)別現(xiàn)象推斷出一般性結(jié)論的思維方法?!?/p>

使用這種方法調(diào)試程序時(shí),首先把和錯(cuò)誤有關(guān)的數(shù)據(jù)組織起來(lái)進(jìn)行分析,以便發(fā)現(xiàn)可能的錯(cuò)誤原因?!?/p>

然后導(dǎo)出對(duì)錯(cuò)誤原因的一個(gè)或多個(gè)假設(shè),并利用已有的數(shù)據(jù)來(lái)證明或排除這些假設(shè)?!?/p>

如果已有的數(shù)據(jù)尚不足以證明或排除這些假設(shè),則需設(shè)計(jì)并執(zhí)行一些新的測(cè)試用例,以獲得更多的數(shù)據(jù)。3)演繹法◆

從一般原理或前提出發(fā),經(jīng)過(guò)排除和精化的過(guò)程推導(dǎo)出結(jié)論。◆

采用這種方法調(diào)試程序時(shí),首先設(shè)想出所有可能的出錯(cuò)原因,然后試圖用測(cè)試來(lái)排除每一個(gè)假設(shè)的原因?!?/p>

如果測(cè)試表明某個(gè)假設(shè)的原因可能是真的原因,則對(duì)數(shù)據(jù)進(jìn)行細(xì)化以準(zhǔn)確定位錯(cuò)誤??偨Y(jié):◆

上述3種調(diào)試途徑都可以使用調(diào)試工具輔助完成,◆

如果用遍了各種調(diào)試方法和調(diào)試工具卻仍然找不出錯(cuò)誤原因,則應(yīng)該向同行求助?!?/p>

在動(dòng)手改正錯(cuò)誤之前,軟件工程師應(yīng)該仔細(xì)考慮下述3個(gè)問(wèn)題:

1)是否同樣的錯(cuò)誤也在程序其他地方存在?

2)將要進(jìn)行的修改可能會(huì)引入的“下一個(gè)錯(cuò)誤”是什么?3)為防止今后出現(xiàn)類似的錯(cuò)誤,應(yīng)該做什么?7.9.1基本概念1、軟件可靠性◆軟件可靠性是程序在給定的時(shí)間間隔內(nèi),按照規(guī)格說(shuō)明書的規(guī)定成功地運(yùn)行的概率。2、軟件可用性1)軟件的可用性:即系統(tǒng)可以使用的程度。2)軟件可用性的定義是:軟件可用性是程序在給定的時(shí)間點(diǎn),按照規(guī)格說(shuō)明書的規(guī)定,成功地運(yùn)行的概率。7.9軟件可靠性3)一般來(lái)說(shuō),對(duì)于任何其故障是可以修復(fù)的系統(tǒng),都應(yīng)該同時(shí)使用可靠性和可用性衡量它的優(yōu)劣程度。4)兩個(gè)概念:◆故障指的是由錯(cuò)誤引起的軟件的不正確行為?!翦e(cuò)誤由開發(fā)人員造成的軟件差錯(cuò)。5)可靠性和可用性之間的主要差別:

①可靠性意味著在0到t這段時(shí)間間隔內(nèi)系統(tǒng)沒有失效,

②而可用性只意味著在時(shí)刻t,系統(tǒng)是正常運(yùn)行的,

③因此,如果在時(shí)刻t系統(tǒng)是可用的,則有下述種種可能:▲在0到t這段時(shí)間內(nèi),系統(tǒng)一直沒失效(可靠);▲在這段時(shí)間內(nèi)失效了一次,但是又修復(fù)了;▲在這段時(shí)間內(nèi)失效了兩次修復(fù)了兩次;……3、穩(wěn)態(tài)可用性如果在一段時(shí)間內(nèi),軟件系統(tǒng)故障停機(jī)時(shí)間分別為td1,td2,…,正常運(yùn)行時(shí)間分別為tu1,tu2,…,則系統(tǒng)的穩(wěn)態(tài)可用性為:Ass=Tup/(Tup+Tdown),(7.1)其中:Tup=∑tui,Tdown=∑tdi。4、平均無(wú)故障時(shí)間MTTF是系統(tǒng)按規(guī)格說(shuō)明書規(guī)定成功地運(yùn)行的平均時(shí)間;它主要取決于系統(tǒng)中潛伏的錯(cuò)誤的數(shù)目。5、平均維修時(shí)間MTTR是修復(fù)一個(gè)故障平均需要用的時(shí)間,

Ass=MTTF/(MTTF+MTTR) (7.2)7.9.2估算平均無(wú)故障時(shí)間的方法1.符號(hào)在估算MTTF的過(guò)程中使用下述符號(hào)表示有關(guān)的數(shù)量:ET——測(cè)試之前程序中錯(cuò)誤總數(shù);IT——程序長(zhǎng)度(機(jī)器指令總數(shù));τ——測(cè)試(包括調(diào)試)時(shí)間;Ed(τ)——在0至τ期間發(fā)現(xiàn)的錯(cuò)誤數(shù);Ec(τ)——在0至τ期間改正的錯(cuò)誤數(shù)。2.

基本假定根據(jù)經(jīng)驗(yàn)數(shù)據(jù),可以作出下述假定。1)在類似的程序中,單位長(zhǎng)度里的錯(cuò)誤數(shù)ET/IT近似為常數(shù)。美國(guó)的一些統(tǒng)計(jì)數(shù)字表明,通常0.5×10-2≤ET/IT≤2×10-22)失效率正比于軟件中剩余的(潛藏的)錯(cuò)誤數(shù),而平均無(wú)故障時(shí)間MTTF與剩余的錯(cuò)誤數(shù)成反比。3)故障不可能完全檢出,但一經(jīng)檢出立即得到改正

而且調(diào)試過(guò)程沒有引入新的錯(cuò)誤。因此:Ec(τ)=Ed(τ),剩余的錯(cuò)誤數(shù)為:Er(τ)=ET-Ec(τ),單位長(zhǎng)度程序中剩余的錯(cuò)誤數(shù)為:εr(τ)=ET/IT-Ec(τ)/IT3.估算平均無(wú)故障時(shí)間◆經(jīng)驗(yàn)表明,平均無(wú)故障時(shí)間與單位長(zhǎng)度程序中剩余的錯(cuò)誤數(shù)成反比,即:MTTF=1/[K(ET/IT–Ec(τ)/IT)]

其中K為常數(shù),K的典型值是200。◆估算平均無(wú)故障時(shí)間的公式,可以評(píng)價(jià)軟件測(cè)試的進(jìn)展情況。由上式可得:Ec=ET-IT/(K×MTTF)

◆因此,也可以根據(jù)對(duì)軟件平均無(wú)故障時(shí)間的要求,估計(jì)需要改正多少個(gè)錯(cuò)誤之后,測(cè)試

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論