《軟件工程》07-結(jié)構(gòu)化軟件實(shí)現(xiàn)_第1頁
《軟件工程》07-結(jié)構(gòu)化軟件實(shí)現(xiàn)_第2頁
《軟件工程》07-結(jié)構(gòu)化軟件實(shí)現(xiàn)_第3頁
《軟件工程》07-結(jié)構(gòu)化軟件實(shí)現(xiàn)_第4頁
《軟件工程》07-結(jié)構(gòu)化軟件實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩104頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

軟件工程2022/12/102第7章實(shí)現(xiàn)通常把編碼和測試統(tǒng)稱為實(shí)現(xiàn)。所謂編碼就是把軟件設(shè)計翻譯成計算機(jī)可以理解的形式——用某種程序設(shè)計語言書寫的程序。編碼是設(shè)計的自然結(jié)果,程序的質(zhì)量主要取決于軟件設(shè)計的質(zhì)量。但所選用的程序設(shè)計語言的特點(diǎn)和編碼風(fēng)格也會對程序的可靠性、可讀性、可測試性和可維護(hù)性產(chǎn)生深遠(yuǎn)的影響。2022/12/103軟件測試對軟件可靠性的影響是重要的。人的主觀認(rèn)識不可能完全符合客觀現(xiàn)實(shí)與工程密切相關(guān)的各類人員之間的通信和配合也不可能完美無缺在軟件生命周期的每個階段都不可避免地會產(chǎn)生差錯盡可能早地發(fā)現(xiàn)并糾正差錯經(jīng)驗(yàn)表明階段審查并不能發(fā)現(xiàn)所有差錯此外在編碼過程中還不可避免地會引入新的錯誤測試的目的就是在軟件投入生產(chǎn)性運(yùn)行之前,盡可能多地發(fā)現(xiàn)軟件中的錯誤目前軟件測試仍然是保證軟件質(zhì)量的關(guān)鍵步驟,它是對軟件規(guī)格說明、設(shè)計和編碼的最后復(fù)審。2022/12/104軟件測試在軟件生命周期中橫跨兩個階段。單元測試,模塊的編寫者和測試者是同一個人,編碼和單元測試屬于軟件生命周期的同一個階段。對軟件系統(tǒng)還應(yīng)該進(jìn)行各種綜合測試,這是軟件生命周期中的另一個獨(dú)立的階段,通常由專門的測試人員承擔(dān)這項(xiàng)工作。統(tǒng)計資料表明,軟件測試的工作量往往占軟件開發(fā)總工作量的40%以上,對于關(guān)鍵應(yīng)用系統(tǒng)的測試,可能相當(dāng)于軟件工程其他步驟總成本的3~5倍。2022/12/105測試目標(biāo)是發(fā)現(xiàn)軟件中的錯誤,但不是最終目的。調(diào)試是診斷并改正錯誤,這是最終目的。調(diào)試是測試階段最困難的工作。對測試結(jié)果進(jìn)行收集和評價,確定系統(tǒng)的可靠性。軟件可靠性模型使用故障率數(shù)據(jù),估計軟件將來出現(xiàn)故障的情況并預(yù)測軟件的可靠性。2022/12/1067.1編碼7.2軟件測試基礎(chǔ)7.3單元測試7.4集成測試7.5確認(rèn)測試7.6白盒測試技術(shù)7.7黑盒測試技術(shù)7.8調(diào)試7.9軟件可靠性7.10小結(jié)2022/12/1077.1編碼選擇程序設(shè)計語言高級語言明顯優(yōu)于匯編語言,除了對程度執(zhí)行時間和使用的空間都有很嚴(yán)格限制的情況需要產(chǎn)生任意的甚至非法的指令序列體系結(jié)構(gòu)特殊的微處理機(jī),以致在這類機(jī)器上通常不能實(shí)現(xiàn)高級語言編譯程序或者大型系統(tǒng)中執(zhí)行時間非常關(guān)鍵的(或直接依賴于硬件的)一小部分代碼其他程序應(yīng)該一律用高級語言書寫。2022/12/108高級語言應(yīng)該有理想的模塊化機(jī)制,以及可讀性好的控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu);高級語言的編譯程序能夠盡可能多地發(fā)現(xiàn)程序中的錯誤;除了理論標(biāo)準(zhǔn),實(shí)用方面還要考慮:系統(tǒng)用戶要求、可用的編譯程序、可得到的軟件工具、工程規(guī)模、程序員知識、可移植性、應(yīng)用領(lǐng)域等。2022/12/109編碼風(fēng)格源程序代碼的邏輯簡明清晰、易讀易懂是好程序的一個重要標(biāo)準(zhǔn),應(yīng)該遵循下述規(guī)則。程序內(nèi)部的文檔恰當(dāng)?shù)臉?biāo)識符、適當(dāng)注解和程序的視覺組織等。數(shù)據(jù)說明雖然在設(shè)計期間已經(jīng)確定了數(shù)據(jù)結(jié)構(gòu)的組織和復(fù)雜程度,但數(shù)據(jù)說明的風(fēng)格是在寫程序時確定的。數(shù)據(jù)說明次序、同一說明語句中變量的字母排序、復(fù)雜數(shù)據(jù)結(jié)構(gòu)的方法和特點(diǎn)的說明等。2022/12/1010語句構(gòu)造構(gòu)造語句時應(yīng)該遵循的原則是,每個語句都應(yīng)該簡單而直接,不能為了提高效率而使程序變得過分復(fù)雜。2022/12/1011輸入/輸出輸入/輸出風(fēng)格的規(guī)則:對所有輸入數(shù)據(jù)都進(jìn)行檢驗(yàn);檢查輸入項(xiàng)重要組合的合法性;保持輸入格式簡單;使用數(shù)據(jù)結(jié)束標(biāo)記,不要要求用戶指定數(shù)據(jù)的數(shù)目;明確交互式輸入的請求,詳細(xì)說明可用的選擇或邊界數(shù)值;當(dāng)程序設(shè)計語言對格式有嚴(yán)格要求時,應(yīng)保持輸入格式一致;設(shè)計良好的輸出報表;給所有輸出數(shù)據(jù)加標(biāo)志。2022/12/1012效率處理機(jī)時間和存儲器容量兩個方面。原則:首先,效率是性能要求,應(yīng)在需求分析階段確定效率方面的要求。軟件應(yīng)該像對它要求的那樣有效,而不應(yīng)該如同人類可能做到的那樣有效。其次,效率是靠好設(shè)計來提高的。第三,程序的效率和程序的簡單程度是一致的。不要犧牲程序的清晰性和可讀性來不必要地提高效率。2022/12/10137.2軟件測試基礎(chǔ)測試目標(biāo)G.Myers關(guān)于測試的一些規(guī)則,是測試的目標(biāo)或定義:測試是為發(fā)現(xiàn)程序中的錯誤而執(zhí)行程序的過程;好的測試方案是極可能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯誤的測試方案;成功的測試是發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯誤的測試。2022/12/1014由于測試的目標(biāo)是暴露程序中的錯誤,從心理學(xué)角度看,由程序的編寫者自己進(jìn)行測試是不恰當(dāng)?shù)?。在綜合測試階段通常由其他人員組成測試小組來完成測試工作。2022/12/1015測試方法(黑盒測試和白盒測試)黑盒測試法把程序看成一個黑盒子,完全不考慮程序的內(nèi)部結(jié)構(gòu)和處理過程。黑盒測試是在程序接口進(jìn)行的測試只檢查程序功能是否能按照規(guī)格說明書的規(guī)定正常使用程序是否能適當(dāng)?shù)亟邮蛰斎霐?shù)據(jù)產(chǎn)生正確的輸出信息,并且保持外部信息(如,數(shù)據(jù)庫或文件)的完整性。黑盒測試又稱為功能測試。2022/12/1016白盒測試法是把程序看成裝在一個透明的白盒子里,也就是完全了解程序的結(jié)構(gòu)和處理過程。白盒測試按照程序內(nèi)部的邏輯測試程序,檢驗(yàn)程序中的每條通路是否都能按預(yù)定要求正確工作。白盒測試又稱為結(jié)構(gòu)測試。2022/12/1017測試準(zhǔn)則指導(dǎo)軟件測試的基本準(zhǔn)則:所有的測試都應(yīng)該能追溯到用戶需求。應(yīng)該在測試開始之前的相當(dāng)長時間,就制定出測試計劃。把Pareto原理應(yīng)用于軟件測試:測試發(fā)現(xiàn)的錯誤中的80%很可能是由程序中20%的模塊造成的。2022/12/1018測試應(yīng)該從“小規(guī)?!遍_始,并逐步進(jìn)行“大規(guī)?!睖y試。窮舉測試是不可能的。為了達(dá)到最佳的測試效果,應(yīng)該由獨(dú)立的第三方來從事測試工作。2022/12/10192022/12/1020對一個具有多重選擇和循環(huán)嵌套的程序,不同的路徑數(shù)目可能是天文數(shù)字。給出一個小程序的流程圖,它包括了一個執(zhí)行20次的循環(huán)。包含的不同執(zhí)行路徑數(shù)達(dá)520條,對每一條路徑進(jìn)行測試需要1毫秒,假定一年工作365×24小時,要想把所有路徑測試完,需3170年。2022/12/10212022/12/10222022/12/1023測試策略測試步驟從過程的觀點(diǎn)考慮測試,在軟件工程環(huán)境中的測試過程,實(shí)際上是順序進(jìn)行的四個步驟的序列。最開始著重測試每個單獨(dú)的模塊,確保它作為一個單元來說功能是正確的。這種測試稱為單元測試。單元測試大量使用白盒測試技術(shù),檢查模塊控制結(jié)構(gòu)中的特定路徑,以確保做到完全覆蓋并發(fā)現(xiàn)最大數(shù)量的錯誤。2022/12/10242022/12/1025接下來,必須把模塊裝配(即集成)在一起形成完整的軟件包。在裝配的同時進(jìn)行測試,因此稱為集成測試。同時解決程序驗(yàn)證和程序構(gòu)造這兩個問題。集成過程中最常用的是黑盒測試用例設(shè)計技術(shù),當(dāng)然,為了保證覆蓋主要的控制路徑,也可能使用一定數(shù)量的白盒測試。集成后,要驗(yàn)證需求分析階段確定下來的確認(rèn)標(biāo)準(zhǔn),確認(rèn)測試是對軟件滿足所有功能的、行為的和性能的需求的最終保證。在確認(rèn)測試過程中僅使用黑盒測試技術(shù)。2022/12/10267.3單元測試單元測試和編碼屬于軟件工程過程同一階段。在編寫出源程序代碼并通過了編譯程序的語法檢查之后,應(yīng)用人工測試和計算機(jī)測試這樣兩種類型的測試,完成單元測試工作。這兩種類型的測試各有所長,互相補(bǔ)充。2022/12/1027代碼審查人工測試源程序可以由編寫者本人非正式地進(jìn)行,也可以由審查小組正式進(jìn)行。后者稱為代碼審查,是一種非常有效的程序驗(yàn)證技術(shù),對于典型的程序來說,可以查出30%~70%的邏輯設(shè)計錯誤和編碼錯誤。審查小組最好由下述四人組成:組長,應(yīng)該是一個很有能力的程序員,而且沒有直接參與這項(xiàng)工程;程序的設(shè)計者;程序的編寫者;程序的測試者。2022/12/1028測試軟件模塊并不是一個獨(dú)立的程序,必須為每個單元測試開發(fā)驅(qū)動軟件和(或)存根軟件。驅(qū)動程序就是一個“主程序”,接收測試數(shù)據(jù),把這些數(shù)據(jù)傳送給被測試的模塊,并且輸出有關(guān)結(jié)果。存根程序代替被測試的模塊所調(diào)用的模塊,也可以稱為“虛擬子程序”。(樁模塊)使用被它代替的模塊的接口,做最少量的數(shù)據(jù)操作,輸出對入口的檢驗(yàn)或操作結(jié)果,并且把控制歸還給調(diào)用它的模塊。2022/12/10292022/12/1030正文加工系統(tǒng)的層次圖2022/12/10317.4集成測試集成測試是測試和組裝軟件的系統(tǒng)化技術(shù),在把模塊按照設(shè)計要求組裝起來的同時進(jìn)行測試,主要目標(biāo)是發(fā)現(xiàn)與接口有關(guān)的問題。由模塊組裝成程序時有兩種方法。一種方法是先分別測試每個模塊,再把所有模塊按設(shè)計要求放在一起結(jié)合成所要的程序,稱為非漸增式測試方法;另一種方法是把下一個要測試的模塊同已經(jīng)測試好的那些模塊結(jié)合起來進(jìn)行測試,測試完以后再把下一個應(yīng)該測試的模塊結(jié)合進(jìn)來測試。這種每次增加一個模塊的方法稱為漸增式測試。2022/12/1032自頂向下集成從主控制模塊(主程序)開始,沿著軟件的控制層次向下移動,逐漸把各個模塊結(jié)合起來。在把附屬于(以及最終附屬于)主控制模塊的那些模塊組裝到軟件結(jié)構(gòu)中去時,或者使用深度優(yōu)先的策略,或者使用寬度優(yōu)先的策略。把模塊結(jié)合進(jìn)軟件結(jié)構(gòu)的具體過程由下述四個步驟完成:2022/12/1033對主控制模塊進(jìn)行測試,測試時用存根程序代替所有直接附屬于主控制模塊的模塊;根據(jù)選定的結(jié)合策略(深度優(yōu)先或?qū)挾葍?yōu)先),每次用一個實(shí)際模塊代換一個存根程序(新結(jié)合進(jìn)來的模塊往往又需要新的存根程序);在結(jié)合進(jìn)一個模塊的同時進(jìn)行測試;為了保證加入模塊沒有引進(jìn)新的錯誤,可能需要進(jìn)行回歸測試(即,全部或部分地重復(fù)以前做過的測試)。從第二步開始不斷地重復(fù)進(jìn)行上述過程,直到構(gòu)造起完整的軟件結(jié)構(gòu)為止。2022/12/1034自頂向下結(jié)合2022/12/1035自底向上集成從“原子”模塊(在軟件結(jié)構(gòu)最低層的模塊)開始組裝和測試。不需要存根程序。用下述步驟可以實(shí)現(xiàn)自底向上的結(jié)合策略:把低層模塊組合成實(shí)現(xiàn)某特定軟件子功能的簇;寫一個驅(qū)動程序(用于測試的控制程序),協(xié)調(diào)測試數(shù)據(jù)的輸入和輸出;對由模塊組成的子功能簇進(jìn)行測試;去掉驅(qū)動程序,沿軟件結(jié)構(gòu)自下向上移動,把子功能簇組合起來形成更大的子功能簇。第2步到第4步循環(huán)。2022/12/1036自底向上結(jié)合2022/12/1037回歸測試每當(dāng)一個新模塊作為集成測試的一部分加進(jìn)來的時候,軟件就發(fā)生了變化:建立了新的數(shù)據(jù)流路徑,可能出現(xiàn)了新的I/O操作,激活了新的控制邏輯。這些變化可能使原來工作正常的功能出現(xiàn)問題。在集成測試的范疇中,所謂回歸測試是指重新執(zhí)行已經(jīng)做過的測試的某個子集,以保證上述這些變化沒有帶來非預(yù)期的副作用。2022/12/1038回歸測試集(已執(zhí)行過的測試用例的子集)包括下述三種不同的測試用例。檢測軟件全部功能的代表性測試用例。專門針對可能受修改影響的軟件功能的附加測試。針對被修改過的軟件成分的測試。2022/12/1039不同集成測試策略的比較自頂向下測試方法優(yōu)點(diǎn)是不需要測試驅(qū)動程序,能夠在測試階段的早期實(shí)現(xiàn)并驗(yàn)證系統(tǒng)的主要功能,能在早期發(fā)現(xiàn)上層模塊的接口錯誤。自頂向下測試方法主要缺點(diǎn)是需要存根程序,低層關(guān)鍵模塊中的錯誤發(fā)現(xiàn)較晚,而且在早期不能充分展開人力。自底向上測試方法的優(yōu)缺點(diǎn)與上述自頂向下測試方法的優(yōu)缺點(diǎn)剛好相反。2022/12/1040應(yīng)該根據(jù)軟件的特點(diǎn)以及工程進(jìn)度安排,選用適當(dāng)?shù)臏y試策略。純粹自頂向下或純粹自底向上的策略可能都不實(shí)用,人們在實(shí)踐中創(chuàng)造出許多混合策略。在組裝測試時,應(yīng)當(dāng)確定關(guān)鍵模塊,對這些關(guān)鍵模塊及早進(jìn)行測試。關(guān)鍵模塊的特征:

①滿足某些軟件需求;

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

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

④有明確定義的性能要求。2022/12/10417.5確認(rèn)測試確認(rèn)測試也稱為驗(yàn)收測試,目標(biāo)是驗(yàn)證軟件的有效性。使用了確認(rèn)(Validation)和驗(yàn)證(Verification)這樣兩個不同的術(shù)語。驗(yàn)證是保證軟件正確地實(shí)現(xiàn)了某一特定要求的一系列活動確認(rèn)是保證軟件實(shí)現(xiàn)滿足了用戶需求的一系列活動。2022/12/1042確認(rèn)測試的范圍必須有用戶積極參與,或者以用戶為主進(jìn)行。軟件配置復(fù)查確認(rèn)測試的一個重要內(nèi)容是復(fù)查軟件配置。Alpha和Beta測試如果一個軟件是為許多客戶開發(fā)的(例如,向大眾出售的盒裝軟件產(chǎn)品),那么讓每個客戶都進(jìn)行正式的驗(yàn)收測試是不現(xiàn)實(shí)的。絕大多數(shù)軟件開發(fā)商使用被稱為Alpha測試和Beta測試的過程,來發(fā)現(xiàn)那些看起來只有最終用戶才能發(fā)現(xiàn)的錯誤。2022/12/1043α測試由用戶在開發(fā)者的場所進(jìn)行,并且在開發(fā)者對用戶的“指導(dǎo)”下進(jìn)行測試。開發(fā)者負(fù)責(zé)記錄錯誤和使用中遇到的問題。Alpha測試是在受控的環(huán)境中進(jìn)行的。β測試由最終用戶在一(多)個客戶場所進(jìn)行。Beta測試是軟件在開發(fā)者不能控制的環(huán)境中的“真實(shí)”應(yīng)用。用戶記錄下在Beta測試過程中遇到的一切問題(真實(shí)的或想像的),定期把這些問題報告給開發(fā)者。接收到Beta測試報告的問題后,軟件開發(fā)者對產(chǎn)品進(jìn)行修改,并準(zhǔn)備向客戶發(fā)布最終的軟件產(chǎn)品。2022/12/10447.6白盒測試技術(shù)邏輯覆蓋是設(shè)計白盒測試方案的技術(shù)。設(shè)計測試方案是測試階段的關(guān)鍵技術(shù)問題。測試方案包括具體的測試目的(例如,要測試的具體功能),應(yīng)該輸入的測試數(shù)據(jù)和預(yù)期的輸出結(jié)果。把測試數(shù)據(jù)和預(yù)期的輸出結(jié)果稱為測試用例。為提高測試效率降低成本,應(yīng)選用高效測試數(shù)據(jù)。不可能進(jìn)行窮盡的測試,選用少量“最有效的”測試數(shù)據(jù),做到盡可能完備的測試。2022/12/1045選擇執(zhí)行某些最有代表性的通路是對窮盡測試的唯一可行的替代辦法。邏輯覆蓋是對一系列測試過程的總稱,逐漸進(jìn)行越來越完整的通路測試。測試數(shù)據(jù)執(zhí)行(或叫覆蓋)程序邏輯的程度可以劃分成不同的等級:語句覆蓋為暴露程序的錯誤,至少每個語句應(yīng)該執(zhí)行一次。含義是,選擇足夠多的測試數(shù)據(jù),使被測程序中每個語句至少執(zhí)行一次。2022/12/1046(A>1)

and

(B=0)(A=2)

or

(X>1)X=X/AX=X+1TTFFabdce2022/12/1047L1(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)

L2(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)L3(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)

ornot(A>1)and

(X>1)

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

ornot(B=0)and(X>1)2022/12/1048測試用例的設(shè)計格式如下

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

【(2,0,4),(2,0,3)】

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

or

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

2022/12/1049判定覆蓋又叫分支覆蓋不僅每個語句必須至少執(zhí)行一次,而且每個判定的每種可能的結(jié)果都應(yīng)該至少執(zhí)行一次,也就是每個判定的每個分支都至少執(zhí)行一次。條件覆蓋不僅每個語句至少執(zhí)行一次,而且判定表達(dá)式中每個條件都取到各種可能的結(jié)果。2022/12/1050【(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)判定覆蓋2022/12/1051如果選擇路徑L3和L4,還可得另一組可用的測試用例:

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

【(3,0,3),(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)2022/12/1052測試用例

覆蓋分支

條件取值【(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)或【(1,0,3),(1,0,4)】L3(b,e)【(2,1,1),(2,1,2)】L3(b,e)條件覆蓋2022/12/1053判定/條件覆蓋判定覆蓋不一定包含條件覆蓋,條件覆蓋也不一定包含判定覆蓋,判定/條件覆蓋能同時滿足這兩種覆蓋標(biāo)準(zhǔn)。選取足夠多的測試數(shù)據(jù),使得判定表達(dá)式中的每個條件都取到各種可能的值,而且每個判定表達(dá)式也都取到各種可能的結(jié)果。條件組合覆蓋要求選取足夠多的測試數(shù)據(jù),使每個判定表達(dá)式中條件的各種可能組合都至少出現(xiàn)一次。2022/12/1054

測試用例

覆蓋分支

條件取值【(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)判定/條件覆蓋2022/12/1055

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

②A>1,B≠0作

③A≯1,B=0作④A≯1,B≠0作2022/12/1057

⑤A=2,X>1作

⑥A=2,X≯1作

⑦A≠2,X>1作

⑧A≠2,X≯1作

測試用例

覆蓋條件

覆蓋組合【(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) ④,⑧2022/12/1058控制結(jié)構(gòu)測試基本路徑測試TomMcCabe提出的一種白盒測試技術(shù)。首先計算過程設(shè)計結(jié)果的邏輯復(fù)雜度,并以該復(fù)雜度為指南定義執(zhí)行路徑的基本集合,從該基本集合導(dǎo)出的測試用例可以保證程序中每條語句至少執(zhí)行一次,而且每個條件在執(zhí)行時都將分別取true(真)和false(假)值。使用基本路徑測試技術(shù)設(shè)計測試用例步驟如下。根據(jù)過程設(shè)計結(jié)果畫出相應(yīng)的流圖2022/12/1059求平均值過程的流圖2022/12/1060PROCEDUREaverage;/*這個過程計算不超過100個在規(guī)定值域內(nèi)的有效數(shù)字的平均值;同時計算有效數(shù)字的總和及個數(shù)。*/INTERFACERETURNSaverage,total_input,total_valid;INTERFACEACCEPTSvalue,minimum,maximum;TYPEvalue[1...100]ISSCALARARRAY;TYPEaverage,total_input,total_valid,minimum,maximum,sumISSCALAR;2022/12/1061TYPEiISINTEGER;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: ENDIF incrementiby1;9:ENDDO2022/12/106210:IFtotal_valid>011:THENaverage=sum/total_valid;12:ELSEaverage=-999;13:ENDIFENDaverage2022/12/1063計算流圖的環(huán)形復(fù)雜度環(huán)形復(fù)雜度定量度量程序的邏輯復(fù)雜性。三種方法來計算環(huán)形復(fù)雜度。流圖中的區(qū)域數(shù)等于環(huán)形復(fù)雜度。流圖G的環(huán)形復(fù)雜度V(G)=E-N+2,其中E是流圖中邊的條數(shù),N是流圖中節(jié)點(diǎn)數(shù)。流圖G的環(huán)形復(fù)雜度V(G)=P+1,其中P是流圖中判定節(jié)點(diǎn)的數(shù)目。使用上述任何一種方法,都可以計算出流圖的環(huán)形復(fù)雜度為6。2022/12/1064確定線性獨(dú)立路徑的基本集合獨(dú)立路徑指至少引入程序一個新處理語句集合或一個新條件的路徑,用流圖術(shù)語描述,獨(dú)立路徑至少包含一條在定義該路徑之前不曾用過的邊。程序的環(huán)形復(fù)雜度決定了程序中獨(dú)立路徑的數(shù)量,而且這個數(shù)是確保程序中所有語句至少被執(zhí)行一次所需的測試數(shù)量的上界。對于所描述的求平均值過程來說,由于環(huán)形復(fù)雜度為6,因此共有6條獨(dú)立路徑。例如,下面列出了6條獨(dú)立路徑:2022/12/1065路徑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后面的省略號(...)表示,可以后接通過控制結(jié)構(gòu)其余部分的任意路徑(例如,10-11-13)。通常在導(dǎo)出測試用例時,識別出判定節(jié)點(diǎn)是很有必要的。本例中節(jié)點(diǎn)2、3、5、6和10是判定節(jié)點(diǎn)。2022/12/1066設(shè)計可強(qiáng)制執(zhí)行基本集合中每條路徑測試用例選取數(shù)據(jù)使得在測試每條路徑時都適當(dāng)設(shè)置好了各個判定節(jié)點(diǎn)的條件。路徑1的測試用例:

value[k]=有效輸入值,其中k<i(i的定義在下)

value[i]=-999,其中2≤i≤100

預(yù)期結(jié)果:基于k的正確平均值和總數(shù) 注意,路徑1無法獨(dú)立測試,必須作為路徑4、5和6的一部分來測試。路徑2的測試用例:

value[1]=-999

預(yù)期結(jié)果:average=-999,其他都保持初始值2022/12/1067路徑4的測試用例:

value[i]=有效輸入值,其中i<100

value[k]<minimum,其中k<i

預(yù)期結(jié)果:其于k的正確平均值和總數(shù)路徑5的測試用例:

value[i]=有效輸入值,其中i<100

value[k]>maximum,其中k<i

預(yù)期結(jié)果:其于k的正確平均值和總數(shù)路徑6的測試用例:

value[i]=有效輸入值,其中i<100

預(yù)期結(jié)果:正確的平均值和總數(shù)2022/12/1068條件測試盡管基本路徑測試技術(shù)簡單而且高效,但是僅有這種技術(shù)還不夠,還需要使用其他控制結(jié)構(gòu)測試技術(shù),才能進(jìn)一步提高白盒測試的質(zhì)量。用條件測試技術(shù)設(shè)計出的測試用例,能夠檢查程序模塊中包含的邏輯條件。一個簡單條件是一個布爾變量或一個關(guān)系表達(dá)式,在布爾變量或關(guān)系表達(dá)式之前還可能有一個NOT(“┐”)算符。關(guān)系表達(dá)式的形式如下:E1<關(guān)系算符>E2其中,E1和E2是算術(shù)表達(dá)式,而<關(guān)系算符>是下列算符之一:“<”,“≤”,“=”,“≠”,“>”或“≥”。復(fù)合條件由兩個或多個簡單條件、布爾算符和括弧組成。布爾算符有OR(“|”),AND(“&”)和NOT(“┐”)。不包含關(guān)系表達(dá)式的條件稱為布爾表達(dá)式。2022/12/1069在上述種種條件測試技術(shù)的基礎(chǔ)上,K.C.Tai提出了一種被稱為BRO(BranchandRelationalOperalor)測試的條件測試策略。如果在條件中所有布爾變量和關(guān)系算符都只出現(xiàn)一次而且沒有公共變量,則BRO測試保證能發(fā)現(xiàn)該條件中的分支錯和關(guān)系算符錯。BRO測試?yán)脳l件C的條件約束來設(shè)計測試用例。包含n個簡單條件的條件C的條件約束定義為(D1,D2,…,Dn),其中Di(0<i≤n)表示條件C中第i個簡單條件的輸出約束。如果在條件C的一次執(zhí)行過程中,C中每個簡單條件的輸出都滿足D中對應(yīng)的約束,則稱C的這次執(zhí)行覆蓋了C的條件約束D。2022/12/1070對于布爾變量B來說,B的輸出約束指出,B必須是真(t)或假(f)。類似地,對于關(guān)系表達(dá)式來說,用符號>,=和<指定表達(dá)式的輸出約束。作為一個例子,考慮下列條件

C1:B1&B2

其中,B1和B2是布爾變量。C1的條件約束形式為(D1,D2),其中D1和D2中的每一個都是“t”或“f”。值(t,f)是C1的一個條件約束,并由使B1值為真B2值為假的測試所覆蓋。BRO測試策略要求,約束集{(t,t),(f,t),(t,f)}被C1的執(zhí)行所覆蓋。如果C1因布爾算符錯誤而不正確,則至少上述約束集中的一個約束將迫使C1失敗。2022/12/1071循環(huán)測試循環(huán)測試是一種白盒測試技術(shù),專注于測試循環(huán)結(jié)構(gòu)的有效性。結(jié)構(gòu)化的程序中只有三種循環(huán),簡單循環(huán)、串接循環(huán)和嵌套循環(huán)。簡單循環(huán)使用下列測試集來測試簡單循環(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次。2022/12/1072嵌套循環(huán)如果把簡單循環(huán)的測試方法直接應(yīng)用到嵌套循環(huán),可能的測試數(shù)就會隨嵌套層數(shù)的增加按幾何級數(shù)增長,這會導(dǎo)致不切實(shí)際的測試數(shù)目。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)進(jìn)行測試,但保持所有其他外層循環(huán)為最小值,其內(nèi)循環(huán)為“典型”值。繼續(xù)進(jìn)行下去,直到測試完所有循環(huán)。2022/12/1073串接循環(huán)如果串接循環(huán)的各個循環(huán)都彼此獨(dú)立,則可以使用前述的測試簡單循環(huán)的方法來測試串接循環(huán)。但是,如果兩個循環(huán)串接,而且第一個循環(huán)的循環(huán)計數(shù)器值是第二個循環(huán)的初始值,則這兩個循環(huán)并不是獨(dú)立的。當(dāng)循環(huán)不獨(dú)立時,建議使用測試嵌套循環(huán)的方法來測試串接循環(huán)。2022/12/1074三種循環(huán)2022/12/10757.7黑盒測試技術(shù)黑盒測試著重測試軟件的功能需求,讓軟件工程師設(shè)計出能充分檢查程序所有功能需求的輸入條件集。黑盒測試并不能取代白盒測試技術(shù),它是與白盒測試互補(bǔ)的方法,它很可能發(fā)現(xiàn)白盒測試不易發(fā)現(xiàn)的其他不同類型的錯誤。2022/12/1076黑盒測試力圖發(fā)現(xiàn)下述類型的錯誤:①功能不正確或遺漏了功能;②界面錯誤;③數(shù)據(jù)結(jié)構(gòu)錯誤或外部數(shù)據(jù)庫訪問錯誤;④性能錯誤;⑤初始化和終止錯誤。白盒測試在測試過程的早期階段進(jìn)行,而黑盒測試主要用于測試過程的后期。黑盒測試故意不考慮程序的控制結(jié)構(gòu),而把注意力集中于信息域。2022/12/1077等價劃分等價劃分是一種黑盒測試方法,把程序的輸入域劃分成數(shù)據(jù)類,據(jù)此導(dǎo)出測試用例。一個理想的測試用例能獨(dú)自發(fā)現(xiàn)一類錯誤(例如,對所有字符數(shù)據(jù)的處理都不正確)。如果把所有可能的輸入數(shù)據(jù)(有效的和無效的)劃分成若干個等價類,則可以合理假定:每類中的一個典型值在測試中的作用與這一類中所有其他值的作用相同??梢詮拿總€等價類中只取一組數(shù)據(jù)作為測試數(shù)據(jù)。這樣選取的測試數(shù)據(jù)最有代表性,最可能發(fā)現(xiàn)程序中的錯誤。2022/12/1078需要研究程序的功能說明,確定輸入數(shù)據(jù)的有效等價類和無效等價類。在確定輸入數(shù)據(jù)的等價類時常常還需要分析輸出數(shù)據(jù)的等價類,以便根據(jù)輸出數(shù)據(jù)的等價類導(dǎo)出對應(yīng)的輸入數(shù)據(jù)等價類。劃分等價類需要經(jīng)驗(yàn),下述幾條啟發(fā)式規(guī)則可能有助于等價類的劃分。如果規(guī)定了輸入值的范圍,則可劃分出一個有效的等價類(輸入值在此范圍內(nèi)),兩個無效的等價類(輸入值小于最小值或大于最大值)。2022/12/1079如果規(guī)定了輸入數(shù)據(jù)的個數(shù),則類似地也可以劃分出一個有效的等價類和兩個無效的等價類。如果規(guī)定了輸入數(shù)據(jù)的一組值,而且程序?qū)Σ煌斎胫底霾煌幚恚瑒t每個允許的輸入值是一個有效的等價類,此外還有一個無效的等價類(任一個不允許的輸入值)。如果規(guī)定了輸入數(shù)據(jù)必須遵循的規(guī)則,則可以劃分出一個有效的等價類(符合規(guī)則)和若干個無效的等價類(從各種不同角度違反規(guī)則)。如果規(guī)定了輸入數(shù)據(jù)為整型,則可以劃分出正整數(shù)、零和負(fù)整數(shù)等三個有效類。如果程序的處理對象是表格,則應(yīng)該使用空表,以及含一項(xiàng)或多項(xiàng)的表。2022/12/1080劃分出等價類以后,等價類設(shè)計測試方案時主要使用下面兩個步驟。設(shè)計一個新的測試方案以盡可能多地覆蓋尚未被覆蓋的有效等價類,復(fù)重這一步驟直到所有有效等價類都被覆蓋為止。設(shè)計一個新的測試方案,使它覆蓋一個而且只覆蓋一個尚未被覆蓋的無效等價類,重復(fù)這一步驟直到所有無效等價類都被覆蓋為止。2022/12/1081等價劃分法設(shè)計一個簡單程序的測試方案。假設(shè)有一個把數(shù)字串轉(zhuǎn)變成整數(shù)的函數(shù)。運(yùn)行程序的計算機(jī)字長16位,用二進(jìn)制補(bǔ)碼表示整數(shù)。這個函數(shù)是用PASCAL語言編寫的,它的說明如下:functionstrtoint(dstr:shortstr):integer;

函數(shù)的參數(shù)類型是shortstr,它的說明是:

typeshortstr=array[1..6]ofchar;被處理的數(shù)字串是右對齊的,也就是說,如果數(shù)字串比六個字符短,則在它的左邊補(bǔ)空格。如果數(shù)字串是負(fù)的,則負(fù)號和最高位數(shù)字緊相鄰(負(fù)號在最高位數(shù)字左邊一位)。2022/12/1082PASCAL編譯程序固有的檢錯功能,測試時不需要使用長度不等于6的數(shù)組做實(shí)參,更不需要使用任何非字符數(shù)組類型的實(shí)參。分析程序的規(guī)格說明,可劃分出如下等價類。有效輸入的等價類有1~6個數(shù)字字符組成的數(shù)字串(最高位數(shù)字不是零);最高位數(shù)字是零的數(shù)字串;最高位數(shù)字左鄰是負(fù)號的數(shù)字串。2022/12/1083無效輸入的等價類有空字符串(全是空格);左部填充的字符既不是零也不是空格;最高位數(shù)字右面由數(shù)字和空格混合組成;最高位數(shù)字右面由數(shù)字和其他字符混合組成;負(fù)號與最高位數(shù)字之間有空格。合法輸出的等價類有在計算機(jī)能表示最小負(fù)整數(shù)和零之間的負(fù)整數(shù);零;在零和計算機(jī)能表示最大正整數(shù)之間的正整數(shù)。2022/12/1084非法輸出的等價類有比計算機(jī)能表示的最小負(fù)整數(shù)還小的負(fù)整數(shù);比計算機(jī)能表示的最大正整數(shù)還大的正整數(shù)。因?yàn)樗玫挠嬎銠C(jī)字長16位,用二進(jìn)制補(bǔ)碼表示整數(shù),所以能表示的最小負(fù)整數(shù)是-32768,能表示的最大正整數(shù)是32767。設(shè)計出下述測試方案(每個測試方案由三部分內(nèi)容組成)。1~6個數(shù)字組成的數(shù)字串,輸出是合法的正整數(shù)。輸入:‘1’預(yù)期的輸出:12022/12/1085最高位數(shù)字是零的數(shù)字串,輸出合法正整數(shù)。輸入:‘000001’預(yù)期的輸出:1負(fù)號與最高位數(shù)字緊相鄰,輸出合法負(fù)整數(shù)。輸入:‘-00001’預(yù)期的輸出:-1最高位數(shù)字是零,輸出也是零。輸入:‘000000’預(yù)期的輸出:0太小的負(fù)整數(shù)。輸入:‘-47561’預(yù)期的輸出:“錯誤——無效輸入”2022/12/1086太大的正整數(shù)。輸入:‘132767’預(yù)期的輸出:“錯誤——無效輸入”空字符串。輸入:‘’預(yù)期的輸出:“錯誤——沒有數(shù)字”字符串左部字符既不是零也不是空格。輸入:‘╳

╳╳╳╳

1’預(yù)期的輸出:“錯誤——填充錯”2022/12/1087最高位數(shù)字后面有空格。輸入:‘12’預(yù)期的輸出:“錯誤——無效輸入”最高位數(shù)字后面有其他字符。輸入:‘1╳

╳2’預(yù)期的輸出:“錯誤——無效輸入”負(fù)號和最高位數(shù)字之間有空格。輸入:‘-12’預(yù)期的輸出:“錯誤——負(fù)號位置錯”2022/12/1088邊界值分析處理邊界情況時程序最容易發(fā)生錯誤。如,許多程序錯誤出現(xiàn)在下標(biāo)、純量、數(shù)據(jù)結(jié)構(gòu)和循環(huán)等的邊界附近。因此,設(shè)計使程序運(yùn)行在邊界情況附近的測試方案,暴露出程序錯誤的可能性更大一些。使用邊界值分析方法設(shè)計測試方案首先應(yīng)該確定邊界情況,這需要經(jīng)驗(yàn)和創(chuàng)造性,通常輸入等價類和輸出等價類的邊界,就是應(yīng)該著重測試的程序邊界情況。2022/12/1089選取的測試數(shù)據(jù)應(yīng)該剛好等于、剛剛小于和剛剛大于邊界值。按照邊界值分析法,應(yīng)該選取剛好等于、稍小于和稍大于等價類邊界值的數(shù)據(jù)作為測試數(shù)據(jù),而不是選取每個等價類內(nèi)的典型值或任意值作為測試數(shù)據(jù)。2022/12/1090錯誤推測錯誤推測法在很大程度上靠直覺和經(jīng)驗(yàn)進(jìn)行。它的基本想法是列舉出程序中可能有的錯誤和容易發(fā)生錯誤的特殊情況,并且根據(jù)它們選擇測試方案。2022/12/10917.8調(diào)試調(diào)試(也稱為糾錯)作為成功的測試的后果而出現(xiàn),即調(diào)試是在測試發(fā)現(xiàn)錯誤之后排除錯誤的過程。調(diào)試過程調(diào)試不是測試,但是它總是發(fā)生在測試之后。如圖5.10所示,調(diào)試過程從執(zhí)行一個測試用例開始,評估測試結(jié)果,如果發(fā)現(xiàn)實(shí)際結(jié)果與預(yù)期結(jié)果不一致,則這種不一致就是一個癥狀,它表明在軟件中存在著隱藏的問題。調(diào)試過程試圖找出產(chǎn)生癥狀的原因,以便改正錯誤。2022/12/1092調(diào)試過程2022/12/1093調(diào)試途徑調(diào)試的根本目標(biāo)都是尋找軟件錯誤的原因并改正。這個目標(biāo)是通過把系統(tǒng)地評估、直覺和運(yùn)氣組合起來實(shí)現(xiàn)的。一般來說,有下列三種調(diào)試途徑可以采用:蠻干法:打印內(nèi)存數(shù)據(jù)、關(guān)鍵輸出、斷點(diǎn)回溯法:由癥狀回推可能的原因原因排除法:對分查找、歸納、演繹等方法2022/12/10947.9軟件可靠性基本概念軟件可靠性的定義軟件可靠性是程序在給定的時間間隔內(nèi),按照規(guī)格說明書的規(guī)定成功地運(yùn)行的概率。2022/12/1095軟件的可用性通常用戶也很關(guān)注軟件系統(tǒng)可以使用的程度。對于任何其故障是可以修復(fù)的系統(tǒng),都應(yīng)該同時使用可靠性和可用性衡量它的優(yōu)劣程度。軟件可用性的一個定義是:軟件可用性是程序在給定的時間點(diǎn),按照規(guī)格說明書的規(guī)定,成功地運(yùn)行的概率。如果在一段時間內(nèi),軟件系統(tǒng)故障停機(jī)時間分別為td1,td2…,正常運(yùn)行時間分別為tu1,tu2,…,則系統(tǒng)的穩(wěn)態(tài)可用性為:2022/12/1096

其中Tup=∑tui,Tdown=∑tdi如果引入系統(tǒng)平均無故障時間MTTF和平均維修時間MTTR的概念,則(5.1)式可以變成2022/12/1097平均維修時間MTTR是修復(fù)一個故障平均需要用的時間,取決于維護(hù)人員的技術(shù)水平和對系統(tǒng)的熟悉程度,也和系統(tǒng)的可維護(hù)性有重要關(guān)系。平均無故障時間MTTF是系統(tǒng)按規(guī)格說明書規(guī)定成功地運(yùn)行的平均時間,它主要取決于系統(tǒng)中潛伏的錯誤的數(shù)目,因此和測試的關(guān)系十分密切。2022/12/1098估算平均無故障時間的方法軟件的平均無故障時間MTTF是一個重要的質(zhì)量指標(biāo),作為對軟件的一項(xiàng)要求由用戶提出。為估算MTTF,先引入一些有關(guān)的量。符號估算MTTF使用下述符號表示有關(guān)的數(shù)量:ET——測試之前程序中錯誤總數(shù);IT——程序長度(機(jī)器指令總數(shù));τ——測試(包括調(diào)試)時間;Ed(τ)——在0至τ期間發(fā)現(xiàn)的錯誤數(shù)Ec(τ)——在0至τ

溫馨提示

  • 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

提交評論