軟件工程導(dǎo)論-課件之第7章-實(shí)現(xiàn)(第五版)(張海潘編著)_第1頁
軟件工程導(dǎo)論-課件之第7章-實(shí)現(xiàn)(第五版)(張海潘編著)_第2頁
軟件工程導(dǎo)論-課件之第7章-實(shí)現(xiàn)(第五版)(張海潘編著)_第3頁
軟件工程導(dǎo)論-課件之第7章-實(shí)現(xiàn)(第五版)(張海潘編著)_第4頁
軟件工程導(dǎo)論-課件之第7章-實(shí)現(xiàn)(第五版)(張海潘編著)_第5頁
已閱讀5頁,還剩131頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第7章實(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軟件可靠性通常把編碼和測試統(tǒng)稱為實(shí)現(xiàn)。所謂編碼就是把軟件設(shè)計(jì)結(jié)果翻譯成用某種程序設(shè)計(jì)語言書寫的程序。軟件測試在軟件生命周期中橫跨兩個(gè)階段。通常在編寫出每個(gè)模塊之后就對它做單元測試。在這個(gè)階段結(jié)束之后,對軟件系統(tǒng)還應(yīng)該進(jìn)行各種綜合測試,通常由專門的測試人員承擔(dān)這項(xiàng)工作。通過測試發(fā)現(xiàn)錯(cuò)誤之后還必須診斷并改正錯(cuò)誤,這就是調(diào)試的目的。調(diào)試是測試階段最困難的工作。在對測試結(jié)果進(jìn)行收集和評價(jià)的時(shí)候,使用故障率數(shù)據(jù),估計(jì)軟件將來出現(xiàn)故障的情況并預(yù)測軟件的可靠性。7.1編碼

7.1.1選擇程序設(shè)計(jì)語言機(jī)器語言,幾乎不使用。匯編語言,特殊場合使用。高級語言,明顯優(yōu)于匯編語言。程序設(shè)計(jì)語言的劃代:

劃代語言特點(diǎn)級別1GL機(jī)器語言程序不直觀,編程出錯(cuò)率高運(yùn)行效率高低級2GL匯編語言比機(jī)器語言直觀,減少了出錯(cuò)率與機(jī)器碼一樣長特殊情況下才使用3GLBASICPASCALC、C++等利用類英語的語句和命令一條語句相當(dāng)于5-10條機(jī)器碼要規(guī)定詳細(xì)的算法過程高級4GL數(shù)據(jù)庫查詢語言程序生成器圖形語言與自然語言接近一條語句相當(dāng)于30-50條機(jī)器碼非過程化問題定義運(yùn)行開銷大,效率低選擇語言的理想標(biāo)準(zhǔn):為了使程序容易測試和維護(hù)以減少軟件的總成本,所選用的高級語言應(yīng)該有理想的模塊化機(jī)制,以及可讀性好的控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu);為了便于調(diào)試和提高軟件可靠性,語言特點(diǎn)應(yīng)該使編譯程序能夠盡可能多地發(fā)現(xiàn)程序中的錯(cuò)誤;為了降低軟件開發(fā)和維護(hù)的成本,選用的高級語言應(yīng)該有良好的獨(dú)立編譯機(jī)制。主要的實(shí)用標(biāo)準(zhǔn):系統(tǒng)用戶的要求可以使用的編譯程序可以得到的軟件工具工程規(guī)模程序員的知識(shí)軟件可移植性要求軟件的應(yīng)用領(lǐng)域7.1.2編碼風(fēng)格1.程序內(nèi)部的文檔恰當(dāng)?shù)臉?biāo)識(shí)符適當(dāng)?shù)淖⒔獬绦虻囊曈X組織2.數(shù)據(jù)說明數(shù)據(jù)說明的次序應(yīng)該標(biāo)準(zhǔn)化。當(dāng)多個(gè)變量名在一個(gè)語句中說明時(shí),應(yīng)該按字母順序排列這些變量。如果設(shè)計(jì)時(shí)使用了一個(gè)復(fù)雜的數(shù)據(jù)結(jié)構(gòu),則應(yīng)該用注解說明用程序設(shè)計(jì)語言實(shí)現(xiàn)這個(gè)數(shù)據(jù)結(jié)構(gòu)的方法和特點(diǎn)。3.語句構(gòu)造不要為了節(jié)省空間而把多個(gè)語句寫在同一行;盡量避免復(fù)雜的條件測試;盡量減少對“非”條件的測試;避免大量使用循環(huán)嵌套和條件嵌套;利用括號使邏輯表達(dá)式或算術(shù)表達(dá)式的運(yùn)算次序清晰直觀。4.輸入輸出對所有輸入數(shù)據(jù)都進(jìn)行檢驗(yàn);檢查輸入項(xiàng)重要組合的合法性;保持輸入格式簡單;使用數(shù)據(jù)結(jié)束標(biāo)記,不要要求用戶指定數(shù)據(jù)的數(shù)目;明確提示交互式輸入的請求,詳細(xì)說明可用的選擇或邊界數(shù)值;當(dāng)程序設(shè)計(jì)語言對格式有嚴(yán)格要求時(shí),應(yīng)保持輸入格式一致;設(shè)計(jì)良好的輸出報(bào)表;給所有輸出數(shù)據(jù)加標(biāo)志。5.效率效率主要指處理機(jī)時(shí)間和存儲(chǔ)器容量兩個(gè)方面。效率是性能要求,因此應(yīng)該在需求分析階段確定效率方面的要求。效率是靠好設(shè)計(jì)來提高的。程序的效率和程序的簡單程度是一致的,不要犧牲程序的清晰性和可讀性來不必要地提高效率。效率問題:程序運(yùn)行時(shí)間存儲(chǔ)器效率輸入輸出的效率(1)程序運(yùn)行時(shí)間寫程序之前先簡化算術(shù)的和邏輯的表達(dá)式;仔細(xì)研究嵌套的循環(huán),以確定是否有語句可以從內(nèi)層往外移;盡量避免使用多維數(shù)組;盡量避免使用指針和復(fù)雜的表;使用執(zhí)行時(shí)間短的算術(shù)運(yùn)算;不要混合使用不同的數(shù)據(jù)類型;盡量使用整數(shù)運(yùn)算和布爾表達(dá)式。在效率是決定性因素的應(yīng)用領(lǐng)域,盡量使用有良好優(yōu)化特性的編譯程序,以自動(dòng)生成高效目標(biāo)代碼。(2)存儲(chǔ)器效率使用能保持功能域的結(jié)構(gòu)化控制結(jié)構(gòu),是提高效率的好方法。在微處理機(jī)中如果要求使用最少的存儲(chǔ)單元,則應(yīng)選用有緊縮存儲(chǔ)器特性的編譯程序,在非常必要時(shí)可以使用匯編語言。提高執(zhí)行效率的技術(shù)通常也能提高存儲(chǔ)器效率。提高存儲(chǔ)器效率的關(guān)鍵同樣是“簡單”。(3)輸入輸出的效率如果用戶為了給計(jì)算機(jī)提供輸入信息或?yàn)榱死斫庥?jì)算機(jī)輸出的信息,所需花費(fèi)的腦力勞動(dòng)是經(jīng)濟(jì)的,那么人和計(jì)算機(jī)之間通信的效率就高。因此,簡單清晰同樣是提高人機(jī)通信效率的關(guān)鍵。例1:注釋/*ADDAMOUNTTOTOTAL*/TOTAL=AMOUNT+TOTAL/*ADDMONTHLY-SALESTOANNUAL-TOTAL*/TOTAL=AMOUNT+TOTAL例2:視覺組織——空格(A<-17)ANDNOT(B<=49)ORC(A<-17)ANDNOT(B<=49)ORC例3:視覺組織——移行IF(…)THENIF(…)THEN……ELSE……ENDIF……ELSE……ENDIF例4:數(shù)據(jù)說明標(biāo)準(zhǔn)化INTEGERsize,length,width,cost,priceINTEGERcost,length,price,size,width例5:一行一條語句FORI:=1TON-1DOBEGINT:=I;FORJ:=I+1TONDOIFA[J]<A[T]THENT:=J;IFT<>ITHENBEGINWORK:=A[T];A[T]:=A[I];A[I]:=WORK;ENDEND;FORI:=1TON-1DOBEGINT:=I;FORJ:=I+1TONDOIFA[J]<A[T]THENT:=J;IFT<>ITHENBEGINWORK:=A[T];A[T]:=A[I];A[I]:=WORK;ENDEND;例6:強(qiáng)調(diào)清晰性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;例7:簡單直接

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;elseV[i][j]=0;例8:避免不必要的轉(zhuǎn)移IF(X<Y)GOTO30IF(Y<Z)GOTO50SMALL=ZGOTO7030IF(X<Z)GOTO60AMALL=ZGOTO7050SMALL=YGOTO7060SMALL=X70CONTINUESMALL=X;IF(Y<SMALL)SMALL=Y;IF(Z<SMALL)SMALL=Z;例9:避免使用空ELSE和IF…THENIF…語句if(char>=’a’)if(char<=’z’)cout<<“Thisisaletter.”;elsecout<<“Thisisnotaletter.”;if(char>=’a’&&char<=’z’)cout<<“Thisisaletter.”;elsecout<<“Thisisnotaletter.”;例10:少用否定條件if(!(char<’0’||char>’9’))if(char>=‘0’&&char<=‘9’)7.2軟件測試基礎(chǔ)

7.2.1軟件測試的目標(biāo)測試是為了發(fā)現(xiàn)程序中的錯(cuò)誤而執(zhí)行程序的過程;好的測試方案是極可能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測試方案;成功的測試是發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測試。所有測試都應(yīng)該能追溯到用戶需求;應(yīng)該遠(yuǎn)在測試開始之前就制定出測試計(jì)劃;把Pareto原理應(yīng)用到軟件測試中;應(yīng)該從“小規(guī)?!睖y試開始,并逐步進(jìn)行“大規(guī)?!睖y試;窮舉測試是不可能的;為了達(dá)到最佳的測試效果,應(yīng)該由獨(dú)立的第三方從事測試工作。7.2.2軟件測試準(zhǔn)則7.2.3測試方法黑盒測試(功能測試):把程序看作一個(gè)黑盒子;完全不考慮程序的內(nèi)部結(jié)構(gòu)和處理過程;是在程序接口進(jìn)行的測試。白盒測試(結(jié)構(gòu)測試):把程序看成裝在一個(gè)透明的盒子里;測試者完全知道程序的結(jié)構(gòu)和處理算法;按照程序內(nèi)部的邏輯測試程序,檢測程序中的主要執(zhí)行通路是否都能按預(yù)定要求正確工作。黑盒測試不可能實(shí)現(xiàn)窮盡測試:假設(shè)有程序P,輸入量微A和B,輸出量為C。如果計(jì)算機(jī)的字長為32位,A和B的數(shù)據(jù)類型都是整數(shù)類型。將A和B的可能取值進(jìn)行排列組合,輸入數(shù)據(jù)的可能性有:232×232=264種。假設(shè)這個(gè)程序執(zhí)行一次需要1毫秒,要完成所有的測試,計(jì)算機(jī)需要連續(xù)工作5億年。白盒測試也不能實(shí)現(xiàn)窮盡測試:圖中所示的一個(gè)小程序的控制流程。曲線代表執(zhí)行次數(shù)不超過20的循環(huán),循環(huán)體中共有5條通路??赡軋?zhí)行的路徑有520條,近似為1014條可能的路徑。如果完成一個(gè)路徑的測試需要1毫秒,那么整個(gè)測試過程需要3170年。黑盒測試與白盒測試優(yōu)缺點(diǎn)比較:黑盒測試白盒測試優(yōu)點(diǎn)①適用于各階段測試②從產(chǎn)品功能角度測試③容易入手生成測試數(shù)據(jù)①可構(gòu)成測試數(shù)據(jù)使特定程序部分得到測試②有一定的充分性度量手段③可獲較多工具支持缺點(diǎn)①某些代碼得不到測試②如果規(guī)格說明有誤,則無法發(fā)現(xiàn)③不易進(jìn)行充分性測試①通常不易生成測試數(shù)據(jù)②無法對未實(shí)現(xiàn)規(guī)格說明的部分進(jìn)行測試③工作量大,通常只用于單元測試,有應(yīng)用局限性質(zhì)一種確認(rèn)技術(shù),回答“我們在構(gòu)造一個(gè)正確的系統(tǒng)嗎?”一種驗(yàn)證技術(shù),回答“我們在正確地構(gòu)造一個(gè)系統(tǒng)嗎?”7.2.4測試步驟1.模塊測試(單元測試)保證每個(gè)模塊作為一個(gè)單元能正確運(yùn)行;發(fā)現(xiàn)的往往是編碼和詳細(xì)設(shè)計(jì)的錯(cuò)誤。2.子系統(tǒng)測試把經(jīng)過單元測試的模塊放在一起形成一個(gè)子系統(tǒng)來測試;著重測試模塊的接口。3.系統(tǒng)測試把經(jīng)過測試的子系統(tǒng)裝配成一個(gè)完整的系統(tǒng)來測試;發(fā)現(xiàn)的往往是軟件設(shè)計(jì)中的錯(cuò)誤,也可能發(fā)現(xiàn)需求說明中的錯(cuò)誤;不論是子系統(tǒng)測試還是系統(tǒng)測試,都兼有檢測和組裝兩重含義,通常稱為集成測試。4.驗(yàn)收測試(確認(rèn)測試)把軟件系統(tǒng)作為單一的實(shí)體進(jìn)行測試;它是在用戶積極參與下進(jìn)行的,而且可能主要使用實(shí)際數(shù)據(jù)(系統(tǒng)將來要處理的信息)進(jìn)行測試;發(fā)現(xiàn)的往往是系統(tǒng)需求說明書中的錯(cuò)誤。5.平行運(yùn)行同時(shí)運(yùn)行新開發(fā)出來的系統(tǒng)和將被它取代的舊系統(tǒng);比較新舊兩個(gè)系統(tǒng)的處理結(jié)果;可以在準(zhǔn)生產(chǎn)環(huán)境中運(yùn)行新系統(tǒng)而又不冒風(fēng)險(xiǎn);用戶能有一段熟悉新系統(tǒng)的時(shí)間;可以驗(yàn)證用戶指南和使用手冊之類的文檔;能夠以準(zhǔn)生產(chǎn)模式對新系統(tǒng)進(jìn)行全負(fù)荷測試,可以用測試結(jié)果驗(yàn)證性能指標(biāo)。7.2.5測試階段的信息流輸入信息有兩類:軟件配置,包括需求說明書、設(shè)計(jì)說明書和源程序清單等;測試配置,包括測試計(jì)劃和測試方案。7.3單元測試

單元測試集中檢測模塊;單元測試和編碼屬于軟件過程的同一個(gè)階段;可以應(yīng)用人工測試和計(jì)算機(jī)測試這樣兩種不同類型的測試方法;單元測試主要使用白盒測試技術(shù),對多個(gè)模塊的測試可以并行地進(jìn)行。7.3.1測試重點(diǎn)模塊接口局部數(shù)據(jù)結(jié)構(gòu)重要的執(zhí)行通路出錯(cuò)處理通路邊界條件7.3.2代碼審查由審查小組正式進(jìn)行測試稱為代碼審查;可查出30%~70%的邏輯設(shè)計(jì)錯(cuò)誤和編碼錯(cuò)誤;審查小組組成:組長程序的設(shè)計(jì)者程序的編寫者程序的測試者一次審查會(huì)上可以發(fā)現(xiàn)許多錯(cuò)誤,可以減少系統(tǒng)驗(yàn)證的總工作量。7.3.3計(jì)算機(jī)測試必須為每個(gè)單元測試開發(fā)驅(qū)動(dòng)程序和(或)存根程序。驅(qū)動(dòng)程序是一個(gè)“主程序”,它接收測試數(shù)據(jù),傳送給被測試的模塊,并且印出有關(guān)的結(jié)果。存根程序代替被測試的模塊所調(diào)用的模塊。它使用被它代替的模塊的接口,可能做最少量的數(shù)據(jù)操作,印出對入口的檢驗(yàn)或操作結(jié)果,并且把控制歸還給調(diào)用它的模塊。驅(qū)動(dòng)程序和存根程序代表開銷,通常并不把它們作為軟件產(chǎn)品的一部分交給用戶。7.4集成測試集成測試是測試和組裝軟件的系統(tǒng)化技術(shù),主要目標(biāo)是發(fā)現(xiàn)與接口有關(guān)的問題。由模塊組裝成程序時(shí)有兩種方法:非漸增式測試方法漸增式測試方法非漸增式測試方法:先分別測試每個(gè)模塊,再把所有模塊按設(shè)計(jì)要求放在一起結(jié)合成所要的程序;非漸增式測試一下子把所有模塊放在一起,并把龐大的程序作為一個(gè)整體來測試,測試者面對的情況十分復(fù)雜。在龐大的程序中想要診斷定位一個(gè)錯(cuò)誤是非常困難的,改正錯(cuò)誤更是極端困難,而且一旦改正一個(gè)錯(cuò)誤之后,馬上又會(huì)遇到新的錯(cuò)誤。漸增式測試方法:把下一個(gè)要測試的模塊同已經(jīng)測試好的那些模塊結(jié)合起來進(jìn)行測試;測試完以后再把下一個(gè)應(yīng)該測試的模塊結(jié)合進(jìn)來測試,每次增加一個(gè)模塊;實(shí)際上同時(shí)完成單元測試和集成測試;把程序劃分成小段來構(gòu)造和測試,在這個(gè)過程中比較容易定位和改正錯(cuò)誤;漸增方式有兩種集成策略:自頂向下自底向上7.4.1自頂向下集成從主控制模塊開始,沿著程序的控制層次向下移動(dòng),逐漸把各個(gè)模塊結(jié)合起來。在把附屬于主控制模塊的那些模塊組裝到程序結(jié)構(gòu)中去時(shí),或者使用深度優(yōu)先的策略,或者使用寬度優(yōu)先的策略。深度優(yōu)先:先組裝在軟件結(jié)構(gòu)的一條主控制通路上的所有模塊。寬度優(yōu)先:沿軟件結(jié)構(gòu)水平地移動(dòng),把處于同一個(gè)控制層次上的所有模塊組裝起來。按深度優(yōu)先策略組裝按寬度優(yōu)先策略組裝把模塊結(jié)合進(jìn)軟件結(jié)構(gòu)的過程由下述4個(gè)步驟完成:第一步,對主控制模塊進(jìn)行測試,測試時(shí)用存根程序代替所有直接附屬于主控制模塊的模塊;第二步,根據(jù)選定的結(jié)合策略(深度優(yōu)先或?qū)挾葍?yōu)先),每次用一個(gè)實(shí)際模塊代換一個(gè)存根程序(新結(jié)合進(jìn)來的模塊往往又需要新的存根程序);第三步,在結(jié)合進(jìn)一個(gè)模塊的同時(shí)進(jìn)行測試;第四步,為了保證加入模塊沒有引進(jìn)新的錯(cuò)誤,可能需要進(jìn)行回歸測試(即,全部或部分地重復(fù)以前做過的測試)。從第二步開始不斷地重復(fù)進(jìn)行上述過程,直到構(gòu)造起完整的軟件結(jié)構(gòu)為止。優(yōu)點(diǎn):能夠在測試的早期對主要的控制或關(guān)鍵的抉擇進(jìn)行檢驗(yàn)。如果選擇深度優(yōu)先的結(jié)合方法,可以在早期實(shí)現(xiàn)軟件的一個(gè)完整的功能并且驗(yàn)證這個(gè)功能。缺點(diǎn):存根程序代替了低層次的模塊,在軟件結(jié)構(gòu)中沒有重要的數(shù)據(jù)自下往上流。用下述步驟可以實(shí)現(xiàn)自底向上的結(jié)合策略:第一步,把低層模塊組合成實(shí)現(xiàn)某個(gè)特定的軟件子功能的族;第二步,寫一個(gè)驅(qū)動(dòng)程序(用于測試的控制程序),協(xié)調(diào)測試數(shù)據(jù)的輸入和輸出;第三步,對由模塊組成的子功能族進(jìn)行測試;第四步,去掉驅(qū)動(dòng)程序,沿軟件結(jié)構(gòu)自下向上移動(dòng),把子功能族組合起來形成更大的子功能族。上述第二步到第四步實(shí)質(zhì)上構(gòu)成了一個(gè)循環(huán)。7.4.2自底向上集成自底向上結(jié)合自底向上結(jié)合7.4.3不同集成測試策略的比較不同集成測試方法的比較:方法優(yōu)點(diǎn)缺點(diǎn)非漸增式?jīng)]有錯(cuò)誤隔離手段主要設(shè)計(jì)錯(cuò)誤發(fā)現(xiàn)遲潛在可重用代碼測試不充分需要驅(qū)動(dòng)程序和存根程序自頂向下具有錯(cuò)誤隔離手段主要設(shè)計(jì)錯(cuò)誤發(fā)現(xiàn)早不需要驅(qū)動(dòng)程序潛在可重用代碼測試不充分需要存根程序自底向上具有錯(cuò)誤隔離手段潛在可重用代碼能充分測試不需要存根程序主要設(shè)計(jì)錯(cuò)誤發(fā)現(xiàn)遲需要驅(qū)動(dòng)程序混合具有錯(cuò)誤隔離手段主要設(shè)計(jì)錯(cuò)誤發(fā)現(xiàn)早潛在可重用代碼能充分測試混合策略:改進(jìn)的自頂向下測試方法基本上使用自頂向下的測試方法,但是在早期使用自底向上的方法測試軟件中的少數(shù)關(guān)鍵模塊。能在測試的早期發(fā)現(xiàn)關(guān)鍵模塊中的錯(cuò)誤;測試關(guān)鍵模塊時(shí)需要驅(qū)動(dòng)程序?;旌戏▽浖Y(jié)構(gòu)中較上層使用的自頂向下方法與對軟件結(jié)構(gòu)中較下層使用的自底向上方法相結(jié)合。兼有兩種方法的優(yōu)缺點(diǎn),當(dāng)被測試的軟件中關(guān)鍵模塊比較多時(shí),這種混合法可能是最好的折衷方法。7.4.4回歸測試回歸測試是指重新執(zhí)行已經(jīng)做過的測試的某個(gè)子集,以保證測試過程中的變化沒有帶來非預(yù)期的副作用。回歸測試就是用于保證由于調(diào)試或其他原因引起的變化,不會(huì)導(dǎo)致非預(yù)期的軟件行為或額外錯(cuò)誤的測試活動(dòng)?;貧w測試可以通過重新執(zhí)行全部測試用例的一個(gè)子集人工地進(jìn)行,也可以使用自動(dòng)化的捕獲回放工具自動(dòng)進(jìn)行。

7.5確認(rèn)測試確認(rèn)測試也稱為驗(yàn)收測試,它的目標(biāo)是驗(yàn)證軟件的有效性。軟件有效性的一個(gè)簡單定義是:如果軟件的功能和性能如同用戶所合理期待的那樣,軟件就是有效的。需求分析階段產(chǎn)生的軟件需求規(guī)格說明書,準(zhǔn)確地描述了用戶對軟件的合理期望,因此是軟件有效性的標(biāo)準(zhǔn),也是進(jìn)行確認(rèn)測試的基礎(chǔ)。確認(rèn)測試必須有用戶積極參與,或者以用戶為主進(jìn)行。使用用戶界面輸入測試數(shù)據(jù)并且分析評價(jià)測試的輸出結(jié)果。通常在驗(yàn)收之前由開發(fā)單位對用戶進(jìn)行培訓(xùn)。

7.5.1確認(rèn)測試的范圍確認(rèn)測試的一個(gè)重要內(nèi)容是復(fù)查軟件配置。復(fù)查的目的是保證軟件配置的所有成分都齊全,質(zhì)量符合要求,文檔與程序完全一致,具有完成軟件維護(hù)所必須的細(xì)節(jié),而且已經(jīng)編好目錄。

7.5.2軟件配置復(fù)查Alpha測試由用戶在開發(fā)者的場所進(jìn)行,并且在開發(fā)者對用戶的“指導(dǎo)”下進(jìn)行測試。Alpha測試是在受控的環(huán)境中進(jìn)行的。Beta測試由軟件的最終用戶們在一個(gè)或多個(gè)客戶場所進(jìn)行。開發(fā)者通常不在Beta測試的現(xiàn)場,因此,Beta測試是軟件在開發(fā)者不能控制的環(huán)境中的“真實(shí)”應(yīng)用。7.5.3Alpha和Beta測試測試階段主要依據(jù)測試人員測試方式主要測試內(nèi)容單元測試系統(tǒng)設(shè)計(jì)文檔開發(fā)小組白盒測試接口測試路徑測試子系統(tǒng)測試系統(tǒng)設(shè)計(jì)文檔需求文檔獨(dú)立測試小組白盒測試黑盒測試接口測試路徑測試功能測試性能測試系統(tǒng)測試需求文檔獨(dú)立測試小組黑盒測試功能測試健壯性測試性能測試用戶界面測試安全性測試壓力測試可靠性測試安裝/反安裝測試驗(yàn)收測試需求文檔用戶黑盒測試測試總結(jié):1.接口測試每個(gè)接口可能有多個(gè)輸入?yún)?shù),每個(gè)參數(shù)有“典型值”、“邊界值”、“異常值”之分。根據(jù)接口的定義,可以推斷某種輸入應(yīng)當(dāng)產(chǎn)生什么樣的輸出。輸出包括函數(shù)的返回值和輸出參數(shù)。觀察是否有程序語句從來沒有被執(zhí)行過。要特別留意函數(shù)體內(nèi)的錯(cuò)誤處理程序塊。

2.路徑測試想遍歷測試幾乎是不可能的,不測試或者胡亂找?guī)讞l路徑測試卻又不行。輸入與對應(yīng)的輸出之間的路徑是唯一的。由于接口測試時(shí)的輸入是有代表性的,因此相應(yīng)的路徑也具有代表性。路徑測試檢查表:數(shù)據(jù)類型、變量值、邏輯判斷、循環(huán)、內(nèi)存管理、文件I/O、錯(cuò)誤處理。3.功能測試功能測試的基本方法是構(gòu)造一些合理輸入(在需求范圍之內(nèi)),檢查輸出是否與期望相同。功能測試有兩種比較好的測試方法:等價(jià)劃分法和邊界值分析法。等價(jià)劃分是指把輸入空間劃分為幾個(gè)“等價(jià)區(qū)間”,在每個(gè)“等價(jià)區(qū)間”中只需要測試一個(gè)典型值就可以了。邊界值測試法是對等價(jià)劃分法的補(bǔ)充。除了典型值外還要用邊界值作為測試用例。

4.健壯性測試健壯性是指在異常情況下,軟件能正常運(yùn)行的能力。健壯性有兩層含義:容錯(cuò)能力。容錯(cuò)性測試通常構(gòu)造一些不合理的輸入來引誘軟件出錯(cuò)?;謴?fù)能力?;謴?fù)測試重點(diǎn)考察以下幾項(xiàng):系統(tǒng)能否重新運(yùn)行;有無重要的數(shù)據(jù)丟失;是否毀壞了其它相關(guān)的軟件硬件。

5.性能測試性能測試即測試軟件處理事務(wù)的速度,一是為了檢驗(yàn)性能是否符合需求,二是為了得到某些性能數(shù)據(jù)供人們參考。有時(shí)人們關(guān)心測試的“絕對值”。有時(shí)人們關(guān)心測試的“相對值”。

6.用戶界面測試絕大多數(shù)軟件擁有圖形用戶界面。圖形用戶界面的測試重點(diǎn)是正確性、易用性和視覺效果。在評價(jià)易用性和視覺效果時(shí),主觀性非常強(qiáng),應(yīng)當(dāng)考慮多個(gè)人的觀點(diǎn)。

7.信息安全測試信息安全性是指防止系統(tǒng)被非法入侵的能力,既屬于技術(shù)問題又屬于管理問題。信息安全性測試有如下步驟:為非法入侵設(shè)立目標(biāo);邀請(或懸賞)一些人扮演黑客,讓他們想盡辦法入侵系統(tǒng),實(shí)現(xiàn)“目標(biāo)”。如果有人成功了,請他詳述入侵的過程。8.壓力測試壓力測試也叫負(fù)荷測試,即獲取系統(tǒng)能正常運(yùn)行的極限狀態(tài)。壓力測試的主要任務(wù)是:構(gòu)造正確的輸入,使勁折騰系統(tǒng)卻讓它剛好不癱瘓。壓力測試的一個(gè)變種是敏感測試。敏感測試目的是發(fā)現(xiàn)什么樣的輸入可能會(huì)引發(fā)不穩(wěn)定現(xiàn)象。

9.可靠性測試可靠性是指在一定的環(huán)境下、給定的時(shí)間內(nèi)、系統(tǒng)不發(fā)生故障的概率。軟件可靠性測試可能會(huì)花費(fèi)很長時(shí)間。比較實(shí)用的辦法是,讓用戶使用該系統(tǒng),記錄每一次發(fā)生故障的時(shí)刻。計(jì)算出相鄰故障的時(shí)間間隔,注意要去掉非工作時(shí)間。統(tǒng)計(jì)出不發(fā)生故障的“最小時(shí)間間隔”、“最大時(shí)間間隔”和“平均時(shí)間間隔”。

10.安裝/反安裝測試目前市面上有非常流行的、專門制作安裝/反安裝程序的一些工具,如InstallShelled。主要測試工作:至少在標(biāo)準(zhǔn)配置和最低配置兩種環(huán)境下測試;如果有安裝界面,應(yīng)當(dāng)嘗試各種選項(xiàng),如選擇“全部”、“部分”、“升級”等。

7.6白盒測試技術(shù)所謂測試方案包括具體的測試目的(例如,預(yù)定要測試的具體功能),應(yīng)該輸入的測試數(shù)據(jù)和預(yù)期的結(jié)果。通常又把測試數(shù)據(jù)和預(yù)期的輸出結(jié)果稱為測試用例。7.6.1邏輯覆蓋有選擇地執(zhí)行程序中某些最有代表性的通路是對窮盡測試的惟一可行的替代辦法。從覆蓋源程序語句的詳盡程度分析,大致有以下一些不同的覆蓋標(biāo)準(zhǔn):語句覆蓋判定覆蓋條件覆蓋判定/條件覆蓋條件組合覆蓋1.語句覆蓋含義:選擇足夠多的測試數(shù)據(jù),使被測程序中每個(gè)語句至少執(zhí)行一次。分析:執(zhí)行路徑sacbed測試用例:A=2,B=0,X=4覆蓋sacbed語句覆蓋特點(diǎn):語句覆蓋對程序的邏輯覆蓋很少。語句覆蓋只關(guān)心判定表達(dá)式的值,而沒有分別測試判定表達(dá)式中每個(gè)條件取不同值時(shí)的情況。語句覆蓋是很弱的邏輯覆蓋標(biāo)準(zhǔn)。

2.判定覆蓋(分支覆蓋)含義:不僅每個(gè)語句必須至少執(zhí)行一次,而且每個(gè)判定的每種可能的結(jié)果都應(yīng)該至少執(zhí)行一次。所有判定分支:(1)a點(diǎn)判定為T(2)a點(diǎn)判定為F(3)b點(diǎn)判定為T(4)b點(diǎn)判定為F2.判定覆蓋(分支覆蓋)測試用例:Ⅰ.滿足(1)(4)A=3,B=0,X=3覆蓋sacbdⅡ.滿足(2)(3)A=2,B=1,X=1覆蓋sabed2.判定覆蓋(分支覆蓋)或者Ⅰ.滿足(1)(3)A=2,B=0,X=3覆蓋sacbedⅡ.滿足(2)(4)A=3,B=1,X=1覆蓋sabd特點(diǎn):比語句覆蓋強(qiáng),但對程序邏輯的覆蓋程度仍不高。

3.條件覆蓋含義:不僅每個(gè)語句至少執(zhí)行一次,而且使判定表達(dá)式中的每個(gè)條件都取到各種可能的結(jié)果。所有條件:(1)A>1(2)A≤1(3)B=0(4)B≠0(5)A=2(6)A≠2(7)X>1(8)X≤13.條件覆蓋測試用例:Ⅰ.滿足(1)(3)(5)(7)A=2,B=0,X=4覆蓋sacbedⅡ.滿足(2)(4)(6)(8)A=1,B=1,X=1覆蓋sabd3.條件覆蓋或者Ⅰ.滿足(1)(3)(5)(8)A=2,B=0,X=1覆蓋sacbedⅡ.滿足(2)(4)(6)(7)

A=1,B=1,X=2覆蓋sabed或者……條件覆蓋特點(diǎn):條件覆蓋通常比判定覆蓋強(qiáng),因?yàn)樗姑總€(gè)條件都取到了兩個(gè)不同的結(jié)果,判定覆蓋卻只關(guān)心整個(gè)判定表達(dá)式的值。但也有反例,如第二組測試用例。判定覆蓋不一定包含條件覆蓋,條件覆蓋也不一定包含判定覆蓋。4.判定/條件覆蓋含義:使得判定表達(dá)式中的每個(gè)條件都取到各種可能的值,每個(gè)判定表達(dá)式也都取到各種可能的結(jié)果。測試用例:Ⅰ.滿足條件(1)(3)(5)(7)

和判定(1)(3)A=2,B=0,X=4覆蓋sacbedⅡ.滿足條件(2)(4)(6)(8)和判定(2)(4)A=1,B=1,X=1覆蓋sabd特點(diǎn):有時(shí)判定/條件覆蓋也并不比條件覆蓋更強(qiáng)。

5.條件組合覆蓋含義:要求選取足夠多的測試數(shù)據(jù),使得每個(gè)判定表達(dá)式中條件的各種可能組合都至少出現(xiàn)一次。條件組合:(1)A>1,B=0

(2)A>1,B≠0(3)A≤1,B=0

(4)A≤1,B≠0(5)A=2,X>1

(6)A=2,X≤1(7)A≠2,X>1

(8)A≠2,X≤15.條件組合覆蓋測試用例:Ⅰ.滿足(1)(5)A=2,B=0,X=4覆蓋sacbedⅡ.滿足(2)(6)A=2,B=1,X=1

覆蓋sabedⅢ.滿足(3)(7)A=1,B=0,X=2

覆蓋sabedⅣ.滿足(4)(8)A=1,B=1,X=1

覆蓋sabd條件組合覆蓋特點(diǎn):條件組合覆蓋是前述幾種覆蓋標(biāo)準(zhǔn)中最強(qiáng)的。滿足條件組合覆蓋標(biāo)準(zhǔn)的測試數(shù)據(jù),也一定滿足判定覆蓋、條件覆蓋和判定/條件覆蓋標(biāo)準(zhǔn)。但是,條件組合覆蓋標(biāo)準(zhǔn)的測試數(shù)據(jù)并不一定能使程序中的每條路徑都執(zhí)行到。(4組數(shù)據(jù)都沒有測試到sacbd)

從對程序路徑的覆蓋程度分析的邏輯覆蓋標(biāo)準(zhǔn):6.點(diǎn)覆蓋含義:選取足夠多的測試數(shù)據(jù),使得程序執(zhí)行路徑至少經(jīng)過流圖的每個(gè)結(jié)點(diǎn)一次。特點(diǎn):由于流圖的每個(gè)結(jié)點(diǎn)與一條或多條語句相對應(yīng),因此點(diǎn)覆蓋標(biāo)準(zhǔn)和語句覆蓋標(biāo)準(zhǔn)是相同的。7.邊覆蓋含義:選取足夠多測試數(shù)據(jù),使得程序執(zhí)行路徑至少經(jīng)過流圖中每條邊一次。特點(diǎn):通常邊覆蓋和判定覆蓋是一致的。8.路徑覆蓋含義:選取足夠多測試數(shù)據(jù),使程序的每條可能路徑都至少執(zhí)行一次(如果程序圖中有環(huán),則要求每個(gè)環(huán)至少經(jīng)過一次)。

語句覆蓋判定覆蓋條件覆蓋判定/條件覆蓋條件組合覆蓋路徑覆蓋點(diǎn)覆蓋邊覆蓋7.6.2控制結(jié)構(gòu)測試1.基本路徑測試基本路徑測試是TomMcCabe提出的一種白盒測試技術(shù)。首先計(jì)算程序的環(huán)形復(fù)雜度;以該復(fù)雜度為指南定義執(zhí)行路徑的基本集合;從該基本集合導(dǎo)出的測試用例可保證程序中的每條語句至少執(zhí)行一次,而且每個(gè)條件在執(zhí)行時(shí)都將分別取真、假兩種值。i=1;total.input=total.valid=0;sum=0;DOWHILEvalue[i]<>-999 ANDtotal.input<100incrementtotal.inputby1;IFvalue[i]>=minimumANDvalue[i]<=maximumTHENincrementtotal.validby1;sum=sum+value[i];ENDIFincrementiby1;ENDDOIFtotal.valid>0THENaverage=sum/total.valid;ELSEaverage=-999;ENDIF例:求平均值過程

(1)根據(jù)過程設(shè)計(jì)結(jié)果畫出相應(yīng)的流圖。1234567891011121312345698710121113(2)計(jì)算流圖的環(huán)形復(fù)雜度。

V(G)=6(3)確定線性獨(dú)立路徑的基本集合。所謂獨(dú)立路徑是指至少引入程序的一個(gè)新處理語句集合或一個(gè)新條件的路徑。用流圖術(shù)語描述,獨(dú)立路徑至少包含一條在定義該路徑之前不曾用過的邊。

路徑1:1-2-10-11-13路徑2:1-2-10-12-13路徑3:1-2-3-10-11(12)-13路徑4:1-2-3-4-5-8-9-2-10-11(12)-13路徑5:1-2-3-4-5-6-8-9-2-10-11(12)-13路徑6:1-2-3-4-5-6-7-8-9-2-10-11(12)-13(4)設(shè)計(jì)可強(qiáng)制執(zhí)行每條獨(dú)立路徑的測試用例。應(yīng)該選取測試數(shù)據(jù)使得在測試每條路徑時(shí)都適當(dāng)?shù)卦O(shè)置好了各個(gè)判定結(jié)點(diǎn)的條件。在測試過程中,執(zhí)行每個(gè)測試用例并把實(shí)際輸出結(jié)果與預(yù)期結(jié)果相比較。一旦執(zhí)行完所有測試用例,就可以確保程序中所有語句都至少被執(zhí)行了一次,而且每個(gè)條件都分別取過true值和false值。

某些獨(dú)立路徑不能以獨(dú)立的方式測試,這些路徑必須作為另一個(gè)路徑的一部分來測試。3.循環(huán)測試循環(huán)測試是一種白盒測試技術(shù),它專注于測試循環(huán)結(jié)構(gòu)的有效性。在結(jié)構(gòu)化的程序中通常只有3種循環(huán),即簡單循環(huán)、串接循環(huán)和嵌套循環(huán)。

(1)簡單循環(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次。

(2)嵌套循環(huán)從最內(nèi)層循環(huán)開始測試,其他循環(huán)都設(shè)置為最小值。對最內(nèi)層循環(huán)使用簡單循環(huán)測試方法,而使外層循環(huán)的迭代參數(shù)取最小值,并為越界值或非法值增加一些額外的測試。由內(nèi)向外,對下一個(gè)循環(huán)進(jìn)行測試,但保持所有其他外層循環(huán)為最小值,其他嵌套循環(huán)為“典型”值。繼續(xù)進(jìn)行下去,直到測試完所有循環(huán)。

(3)串接循環(huán)如果串接循環(huán)的各個(gè)循環(huán)都彼此獨(dú)立,則可以使用測試簡單循環(huán)的方法來測試串接循環(huán)。如果兩個(gè)循環(huán)串接,而且第一個(gè)循環(huán)的循環(huán)計(jì)數(shù)器值是第二個(gè)循環(huán)的初始值,則這兩個(gè)循環(huán)并不是獨(dú)立的。當(dāng)循環(huán)不獨(dú)立時(shí),建議使用測試嵌套循環(huán)的方法來測試串接循環(huán)。

7.7黑盒測試技術(shù)黑盒測試著重測試軟件功能,錯(cuò)誤類型為:功能不正確或遺漏了功能;界面錯(cuò)誤;數(shù)據(jù)結(jié)構(gòu)錯(cuò)誤或外部數(shù)據(jù)庫訪問錯(cuò)誤;性能錯(cuò)誤;初始化和終止錯(cuò)誤。測試標(biāo)準(zhǔn):測試用例盡可能少;一個(gè)測試用例能指出一類錯(cuò)誤。7.7.1等價(jià)劃分等價(jià)劃分是一種黑盒測試技術(shù),把程序的輸入域劃分成若干個(gè)數(shù)據(jù)類,據(jù)此導(dǎo)出測試用例。等價(jià)劃分法力圖設(shè)計(jì)出能發(fā)現(xiàn)若干類錯(cuò)誤的測試用例,從而減少測試用例的數(shù)目。

每類中的一個(gè)典型值在測試中的作用與這一類中所有其他值的作用相同。使用等價(jià)劃分法設(shè)計(jì)測試方案首先需要?jiǎng)澐州斎霐?shù)據(jù)的等價(jià)類。常常還需要分析輸出數(shù)據(jù)的等價(jià)類,以便根據(jù)輸出數(shù)據(jù)的等價(jià)類導(dǎo)出對應(yīng)的輸入數(shù)據(jù)等價(jià)類。等價(jià)類劃分的啟發(fā)式規(guī)則:如果規(guī)定了輸入值的范圍,則可劃分出一個(gè)有效的等價(jià)類(輸入值在此范圍內(nèi)),兩個(gè)無效的等價(jià)類(輸入值小于最小值或大于最大值);如果規(guī)定了輸入數(shù)據(jù)的個(gè)數(shù),則類似地也可劃分出一個(gè)有效的等價(jià)類和兩個(gè)無效的等價(jià)類;如果規(guī)定了輸入數(shù)據(jù)的一組值,而且程序?qū)Σ煌斎胫底霾煌幚?,則每個(gè)允許的輸入值是一個(gè)有效的等價(jià)類,此外還有一個(gè)無效的等價(jià)類(任一個(gè)不允許的輸入值);如果規(guī)定了輸入數(shù)據(jù)必須遵循的規(guī)則,則可以劃分出一個(gè)有效的等價(jià)類(符合規(guī)則)和若干個(gè)無效的等價(jià)類(從各種不同角度違反規(guī)則);如果規(guī)定了輸入數(shù)據(jù)為整型,則可以劃分出正整數(shù)、零和負(fù)整數(shù)等3個(gè)有效類;如果程序的處理對象是表格,則應(yīng)該使用空表,以及含一項(xiàng)或多項(xiàng)的表。設(shè)計(jì)測試方案時(shí)兩個(gè)步驟:設(shè)計(jì)一個(gè)新的測試方案以盡可能多地覆蓋尚未被覆蓋的有效等價(jià)類,重復(fù)這一步驟直到所有有效等價(jià)類都被覆蓋為止;設(shè)計(jì)一個(gè)新的測試方案,使它覆蓋一個(gè)而且只覆蓋一個(gè)尚未被覆蓋的無效等價(jià)類,重復(fù)這一步驟直到所有無效等價(jià)類都被覆蓋為止。

例1:在某一PASCAL語言版本中規(guī)定:標(biāo)識(shí)符是由字母開頭,后跟字母或數(shù)字的任意組合構(gòu)成。有效字符數(shù)為8個(gè),最大字符數(shù)為80個(gè)。標(biāo)識(shí)符必須先說明,再使用。在同一說明語句中,標(biāo)識(shí)符至少必須有一個(gè)。選取9個(gè)測試用例,覆蓋了所有的等價(jià)類:①VARx,T1234567:REAL;

BEGINx:=3.414;

T1234567:=2.732;

...…

覆蓋(1),(2),(4),(8),(9),(12),(14)②VAR:REAL;覆蓋(3)③VARx,:REAL;覆蓋(5)④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;

例2:某城市的電話號碼由3個(gè)部分組成:地區(qū)碼——空白或3位數(shù)字;前綴——以大于等于‘5’開頭的4位數(shù)字;后綴——4位數(shù)字。輸入條件有效等價(jià)類無效等價(jià)類地區(qū)碼(1)空白(2)3位數(shù)字(5)有非數(shù)字字符(6)少于3位數(shù)字(7)多于3位數(shù)字前綴(3)大于等于‘5’開頭的4位數(shù)字(8)有非數(shù)字字符(9)少于4位數(shù)字(10)多于4位數(shù)字(11)開頭數(shù)字小于‘5’后綴(4)4位數(shù)字(12)有非數(shù)字字符(13)少于4位數(shù)字(14)多于4位數(shù)字測試用例:略7.7.2邊界值分析經(jīng)驗(yàn)表明,處理邊界情況時(shí)程序最容易發(fā)生錯(cuò)誤。例如,許多程序錯(cuò)誤出現(xiàn)在下標(biāo)、純量、數(shù)據(jù)結(jié)構(gòu)和循環(huán)等等的邊界附近。使用邊界值分析方法設(shè)計(jì)測試方案首先應(yīng)該確定邊界情況。選取的測試數(shù)據(jù)應(yīng)該剛好等于、剛剛小于和剛剛大于邊界值。通常設(shè)計(jì)測試方案時(shí)總是聯(lián)合使用等價(jià)劃分和邊界值分析兩種技術(shù)。7.7.3錯(cuò)誤推測不同類型不同特點(diǎn)的程序通常又有一些特殊的容易出錯(cuò)的情況。因此必須依靠測試人員的經(jīng)驗(yàn)和直覺,從各種可能的測試方案中選出一些最可能引起程序出錯(cuò)的方案。錯(cuò)誤推測法在很大程度上靠直覺和經(jīng)驗(yàn)進(jìn)行。它的基本想法是列舉出程序中可能有的錯(cuò)誤和容易發(fā)生錯(cuò)誤的特殊情況,并且根據(jù)它們選擇測試方案。7.8調(diào)試調(diào)試是在測試發(fā)現(xiàn)錯(cuò)誤之后排除錯(cuò)誤的過程。軟件錯(cuò)誤的外部表現(xiàn)和它的內(nèi)在原因之間可能并沒有明顯的聯(lián)系。調(diào)試就是把癥狀和原因聯(lián)系起來的尚未被人深入認(rèn)識(shí)的智力過程。7.8.1調(diào)試過程調(diào)試發(fā)生在測試之后。調(diào)試過程從執(zhí)行一個(gè)測試用例開始,評估測試結(jié)果,如果發(fā)現(xiàn)實(shí)際結(jié)果與預(yù)期結(jié)果不一致,則這種不一致就是一個(gè)癥狀,它表明在軟件中存在著隱藏的問題。調(diào)試過程試圖找出產(chǎn)生癥狀的原因,以便改正錯(cuò)誤。7.8.2調(diào)試途徑有下列3種調(diào)試途徑可以采用:蠻干法回溯法原因排除法1.蠻干法蠻干法可能是尋找軟件錯(cuò)誤原因的最低效的方法。其他方法都失敗時(shí)才使用這種方法。這種方法印出內(nèi)存的內(nèi)容,激活對運(yùn)行過程的跟蹤,在程序中到處都寫上WRITE(輸出)語句。更多情況下只會(huì)浪費(fèi)時(shí)間和精力。必須首先進(jìn)行周密的思考,有明確的目的,盡量減少無關(guān)信息的數(shù)量。

2.回溯法回溯是一種相當(dāng)常用的調(diào)試方法,當(dāng)調(diào)試小程序時(shí)這種方法是有效的。具體做法是,從發(fā)現(xiàn)癥狀的地方開始,人工沿程序的控制流往回追蹤分析源程序代碼,直到找出錯(cuò)誤原因?yàn)橹?。隨著程序規(guī)模擴(kuò)大,應(yīng)該回溯的路徑數(shù)目也變得越來越大,以至徹底回溯變成完全不可能了。

3.原因排除法對分查找法歸納法演繹法對分查找法:如果已經(jīng)知道每個(gè)變量在程序內(nèi)若干個(gè)關(guān)鍵點(diǎn)的正確值,則可以用賦值語句或輸入語句在程序中點(diǎn)附近“注入”這些變量的正確值,然后運(yùn)行程序并檢查所得到的輸出。如果輸出結(jié)果是正確的,則錯(cuò)誤原因在程序前半部分;反之,錯(cuò)誤原因在程序后半部分。對錯(cuò)誤原因所在的那部分重復(fù)使用這個(gè)方法,直到把出錯(cuò)范圍縮小到容易診斷的程度為止。歸納法:是從個(gè)別現(xiàn)象推斷出一般性結(jié)論的思維方法。首先把和錯(cuò)誤有關(guān)的數(shù)據(jù)組織起來進(jìn)行分析,以便發(fā)現(xiàn)可能的錯(cuò)誤原因。然后導(dǎo)出對錯(cuò)誤原因的一個(gè)或多個(gè)假設(shè),并利用已有的數(shù)據(jù)來證明或排除這些假設(shè)。演繹法:從一般原理或前提出發(fā),經(jīng)過排除和精化的過程推導(dǎo)出結(jié)論。首先設(shè)想出所有可能的出錯(cuò)原因,然后試圖用測試來排除每一個(gè)假設(shè)的原因。

7.9軟件可靠性

7.9.1基本概念軟件可靠性:程序在給定的時(shí)間間隔內(nèi),按照規(guī)格說明書的規(guī)定成功地運(yùn)行的概率。軟件的可用性:程序在給定的時(shí)間點(diǎn),按照規(guī)格說明書的規(guī)定,成功地運(yùn)行的概率。穩(wěn)態(tài)可用性Ass:如果在一段時(shí)間內(nèi),軟件系統(tǒng)故障停機(jī)時(shí)間分別為td1,td2…,正常運(yùn)行時(shí)間分別為tu1,tu2,…,則系統(tǒng)的穩(wěn)態(tài)可用性為:Ass=Tup/(Tup+Tdown)其中Tup=∑tui,Tdown=∑tdi平均維修時(shí)間MTTR:是修復(fù)

溫馨提示

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

最新文檔

評論

0/150

提交評論