實(shí)現(xiàn)(編碼與測試)_第1頁
實(shí)現(xiàn)(編碼與測試)_第2頁
實(shí)現(xiàn)(編碼與測試)_第3頁
實(shí)現(xiàn)(編碼與測試)_第4頁
實(shí)現(xiàn)(編碼與測試)_第5頁
已閱讀5頁,還剩114頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1第七章實(shí)現(xiàn)第七章

實(shí)現(xiàn)(編碼與測試)7.1編碼7.2軟件測試基礎(chǔ)7.3單元測試7.4集成測試7.5確認(rèn)測試7.6白盒測試技術(shù)7.7黑盒測試技術(shù)7.8調(diào)試7.9軟件可靠性23第七章

實(shí)現(xiàn)(編碼與測試)7.1編碼編碼就是把軟件設(shè)計結(jié)果翻譯成用某種程序設(shè)計語言書寫的程序。1、選擇程序設(shè)計語言程序設(shè)計語言是人和計算機(jī)通信的最基本的工具,它的特點(diǎn)必然會影響人的思維和解題方式,會影響人和計算機(jī)通信的方式和質(zhì)量,也會影響其他人閱讀和理解程序的難易程度。因此,編碼之前的一項(xiàng)重要工作就是選擇一種適當(dāng)?shù)某绦蛟O(shè)計語言。4選擇程序設(shè)計語言的主要實(shí)用標(biāo)準(zhǔn):(1)系統(tǒng)用戶的要求。(2)可以使用的編譯程序。(3)可以得到的軟件工具。(4)工程規(guī)模。(5)程序員的知識。(6)軟件可移植性要求。(7)軟件的應(yīng)用領(lǐng)域。52程序設(shè)計風(fēng)格程序?qū)嶋H上也是一種供人閱讀的文章,有一個文章的風(fēng)格問題。應(yīng)該使程序具有良好的風(fēng)格。

源程序文檔化

數(shù)據(jù)說明

語句結(jié)構(gòu)

輸入/輸出方法6(1)源程序文檔化

標(biāo)識符的命名

安排注釋

程序的視覺組織7★

符號名的命名符號名即標(biāo)識符,包括模塊名、變量名、常量名、標(biāo)號名、子程序名、、數(shù)據(jù)區(qū)名以及緩沖區(qū)名等。這些名字應(yīng)能反映它所代表的實(shí)際東西,應(yīng)有一定實(shí)際意義。例如,表示次數(shù)的量用Times,表示總量的用Total,表示平均值的用Average,表示和的量用Sum等。名字不是越長越好,應(yīng)當(dāng)選擇精煉的意義明確的名字。必要時可使用縮寫名字,但這時要注意縮寫規(guī)則要一致,并且要給每一個名字加注釋。同時,在一個程序中,一個變量只應(yīng)用于一種用途。8★程序的注釋

夾在程序中的注釋是程序員與日后的程序讀者之間通信的重要手段。注釋決不是可有可無的。一些正規(guī)的程序文本中,注釋行的數(shù)量占到整個源程序的1/3到1/2,甚至更多。注釋分為序言性注釋和功能性注釋。9序言性注釋通常置于每個程序模塊的開頭部分,它應(yīng)當(dāng)給出程序的整體說明,對于理解程序本身具有引導(dǎo)作用。序言性注釋包括:

程序標(biāo)題;有關(guān)本模塊功能和目的的說明;

主要算法;

接口說明:包括調(diào)用形式,參數(shù)描述,子程序清單;

有關(guān)數(shù)據(jù)描述:重要的變量及其用途,約束或限制條件,以及其它有關(guān)信息;

模塊位置:在哪一個源文件中,或隸屬于哪一個軟件包;

開發(fā)簡歷:模塊設(shè)計者,復(fù)審者,復(fù)審日期,修改日期及有關(guān)說明等。10功能性注釋功能性注釋嵌在源程序體中,用以描述其后的語句或程序段是在做什么工作,或是執(zhí)行了下面的語句會怎么樣,而不要解釋下面怎么做。例如,/*ADDAMOUNTTOTOTAL*/

TOTAL=AMOUNT+TOTAL

上面注視不清楚,如果注明把月銷售額計入年度總額,便使讀者理解了下面語句的意圖:

/*ADDMONTHLY-SALESTOANNUAL-TOTAL*/

TOTAL=AMOUNT+TOTAL要點(diǎn)描述一段程序,而不是每一個語句;用縮進(jìn)和空行,使程序與注釋容易區(qū)別;注釋要正確。11★視覺組織空格、空行和移行恰當(dāng)?shù)乩每崭?,可以突出運(yùn)算的優(yōu)先性,避免發(fā)生運(yùn)算的錯誤。例如,將表達(dá)式

(A<-17)ANDNOT(B<=49)ORC

寫成(A<-17)ANDNOT(B<=49)ORC自然的程序段之間可用空行隔開;移行也叫做向右縮格。它是指程序中的各行不必都在左端對齊,都從第一格起排列。這樣做使程序完全分不清層次關(guān)系。對于選擇語句和循環(huán)語句,把其中的程序段語句向右做階梯式移行。使程序的邏輯結(jié)構(gòu)更加清晰。例如,兩重選擇結(jié)構(gòu)嵌套,寫成下面的移行形式,層次就清楚得多。IF(…)

THEN

IF(…)

THEN

……

ELSE

……

ENDIF

……

ELSE

……

ENDIF12(2)數(shù)據(jù)說明在設(shè)計階段已經(jīng)確定了數(shù)據(jù)結(jié)構(gòu)的組織及其復(fù)雜性。在編寫程序時,則需要注意數(shù)據(jù)說明的風(fēng)格。為了使程序中數(shù)據(jù)說明更易于理解和維護(hù),必須注意以下幾點(diǎn):

數(shù)據(jù)說明的次序應(yīng)該標(biāo)準(zhǔn)化。有次序易查閱,能加速測試、調(diào)試和維護(hù)的過程。例如:數(shù)據(jù)說明數(shù)據(jù)類型說明

①常量說明 ②簡單變量類型說明 ③數(shù)組說明 ④公用數(shù)據(jù)塊說明 ⑤所有的文件說明①整型量說明②實(shí)型量說明③字符量說明④邏輯量說明13

b.

當(dāng)多個變量名在一個語句中說明時,應(yīng)該按字母順序排列這些變量。

例如,把

integersize,length,width,cost,price

寫成

integer

cost,length,price,size,widthc.如果設(shè)計時使用了一個復(fù)雜的數(shù)據(jù)結(jié)構(gòu),則應(yīng)該用注解說明用程序設(shè)計語言實(shí)現(xiàn)這個數(shù)據(jù)結(jié)構(gòu)的方法和特點(diǎn)。14(3)語句構(gòu)造

構(gòu)造語句時應(yīng)該遵循的原則是,每個語句都應(yīng)該簡單而直接,不能為了提高效率而使程序變得過分復(fù)雜;也不要刻意追求技巧性,使程序編寫得過于緊湊。例如:A[I]=A[I]+A[T];

A[T]=A[I]-A[T];

A[I]=A[I]-A[T];WORK=A[T];

A[T]=A[I];

A[I]=WORK;例如:

inti,j;for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

V[i][j]=(i/j)*(j/i)

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

if(i==j)

V[i][j]=1;

else

V[i][j]=0;下述規(guī)則有助于使語句簡單明了:

不要為了節(jié)省空間而把多個語句寫在同一行;盡量避免復(fù)雜的條件測試;盡量減少對“非”條件的測試;

if(!(char<0||char>9))改成

if(char>=0&&char<=9)

不要讓讀者繞彎子想。

避免大量使用循環(huán)嵌套和條件嵌套;利用括號使邏輯表達(dá)式或算術(shù)表達(dá)式的運(yùn)算次序清晰直觀。17(4)輸入輸出

在設(shè)計和編寫程序時應(yīng)該考慮下述有關(guān)輸入輸出風(fēng)格的規(guī)則:

對所有的輸入數(shù)據(jù)都要進(jìn)行檢驗(yàn),識別錯誤的輸入,以保證每個數(shù)據(jù)的有效性;檢查輸入項(xiàng)的各種重要組合的合法性,必要時報告輸入狀態(tài)信息;使得輸入的步驟和操作盡可能簡單,并保持簡單的輸入格式;輸入數(shù)據(jù)時,應(yīng)允許使用自由格式輸入;應(yīng)允許缺省值;18輸入一批數(shù)據(jù)時,最好使用輸入結(jié)束標(biāo)志,而不要由用戶指定輸入數(shù)據(jù)數(shù)目;在交互式輸入輸入時,要在屏幕上使用提示符明確提示交互輸入的請求,指明可使用選擇項(xiàng)的種類和取值范圍。同時,在數(shù)據(jù)輸入的過程中和輸入結(jié)束時,也要在屏幕上給出狀態(tài)信息;當(dāng)程序設(shè)計語言對輸入/輸出格式有嚴(yán)格要求時,應(yīng)保持輸入格式與輸入語句的要求的一致性;給所有的輸出加注解,并設(shè)計輸出報表格式。

輸入/輸出風(fēng)格還受到許多其它因素的影響。如輸入/輸出設(shè)備(例如終端的類型,圖形設(shè)備,數(shù)字化轉(zhuǎn)換設(shè)備等)、用戶的熟練程度、以及通信環(huán)境等。19(5)程序效率

程序的效率是指程序的執(zhí)行速度及程序所需占用的內(nèi)存的存儲空間。程序編碼是最后提高運(yùn)行速度和節(jié)省存儲的機(jī)會,因此在此階段不能不考慮程序的效率。20讓我們首先明確討論程序效率的幾條準(zhǔn)則效率是一個性能要求,應(yīng)當(dāng)在需求分析階段給出。軟件效率以需求為準(zhǔn),不應(yīng)以人力所及為準(zhǔn)。好的設(shè)計可以提高效率。程序的效率與程序的簡單性相關(guān),不要犧牲程序的清晰性和可讀性來不必要地提高效率。21效率問題

(1)程序運(yùn)行時間(2)存儲器效率(3)輸入輸出的效率22(1)

程序運(yùn)行時間源程序的效率直接由詳細(xì)設(shè)計階段確定的算法的效率決定,但是,寫程序的風(fēng)格也能對程序的執(zhí)行速度和存儲器要求產(chǎn)生影響。在把詳細(xì)設(shè)計結(jié)果翻譯成程序時,總可以應(yīng)用下述規(guī)則:

√寫程序之前先簡化算術(shù)的和邏輯的表達(dá)式;

√仔細(xì)研究嵌套的循環(huán),以確定是否有語句可以從內(nèi)層往外移;

√盡量避免使用多維數(shù)組;

√盡量避免使用指針和復(fù)雜的表;

√使用執(zhí)行時間短的算術(shù)運(yùn)算;

√不要混合使用不同的數(shù)據(jù)類型;

√盡量使用整數(shù)運(yùn)算和布爾表達(dá)式。

在效率是決定性因素的應(yīng)用領(lǐng)域,盡量使用有良好優(yōu)化特性的編譯程序,以自動生成高效目標(biāo)代碼。23(2)

存儲器效率在大中型計算機(jī)系統(tǒng)中,存儲限制不再是主要問題。在這種環(huán)境下,對內(nèi)存采取基于操作系統(tǒng)的分頁功能的虛擬存儲管理。存儲效率與操作系統(tǒng)的分頁功能直接有關(guān)。采用結(jié)構(gòu)化程序設(shè)計,將程序功能合理分塊,使每個模塊或一組密切相關(guān)模塊的程序體積大小與每頁的容量相匹配,可減少頁面調(diào)度,減少內(nèi)外存交換,提高存儲效率。在微型計算機(jī)系統(tǒng)中,存儲器的容量對軟件設(shè)計和編碼的制約很大。因此要選擇可生成較短目標(biāo)代碼且存儲壓縮性能優(yōu)良的編譯程序,有時需采用匯編程序。提高存儲器效率的關(guān)鍵是程序的簡單性。24(3)

輸入輸出的效率輸入/輸出可分為兩種類型:面向人(操作員)的輸入/輸出面向設(shè)備的輸入/輸出如果操作員能夠十分方便、簡單地錄入輸入數(shù)據(jù),或者能夠十分直觀、一目了然地了解輸出信息,則可以說面向人的輸入/輸出是高效的。25關(guān)于提高設(shè)備輸入/輸出效率的指導(dǎo)原則:輸入/輸出的請求應(yīng)當(dāng)最小化;對于所有的輸入/輸出操作,安排適當(dāng)?shù)木彌_區(qū),以減少頻繁的信息交換。對輔助存儲(例如磁盤),選擇盡可能簡單的,可接受的存取方法;

對輔助存儲的輸入/輸出,應(yīng)當(dāng)成塊傳送;

對終端或打印機(jī)的輸入/輸出,應(yīng)考慮設(shè)備特性,盡可能改善輸入/輸出的質(zhì)量和速度;任何不易理解的,對改善輸入/輸出效果關(guān)系不大的措施都是不可取的;任何不易理解的所謂“超高效”的輸入/輸出是毫無價值的;

7.2.1、軟件測試的目的

1963年,美國,飛往火星的火箭爆炸,損失$10million。原因:FORTRAN循環(huán):

DO5I=1,3誤寫為DO5I=1.3

軟件測試的工作量約占整個項(xiàng)目工作量的40%左右,對于要求極高的系統(tǒng)測試工作量還要成倍增加。微軟Exchange2000和Windows

2000中的人員結(jié)構(gòu)

Exchange2000Windows2000項(xiàng)目經(jīng)理25人約250人開發(fā)人員140人約1700人測試人員350人約3200人測試人員/開發(fā)人員2:51:97.2軟件測試基礎(chǔ)為什么需要這么多人、花這么多代價進(jìn)行測試?目的何在?

“證明程序正確!”對嗎?Myers對軟件測試目的提出以下觀點(diǎn):(1)軟件測試是為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程。(2)一個好的測試用例能夠發(fā)現(xiàn)至今尚未發(fā)現(xiàn)的錯誤。(3)一個成功的測試是發(fā)現(xiàn)了至今尚未發(fā)現(xiàn)的錯誤的測試。28在測試階段測試人員努力設(shè)計出一系列測試方案,目的卻是為了“破壞”已經(jīng)建造好的軟件系統(tǒng)—竭力證明程序中有錯誤不能按照預(yù)定要求正確工作。暴露問題并不是軟件測試的最終目的,發(fā)現(xiàn)問題是為了解決問題,測試階段的根本目標(biāo)是盡可能多地發(fā)現(xiàn)并排除軟件中潛藏的錯誤,最終把一個高質(zhì)量的軟件系統(tǒng)交給用戶使用。29

通常想象的“測試是為了表明程序是正確的”,“成功的測試是沒有發(fā)現(xiàn)錯誤的測試”是不正確的。測試的目標(biāo)決定了測試方案的設(shè)計。如果為了表明程序是正確的而進(jìn)行測試,就會設(shè)計一些不易暴露錯誤的測試方案;相反,如果測試是為了發(fā)現(xiàn)程序中的錯誤,就會力求設(shè)計出最能暴露錯誤的測試方案。測試決不能證明軟件是正確的,也不能證明錯誤的不存在,它只能證明錯誤的存在。30軟件測試的問題軟件缺陷是什么?誰執(zhí)行測試?開發(fā)者?單獨(dú)的測試人員?兩方面人員?測試什么?每個部分都測試?測試軟件中高風(fēng)險部分?什么時候測試?怎樣測試?測試應(yīng)進(jìn)行到什么程度?31軟件缺陷是什么---描述軟件失敗的術(shù)語缺點(diǎn)(defect)謬誤(fault)問題(problem)錯誤(error)異常(anomaly)偏差(variance)失敗(failure)缺陷(bug)32測試工具軟件開發(fā)工程師(SoftwareDevelopmentEngineerinTest,簡稱SDE/T)軟件測試人員軟件測試工程師(SoftwareTestEngineer,簡稱STE)33SDE/T

負(fù)責(zé)寫測試工具代碼,并利用測試工具對軟件進(jìn)行測試;或者開發(fā)測試工具為軟件測試工程師服務(wù)。負(fù)責(zé)理解產(chǎn)品的功能要求,然后對其進(jìn)行測試,檢查軟件有沒有錯誤(Bug),決定軟件是否具有穩(wěn)定性,并寫出相應(yīng)的測試規(guī)范和測試案例STE

347.2.2軟件測試準(zhǔn)則(1)

所有測試都應(yīng)該能追溯到用戶需求。

正如上一小節(jié)講過的,軟件測試的目標(biāo)是發(fā)現(xiàn)錯誤。從用戶的角度看,最嚴(yán)重的錯誤是導(dǎo)致程序不能滿足用戶需求的那些錯誤。

軟件中的問題根源可能在開發(fā)前期的各階段解決、糾正錯誤也必須追溯到前期工作。35367.2.2軟件測試準(zhǔn)則(2)

應(yīng)當(dāng)把“盡早地和不斷地進(jìn)行軟件測試”作為軟件開發(fā)者的座右銘。概要設(shè)計時應(yīng)完成測試計劃,詳細(xì)的測試用例定義可在設(shè)計模型確定后開始,所有測試可在任何代碼被產(chǎn)生之前進(jìn)行計劃和設(shè)計。

軟件測試不等于程序測試。

軟件測試應(yīng)貫穿于軟件定義與開發(fā)的整個期間;據(jù)美國一家公司統(tǒng)計,查出的軟件錯誤中,屬于需求分析和軟件設(shè)計的錯誤約占64%,屬于程序編寫的錯誤僅占

36%。程序編寫的許多錯誤是“先天的”。37測試與開發(fā)前期工作的關(guān)系決定軟件與系統(tǒng)的配合關(guān)系需求分析概要設(shè)計詳細(xì)設(shè)計編碼單元測試集成測試確認(rèn)測試系統(tǒng)測試38開發(fā)前期出現(xiàn)錯誤的擴(kuò)展計劃需求分析設(shè)計編碼測試AB397.2.2軟件測試準(zhǔn)則

(3)

pareto原則:測試發(fā)現(xiàn)的錯誤中的80%很可能是由程序中20%的模塊造成的。當(dāng)然,問題是怎樣找出這些可疑的模塊并徹底地測試它們。(4)應(yīng)該從“小規(guī)?!睖y試開始,并逐步進(jìn)行“大規(guī)?!睖y試。通常,首先重點(diǎn)測試單個程序模塊,然后把測試重點(diǎn)轉(zhuǎn)向在集成的模塊簇中尋找錯誤,最后在整個系統(tǒng)中尋找錯誤。407.2.2軟件測試準(zhǔn)則(5)測試用例應(yīng)由輸入數(shù)據(jù)和預(yù)期的輸出結(jié)果兩部分組成,并兼顧合理的輸入和不合理的輸入數(shù)據(jù)(6)窮舉測試是不可能的。所謂窮舉測試就是把程序所有可能的執(zhí)行路徑都檢查一遍的測試。例:輸入三條邊長可采用的測試用例數(shù)

(設(shè)字長16位)

執(zhí)行時間:設(shè)測試一次需1ms

共需一萬年.=2X2X2≈3X1016161614窮舉測試實(shí)例:設(shè)程序含4個分支,循環(huán)次數(shù)≤20,從A到B的可能路徑

執(zhí)行時間:設(shè)測試一次需2ms

窮舉測試需5億年.=5+5+..+5+5≈1020121914AB437.2.2軟件測試準(zhǔn)則(7)為了達(dá)到最佳的測試效果,應(yīng)該由獨(dú)立的第三方從事測試工作。所謂“最佳效果”是指有最大可能性發(fā)現(xiàn)錯誤的測試。由于前面已經(jīng)講過的原因,開發(fā)軟件的軟件工程師(心理)并不是完成全部測試工作的最佳人選(通常他們主要承擔(dān)模塊測試工作)。(8)程序修改后要回歸測試。(9)應(yīng)長期保留測試用例,直至系統(tǒng)廢棄。447.2.3測試方法軟件測試的策略和方法靜態(tài)測試方法動態(tài)測試方法

人工測試方法計算機(jī)輔助靜態(tài)分析方法白盒測試方法黑盒測試方法45靜態(tài)測試:

基本特征是在對軟件進(jìn)行分析、檢查和審閱,不實(shí)際運(yùn)行被測試的軟件。靜態(tài)測試約可找出30~70%的邏輯設(shè)計錯誤.

對需求規(guī)格說明書、軟件設(shè)計說明書、源程序做檢查和審閱包括:是否符合標(biāo)準(zhǔn)和規(guī)范;通過結(jié)構(gòu)分析、流圖分析、符號執(zhí)行指出軟件缺陷。

46動態(tài)測試:

通過運(yùn)行軟件來檢驗(yàn)軟件的動態(tài)行為和運(yùn)行結(jié)果的正確性。動態(tài)測試的兩個基本要素:被測試程序測試數(shù)據(jù)(測試用例)動態(tài)測試方法:(1)選取定義域有效值,或定義域外無效值;(2)對已選取值決定預(yù)期的結(jié)果;(3)用選取值執(zhí)行程序;(4)執(zhí)行結(jié)果與預(yù)期的結(jié)果相比,不吻和程序有錯。測試用例ID目的前提輸入預(yù)期輸出后果執(zhí)行歷史日期結(jié)果版本執(zhí)行人47動態(tài)測試技術(shù)1、白盒測試(WhiteBoxTesting)2、黑盒測試(BlackBoxTesting)如果知道產(chǎn)品的內(nèi)部工作過程,可以通過測試來檢驗(yàn)產(chǎn)品內(nèi)部動作是否按照規(guī)格說明書的規(guī)定正常進(jìn)行----稱為白盒測試。如果已經(jīng)知道了產(chǎn)品應(yīng)該具有的功能,可以通過測試來檢驗(yàn)是否每個功能都能正常使用----稱為黑盒測試。48也叫玻璃盒測試(GlassBoxTesting)

對軟件的過程性細(xì)節(jié)做細(xì)致的檢查。這一方法是把測試對象看作一個打開的盒子,它允許測試人員利用程序內(nèi)部的邏輯結(jié)構(gòu)及有關(guān)信息,來設(shè)計或選擇測試用例,對程序所有邏輯路徑進(jìn)行測試。白盒測試(WhiteBoxTesting)白盒測試的內(nèi)容對程序模塊的所有獨(dú)立執(zhí)行路徑至少測試一次對所有的邏輯判定,取“真”與取“假”的兩種情況都能至少測試一次。在循環(huán)的邊界和運(yùn)行邊界限內(nèi)執(zhí)行循環(huán)體測試內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性。49已知產(chǎn)品的功能設(shè)計規(guī)格,可以進(jìn)行測試證明每個實(shí)現(xiàn)了的功能是否符合要求。

黑盒測試(BlackBoxTesting)黑盒測試的內(nèi)容

Alpha/BetaTesting菜單/幫助測試發(fā)行測試回歸測試軟件507.2.4測試步驟大型軟件系統(tǒng)的測試過程基本上由下述幾個步驟組成:

1.模塊測試---單元

2.子系統(tǒng)測試---局部3.系統(tǒng)測試---集成4.驗(yàn)收測試---用戶參與5.平行運(yùn)行---新舊共存

517.2.5測試階段的信息流測試軟件配置結(jié)果分析測試結(jié)果排錯改正的軟件預(yù)期結(jié)果可靠性分析預(yù)測的可靠性錯誤出錯率數(shù)據(jù)測試配置測試工具需求規(guī)格說明書軟件設(shè)計說明書被測源程序

測試計劃測試用例(測試數(shù)據(jù))測試驅(qū)動程序測試數(shù)據(jù)自動生成程序、靜態(tài)分析程序、動態(tài)分析程序、測試結(jié)果分析程序、以及驅(qū)動測試的測試數(shù)據(jù)庫等。52軟件測試的對象軟件測試并不等于程序測試。軟件測試應(yīng)貫穿于軟件定義與開發(fā)的整個期間。因此,需求分析、概要設(shè)計、詳細(xì)設(shè)計以及程序編碼等所得到的文檔資料,包括需求規(guī)格說明、概要設(shè)計說明、詳細(xì)設(shè)計規(guī)格說明以及源程序,都應(yīng)成為軟件測試的對象。537.3單元(模塊)測試7.3.1測試重點(diǎn)

---5個方面模塊接口

主要檢查下述幾個方面:參數(shù)的數(shù)目、次序、屬性或單位系統(tǒng)與變元是否一致;是否修改了只作輸入用的變元;全局變量的定義和用法在各個模塊中是否一致。2.局部數(shù)據(jù)結(jié)構(gòu)

局部數(shù)據(jù)說明、初始化、默認(rèn)值等方面的錯誤。3.重要的執(zhí)行通路

選擇最有代表性、最可能發(fā)現(xiàn)錯誤的執(zhí)行通路進(jìn)行測試就是十分關(guān)鍵的。應(yīng)該設(shè)計測試方案用來發(fā)現(xiàn)由于錯誤的計算、不正確的比較或不適當(dāng)?shù)目刂屏鞫斐傻腻e誤。4.出錯處理通路著重測試下述一些可能發(fā)生的錯誤:(1)對錯誤的描述是難以理解的;(2)記下的錯誤與實(shí)際遇到的錯誤不同;(3)在對錯誤進(jìn)行處理之前,錯誤條件已經(jīng)引起系統(tǒng)干預(yù);(4)對錯誤的處理不正確;(5)描述錯誤的信息不足以幫助確定造成錯誤的位置。5.邊界條件邊界測試是單元測試中最后的也可能是最重要的任務(wù),軟件常常在它的邊界上失效。547.3.2

代碼審查

由審查小組,人工測試源程序稱為代碼審查。它是一種非常有效的程序驗(yàn)證技術(shù),對于典型的程序來說,可以查出30%~70%的邏輯設(shè)計錯誤和編碼錯誤。

審查小組最好由下述4人組成:(1)組長,應(yīng)該是一個很有能力的程序員,而且沒有直接參與這項(xiàng)工程;(2)程序的設(shè)計者;(3)程序的編寫者;(4)程序的測試者。7.3單元(模塊)測試審查的步驟:小組成員先研究設(shè)計說明書,力求理解這個設(shè)計。由設(shè)計者扼要地介紹他的設(shè)計。審查會上程序的編寫者逐個語句地解釋是怎樣用程序代碼實(shí)現(xiàn)這個設(shè)計的。審查會上對照程序設(shè)計常見錯誤,分析審查這個程序。當(dāng)發(fā)現(xiàn)時,記錄錯誤,繼續(xù)審查。557.3.3計算機(jī)測試

模塊并不是一個獨(dú)立的程序,要運(yùn)行它就必須為其開發(fā)驅(qū)動軟件和(或)存根(樁)軟件。

驅(qū)動程序也就是一個“主程序”,它接收測試數(shù)據(jù),把這些數(shù)據(jù)傳送給被測試的模塊,并且印出有關(guān)的結(jié)果。

存根(樁)程序代替被測試的模塊所調(diào)用的模塊,也稱為“虛擬子程序”。它使用被它代替的模塊的接口,可能做最少量的數(shù)據(jù)操作,印出對入口的檢驗(yàn)或操作結(jié)果,并且把控制歸還給調(diào)用它的模塊。7.3單元(模塊)測試567.4集成測試集成測試是測試和組裝軟件的系統(tǒng)化技術(shù),其主要目標(biāo)是發(fā)現(xiàn)與接口有關(guān)的問題。

如:數(shù)據(jù)穿過接口時可能丟失;

一個模塊對另一個模塊可能由于疏忽而造成有害影響;

把子功能組合起來可能不產(chǎn)生預(yù)期的主功能;

個別看來是可以接受的誤差可能積累到不能接受的程度;

全程數(shù)據(jù)結(jié)構(gòu)可能有問題等等。577.4集成測試集成測試有兩種方法。

1、非漸增式測試方法,即:先分別測試每個模塊,再把所有模塊按設(shè)計要求放在一起結(jié)合成所要的程序進(jìn)行測試。

2、漸增式測試,即:先把下一個要測試的模塊同已經(jīng)測試好的那些模塊結(jié)合起來進(jìn)行測試,測試完以后再把下一個應(yīng)該測試的模塊結(jié)合進(jìn)來測試。這種每次增加一個模塊的方法實(shí)際上同時完成單元測試和集成測試.

目前在進(jìn)行集成測試時普遍采用漸增式測試方法。58漸增方式把模塊結(jié)合到程序中去時,有自頂向下和自底向上兩種集成策略。但在實(shí)踐中常采用混合的策略。7.4.1自頂向下集成7.4.2自底向上集成深度(寬度)優(yōu)先組裝,需要存根程序自底向上組裝,需要驅(qū)動程序597.4.3回歸測試任何成功的測試都會發(fā)現(xiàn)錯誤,而且錯誤必須被改正。每當(dāng)改正軟件錯誤的時候,軟件配置的某些成分(程序、文檔或數(shù)據(jù))也被修改了。回歸測試就是用于保證由于調(diào)試或其他原因引起的變化,不會導(dǎo)致非預(yù)期的軟件行為或額外錯誤的測試活動。即:回歸測試是指重新執(zhí)行已經(jīng)做過的測試的某個子集,以保證修改變化沒有帶來非預(yù)期的副作用?;貧w測試集(已執(zhí)行過的測試用例的子集)包括下述3類不同的測試用例:(1)檢測軟件全部功能的代表性測試用例;(2)專門針對可能受修改影響的軟件功能的附加測試;(3)針對被修改過的軟件成分的測試。607.5確認(rèn)測試確認(rèn)測試也稱為驗(yàn)收測試,它的目標(biāo)是驗(yàn)證軟件的有效性。確認(rèn)(validation):指的是為了保證軟件確實(shí)滿足了用戶需求而進(jìn)行的一系列活動。驗(yàn)證(verification):指的是保證軟件正確地實(shí)現(xiàn)了某個特定要求的一系列活動。有效性的簡單定義:如果軟件的功能和性能如同用戶所合理期待的那樣,軟件就是有效的。需求分析階段產(chǎn)生的軟件需求規(guī)格說明書,準(zhǔn)確地描述了用戶對軟件的合理期望,因此是軟件有效性的標(biāo)準(zhǔn),也是進(jìn)行確認(rèn)測試的基礎(chǔ)。617.5.1確認(rèn)測試的范圍確認(rèn)測試必須有用戶積極參與,或者以用戶為主進(jìn)行。用戶應(yīng)該參與設(shè)計測試方案,使用用戶界面輸入測試數(shù)據(jù)并且分析評價測試的輸出結(jié)果。確認(rèn)測試通常使用黑盒測試法。應(yīng)該仔細(xì)設(shè)計測試計劃和測試過程,測試計劃包括要進(jìn)行的測試的種類及進(jìn)度安排,測試過程規(guī)定了用來檢測軟件是否與需求一致的測試方案。通過測試和調(diào)試要保證軟件能滿足所有功能要求,能達(dá)到每個性能要求,文檔資料是準(zhǔn)確而完整的,此外,還應(yīng)該保證軟件能滿足其他預(yù)定的要求(例如,安全性、可移植性、兼容性和可維護(hù)性等)。軟件功能和性能

==

用戶要求??627.5.2軟件配置復(fù)查確認(rèn)測試的一個重要內(nèi)容是復(fù)查軟件配置。

----軟件配置:軟件需求規(guī)格說明、軟件設(shè)計規(guī)格說明、源代碼等。復(fù)查的目的是保證軟件配置的所有成分都齊全,質(zhì)量符合要求,文檔與程序完全一致,具有完成軟件維護(hù)所必須的細(xì)節(jié),而且已經(jīng)編好目錄。除了按合同規(guī)定的內(nèi)容和要求,由人工審查軟件配置之外,在確認(rèn)測試過程中還應(yīng)該嚴(yán)格遵循用戶指南及其他操作程序,以便檢驗(yàn)這些使用手冊的完整性和正確性。必須仔細(xì)記錄發(fā)現(xiàn)的遺漏或錯誤,并且適當(dāng)?shù)匮a(bǔ)充和改正。637.5.3Alpha和Beta測試Alpha測試由用戶在開發(fā)者的場所進(jìn)行,并且在開發(fā)者對用戶的“指導(dǎo)”下進(jìn)行測試。開發(fā)者負(fù)責(zé)記錄發(fā)現(xiàn)的錯誤和使用中遇到的問題。該測試是在受控的環(huán)境中進(jìn)行的。Beta測試由軟件的最終用戶們在一個或多個客戶場所進(jìn)行。Beta測試是軟件在開發(fā)者不能控制的環(huán)境中的“真實(shí)”應(yīng)用。用戶記錄在Beta測試過程中遇到的一切問題(真實(shí)的或想像的),并且定期把這些問題報告給開發(fā)者。接收到在Beta測試期間報告的問題之后,開發(fā)者對軟件產(chǎn)品進(jìn)行必要的修改,并準(zhǔn)備向全體客戶發(fā)布最終的軟件產(chǎn)品。64如何測試?關(guān)鍵技術(shù)

----設(shè)計測試方案。測試方案

----包括:具體的測試目的,應(yīng)該輸入的測試數(shù)據(jù)和預(yù)期的結(jié)果。通常又把測試數(shù)據(jù)和預(yù)期的輸出結(jié)果稱為測試用例。其中最困難的問題是設(shè)計測試用例的輸入數(shù)據(jù)。不同的測試數(shù)據(jù)發(fā)現(xiàn)程序錯誤的能力差別很大,為了提高測試效率降低測試成本,應(yīng)該選用高效的測試數(shù)據(jù)。因?yàn)椴豢赡苓M(jìn)行窮盡的測試,選用少量“最有效的”測試數(shù)據(jù),做到盡可能完備的測試就更重要了。65測試方案哪一種好呢?設(shè)計測試方案的基本目標(biāo)是,確定一組最可能發(fā)現(xiàn)某個錯誤或某類錯誤的測試數(shù)據(jù)。現(xiàn)已經(jīng)研究出許多設(shè)計測試數(shù)據(jù)的技術(shù),這些技術(shù)各有優(yōu)缺點(diǎn),沒有哪一種是最好的,更沒有哪一種可以代替其余所有技術(shù);同一種技術(shù)在不同的應(yīng)用場合效果可能相差很大,因此,通常需要聯(lián)合使用多種設(shè)計測試數(shù)據(jù)的技術(shù)。667.6白盒測試技術(shù)7.6.1邏輯覆蓋

邏輯覆蓋----是以程序內(nèi)部的邏輯結(jié)構(gòu)為基礎(chǔ)的設(shè)計測試用例的技術(shù)。

(1)語句覆蓋(2)判定覆蓋(3)條件覆蓋(4)判定/條件覆蓋(5)條件組合覆蓋(6)點(diǎn)覆蓋(7)邊覆蓋(8)路徑覆蓋67發(fā)現(xiàn)錯誤的能力標(biāo)準(zhǔn)含義1(弱)語句覆蓋每條語句至少執(zhí)行一次2判定覆蓋每一判定的每個分支至少執(zhí)行一次3條件覆蓋每一判定中的每個條件,分別按“真”、“假”至少各執(zhí)行一次4判定/條件覆蓋同時滿足判定覆蓋和條件覆蓋的要求5(強(qiáng))條件組合覆蓋求出判定中所有條件的各種可能組合值,每一可能的條件組合至少執(zhí)行一次

邏輯覆蓋測試的5種標(biāo)準(zhǔn)

681、語句覆蓋

使程序中每個語句至少執(zhí)行一次。開始(A>1)AND(B=0)(A=2)OR(X>1)返回X=X/AX=X+1FFTTabdce只需設(shè)計一個測試用例:

輸入數(shù)據(jù):A=2,

B=0,

X=4

即達(dá)到了語句覆蓋。語句覆蓋是最弱的邏輯覆蓋(如:AND寫成OR,X>1寫成

X<1,查不出來)692、

判定覆蓋(分支覆蓋)

使每個判定的真假分支都至少執(zhí)行一次。開始(A>1)AND(B=0)(A=2)OR(X>1)返回X=X/AX=X+1FFTTabdce可設(shè)計兩組測試用例:A=3,B=0,X=3可覆蓋c、d分支

A=2,B=1,X=1可覆蓋b、e分支

兩組測試用例可覆蓋所有判定的真假分支

判定覆蓋仍是弱的邏輯覆蓋,只覆蓋了全部路徑的一半。703、條件覆蓋使每個判定的每個條件的可能取值至少執(zhí)行一次。開始(A>1)AND(B=0)(A=2)OR(X>1)返回X=X/AX=X+1FFTTabdce滿足條件:T1,T1,T2,T2T3,T3T4,T4第一判定表達(dá)式:設(shè)條件A>1取真記為T1

T1

條件B=0取真記為T2

T2第二判定表達(dá)式:設(shè)條件A=2取真記為T3

T3

條件X>1取真記為T4

T471測試用例通過滿足的覆蓋ABX路徑條件分支103abeT1,T2,T3,T4b,e211abeT1,T2,T3,T4b,e

兩個測試用例覆蓋了四個條件八種可能取值。未覆蓋c、d分支,不滿足判定覆蓋的要求.

條件覆蓋不一定包含判定覆蓋判定覆蓋也不一定包含條件覆蓋(A>1)AND(B=0)(A=2)OR(X>1)X=X/AX=X+1FFTTabdce724判定/條件覆蓋選取足夠多的測試用例,使判斷中的每個條件的所有可能取值至少執(zhí)行一次,同時每個判斷本身的所有可能判斷結(jié)果至少執(zhí)行一次.開始(A>1)AND(B=0)(A=2)OR(X>1)返回X=X/AX=X+1FFTTabdce滿足條件:T1,T1,T2,T2T3,T3T4,T473測試用例通過滿足的條件覆蓋ABX路徑分支204aceT1,T2,T3,T4c,e111abdT1,T2,T3,T4b,d能同時滿足判定、條件兩種覆蓋標(biāo)準(zhǔn)的取值745、條件組合覆蓋所有可能的條件取值組合至少執(zhí)行一次

A>1,B=0A>1,B≠0A≯1,B=0A≯1,B≠0A=2,X>1A=2,X≯1A≠2,X>1A≠2,X≯1測試用例通過滿足的覆蓋ABX路徑條件分支204aceT1,T2,T3,T4c,e211abeT1,T2,T3,T4b,e102abdT1,T2,T3,T4b,d111abdT1,T2,T3,T4b,d(A>1)AND(B=0)(A=2)OR(X>1)X=X/AX=X+1FFTTabdce75以上根據(jù)測試數(shù)據(jù)對源程序語句檢測的詳盡程度,簡單討論了幾種邏輯覆蓋標(biāo)準(zhǔn)。在上面的分析過程中常常談到測試數(shù)據(jù)執(zhí)行的程序路徑,顯然,測試數(shù)據(jù)可以檢測的程序路徑的多少,也反映了對程序測試的詳盡程度。從對程序路徑的覆蓋程度分析,能夠提出下述一些主要的邏輯覆蓋標(biāo)準(zhǔn)。766.點(diǎn)覆蓋圖論中點(diǎn)覆蓋的概念定義如下:如果連通圖G的子圖G′是連通的,而且包含G的所有結(jié)點(diǎn),則稱G′是G的點(diǎn)覆蓋。在第5.5節(jié)中已經(jīng)講述了從程序流程圖導(dǎo)出流圖的方法。在正常情況下流圖是連通的有向圖。滿足點(diǎn)覆蓋標(biāo)準(zhǔn)要求選取足夠多的測試數(shù)據(jù),使得程序執(zhí)行路徑至少經(jīng)過流圖的每個結(jié)點(diǎn)一次,由于流圖的每個結(jié)點(diǎn)與一條或多條語句相對應(yīng),顯然,點(diǎn)覆蓋標(biāo)準(zhǔn)和語句覆蓋標(biāo)準(zhǔn)是相同的。777.邊覆蓋圖論中邊覆蓋的定義是:如果連通圖G的子圖G″是連通的,而且包含G的所有邊,則稱G″是G的邊覆蓋。為了滿足邊覆蓋的測試標(biāo)準(zhǔn),要求選取足夠多測試數(shù)據(jù),使得程序執(zhí)行路徑至少經(jīng)過流圖中每條邊一次。通常邊覆蓋和判定覆蓋是一致的。8.路徑覆蓋路徑覆蓋的含義是,選取足夠多測試數(shù)據(jù),使程序的每條可能路徑都至少執(zhí)行一次(如果程序圖中有環(huán),則要求每個環(huán)至少經(jīng)過一次)。787.6.2控制結(jié)構(gòu)測試(自學(xué))1.基本路徑測試2.條件測試3.循環(huán)測試軟件工程79基本路徑測試步驟根據(jù)過程設(shè)計結(jié)果畫出相應(yīng)的流圖。計算程序環(huán)路復(fù)雜性P>=程序基本路徑集中的獨(dú)立路徑條數(shù),這是確保程序中每個邊至少經(jīng)過一次所必需的測試用例數(shù)目的上界。找出程序基本路徑集,一條獨(dú)立路徑至少包含有一條在其他獨(dú)立路徑中從未有過的邊。根據(jù)判斷結(jié)點(diǎn)給出的條件,選擇適當(dāng)?shù)臄?shù)據(jù)以保證每一條路徑可以被測試到—用邏輯覆蓋的方法。條件測試分支與關(guān)系運(yùn)算符(BRO)測試:保證檢測布爾變量和關(guān)系運(yùn)算符只出現(xiàn)一次而且沒有公共變量的條件中的分支和關(guān)系運(yùn)算符錯誤。BRO策略利用條件C的條件約束。有n個簡單條件的條件C的條件約束定義為(D1,D2,…,Dn),其中Di刻畫條件C中第I個簡單條件的輸出約束。如果C的執(zhí)行過程中C的每個簡單條件的輸出都滿足D中對應(yīng)的約束,則稱條件C的條件約束D由C的執(zhí)行所覆蓋。8081BRO測試舉例:例1:C1:B1&B2B1,B2為布爾變量。C1的條件約束形如(D1,D2),其中D1和D2的值是t或f。BRO測試策略要求約束集{(t,t),(f,t),(t,f)}由C1的執(zhí)行所覆蓋,如果C1由于布爾運(yùn)算符錯誤而不正確,該約束集中至少有一個約束強(qiáng)制C1失敗。例2:C2:B1&(E3=E4){(t,=),(f,=),(t,<),(t,>)},此約束集的覆蓋率將保證檢測C2的布爾運(yùn)算符和關(guān)系運(yùn)算符錯誤。條件測試82參考資料:Kuo-ChungTai,TheoryofFault-BasedPredicateTestingforComputerPrograms,IEEETransactionsonSoftwareEngineering,v.22n.8,p.552-562,August1996

Tai,K.C.,"Predicate-basedtestgenerationforcomputerprograms",Proc.Inter.Conf.onSoftwareEngineering,May1993,267-276.83黑盒測試著重測試軟件功能。黑盒測試并不能取代白盒測試,它是與白盒測試互補(bǔ)的測試方法,它很可能發(fā)現(xiàn)白盒測試不易發(fā)現(xiàn)的其他類型的錯誤。黑盒測試力圖發(fā)現(xiàn)下述類型的錯誤:①功能不正確或遺漏了功能;②界面錯誤;③數(shù)據(jù)結(jié)構(gòu)錯誤或外部數(shù)據(jù)庫訪問錯誤;④性能錯誤;⑤初始化和終止錯誤。黑盒測試技術(shù):等價劃分法、邊界值分析法、錯誤推測法、因果圖法等。7.7黑盒測試技術(shù)841等價類劃分法(等價分配)

把所有可能的輸入數(shù)據(jù)(有效的和無效的)劃分成若干個等價的子集(稱為等價類別或等價區(qū)間),使得每個子集中的一個典型值在測試中的作用與這一子集中所有其它值的作用相同.

等價類別或等價區(qū)間是指測試相同目標(biāo)或者暴露相同軟件缺陷的一組測試用例85如何劃分等價類?有效等價類(合理等價類)無效等價類(不合理等價類)

劃分等價類的標(biāo)準(zhǔn):覆蓋不相交代表性86劃分等價類的規(guī)則

(1)如果輸入條件規(guī)定了取值范圍,可定義一個有效等價類和兩個無效等價類。例輸入值是學(xué)生成績,范圍是0~1000100

有效等價類0≤成績≤100無效等價類成績>100

無效等價類成績<0(2)如果輸入條件代表集合的某個元素,則可定義一個有效等價類和一個無效等價類。劃分等價類的規(guī)則:(3)如規(guī)定了輸入數(shù)據(jù)的一組值,且程序?qū)Σ煌斎胫底霾煌幚?,則每個允許的輸入值是一個有效等價類,并有一個無效等價類(所有不允許的輸入值的集合)。例:輸入條件說明學(xué)歷可為:專科、本科、碩士、博士四種之一,則分別取這四個值作為四個有效等價類,另外把四種學(xué)歷之外的任何學(xué)歷作為無效等價類(4)如果規(guī)定了輸入數(shù)據(jù)必須遵循的規(guī)則,可確定一個有效等價類(符合規(guī)則)和若干個無效等價類(從不同角度違反規(guī)則)。(5)如已劃分的等價類各元素在程序中的處理方式不同,則應(yīng)將此等價類進(jìn)一步劃分成更小的等價類。用等價類劃分法設(shè)計測試用例步驟:(1)形成等價類表,每一等價類規(guī)定一個唯一的編號;(2)設(shè)計一測試用例,使其盡可能多地覆蓋尚未覆蓋的有效等價類,重復(fù)這一步驟,直到所有有效等價類均被測試用例所覆蓋;(3)設(shè)計一新測試用例,使其只覆蓋一個

無效等價類,重復(fù)這一步驟直到所有無效等價類均被覆蓋;89例:某報表處理系統(tǒng)要求用戶輸入處理報表的日期,日期限制在2003年1月至2008年

12月,即系統(tǒng)只能對該段期間內(nèi)的報表進(jìn)行處理,如日期不在此范圍內(nèi),則顯示輸入錯誤信息。系統(tǒng)日期規(guī)定由年、月的6位數(shù)字字符組成,前四位代表年,后兩位代表月。

如何用等價類劃分法設(shè)計測試用例,

來測試程序的日期檢查功能?第一步:等價類劃分輸入條件有效等價類無效等價類

報表日期的類型及長度6位數(shù)字字符(1)有非數(shù)字字符(4)少于6個數(shù)字字符(5)多于6個數(shù)字字符(6)年份范圍在2003~2008之間(2)小于2003(7)大于2008(8)月份范圍在1~12之間(3)“報表日期”輸入條件的等價類表小于1(9)大于12(10)第二步:為有效等價類設(shè)計測試用例

測試數(shù)據(jù)期望結(jié)果覆蓋范圍200306等價類(1)(2)(3)輸入有效對表中編號為1,2,3的3個有效等價類用一個測試用例覆蓋:(1)6位數(shù)字字符(2)年在2003~2008之間(3)月在1~12之間第三步:為每一個無效等價類設(shè)至少設(shè)計一個測試用例

測試數(shù)據(jù)期望結(jié)果覆蓋范圍003MAY等價類(4)輸入無效20035等價類(5)輸入無效2003005等價類(6)輸入無效200105等價類(7)輸入無效200905等價類(8)輸入無效200300等價類(9)輸入無效200313等價類(10)輸入無效不能出現(xiàn)相同的測試用例本例的10個等價類至少需要8個測試用例例:對招干考試系統(tǒng)“輸入學(xué)生成績”子模塊設(shè)計測試錄入準(zhǔn)考證號的測試用例準(zhǔn)考證號數(shù)據(jù)格式定義:共6為數(shù)字組成,其中第一位為專業(yè)代號:1-行政專業(yè),2-法律專業(yè),3-財經(jīng)專業(yè)后5位為考生順序號,編碼范圍為:

行政專業(yè)準(zhǔn)考證號碼為:110001~111215

法律專業(yè)準(zhǔn)考證號碼為:210001~212006

財經(jīng)專業(yè)準(zhǔn)考證號碼為:310001~314015

準(zhǔn)考證號碼的等價類劃分

有效等價類:

(1)110001~111215(2)210001~212006(3)310001~314015

無效等價類:

(4)-

~110000(5)111216~210000(6)212007~31000(7)314016~+等價類劃分即把輸入空間分解成一系列子域,軟件在一個子域內(nèi)的行為應(yīng)是等價的。

軟件錯誤分為兩類:計算錯誤域錯誤針對計算錯誤的測試方法針對域錯誤的測試方法:測試域邊界劃定的正確性2邊界值分析法邊界值分析法與等價類劃分法區(qū)別(1)邊界值分析不是從某等價類中隨便挑一個作為代表,而是使這個等價類的每個邊界都要作為測試條件。(2)邊界值分析不僅考慮輸入條件,還要考慮輸出空間產(chǎn)生的測試情況被測試子域測試內(nèi)點(diǎn)測試外點(diǎn)

如果在懸崖峭壁邊可以自信地安全行走,平地就不在話下。如果軟件在能力達(dá)到極限時能夠運(yùn)行,那么在正常情況下就不會出什么問題。軟件邊界與懸崖很類似邊界條件類型

如果軟件測試問題包含確定的邊界,那么數(shù)據(jù)類型可能是:數(shù)值字符位置數(shù)量速度地址尺寸……還要考慮數(shù)據(jù)類型的特征:第一個/最后一個最小值/最大值開始/完成空/滿最慢/最快相鄰/最遠(yuǎn)超過/在內(nèi)……測試邊界線測試臨近邊界的合法數(shù)據(jù),以及剛超過邊界的非法數(shù)據(jù).越界測試通常簡單地加1或很小的數(shù)

(對于最大值)和減1或很小的數(shù)(對于最小值).

輸入條件報表日期的類型及長度1個數(shù)字字符5個數(shù)字字符7個數(shù)字字符有1個非數(shù)字字符全部是非數(shù)字字符6個數(shù)字字符顯示出錯顯示出錯顯示出錯顯示出錯顯示出錯輸入有效日期范圍月份范圍“報表日期(6位數(shù)字字符)”邊界值分析法測試用例測試用例說明測試數(shù)據(jù)期望結(jié)果選取理由52003520030052003.5MAY---200305月份為1月月份為12月月份<1月份>12200301200312200300200313200301200812200300200813輸入有效輸入有效顯示出錯顯示出錯輸入有效輸入有效顯示出錯顯示出錯在有效范圍邊界上選取數(shù)據(jù)僅有1個合法字符比有效長度少1比有效長度多1只有1個非法字符6個非法字符類型及長度均有效最小日期最大日期剛好小于最小日期剛好大于最大日期最小月份最大月份剛好小于最小月份剛好大于最大月份有效等價類和用來測試getNumDaysInMonth()方法所選的有效輸入

有效等價類一個月有31天,非閏年19017(七月)一個月有31天,閏年19047(七月)一個月有30天,非閏年19016(六月)一個月有30天,閏年19046(六月)一個月為28或29天,非閏年19012(二月)月份輸入值年份輸入值一個月為28或29天,閏年2(二月)1904用來測試getNumDaysInMonth()方法的附加邊界值

等價類可以被400整除的閏年20002(二月)可以被100整除的非閏年19002(二月)非正數(shù)無效月份12910正數(shù)無效月份131513月份輸入值年份輸入值3錯誤推測法(errorguessing)根據(jù)經(jīng)驗(yàn)、直覺和預(yù)感來進(jìn)行測試?yán)纾阂欢ㄒ紤]建立處理下列等價類:缺省值空白空值零值無輸入條件在已經(jīng)找到軟件缺陷的地方再找找

4因果圖法

因果圖適合于描述對于多種輸入條件的組合,相應(yīng)產(chǎn)生多個動作的形式來設(shè)計測試用例。因果圖方法最終生成的是判定表。因果圖方法實(shí)例某電力公司有A、B、C、D四類收費(fèi)標(biāo)準(zhǔn),并規(guī)定:居民用電<100度/月按A類收費(fèi)≥100度/月按B類收費(fèi)動力用電<10000度/月,非高峰,B類收費(fèi)≥10000度/月,非高峰,C類收費(fèi)

<10000度/月,高峰,C類收費(fèi)≥10000度/月,高峰,D類收費(fèi)用因果圖表明輸入和輸出間的邏輯關(guān)系1I12AB∨∧C435∧DI4I3I2∨∧∧∧∧因果<100居民動力<10000非高峰把因果圖轉(zhuǎn)換為判定表組合條件條件(原因)動作(結(jié)果)ABC123123456101100011000110000100001104101050011D000110010000測試用例為判定表每一列設(shè)計一個測試用例:1列居民電,90度/月A2列居民電,110度/月B3列動力電,非高峰,8000度/月B4列動力電,非高峰,1.2萬度/月C5列動力電,高峰,0.9萬度/月C6列動力電,高峰,1.1萬度/月D

條件測試用例預(yù)期結(jié)果組合(輸入數(shù)據(jù))(輸出動作)1077.8調(diào)試調(diào)試(也稱為糾錯)作為成功測試的后果出現(xiàn),也就是說,調(diào)試是在測試發(fā)現(xiàn)錯誤之后排除錯誤的過程。雖然調(diào)試應(yīng)該而且可以是一個有序過程,但是,目前它在很大程度上仍然是一項(xiàng)技巧。軟件工程師在評估測試結(jié)果時,往往僅面對著軟件錯誤的癥狀,也就是說,軟件錯誤的外部表現(xiàn)和它的內(nèi)在原因之間可能并沒有明顯的聯(lián)系。調(diào)試就是把癥狀和原因聯(lián)系起來的尚未被人深入認(rèn)識的智

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論