第五章:結(jié)構(gòu)化實現(xiàn)_第1頁
第五章:結(jié)構(gòu)化實現(xiàn)_第2頁
第五章:結(jié)構(gòu)化實現(xiàn)_第3頁
第五章:結(jié)構(gòu)化實現(xiàn)_第4頁
第五章:結(jié)構(gòu)化實現(xiàn)_第5頁
已閱讀5頁,還剩80頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

通常把編碼和測試統(tǒng)稱為實現(xiàn)。所謂編碼就是把軟件設(shè)計翻譯成計算機可以理解的形式—用某種程序設(shè)計語言書寫的程序。軟件測試仍然是保證軟件質(zhì)量的關(guān)鍵步驟,它是對軟件規(guī)格說明、設(shè)計和編碼的最后復審。通常在編寫出每個模塊之后就對它做必要的測試(稱為單元測試),模塊的編寫者和測試者是同一個人,編碼和單元測試屬于軟件生命周期的同一個階段。在這個階段結(jié)束之后,對軟件系統(tǒng)還應(yīng)該進行各種綜合測試,這是軟件生命周期中的另一個獨立的階段,通常由專門的測試人員承擔這項工作。第五章:結(jié)構(gòu)化實現(xiàn)5.1編碼5.2軟件測試基礎(chǔ)5.3邏輯覆蓋5.4控制結(jié)構(gòu)技術(shù)5.5黑盒測試技術(shù)5.6測試策略5.7調(diào)試5.8軟件可靠性第五章:結(jié)構(gòu)化實現(xiàn)程序設(shè)計語言是人和計算機通信的基本工具,它的特點不可避免地會影響人思維和解決問題的方式,會影響人和計算機通信的方式和質(zhì)量,也會影響其他人閱讀和理解程序的難易程度。使用匯編語言編碼需要把軟件設(shè)計翻譯成機器操作的序列,由于這兩種表示方法很不相同,因此匯編程序設(shè)計既困難又容易出差錯。一般說來,高級語言的源程序語句和匯編代碼指令之間有一句對多句的對應(yīng)關(guān)系。5.1.1選擇程序設(shè)計語言統(tǒng)計資料表明,程序員在相同時間內(nèi)可以寫出的高級語言語句數(shù)和匯編語言指令數(shù)大體相同;同時,高級語言一般都允許用戶給程序變量和子程序賦予含義鮮明的名字,通過名字很容易把程序?qū)ο蠛退鼈兯淼膶嶓w聯(lián)系起來;此外,高級語言使用的符號和概念更符合人的習慣,因此,用高級語言寫的程序容易閱讀,容易測試,容易調(diào)試,容易維護。總的說來,高級語言明顯優(yōu)于匯編語言,因此,除了在很特殊的應(yīng)用領(lǐng)域或者大型系統(tǒng)中執(zhí)行時間非常關(guān)鍵的一小部分代碼需要用匯編語言書寫之外,其他程序應(yīng)該一律用高級語言書寫。為了使程序容易測試和維護以減少生命周期的總成本,選用的高級語言應(yīng)該有理想的模塊化機制,以及可讀性好的控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu);為了便于調(diào)試和提高軟件可靠性,語言特點應(yīng)該使編譯程序能夠盡可能多地發(fā)現(xiàn)程序中的錯誤;為了降低軟件開發(fā)和維護的成本,選用的語言應(yīng)該有良好的獨立編譯機制。(1)系統(tǒng)用戶的要求(2)可以使用的編譯程序(3)可以得到的軟件工具(4)工程規(guī)模(5)程序員的知識(6)軟件可移植性要求(7)軟件的應(yīng)用領(lǐng)域選擇高級語言的標準源程序代碼的邏輯簡明清晰、易讀易懂是好程序的一個重要標準。為了做到這一點,應(yīng)該遵循下述規(guī)則:1.程序內(nèi)部的文檔

所謂程序內(nèi)部的文檔包括恰當?shù)臉俗R符、適當?shù)淖⒔狻⒊绦虻囊曈X組織等。選取含義鮮明的名字,使它能正確地提示程序?qū)ο笏淼膶嶓w,這對于幫助閱讀者理解程序是很重要的。2.數(shù)據(jù)說明

數(shù)據(jù)說明的次序應(yīng)該標準化;當多個變量名在一個語句中說明時,應(yīng)該按字母順序排列這些變量;用注解說明用程序設(shè)計語言實現(xiàn)復雜數(shù)據(jù)結(jié)構(gòu)的方法和特點。5.1.2編碼風格3.語句構(gòu)造

不要為了節(jié)省空間而把多個語句寫在同一行;

盡量避免復雜的條件測試;

盡量減少對“非”條件的測試;

避免大量使用循環(huán)嵌套和條件嵌套;

利用括號使邏輯表達式或算術(shù)表達式的運算次序清晰直觀。4.輸入/輸出

對所有輸入數(shù)據(jù)都進行檢驗;

檢查輸入項重要組合的合法性;

保持輸入格式簡單;

使用數(shù)據(jù)結(jié)束標記,不要要求用戶指定數(shù)據(jù)的數(shù)目;

明確提示交互式輸入的請求,詳細說明可用的選擇或邊界數(shù)值;

當程序設(shè)計語言對格式有嚴格要求時,應(yīng)保持輸入格式一致;

設(shè)計良好的輸出報表;

給所有輸出數(shù)據(jù)加標志。5.效率(1)程序運行時間

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

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

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

盡量避免使用指針和復雜的表;

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

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

盡量使用整數(shù)運算和布爾表達式。(2)存儲器效率在大型計算機中必須考慮操作系統(tǒng)頁式調(diào)度的特點,一般說來,使用能保持功能域的結(jié)構(gòu)化控制結(jié)構(gòu),是提高效率的好方法;在微處理機中如果要求使用最少的存儲單元,則應(yīng)選用有緊縮存儲器特性的編譯程序,在非常必要時可以使用匯編語言。(3)輸入/輸出的效率硬件之間的通信效率是很復雜的問題,從寫程序的角度看,有些簡單的原則可以提高輸入/輸出的效率:

所有輸入/輸出都應(yīng)該有緩沖,以減少用于通信的額外開銷;

對二級存儲器(如磁盤)應(yīng)選用最簡單的訪問方法;

二級存儲器的輸入/輸出應(yīng)該以信息組為單位進行;

如果“超高效的”輸入/輸出很難被人理解,則不應(yīng)采用這種方法。5.1編碼5.2軟件測試基礎(chǔ)5.3邏輯覆蓋5.4控制結(jié)構(gòu)技術(shù)5.5黑盒測試技術(shù)5.6測試策略5.7調(diào)試5.8軟件可靠性第五章:結(jié)構(gòu)化實現(xiàn)表面看來,軟件測試的目的與軟件工程所有其他階段的目的都相反。軟件工程的其他階段都是“建設(shè)性”的:軟件工程師力圖從抽象的概念出發(fā),逐步設(shè)計出具體的軟件系統(tǒng),直到用一種適當?shù)某绦蛟O(shè)計語言寫出可以執(zhí)行的程序代碼。而在測試階段測試人員努力設(shè)計出一系列測試方案,目的卻是為了“破壞”已經(jīng)建造好的軟件系統(tǒng)—竭力證明程序中有錯誤,不能按照預定要求正確工作。測試階段的根本目標是盡可能多地發(fā)現(xiàn)并排除軟件中潛藏的錯誤,最終把一個高質(zhì)量的軟件系統(tǒng)交給用戶使用。測試的規(guī)則

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

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

成功的測試是發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯誤的測試5.2.1測試目標黑盒測試:已經(jīng)知道了產(chǎn)品應(yīng)該具有的功能,可以通過測試來檢驗是否每個功能都能正常使用;白盒測試:知道產(chǎn)品內(nèi)部工作過程,可以通過測試來檢驗產(chǎn)品內(nèi)部動作是否按照規(guī)格說明書的規(guī)定正常進行。對于軟件測試而言,黑盒測試法是把程序看成一個黑盒子,完全不考慮程序的內(nèi)部結(jié)構(gòu)和處理過程。白盒測試法的前提是可以把程序看成裝在一個透明的白盒子里,也就是完全了解程序的結(jié)構(gòu)和處理過程。5.2.2黑盒測試和白盒測試①所有的測試都應(yīng)該能追溯到用戶需求。②應(yīng)該在測試開始之前的相當長時間,就制定出測試計劃。③把Pareto原理應(yīng)用于軟件測試。Pareto原理:測試發(fā)現(xiàn)的錯誤中的80%很可能是由程序中20%的模塊造成的。④測試應(yīng)該從“小規(guī)?!遍_始,并逐步進行“大規(guī)?!睖y試。⑤窮舉測試是不可能的。⑥為了達到最佳的測試效果,應(yīng)該由獨立的第三方來從事測試工作。5.2.3測試準則在設(shè)計測試方案時,往往需要仔細分析程序的控制流。為了突出表示程序的控制流,可以使用流圖(也稱為程序圖)。流圖僅僅描繪程序的控制流程,在流圖中用圓表示節(jié)點,一個圓代表一條或多條語句,一個處理框序列和一個菱形判定框,可以映射成流圖中的一個節(jié)點,箭頭線稱為邊,它和程序流程圖中的箭頭線類似,代表控制流。在流圖中一條邊必須終止于一個節(jié)點,即使這個節(jié)點并不代表任何語句(實際上相當于一個空語句)。由邊和節(jié)點圍成的面積稱為區(qū)域,當計算區(qū)域數(shù)時應(yīng)該包括圖外部未被圍起來的那個區(qū)域。5.2.4流圖圖5.1把程序流程圖映射成流圖圖5.2由PDL翻譯成的流圖圖5.3由包含復合條件的PDL映射成的流圖5.1編碼5.2軟件測試基礎(chǔ)5.3邏輯覆蓋5.4控制結(jié)構(gòu)技術(shù)5.5黑盒測試技術(shù)5.6測試策略5.7調(diào)試5.8軟件可靠性第五章:結(jié)構(gòu)化實現(xiàn)邏輯覆蓋是設(shè)計白盒測試方案的一種技術(shù)。不同的測試數(shù)據(jù)發(fā)現(xiàn)程序錯誤的能力差別很大,為了提高測試效率降低測試成本,應(yīng)該選用高效的測試數(shù)據(jù)。有選擇地執(zhí)行程序中某些最有代表性的通路是對窮盡測試的唯一可行的替代辦法。所謂邏輯覆蓋是對一系列測試過程的總稱,這組測試過程逐漸進行越來越完整的通路測試。為了暴露程序中的錯誤,至少每個語句應(yīng)該執(zhí)行一次。語句覆蓋的含義是,選擇足夠多的測試數(shù)據(jù),使被測程序中每個語句至少執(zhí)行一次。語句覆蓋對程序的邏輯覆蓋很少,是很弱的邏輯覆蓋標準。1.語句覆蓋判定覆蓋又叫做分支覆蓋,它的含義是,不僅每個語句必須至少執(zhí)行一次,而且每個判定的每種可能的結(jié)果都應(yīng)該至少執(zhí)行一次,也就是每個判定的每個分支都至少執(zhí)行一次。判定覆蓋比語句覆蓋強,但是對程序邏輯的覆蓋程度仍然不高。2.判定覆蓋條件覆蓋的含義是,不僅每個語句至少執(zhí)行一次,而且使判定表達式中的每個條件都取到各種可能的結(jié)果條件覆蓋通常比判定覆蓋強,因為它使判定表達式中每個條件都取到了兩個不同的結(jié)果,而判定覆蓋卻只關(guān)心整個判定表達式的值。3.條件覆蓋既然判定覆蓋不一定包含條件覆蓋,條件覆蓋也不一定包含判定覆蓋,自然會提出一種能同時滿足這兩種覆蓋標準的邏輯覆蓋,這就是判定/條件覆蓋。它的含義是,選取足夠多的測試數(shù)據(jù),使得判定表達式中的每個條件都取到各種可能的值,而且每個判定表達式也都取到各種可能的結(jié)果。4.判定/條件覆蓋條件組合覆蓋是更強的邏輯覆蓋標準,它要求選取足夠多的測試數(shù)據(jù),使得每個判定表達式中條件的各種可能組合都至少出現(xiàn)一次。5.條件組合覆蓋5.1編碼5.2軟件測試基礎(chǔ)5.3邏輯覆蓋5.4控制結(jié)構(gòu)技術(shù)5.5黑盒測試技術(shù)5.6測試策略5.7調(diào)試5.8軟件可靠性第五章:結(jié)構(gòu)化實現(xiàn)基本路徑測試是TomMcCabe提出的一種白盒測試技術(shù)。步驟如下:1.根據(jù)過程設(shè)計結(jié)果畫出相應(yīng)的流圖PRCEDUREaverage;*這個過程計算不超過100個在規(guī)定值域內(nèi)的有效數(shù)字的平均值;同時計算有效數(shù)字的總和及個數(shù)。INTERFACE

RETURNSaverage,total.input,total.valid;INTERFACE

ACCEPTSvalue,minimum,maximum;TYPEvalue[1..100]IS

SCALAR

ARRAY;5.4.1基本路徑測試TYPEaverage,total.input,total.valid;minimum,maximum,sumISSCALAR;TYPEiISINTEGER;1: i=1; total.input=total.valid=0; sum=0;2: DO

WHILEvalue[i]<>-9993: ANDtotal.input<1004: incrementtotal.inputby1;5: IFvalue[i]>=minimum6: ANDvalue[i]<=maximum7: THENincrementtotal.validby1; sum=sum+value[i];8: ENDIF

incrementIby1;9: ENDDO10: IFtotal.valid>011: THENaverage=sum/total.valid;12: ELSEaverage=-999;13: ENDIFENDaverage圖5.5求平均值過程的流圖2.計算流圖的環(huán)形復雜度方法:①流圖中的區(qū)域數(shù)等于環(huán)形復雜度。②流圖G的環(huán)形復雜度V(G)=E?N+2,其中E是流圖中邊的條數(shù),N是流圖中節(jié)點數(shù)。③流圖G的環(huán)形復雜度V(G)=P+1,其中P是流圖中判定節(jié)點的數(shù)目。3.確定線性獨立路徑的基本集合所謂獨立路徑,是指至少引入程序的一個新處理語句集合或一個新條件的路徑。用流圖術(shù)語描述,獨立路徑至少包含一條在定義該路徑之前不曾用過的邊。使用基本路徑測試法設(shè)計測試用例時,程序的環(huán)形復雜度決定了程序中獨立路徑的數(shù)量,而且這個數(shù)是確保程序中所有語句至少被執(zhí)行一次所需的測試數(shù)量的上界。4.設(shè)計可強制執(zhí)行基本集合中每條路徑的測試用例測試用例輸

入預期結(jié)果路徑1value[k]=有效輸入值,其中k<i(i的定義在下面)

value[i]=?999,其中2≤i≤100基于k的正確平均值和總數(shù)

注意,路徑1無法獨立測試,必須作為路徑4、5和6的一部分來測試路徑2value[1]=?999average=?999,其他都保持初始值路徑3試圖處理101個或更多個值前100個數(shù)值應(yīng)該是有效輸入值與測試用例1相同

注意,路徑3也無法獨立測試,必須作為路徑4、5和6的一部分來測試路徑4value[i]=有效輸入值,其中i<100

value[k]<minimum,其中k<i基于k的正確平均值和總數(shù)路徑5value[i]=有效輸入值,其中i<100

value[k]>maximum,其中k<i其于k的正確平均值和總數(shù)路徑6value[i]=有效輸入值,其中i<100正確的平均值和總數(shù)用條件測試技術(shù)設(shè)計出的測試用例,能夠檢查程序模塊中包含的邏輯條件。關(guān)系表達式的形式如下:

E1<關(guān)系算符>E2其中,E1和E2是算術(shù)表達式,而<關(guān)系算符>是下列算符之一:“<”、“≤”、“=”、“≠”、“>”或“≥”復合條件由兩個或多個簡單條件、布爾算符和括弧組成。布爾算符有OR(“|”)、AND(“&”)和NOT(“?”)。不包含關(guān)系表達式的條件稱為布爾表達式。5.4.2條件測試條件錯誤的類型:

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

布爾變量錯;

布爾括弧錯;

關(guān)系算符錯;

算術(shù)表達式錯。數(shù)據(jù)流測試方法是根據(jù)程序中變量定義和使用的位置,選擇程序的測試路徑。變量X的定義

?

使用鏈(或稱為DU鏈)的形式為[X,S,S'

],其中S和S'是語句號,X在集合DEF(S)和USE(S')中,而且在語句S中對X的定義在語句S'

仍然有效。由于程序內(nèi)的語句因變量的定義和使用而彼此相關(guān),因此,數(shù)據(jù)流測試方法能有效地發(fā)現(xiàn)錯誤。但是,在度量測試覆蓋率和選擇測試路徑時,數(shù)據(jù)流測試比條件測試更困難。5.4.3數(shù)據(jù)流測試循環(huán)是絕大多數(shù)軟件算法的基礎(chǔ),但是,在測試軟件時卻往往未對循環(huán)結(jié)構(gòu)進行足夠的測試。循環(huán)測試是一種白盒測試技術(shù),它專注于測試循環(huán)結(jié)構(gòu)的有效性。在結(jié)構(gòu)化的程序中通常只有3種循環(huán),分別是簡單循環(huán)、嵌套循環(huán)和串接循環(huán)。5.4.4循環(huán)測試簡單循環(huán)

嵌套循環(huán)

串接循環(huán)圖5.63中循環(huán)應(yīng)該使用下列測試集來測試簡單循環(huán),其中n是允許通過循環(huán)的最大次數(shù)。

跳過循環(huán)。

只通過循環(huán)一次。

通過循環(huán)兩次。

通過循環(huán)m次,其中m<n?1。

通過循環(huán)n?1,n,n+1次。1.簡單循環(huán)B.Beizer提出了一種能減少測試數(shù)的方法:

從最內(nèi)層循環(huán)開始測試,把所有其他循環(huán)都設(shè)置為最小值。

對最內(nèi)層循環(huán)使用簡單循環(huán)測試方法,而使外層循環(huán)的迭代參數(shù)(如循環(huán)計數(shù)器)取最小值,并為越界值或非法值增加一些額外的測試。

由內(nèi)向外,對下一個循環(huán)進行測試,但保持所有其他外層循環(huán)為最小值,其他嵌套循環(huán)為“典型”值。

繼續(xù)進行下去,直到測試完所有循環(huán)。2.嵌套循環(huán)如果串接循環(huán)的各個循環(huán)都彼此獨立,則可以使用前述的測試簡單循環(huán)的方法來測試串接循環(huán)。但是,如果兩個循環(huán)串接,而且第1個循環(huán)的循環(huán)計數(shù)器值是第2個循環(huán)的初始值,則這兩個循環(huán)并不是獨立的。當循環(huán)不獨立時,建議使用測試嵌套循環(huán)的方法來測試串接循環(huán)。3.串接循環(huán)5.1編碼5.2軟件測試基礎(chǔ)5.3邏輯覆蓋5.4控制結(jié)構(gòu)技術(shù)5.5黑盒測試技術(shù)5.6測試策略5.7調(diào)試5.8軟件可靠性第五章:結(jié)構(gòu)化實現(xiàn)黑盒測試著重測試軟件的功能需求,也就是說,黑盒測試讓軟件工程師設(shè)計出能充分檢查程序所有功能需求的輸入條件集。黑盒測試力圖發(fā)現(xiàn)下述類型的錯誤:①功能不正確或遺漏了功能;②界面錯誤;③數(shù)據(jù)結(jié)構(gòu)錯誤或外部數(shù)據(jù)庫訪問錯誤;④性能錯誤;⑤初始化和終止錯誤。白盒測試在測試過程的早期階段進行,而黑盒測試主要用于測試過程的后期。黑盒測試應(yīng)考慮的問題:①怎樣測試功能的有效性;②哪些類型的輸入將構(gòu)成好測試用例;③系統(tǒng)是否對特定的輸入值特別敏感;④怎樣劃定數(shù)據(jù)類的邊界;⑤系統(tǒng)能夠承受什么樣的數(shù)據(jù)率和數(shù)據(jù)量;⑥

數(shù)據(jù)的特定組合將對系統(tǒng)運行產(chǎn)生什么影響。應(yīng)用黑盒測試技術(shù),可以設(shè)計出滿足下述標準的測試用例集:①所設(shè)計出的測試用例能夠減少為達到合理測試所需要設(shè)計的附加測試用例的數(shù)目;②所設(shè)計出的測試用例能夠告訴我們,是否存在某些類型的錯誤,而不是僅僅指出與特定測試相關(guān)的錯誤是否存在。等價劃分是一種黑盒測試方法,這種方法把程序的輸入域劃分成數(shù)據(jù)類,據(jù)此可以導出測試用例。窮盡的黑盒測試(即使用所有有效的和無效的輸入數(shù)據(jù)測試程序)通常是不現(xiàn)實的,因此,只能選取少量最有代表性的輸入數(shù)據(jù)作為測試數(shù)據(jù),以期用較小的代價暴露出較多程序錯誤。使用等價劃分法設(shè)計測試方案首先需要劃分輸入數(shù)據(jù)的等價類,為此需要研究程序的功能說明,從而確定輸入數(shù)據(jù)的有效等價類和無效等價類。5.5.1等價劃分①如果規(guī)定了輸入值的范圍,則可劃分出一個有效的等價類(輸入值在此范圍內(nèi)),兩個無效的等價類(輸入值小于最小值或大于最大值)。②如果規(guī)定了輸入數(shù)據(jù)的個數(shù),則類似地也可以劃分出一個有效的等價類和兩個無效的等價類。③如果規(guī)定了輸入數(shù)據(jù)的一組值,而且程序?qū)Σ煌斎胫底霾煌幚恚瑒t每個允許的輸入值是一個有效的等價類,此外還有一個無效的等價類(任一個不允許的輸入值)。劃分等價類的規(guī)則④如果規(guī)定了輸入數(shù)據(jù)必須遵循的規(guī)則,則可以劃分出一個有效的等價類(符合規(guī)則)和若干個無效的等價類(從各種不同角度違反規(guī)則)。⑤如果規(guī)定了輸入數(shù)據(jù)為整型,則可以劃分出正整數(shù)、零和負整數(shù)3個有效類。⑥如果程序的處理對象是表格,則應(yīng)該使用空表,以及含一項或多項的表。①設(shè)計一個新的測試方案以盡可能多地覆蓋尚未被覆蓋的有效等價類,重復這一步驟直到所有有效等價類都被覆蓋為止。②設(shè)計一個新的測試方案,使它覆蓋一個而且只覆蓋一個尚未被覆蓋的無效等價類,重復這一步驟直到所有無效等價類都被覆蓋為止。根據(jù)等價類設(shè)計測試方案的主要步驟。處理邊界情況時程序最容易發(fā)生錯誤。使用邊界值分析方法設(shè)計測試方案首先應(yīng)該確定邊界情況,這需要經(jīng)驗和創(chuàng)造性。通常輸入等價類和輸出等價類的邊界,就是應(yīng)該著重測試的程序邊界情況。設(shè)計測試方案時總是聯(lián)合使用等價劃分和邊界值分析兩種技術(shù)。5.5.2邊界值分析使用邊界值分析和等價劃分技術(shù),可以幫助我們設(shè)計出具有代表性的,因而也就容易暴露程序錯誤的測試方案。但是,不同類型、不同特點的程序通常又有一些特殊的容易出錯的情況。錯誤推測法在很大程度上靠直覺和經(jīng)驗進行。它的基本想法是列舉出程序中可能有的錯誤和容易發(fā)生錯誤的特殊情況,并且根據(jù)它們選擇測試方案。5.5.3錯誤推測5.1編碼5.2軟件測試基礎(chǔ)5.3邏輯覆蓋5.4控制結(jié)構(gòu)技術(shù)5.5黑盒測試技術(shù)5.6測試策略5.7調(diào)試5.8軟件可靠性第五章:結(jié)構(gòu)化實現(xiàn)除非是測試一個小程序,否則一開始就把整個系統(tǒng)作為一個單獨的實體來測試是不現(xiàn)實的。與開發(fā)過程類似,測試過程也必須分步驟進行,后一個步驟在邏輯上是前一個步驟的繼續(xù)。①單元測試:著重測試每個單獨的模塊,以確保它作為一個單元來說功能是正確的;②集成測試:把模塊裝配(即集成)在一起形成完整的軟件包,在裝配的同時進行測試;③確認測試:測試在需求分析階段確定下來的確認標準,確認測試是對軟件滿足所有功能的、行為的和性能需求的最終保證;④高級測試的最后一個步驟已經(jīng)超出了軟件工程的范疇,而成為計算機系統(tǒng)工程的一部分。5.6.1測試步驟1.代碼審查人工測試源程序可以由編寫者本人非正式地進行,也可以由審查小組正式進行。審查小組最好由下述4人組成:

組長,他應(yīng)該是一個很有能力的程序員,而且沒有直接參與這項工程;

程序的設(shè)計者;

程序的編寫者;

程序的測試者。5.6.2單元測試2.測試軟件模塊并不是一個獨立的程序,因此,必須為每個單元測試開發(fā)驅(qū)動軟件和(或)存根軟件。通常驅(qū)動程序也就是一個“主程序”,它接收測試數(shù)據(jù),把這些數(shù)據(jù)傳送給被測試的模塊,并且印出有關(guān)的結(jié)果。驅(qū)動程序和存根程序代表開銷,也就是說,為了進行單元測試必須編寫測試軟件,但是通常并不把它們作為軟件產(chǎn)品的一部分交給用戶。模塊的內(nèi)聚程度高可以簡化單元測試過程。集成測試是測試和組裝軟件的系統(tǒng)化技術(shù),是把模塊按照設(shè)計要求組裝起來的同時進行測試,主要目標是發(fā)現(xiàn)與接口有關(guān)的問題。由模塊組裝成程序時有兩種方法:①非漸增式測試:先分別測試每個模塊,再把所有模塊按設(shè)計要求放在一起結(jié)合成所要的程序;②漸增式測試:把下一個要測試的模塊同已經(jīng)測試好的那些模塊結(jié)合起來進行測試,測試完以后再把下一個應(yīng)該測試的模塊結(jié)合進來測試。5.6.3集成測試非漸增式測試一下子把所有模塊放在一起,并把整個程序作為一個整體來進行測試,測試者面對的場面往往混亂不堪。漸增式測試與“一步到位”的非漸增式測試相反,把程序劃分成小段來構(gòu)造和測試,在這個過程中比較容易分離和改正錯誤。1.自頂向下集成

自頂向下的集成(結(jié)合)方法是一個日益為人們廣泛采用的組裝軟件的途徑。從主控制模塊(主程序)開始,沿著軟件的控制層次向下移動,從而逐漸把各個模塊結(jié)合起來。在把附屬于(以及最終附屬于)主控制模塊的那些模塊組裝到軟件結(jié)構(gòu)中去時,或者使用深度優(yōu)先的策略,或者使用寬度優(yōu)先的策略。兩種不同的漸增式集成策略圖5.8自頂向下結(jié)合把模塊結(jié)合進軟件結(jié)構(gòu)的具體過程由下述4個步驟完成①對主控制模塊進行測試,測試時用存根程序代替所有直接附屬于主控制模塊的模塊。②根據(jù)選定的結(jié)合策略(深度優(yōu)先或?qū)挾葍?yōu)先),每次用一個實際模塊代換一個存根程序(新結(jié)合進來的模塊往往又需要新的存根程序)。③在結(jié)合進一個模塊的同時進行測試。④為了保證加入模塊沒有引進新的錯誤,可能需要進行回歸測試(即全部或部分地重復以前做過的測試)。2.自底向上集成

自底向上測試從“原子”模塊(即在軟件結(jié)構(gòu)最低層的模塊)開始組裝和測試。實現(xiàn)自底向上的結(jié)合策略的4個步驟:①把低層模塊組合成實現(xiàn)某個特定的軟件子功能的簇;②寫一個驅(qū)動程序(用于測試的控制程序),協(xié)調(diào)測試數(shù)據(jù)的輸入和輸出;③對由模塊組成的子功能簇進行測試;④去掉驅(qū)動程序,沿軟件結(jié)構(gòu)自下向上移動,把子功能簇組合起來形成更大的子功能簇。圖5.9自底向下結(jié)合3.回歸測試每當一個新模塊作為集成測試的一部分加進來的時候,軟件就發(fā)生了變化:建立了新的數(shù)據(jù)流路徑,可能出現(xiàn)了新的I/O操作,激活了新的控制邏輯。在集成測試的范疇中,所謂回歸測試是指重新執(zhí)行已經(jīng)做過的測試的某個子集,以保證上述這些變化沒有帶來非預期的副作用。回歸測試可以通過重新執(zhí)行所有測試用例的一個子集人工地進行,也可以使用自動化的捕獲回放工具自動進行?;貧w測試集(已執(zhí)行過的測試用例的子集)包括下述3種不同的測試用例。

檢測軟件全部功能的代表性測試用例。

專門針對可能受修改影響的軟件功能的附加測試。

針對被修改過的軟件成分的測試。4.不同集成測試策略的比較自頂向下測試方法的主要優(yōu)點是不需要測試驅(qū)動程序,能夠在測試階段的早期實現(xiàn)并驗證系統(tǒng)的主要功能,而且能在早期發(fā)現(xiàn)上層模塊的接口錯誤。自頂向下測試方法的主要缺點是需要存根程序,可能遇到與此相聯(lián)系的測試困難,低層關(guān)鍵模塊中的錯誤發(fā)現(xiàn)較晚,而且用這種方法在早期不能充分展開人力。(1)改進的自頂向下測試方法基本上使用自頂向下的測試方法,但是在早期,就使用自底向上的方法測試軟件中的少數(shù)關(guān)鍵模塊。一般的自頂向下方法所具有的優(yōu)點在這種方法中都有,而且能在測試的早期發(fā)現(xiàn)關(guān)鍵模塊中的錯誤;但是,它的缺點也比自頂向下方法多一條,即測試關(guān)鍵模塊時需要驅(qū)動程序。(2)混合法對軟件結(jié)構(gòu)中較上層,使用的是自頂向下方法;對軟件結(jié)構(gòu)中較下層,使用的是自底向上方法,兩者相結(jié)合。關(guān)鍵模塊具有下述的一個或多個特征:①與多項軟件需求有關(guān);②含有高層控制(模塊位于程序結(jié)構(gòu)的較高層次);③本身是復雜的或容易出錯的(可以用環(huán)形復雜度來指示);④有確定的性能需求。確認測試也稱為驗收測試,它的目標是驗證軟件的有效性。驗證指的是保證軟件正確地實現(xiàn)了某一特定要求的一系列活動,而確認指的是保證軟件的實現(xiàn)滿足了用戶需求的一系列活動。5.6.4確認測試確認測試必須有用戶積極參與,或者以用戶為主進行。用戶應(yīng)該參加設(shè)計測試方案,使用用戶接口輸入測試數(shù)據(jù)并且分析評價測試的輸出結(jié)果。確認測試有兩種可能的結(jié)果:

功能和性能與用戶要求一致,軟件是可以接受的;

功能或性能與用戶的要求有差距。1.確認測試的范圍確認測試的一個重要內(nèi)容是復查軟件配置。復查的目的是保證軟件配置的所有成分都齊全,各方面的質(zhì)量都符合要求,文檔與程序一致,具有維護階段所必須的細節(jié),而且已經(jīng)編排好目錄。除了按合同規(guī)定的內(nèi)容和要求,由人工審查軟件配置之外,在確認測試的過程中應(yīng)該嚴格遵循用戶指南以及其他操作程序,以便檢驗這些使用手冊的完整性和正確性。2.軟件配置復查Alpha測試由用戶在開發(fā)者的場所進行,并且在開發(fā)者對用戶的“指導”下進行測試。開發(fā)者負責記錄錯誤和使用中遇到的問題??傊珹lpha測試是在受控的環(huán)境中進行的。Beta測試由軟件的最終用戶在一個或多個客戶場所進行。與Alpha測試不同,開發(fā)者通常不在Beta測試的現(xiàn)場,因此,Beta測試是軟件在開發(fā)者不能控制的環(huán)境中的“真實”應(yīng)用。3.Alpha測試和Beta測試5.1編碼5.2軟件測試基礎(chǔ)5.3邏輯覆蓋5.4控制結(jié)構(gòu)技術(shù)5.5黑盒測試技術(shù)5.6測試策略5.7調(diào)試5.8軟件可靠性第五章:結(jié)構(gòu)化實現(xiàn)調(diào)試(也稱為糾錯)作為成功的測試的后果而出現(xiàn),也就是說,調(diào)試是在測試發(fā)現(xiàn)錯誤之后排除錯誤的過程。雖然調(diào)試可以而且應(yīng)該是一個有序的過程,但是在很大程度上它仍然是一項技巧。5.7.1調(diào)試過程圖5.10調(diào)試過程調(diào)試過程的結(jié)果:①找到了問題的原因并把問題改正和排除掉了;②沒找出問題的原因。在后一種情況下,調(diào)試人員可以猜想一個原因,并設(shè)計測試用例來驗證這個假設(shè),重復此過程直至找到原因并改正了錯誤。調(diào)試是軟件開發(fā)過程中最艱巨的腦力勞動。

癥狀和產(chǎn)生癥狀的原因可能在程序中相距甚遠。

當改正了另一個錯誤之后,癥狀可能暫時消失了。

癥狀可能實際上并不是由錯誤引起的。

癥狀可能是由不易跟蹤的人為錯誤引起的。

癥狀可能是由定時問題而不是由處理問題引起的。

可能很難重新產(chǎn)生完全一樣的輸入條件。

癥狀可能時有

溫馨提示

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

評論

0/150

提交評論