軟件工程第12章課件_第1頁
軟件工程第12章課件_第2頁
軟件工程第12章課件_第3頁
軟件工程第12章課件_第4頁
軟件工程第12章課件_第5頁
已閱讀5頁,還剩245頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第12章 軟件測試軟件測試是對軟件規(guī)格說明、軟件設(shè)計和編碼的最全面也是最后的審查。通過軟件測試,可以發(fā)現(xiàn)軟件中絕大部分潛伏的錯誤,從而可以大大提高軟件產(chǎn)品的正確性、可靠性,進而可顯著提高產(chǎn)品質(zhì)量。統(tǒng)計表明,軟件測試工作往往占軟件開發(fā)總工作量的40%以上。甚至3~5倍以上。第12章 軟件測試軟件測試是對軟件規(guī)格說明、軟件設(shè)計和編碼的1第12章 軟件測試本章將介紹:軟件測試的基本知識;軟件測試的常用方法和技術(shù);軟件測試的過程;軟件的調(diào)試與排錯技術(shù);軟件測試的工具。第12章 軟件測試本章將介紹:2第12章 軟件測試12.1軟件測試的基本知識12.2軟件測試技術(shù)12.3軟件測試過程12.4調(diào)試12.5測試工具第12章 軟件測試12.1軟件測試的基本知識312.1軟件測試的基本知識軟件測試是執(zhí)行程序發(fā)現(xiàn)并排除程序中潛伏的錯誤的過程。軟件測試是軟件投入運行前,對軟件需求分析、設(shè)計、實現(xiàn)的強有力的最終審查。12.1軟件測試的基本知識軟件測試是執(zhí)行程序發(fā)現(xiàn)并排除程412.1.1軟件測試的目標(biāo)與原則測試用例——為了進行有效的測試而設(shè)計的輸入數(shù)據(jù)和預(yù)期的輸出結(jié)果數(shù)據(jù)。Myers在其軟件測試著作中對軟件測試的目標(biāo)提出以下觀點:①軟件測試是為了發(fā)現(xiàn)錯誤而運行程序的過程;②一個好的測試用例能夠發(fā)現(xiàn)至今尚未發(fā)現(xiàn)的錯誤;③一個成功的測試是發(fā)現(xiàn)了至今尚未發(fā)現(xiàn)的錯誤的測試。12.1.1軟件測試的目標(biāo)與原則測試用例——為了進行有效5測試原則①應(yīng)盡早和不斷地進行軟件“測試”,即將這種“測試”貫穿于軟件開發(fā)的各個階段,堅持各個階段的技術(shù)評審,以便盡早地發(fā)現(xiàn)和預(yù)防錯誤。②測試用例中,不僅要選擇合理的輸入數(shù)據(jù),還要選擇不合理的輸入數(shù)據(jù)。③在開發(fā)各階段應(yīng)事先分別制定出相應(yīng)的測試計劃,在測試開始后應(yīng)嚴格執(zhí)行,防止隨意性。④對發(fā)現(xiàn)錯誤較多的程序模塊,應(yīng)進行重點測試。Pareto指出,測試發(fā)現(xiàn)錯誤的80%集中在20%的模塊中。發(fā)現(xiàn)錯誤較多的模塊質(zhì)量較差,需重點測試,并要測試是否引入了新的錯誤。測試原則①應(yīng)盡早和不斷地進行軟件“測試”,即將這種“測試”貫6測試原則⑤避免程序員測試自己的程序。測試用例的設(shè)計應(yīng)有第三方參與。對于大型軟件的測試,一般的做法是:設(shè)計者與測試者共同完成單元測試任務(wù),而綜合測試由專門的測試機構(gòu)負責(zé),有時其中也可以有設(shè)計者參加⑥用窮舉測試是不現(xiàn)實的,一般通過設(shè)計測試用例,充分覆蓋所有條件或所有語句即可。⑦長期妥善保存測試計劃、測試用例、出錯統(tǒng)計和有關(guān)的分析報告。測試原則⑤避免程序員測試自己的程序。712.1.2軟件測試的步驟圖14-1-1測試步驟部件代碼部件代碼單元測試單元測試單元測試…部件代碼集成測試功能測試性能測試驗收測試安裝測試設(shè)計規(guī)格說明系統(tǒng)功能需求其他軟件需求用戶需求規(guī)格說明用戶環(huán)境集成后的模塊功能系統(tǒng)驗證,生效的軟件被接受的系統(tǒng)在使用中的系統(tǒng)測試后的模塊12.1.2軟件測試的步驟圖14-1-1測試步驟部件812.1.2軟件測試的步驟在本書中,從軟件工程的角度:將單元測試與詳細設(shè)計對應(yīng)起來,即在詳細設(shè)計階段就應(yīng)制定出單元測試計劃;而集成測試又稱為綜合測試,可以把概要設(shè)計和集成測試對應(yīng)起來,在概要設(shè)計階段就可以制定集成測試計劃;將功能測試、性能(行為)測試、驗收測試統(tǒng)稱為驗收測試(也稱確認測試),與軟件系統(tǒng)需求分析階段對應(yīng)起來,在需求分析階段就應(yīng)制定出驗收準(zhǔn)則和驗收測試計劃,驗收測試應(yīng)提交經(jīng)用戶確認的軟件產(chǎn)品;最后,將軟件、硬件等要素構(gòu)成一個完整的基于計算機的系統(tǒng),再進行系統(tǒng)測試,使系統(tǒng)測試與系統(tǒng)定義相對應(yīng),即在系統(tǒng)定義階段就應(yīng)制定系統(tǒng)測試計劃。12.1.2軟件測試的步驟在本書中,從軟件工程的角度:912.1.2軟件測試的步驟圖14-1-2軟件工程的開發(fā)與測試的關(guān)系系統(tǒng)工程需求分析概要設(shè)計設(shè)計、編碼單元測試集成測試驗收測試系統(tǒng)測試12.1.2軟件測試的步驟圖14-1-2軟件工程的開1012.1.3測試階段的信息流圖14-1-3測試階段的信息流測試評價排錯可靠性模型軟件配置測試配置測試結(jié)果錯誤錯誤統(tǒng)計預(yù)期結(jié)果正確的程序可靠性預(yù)測12.1.3測試階段的信息流圖14-1-3測試階段的1112.1.3測試階段的信息流測試的輸入流有軟件配置和測試配置。軟件配置由需求規(guī)格說明、設(shè)計說明、源代碼等組成;測試配置包括測試計劃、測試用例(其中包括預(yù)期的結(jié)果)、測試工具等組成。12.1.3測試階段的信息流測試的輸入流有軟件配置和測試12測試結(jié)果評價經(jīng)常發(fā)現(xiàn)嚴重的錯誤并需要修改軟件,則軟件的質(zhì)量和可靠性一定不高,需要進一步測試;如果測試所發(fā)現(xiàn)的錯誤不多且易于改正,軟件功能看起來也較完善,則需考慮兩種可能:1)軟件質(zhì)量和可靠性確實令人滿意;2)測試不全面,很可能還潛伏著嚴重錯誤;如果測試過程沒有發(fā)現(xiàn)任何錯誤,則很有可能是測試配置不合理。測試結(jié)果評價經(jīng)常發(fā)現(xiàn)嚴重的錯誤并需要修改軟件,則軟件的質(zhì)量和1312.1.4軟件測試的常用方法1.靜態(tài)測試靜態(tài)測試是采用人工檢測和計算機輔助靜態(tài)分析的方法對程序進行檢測。人工檢測是指靠人工走查程序或評審軟件。這種走查與評審主要針對編碼的質(zhì)量和軟件開發(fā)各個階段的文檔,特別是總體設(shè)計和詳細設(shè)計階段的錯誤。能發(fā)現(xiàn)30%~70%的邏輯設(shè)計和編碼錯誤。計算機輔助靜態(tài)分析是指利用靜態(tài)分析軟件工具對程序進行靜態(tài)分析,主要檢測變量是否用錯、參數(shù)是否匹配、循環(huán)嵌套是否有錯、是否有死循環(huán)和永遠執(zhí)行不到的死代碼等等。同時,它還可對程序的特性進行分析。12.1.4軟件測試的常用方法1.靜態(tài)測試1412.1.4軟件測試的常用方法2.動態(tài)測試動態(tài)測試是指事先設(shè)計好一組測試用例,然后通過運行程序來發(fā)現(xiàn)錯誤。動態(tài)測試有兩種測試方法:黑盒測試;白盒測試。12.1.4軟件測試的常用方法2.動態(tài)測試1512.1.4軟件測試的常用方法黑盒測試,又稱為功能測試——把被測的程序模塊看成一個黑匣子,即完全不考慮程序的內(nèi)部結(jié)構(gòu)和處理過程,測試僅在程序的接口上進行。白盒測試——把被測的程序看成一個透明的白匣子,即完全了解程序的內(nèi)部結(jié)構(gòu)和詳細的處理過程,測試是在程序的內(nèi)部結(jié)構(gòu)上進行。即要求針對每一條邏輯路徑都要設(shè)計測試用例,檢查每一個分支和每一次循環(huán)的情況。12.1.4軟件測試的常用方法黑盒測試,又稱為功能測試—16窮舉測試是不現(xiàn)實的。如上圖,設(shè)循環(huán)體應(yīng)執(zhí)行30次,循環(huán)體中有4個獨立的分支,則最多有430≈1018個邏輯路徑,假設(shè)每運行一個測試用例平均花費1毫秒,則需花費3千多萬年。一般選用少量最有效的測試用例,以便覆蓋每一個條件、每一個路徑和每一個語句,從而以最少的代價發(fā)現(xiàn)盡可能多的錯誤。開始結(jié)束窮舉測試是不現(xiàn)實的。如上圖,設(shè)循環(huán)體應(yīng)執(zhí)行30次,循環(huán)體中有1712.1.5軟件測試中常見的錯誤類型按照錯誤的影響和造成的后果進行分類,可分為:較小錯誤,中等錯誤,較嚴重錯誤,嚴重錯誤,非常嚴重的錯誤,最嚴重的錯誤。按照軟件生存周期各個階段分類,可分為:問題定義錯誤、需求分析規(guī)格說明錯誤、設(shè)計錯誤、編碼錯誤等等。這里重點介紹一種按照錯誤的性質(zhì)和范圍進行分類的方法,可以將錯誤分為如下幾類:12.1.5軟件測試中常見的錯誤類型按照錯誤的影響和造成18按照錯誤的性質(zhì)和范圍進行分類1.功能錯誤①需求規(guī)格說明錯誤。主要是指其中有錯誤、多余或遺漏的功能,有二義性或自相矛盾。②設(shè)計實現(xiàn)錯誤。設(shè)計或?qū)崿F(xiàn)的功能不是規(guī)格說明或用戶所要求的功能。按照錯誤的性質(zhì)和范圍進行分類1.功能錯誤19按照錯誤的性質(zhì)和范圍進行分類2.系統(tǒng)錯誤①外部接口錯誤。如與打印機的接口錯誤。②內(nèi)部接口錯誤。指各程序模塊間的聯(lián)系存在錯誤。如輸入/輸出、數(shù)據(jù)保護、子程序訪問等。③硬件結(jié)構(gòu)錯誤。如錯誤地理解I/O指令、中斷處理、設(shè)備啟動和初始化等而引起的錯誤。④軟件結(jié)構(gòu)錯誤。由于軟件結(jié)構(gòu)不合理或不清晰所引起的錯誤。往往在系統(tǒng)滿載時才能發(fā)現(xiàn)。⑤操作系統(tǒng)錯誤。該類錯誤是由于不了解操作系統(tǒng)而引起的,操作系統(tǒng)本身也有錯誤。⑥控制與順序錯誤。包括事件的時間順序不正確、等待一個不可能發(fā)生的事件等等。⑦資源管理錯誤。既資源使用不當(dāng)。資源死鎖等。按照錯誤的性質(zhì)和范圍進行分類2.系統(tǒng)錯誤20按照錯誤的性質(zhì)和范圍進行分類3.加工錯誤(算法錯誤)①計算與操作錯誤。指計算、函數(shù)求值和一般操作過程中的錯誤。②初始化錯誤。如忘記了初始化工作區(qū)、數(shù)據(jù)區(qū),錯誤地對循環(huán)變量賦初值,不正確的初始化等等。③局部控制和次序錯誤。如遺漏路徑、不可達到的代碼段、循環(huán)嵌套或終止條件不正確、死循環(huán)等等。④邏輯錯誤。如多分支、判斷條件不正確等。按照錯誤的性質(zhì)和范圍進行分類3.加工錯誤(算法錯誤)21按照錯誤的性質(zhì)和范圍進行分類4.?dāng)?shù)據(jù)錯誤①動態(tài)數(shù)據(jù)錯誤。②靜態(tài)數(shù)據(jù)錯誤。靜態(tài)數(shù)據(jù)指直接或間接地出現(xiàn)在程序或數(shù)據(jù)庫中的數(shù)據(jù),其內(nèi)容和格式都是固定的。因此在內(nèi)容或格式上都可能存在錯誤。③數(shù)據(jù)內(nèi)容錯誤。是指由于內(nèi)容被破壞或被錯誤地解釋而造成的錯誤。④數(shù)據(jù)結(jié)構(gòu)錯誤。包括數(shù)據(jù)結(jié)構(gòu)說明錯誤和數(shù)據(jù)結(jié)構(gòu)使用錯誤。⑤數(shù)據(jù)屬性錯誤。數(shù)據(jù)屬性是指數(shù)據(jù)內(nèi)容的含義或語義,如整數(shù)、字符等。數(shù)據(jù)屬性錯誤是指對數(shù)據(jù)屬性的錯誤解釋和錯誤使用而導(dǎo)致的錯誤。按照錯誤的性質(zhì)和范圍進行分類4.?dāng)?shù)據(jù)錯誤22按照錯誤的性質(zhì)和范圍進行分類5.代碼錯誤代碼錯誤主要包括語法錯誤、鍵入錯誤、對語句的理解錯誤等。例如,Myers(1976)指出,美國第一個去金星的太空任務(wù)的失敗是由于在一個Fortrando循環(huán)中缺少一個逗號。按照錯誤的性質(zhì)和范圍進行分類5.代碼錯誤2312.2軟件測試技術(shù)

12.2.1白盒測試

白盒測試的原則是:①保證程序中每一獨立的路徑至少執(zhí)行一次;②保證所有判定的每一個分支至少執(zhí)行一次;③保證每個判定表達式中每個條件的所有可能結(jié)果至少出現(xiàn)一次;④保證每一循環(huán)都在邊界條件和一般條件至少各執(zhí)行一次;⑤驗證所有內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性。12.2軟件測試技術(shù)

12.2.1白盒測試白盒測24幾種典型的白盒測試技術(shù)1.邏輯覆蓋邏輯覆蓋是指設(shè)計測試用例對程序的內(nèi)部分支邏輯結(jié)構(gòu)進行部分或全部覆蓋的技術(shù)。1)語句覆蓋2)判定覆蓋3)條件覆蓋4)判定/條件覆蓋5)條件組合覆蓋6)路徑覆蓋邏輯覆蓋幾種典型的白盒測試技術(shù)1.邏輯覆蓋邏輯覆蓋251)語句覆蓋—使程序中的每個語句至少執(zhí)行一次。令x=2,y=0,z=4作為測試數(shù)據(jù),程序執(zhí)行路徑為abcde,使語句段1和2各執(zhí)行一次,實現(xiàn)了語句覆蓋。它不能檢測所有判定條件的錯誤。比如,錯把z>1寫成了z<1,則上述測試用例就無法檢測出來了。(x>1)AND(y=0)(x=2)OR(z>1)語句段1語句段2開始結(jié)束TTFFabcde1)語句覆蓋—使程序中的每個語句至少執(zhí)行一次。令x=2,y262)判定覆蓋——分支覆蓋判定覆蓋是指設(shè)計足夠多的測試用例,使每個判定的每種可能結(jié)果都至少出現(xiàn)一次,也就是使每個判定的每個分支都至少執(zhí)行一次。2)判定覆蓋——分支覆蓋判定覆蓋是指設(shè)計足夠多的測試用例,使27可以設(shè)計如下兩組數(shù)據(jù)以滿足判定覆蓋:x=3,y=0,z=1(通過路徑abce);x=2,y=1,z=2(通過路徑acde)。判定覆蓋必然滿足語句覆蓋。覆蓋程度仍然不高。比如,錯把z>1寫成了z<1,則上述測試用例仍無法檢測出來。因為它只覆蓋了全部路徑的一半。判定覆蓋可以推廣到多分支情況。(x>1)AND(y=0)(x=2)OR(z>1)語句段1語句段2開始結(jié)束TTFFabcde可以設(shè)計如下兩組數(shù)據(jù)以滿足判定覆蓋:(x>1)AND(y283)條件覆蓋條件覆蓋是指設(shè)計足夠的測試用例,使每個判定表達式中的每個條件的每種可能值都至少出現(xiàn)一次。如圖,共有4個條件:x>1,y=0,x=2,z>1。條件覆蓋要求設(shè)計測試用例,覆蓋第一個判定表達式的x>1,y=0,x≤1,y≠0等各種結(jié)果,并覆蓋第二個判定表達式的x=2,z>1,x≠2,z≤1等各種結(jié)果。(x>1)AND(y=0)(x=2)OR(z>1)語句段1語句段2開始結(jié)束TTFFabcde3)條件覆蓋條件覆蓋是指設(shè)計足夠的測試用例,使每個判定表達式293)條件覆蓋設(shè)計如下兩組測試用例,可以滿足條件覆蓋的標(biāo)準(zhǔn):x=2,y=0,z=3(覆蓋x>1,y=0,x=2,z>1,通過路徑abcde);x=1,y=1,z=1(覆蓋x≤1,y≠0,x≠2,z≤1,通過路徑ace)。(x>1)AND(y=0)(x=2)OR(z>1)語句段1語句段2開始結(jié)束TTFFabcde3)條件覆蓋設(shè)計如下兩組測試用例,可以滿足條件覆蓋的標(biāo)準(zhǔn):303)條件覆蓋但是,如果設(shè)計如下一組測試用例:x=1,y=0,z=3(覆蓋x≤1,y=0,x≠2,z>1,通過路徑acde);x=2,y=1,z=1(覆蓋x>1,y≠0,x=2,z≤1,通過路徑ace)。雖滿足條件覆蓋,但不滿足語句覆蓋和判定覆蓋。(x>1)AND(y=0)(x=2)OR(z>1)語句段1語句段2開始結(jié)束TTFFabcde3)條件覆蓋但是,如果設(shè)計如下一組測試用例:(x>1)A314)判定/條件覆蓋它是指設(shè)計足夠的測試用例,使得判定表達式中的每個條件都取到所有可能的值(即滿足條件覆蓋),并使每個判定表達式也都取到所有可能的判定結(jié)果(即滿足判定覆蓋)。4)判定/條件覆蓋它是指設(shè)計足夠的測試用例,使得判定表達式中324)判定/條件覆蓋x=2,y=0,z=3(覆蓋x>1,y=0,x=2,z>1,通過路徑abcde);x=1,y=1,z=1(覆蓋x≤1,y≠0,x≠2,z≤1,通過路徑ace)。(x>1)AND(y=0)(x=2)OR(z>1)語句段1語句段2開始結(jié)束TTFFabcde4)判定/條件覆蓋x=2,y=0,z=3(x>1)AND335)條件組合覆蓋條件組合覆蓋是指設(shè)計足夠的測試用例,使得每個判定表達式中條件的各種可能值的組合都至少出現(xiàn)一次。這是一種較強的邏輯覆蓋。5)條件組合覆蓋條件組合覆蓋是指設(shè)計足夠的測試用例,使得每個34如圖,兩個判定表達式中含有4個條件,共有8種組合:①x>1,y=0;②x>1,y≠0;③x≤1,y=0;④x≤1,y≠0;⑤x=2,z>1;⑥x=2,z≤1;⑦x≠2,z>1;⑧x≠2,z≤1。(x>1)AND(y=0)(x=2)OR(z>1)語句段1語句段2開始結(jié)束TTFFabcde如圖,兩個判定表達式中含有4個條件,共有8種組合:(x>135x=2,y=0,z=3;覆蓋條件組合①和⑤,通過路徑abcde;x=2,y=1,z=1;覆蓋條件組合②和⑥,通過路徑acde;x=0,y=0,z=3;覆蓋條件組合③和⑦,通過路徑acde;x=1,y=1,z=1;覆蓋條件組合④和⑧,通過路徑ace。但未通過路徑abce。(x>1)AND(y=0)(x=2)OR(z>1)語句段1語句段2開始結(jié)束TTFFabcdex=2,y=0,z=3;(x>1)AND(y=0)(x=366)路徑覆蓋路徑覆蓋是指設(shè)計足夠的測試用例,以覆蓋被測程序中所有可能的路徑。如圖,共有4條路徑,設(shè)計以下4組測試用例,就可以覆蓋這4條路徑:x=2,y=0,z=3;覆蓋路徑abcdex=2,y=1,z=1;覆蓋路徑acdex=1,y=1,z=1;覆蓋路徑acex=3,y=0,z=1;覆蓋路徑abce(x>1)AND(y=0)(x=2)OR(z>1)語句段1語句段2開始結(jié)束TTFFabcde沒有覆蓋條件組合③和⑦③x≤1,y=0⑦x≠2,z>16)路徑覆蓋路徑覆蓋是指設(shè)計足夠的測試用例,以覆蓋被測程序中37實際測試在實際測試時,為了達到充分測試的目的,一般以條件組合覆蓋為主設(shè)計測試用例,然后再補充部分測試用例,以便實現(xiàn)路徑覆蓋。實際測試在實際測試時,為了達到充分測試的目的,一般以條件組合38課程名稱:軟件工程第23講班級:日期:教室:教學(xué)題目:12.2軟件測試技術(shù)12.2.1白盒測試12.2.2黑盒測試教學(xué)目的:掌握白盒、黑盒測試的概念和測試方法步驟。教學(xué)重點:基本路徑測試、黑盒測試技術(shù)教學(xué)難點:基本路徑測試。教具:多媒體教室、電子教案作業(yè):課程名稱:軟件工程第23講3912.2.1白盒測試

2.基本路徑測試其主要思想是根據(jù)軟件詳細設(shè)計的過程性描述或源代碼中的控制流程求出程序的環(huán)形復(fù)雜性度量,然后用此度量確定程序的基本路徑集合,并由此導(dǎo)出一組測試用例來覆蓋該集合中的每一個獨立的路徑,從而可以保證每個語句至少執(zhí)行一次。12.2.1白盒測試

2.基本路徑測試其主要思想是根402.基本路徑測試【例12.1】試用基本路徑測試法對如下的PDL描述或如圖14-2-2所示的程序流程圖設(shè)計測試用例。該例子描述了最多輸入50個值(以–1作為輸入結(jié)束標(biāo)志),計算其中有效的學(xué)生分數(shù)的個數(shù)、總分數(shù)和平均值。2.基本路徑測試【例12.1】試用基本路徑測試法對如下的PD41PROCEDUREaverageINTERFACERETURNSaverage,sum,n1;*n1為有效成績的個數(shù)。*INTERFACEACCEPTSscore;TYPEscore[1,50]ISSCALARARRAY;TYPEaverage,n1,n2,sumISSCALAR;*n2為輸入值的個數(shù)。*TYPEiISINTEGER;i=1;n1=n2=0;sum=0;DOWHILE(score[i]<>–1)AND(n2<50)n2加1;IF(score[i]>=0)AND(score[i]<=100)THENn1加1;sum=sum+score[i];ENDIF;i加1;ENDDO;IFn1>0THENaverage=sum/n1;ELSEaverage=–1;ENDIF;ENDaveragePROCEDUREaverage42圖14-2-2過程average的程序流程圖開始i=1,n1=n2=0,sum=0Score[i]<>-1ANDn2<50n2=n2+1n1=n1+1,sum=sum+score[i]Score[i]>0ANDscore[i]<100i=i+1n1>0average=sum/n1average=–1返回FFFTTT12和345和6789101112圖14-2-2過程average的程序流程圖開始i=43【例12.1】解:可按如下步驟設(shè)計測試用例:步驟1:根據(jù)詳細設(shè)計或代碼導(dǎo)出過程average的流圖。123456789111012R1R2R3R4R5R6【例12.1】解:可按如下步驟設(shè)計測試用例:1234567844【例12.1】步驟2:據(jù)流圖確定環(huán)形復(fù)雜性度量V(G):1)V(G)=E–N+2=16–12+2=6;其中E為流圖中的邊數(shù),N為結(jié)點數(shù);2)V(G)=6(個區(qū)域);3)V(G)=P+1=5+1=6;其中P為謂詞結(jié)點的個數(shù)。在流圖中,結(jié)點2、3、5、6、9是謂詞結(jié)點?!纠?2.1】步驟2:據(jù)流圖確定環(huán)形復(fù)雜性度量V(G):45【例12.1】步驟3:確定基本路徑集合(即獨立路徑集合)。一條獨立路徑是指,和其他的獨立路徑相比,至少引入一個新處理語句或一個新判斷的程序通路。V(G)值正好等于該程序的獨立路徑的條數(shù)。于是可確定6條獨立的路徑:路徑1:1—2—…—2—9—10—12路徑2:1—2—9—11—12路徑3:1—2—3—9—10—12路徑4:1—2—3—4—5—8—2…路徑5:1—2—3—4—5—6—8—2…路徑6:1—2—3—4—5—6—7—8—2…【例12.1】步驟3:確定基本路徑集合(即獨立路徑集合)。一46【例12.1】步驟4:為每一條獨立路徑各設(shè)計一組測試用例,以便強迫程序沿著該路徑至少執(zhí)行一次。1)路徑1的測試用例:score[k]=有效分數(shù)值,當(dāng)k<i;score[i]=–1,2≤i≤50;期望結(jié)果:根據(jù)輸入的有效分數(shù)算出正確的分數(shù)個數(shù)n1、總分sum和平均分average。2)路徑2的測試用例:score[1]=–1;期望的結(jié)果:average=–1,其他量保持初值?!纠?2.1】步驟4:為每一條獨立路徑各設(shè)計一組測試用例,以47【例12.1】3)路徑3的測試用例:輸入多于50個有效分數(shù),即試圖處理51個分數(shù),要求前51個為有效分數(shù);期望結(jié)果:n1=50、且算出正確的總分和平均分。4)路徑4的測試用例:score[i]=有效分數(shù),當(dāng)i<50;score[k]<0,k<i;期望結(jié)果:根據(jù)輸入的有效分數(shù)算出正確的分數(shù)個數(shù)n1、總分sum和平均分average?!纠?2.1】3)路徑3的測試用例:48【例12.1】5)路徑5的測試用例:score[i]=有效分數(shù),當(dāng)i<50;score[k]>100,k<i;期望結(jié)果:根據(jù)輸入的有效分數(shù)算出正確的分數(shù)個數(shù)n1、總分sum和平均分average。6)路徑6的測試用例:score[i]=有效分數(shù),當(dāng)i<50;期望結(jié)果:根據(jù)輸入的有效分數(shù)算出正確的分數(shù)個數(shù)n1、總分sum和平均分average?!纠?2.1】5)路徑5的測試用例:493.循環(huán)測試1)對于最多為n次的單循環(huán),可設(shè)計測試用例實現(xiàn)下列測試:①跳過循環(huán),即一次也不執(zhí)行;②僅循環(huán)1次;③循環(huán)2次;④循環(huán)m次,m<n;⑤分別循環(huán)n–1次,n次,n+1次。2)對于嵌套循環(huán)的測試:①從最內(nèi)層循環(huán)開始測試,此時外層循環(huán)都取最小值,對內(nèi)層進行單循環(huán)的測試;②向外退一層進行測試,此時其內(nèi)層循環(huán)取一些典型值,其外層循環(huán)仍取最小值;③繼續(xù)向外層擴展,直至測試完成。3.循環(huán)測試1)對于最多為n次的單循環(huán),可設(shè)計測試用例實現(xiàn)下5012.2.2黑盒測試主要是測試軟件是否滿足功能需求。黑盒測試主要測試的錯誤類型有:①不正確或遺漏的功能;②接口錯誤;③性能錯誤;④數(shù)據(jù)結(jié)構(gòu)或外部數(shù)據(jù)訪問錯誤;⑤初始化或終止條件錯誤等等。黑盒測試設(shè)計測試用例的方法:等價類的劃分、邊界值分析、錯誤推測、組合數(shù)據(jù)測試等。12.2.2黑盒測試主要是測試軟件是否滿足功能需求。511.等價類劃分等價類劃分的思想是將輸入數(shù)據(jù)按有效的(合理的)和無效的(不合理的)劃分成若干個等價類,認為測試等價類中的一個代表值的結(jié)果就等于對該類其他值的測試。利用等價類劃分的測試步驟如下:1)劃分等價類從程序的功能說明中找出每個輸入條件,然后將其劃分成若干個有效和無效的等價類。下面給出等價類劃分的幾條經(jīng)驗性原則供參考:1.等價類劃分等價類劃分的思想是將輸入數(shù)據(jù)按有效的(合理的)52等價類劃分的幾條經(jīng)驗性原則①如果規(guī)定了輸入值的范圍,則可劃分出一個有效的等價類(輸入值在此范圍內(nèi))和兩個無效的等價類(輸入值小于最小值或大于最大值)。②如果規(guī)定了數(shù)據(jù)輸入的個數(shù),則可劃分出一個有效的等價類(輸入值的個數(shù)符合規(guī)定)和兩個無效的等價類(輸入值的個數(shù)少于或多于規(guī)定個數(shù))。③如果規(guī)定了輸入數(shù)據(jù)的一組值,而且程序?qū)Σ煌妮斎胫颠M行不同的處理,則每個允許的輸入值是一個有效的等價類,此外還有一個無效的等價類(規(guī)定的這一組值以外的值)。等價類劃分的幾條經(jīng)驗性原則①如果規(guī)定了輸入值的范圍,則可劃分53等價類劃分的幾條經(jīng)驗性原則④如果規(guī)定了輸入數(shù)據(jù)必須遵循的規(guī)則,則可劃分出一個有效的等價類(符合規(guī)則)和若干個無效的等價類(從不同的角度違反規(guī)則)。⑤如果輸入條件規(guī)定了一個集合,則可劃分出一個有效的等價類(此集合)和一個無效的等價類(此集合的補集)。等價類劃分的幾條經(jīng)驗性原則④如果規(guī)定了輸入數(shù)據(jù)必須遵循的規(guī)則541.等價類劃分2)設(shè)計測試用例①等價類劃分應(yīng)列表,并為每一個等價類編號。②設(shè)計一個有效等價類的測試用例,使其盡可能多地覆蓋尚未被覆蓋過的有效等價類。如此重復(fù),直到所有有效等價類都被覆蓋為止。③設(shè)計一個測試用例,僅覆蓋一個無效等價類,如此重復(fù),直到所有無效等價類都被覆蓋為止。1.等價類劃分2)設(shè)計測試用例552)設(shè)計測試用例【例12.1】設(shè)有一個檔案管理系統(tǒng),要求用戶輸入以年月表示的日期。假設(shè)日期限定在1990年1月~2003年12月,并規(guī)定日期由6位數(shù)字字符組成,前4位表示年,后2位表示月?,F(xiàn)用等價類劃分法設(shè)計測試用例,來測試程序的“日期檢查功能”。2)設(shè)計測試用例【例12.1】設(shè)有一個檔案管理系統(tǒng),要求用戶56【例12.1】1)劃分等價類并編號表14-1等價類劃分的結(jié)果輸入等價類有效等價類無效等價類日期的類型及長度①6位數(shù)字字符②有非數(shù)字字符③少于6位數(shù)字字符④多于6位數(shù)字字符年份范圍⑤在1990~2003之間⑥小于1990⑦大于2003月份范圍⑧在01~12之間⑨等于00⑩大于12【例12.1】1)劃分等價類并編號輸入等價類有效等價類無效等57【例12.1】2)設(shè)計測試用例,以便覆蓋所有的有效等價類在表14-1中列出了3個有效等價類,編號分別為①、⑤、⑧,設(shè)計的測試用例如下:測試數(shù)據(jù)期望結(jié)果覆蓋的有效等價類200211輸入有效①、⑤、⑧【例12.1】2)設(shè)計測試用例,以便覆蓋所有的有效等58【例12.1】3)為每一個無效等價類設(shè)計一個測試用例,設(shè)計結(jié)果如下:測試數(shù)據(jù)期望結(jié)果覆蓋的無效等價類95June無效輸入②20036無效輸入③2001006無效輸入④198912無效輸入⑥200401無效輸入⑦200100無效輸入⑨200113無效輸入⑩【例12.1】3)為每一個無效等價類設(shè)計一個測試用例,592.邊界值分析邊界值分析(boundaryvalueanalysis,BVA)是指設(shè)計測試用例,使程序在輸入或輸出的邊界值或者邊界值左右的值執(zhí)行。邊界值分析方法可以單獨設(shè)計測試用例,也可以作為等價類劃分方法的補充,即在各個等價類中主要是選擇邊界上及其左右的值。例如例12.1中對月份范圍的測試就可以選擇00、01、02、11、12、13等數(shù)據(jù)作為測試用例。2.邊界值分析邊界值分析(boundaryvaluean60邊界值分析方法設(shè)計測試用例的經(jīng)驗性原則1)如果輸入條件指定了范圍[a,b],則a、b以及緊挨a、b左右的各一個值都應(yīng)作為測試用例。比如,學(xué)生成績?yōu)閇0,100],應(yīng)取-1、0、1、99、100、101共6個值作為測試用例。2)如果輸入條件指定了輸入數(shù)據(jù)的個數(shù)范圍,則按最大、最小個數(shù)及其左右的個數(shù)各設(shè)計一個測試用例。比如,一個輸入文件應(yīng)包括1~255個記錄,則應(yīng)分別設(shè)計輸入0個、1個、2個、254個、255個、256個記錄的測試用例。3)將規(guī)則1)和2)應(yīng)用于輸出條件,即設(shè)計測試用例使輸出值達到邊界值及其左右的值。邊界值分析方法設(shè)計測試用例的經(jīng)驗性原則1)如果輸入條件指定了613.錯誤推測錯誤推測法的基本思想是:程序測試員通過已經(jīng)掌握的測試理論和實際測試中積累的經(jīng)驗,推測程序在哪些情況下可能發(fā)生錯誤,并將可能發(fā)生錯誤的情況列出,然后為每一可能發(fā)生錯誤的情況各設(shè)計一個測試用例。3.錯誤推測錯誤推測法的基本思想是:程序測試員通過已經(jīng)掌握的623.錯誤推測例如,測試一個對線性表(比如數(shù)組)進行排序的程序,可推測列出以下幾項需要特別測試的情況:1)輸入的線性表為空表;2)表中只含有一個元素;3)輸入表中所有元素已排好序;4)輸入表已按逆序排好;5)輸入表中部分或全部元素相同。于是,可以針對以上列出的每一種情況各設(shè)計一個測試用例。3.錯誤推測例如,測試一個對線性表(比如數(shù)組)進行排序的程序634.組合數(shù)據(jù)測試實踐表明,在單個測試用例沒有測試出錯誤的情況下,采用測試數(shù)據(jù)的某種組合卻可能檢測出程序中隱藏很深的錯誤。組合數(shù)據(jù)測試法可以采用的有效工具有判定表、判定樹等。以判定表為例,即列出輸入數(shù)據(jù)的各種組合情況和程序相應(yīng)的動作、可能的輸出結(jié)果之間的對應(yīng)關(guān)系,然后為判定表的每一列至少設(shè)計一個測試用例。4.組合數(shù)據(jù)測試實踐表明,在單個測試用例沒有測試出錯誤的情況64課程名稱:軟件工程第24講班級:日期:教室:教學(xué)題目:12.3軟件測試過程12.4調(diào)試12.5測試工具教學(xué)目的:掌握軟件的測試過程、調(diào)試的概念和策略,了解自動測試工具和調(diào)試工具。教學(xué)重點:基本路徑測試、黑盒測試技術(shù)教學(xué)難點:基本路徑測試。教具:多媒體教室、電子教案作業(yè):課程名稱:軟件工程第24講6512.3軟件測試過程從宏觀的角度講,軟件測試過程一般可劃分為單元測試、集成測試、驗收測試和系統(tǒng)測試等幾個主要測試階段。對于每一個測試階段,都應(yīng)包含制定測試計劃、設(shè)計測試用例、測試實施和測試結(jié)果的收集評估等。其中,測試計劃應(yīng)包括具體的測試步驟、工作量、進度和資源等。在測試的各個階段,應(yīng)適宜地選擇黑盒測試和白盒測試方法,由開發(fā)人員和一個獨立的測試小組單獨、分別或共同完成測試任務(wù),必要時還應(yīng)有用戶參加。12.3軟件測試過程從宏觀的角度講,軟件測試過程一般可劃6612.3.1單元測試單元測試的測試對象——程序模塊。單元測試的依據(jù)——根據(jù)詳細設(shè)計的描述制定的單元測試計劃。單元測試——多采用白盒測試技術(shù)。單元測試——可以并行進行。12.3.1單元測試單元測試的測試對象——程序模塊。6712.3.1單元測試1.單元測試的任務(wù)1)模塊接口測試2)模塊局部數(shù)據(jù)結(jié)構(gòu)的測試3)模塊中所有獨立路徑的測試4)模塊中各條錯誤處理路徑的測試5)模塊邊界條件的測試12.3.1單元測試1.單元測試的任務(wù)681)模塊接口測試①輸入的實參與本模塊的形參在個數(shù)、類型、順序、量綱上是否一致;②調(diào)用其他模塊時所給實際參數(shù)與被調(diào)模塊的形式參數(shù)在個數(shù)、類型、順序、量綱上是否一致;③調(diào)用預(yù)定義函數(shù)時所用參數(shù)的個數(shù)、類型、順序、返回值的類型等是否正確;④是否存在與當(dāng)前入口點無關(guān)的參數(shù)引用;⑤是否修改了只讀型參數(shù);1)模塊接口測試①輸入的實參與本模塊的形參在個數(shù)、類型、順序691)模塊接口測試⑥各個模塊對全局變量的定義和引用是否保持一致;⑦是否把某些約束作為參數(shù)傳遞。⑧如果模塊內(nèi)包括外部輸入輸出,還應(yīng)測試文件屬性、文件打開/關(guān)閉語句、格式說明、輸入輸出語句、緩沖區(qū)大小與記錄長度是否匹配、是否處理了文件尾、輸出信息中是否存在文字錯誤等方面的內(nèi)容。1)模塊接口測試⑥各個模塊對全局變量的定義和引用是否保持一致702)模塊局部數(shù)據(jù)結(jié)構(gòu)的測試主要的測試內(nèi)容有:①不適合或不相容的類型說明;②變量名不正確(拼寫或截斷錯誤等);③變量無初值或初始化、缺省值有錯;④出現(xiàn)上溢出、下溢出、地址異常等。2)模塊局部數(shù)據(jù)結(jié)構(gòu)的測試主要的測試內(nèi)容有:713)模塊中所有獨立路徑的測試單元測試旨在找出如下錯誤:①計算中常見的錯誤,有:運算符優(yōu)先級錯誤、混合運算類型匹配錯誤、變量初值錯、達不到精度、表達式不正確等。②不正確的比較判斷和不恰當(dāng)?shù)目刂屏鞒R姷腻e誤,有:被比較的對象的類型不匹配、錯誤地使用邏輯運算符及其優(yōu)先級、計算誤差引起的判斷錯誤、循環(huán)終止條件不合適、錯誤地修改了循環(huán)變量、迭代發(fā)散時不能退出循環(huán)等。3)模塊中所有獨立路徑的測試單元測試旨在找出如下錯誤:724)模塊中各條錯誤處理路徑的測試我們希望程序模塊具有較強的容錯能力,這就需要在設(shè)計時能預(yù)見各種出錯條件,并預(yù)先設(shè)計好各種出錯處理通路,以便在用戶出現(xiàn)錯誤時系統(tǒng)能給出恰當(dāng)?shù)奶崾径皇瓜到y(tǒng)失效。出錯處理路徑測試主要測試的錯誤有:①異常處理不當(dāng);②在程序自定義的出錯處理程序段運行之前系統(tǒng)已介入;③顯示的出錯信息難以理解或未能提供足夠的錯誤定位信息;④顯示的錯誤與實際發(fā)生的錯誤不符等。4)模塊中各條錯誤處理路徑的測試我們希望程序模塊具有較強的容735)模塊邊界條件的測試模塊邊界條件的測試是單元測試中最后、也是最重要的一項測試任務(wù),因為程序最容易在邊界上出錯??梢圆捎眠吔缰捣治黾夹g(shù)針對邊界值及其左、右值設(shè)計測試用例,很有可能檢測出新的錯誤。5)模塊邊界條件的測試模塊邊界條件的測試是單元測試中最后、也742.單元測試的步驟通常,單元測試在編碼階段進行。在源程序代碼編制完成并經(jīng)過編譯檢查和評審后,就可以開始進行單元測試。測試用例的設(shè)計應(yīng)與評審工作相結(jié)合,根據(jù)測試計劃和詳細設(shè)計信息設(shè)計測試數(shù)據(jù),并應(yīng)給出對應(yīng)的期望結(jié)果。測試時需要為被測模塊編制:一個驅(qū)動模塊(drivermodule)——用來模擬被測模塊的上級調(diào)用模塊,用它接收測試數(shù)據(jù),并傳送給被測模塊,接收測試結(jié)果并輸出。若干個樁模塊(stubmodule)——也稱為存根模塊,用來代替被測模塊所調(diào)用的子模塊。其作用是為被測模塊提供所需要的信息,因此,越簡單越好。2.單元測試的步驟通常,單元測試在編碼階段進行。在源程序代碼75圖14-3-1軟件層次結(jié)構(gòu)圖圖14-3-2模塊A的單元測試環(huán)境測試軟件(指驅(qū)動模塊和樁模塊)并不作為軟件產(chǎn)品的一部分提交給用戶。有些模塊用單元測試的方法不能進行充分的測試,可在集成測試的過程中完成詳盡的測試。提高模塊內(nèi)聚度可簡化單元測試過程。MABCDEF驅(qū)動模塊A樁模塊1樁模塊2樁模塊3測試用例測試結(jié)果圖14-3-1軟件層次結(jié)構(gòu)圖圖14-3-7612.3.2集成測試集成測試—將軟件組裝成系統(tǒng)的一種測試技術(shù)。因此,又稱為組裝測試或綜合測試。集成測試旨在發(fā)現(xiàn)與接口有關(guān)的錯誤。這些錯誤包括:①數(shù)據(jù)通過接口時會丟失;②一個模塊的功能對另一個模塊產(chǎn)生了不利影響;③幾個子功能組合起來沒有實現(xiàn)主功能;④全局數(shù)據(jù)結(jié)構(gòu)出現(xiàn)錯誤;⑤誤差的不斷積累達到不能接受的程度。集成測試有兩種集成方式:非增量集成方式;增量集成方式。12.3.2集成測試集成測試—將軟件組裝成系統(tǒng)的一種771.非增量集成方式非增量集成方式是將經(jīng)過單元測試的所有模塊一次性全部組裝起來,然后進行整體測試,最后得到所要求的軟件系統(tǒng)。這種集成方式容易出現(xiàn)混亂,開始可能遇到一大堆錯誤,錯誤定位非常困難,新舊錯誤交織在一起,會使測試變得更加困難。因此,一般不應(yīng)采用這種集成方式。1.非增量集成方式非增量集成方式是將經(jīng)過單元測試的所有模塊一782.增量集成方式可分為自頂向下集成和自底向上集成兩種方法。1)自頂向下集成自頂向下集成方式是從主控模塊開始,按照軟件的控制層次結(jié)構(gòu),以深度優(yōu)先或廣度優(yōu)先的策略,逐步把各個模塊組裝在一起。2.增量集成方式可分為自頂向下集成和自底向上集成兩種方法。79自頂向下集成測試的具體步驟①以主控模塊作為驅(qū)動模塊,其直接調(diào)用的下屬模塊都用“樁模塊”代替;②依據(jù)所選用的集成策略(深度優(yōu)先或廣度優(yōu)先)所規(guī)定的次序,每次只用一個實際模塊替代一個對應(yīng)的樁模塊;③每結(jié)合進一個模塊立即測試一遍;④為了檢測加入新模塊是否引入了新的錯誤,每次都需要進行回歸測試(即部分或全部地重復(fù)以前做過的測試)。重復(fù)執(zhí)行步驟②、③、④,每重復(fù)一次,增加一個模塊,直至構(gòu)造起整個軟件結(jié)構(gòu)為止。自頂向下集成測試的具體步驟①以主控模塊作為驅(qū)動模塊,其直接調(diào)80圖14-3-3被測軟件

系統(tǒng)結(jié)構(gòu)圖深度優(yōu)先策略:①以M1作為驅(qū)動模塊,首先將模塊M2加入其中,此時模塊M3、M4、M5、M6分別以樁模塊S3、S4、S5、S6代替,于是對由M1、M2、S3、S4、S5、S6組成的子系統(tǒng)測試一遍;M1M2M4M5M6M7M8M3M1M2S4S3S5S6圖14-3-3被測軟件

81深度優(yōu)先策略:②用M5代替S5,并將M8用樁模塊S8代替,對由M1、M2、M5、S3、S4、S8、S6組成的子系統(tǒng)再測試一遍;M1M2M4M5M6M7M8M3M1M2S4S3M5S6S8深度優(yōu)先策略:②用M5代替S5,并將M8用樁模塊S8代替,82深度優(yōu)先策略:③用M8代替S8,對由M1、M2、M5、M8、S3、S4、、S6組成的子系統(tǒng)再測試一遍;M1M2M4M5M6M7M8M3M1M2S4S3M5S6M8深度優(yōu)先策略:③用M8代替S8,對由M1、M2、M5、M83深度優(yōu)先策略:④用M6代替S6,對由M1、M2、M5、M8、M6、S3、S4組成的子系統(tǒng)再測試一遍;M1M2M4M5M6M7M8M3M1M2S4S3M5M6M8深度優(yōu)先策略:④用M6代替S6,對由M1、M2、M5、M84深度優(yōu)先策略:⑤用M3代替S3,并以S7代替M7,對由M1、M2、M5、M8、M6、M3、S7、S4組成的子系統(tǒng)再測試一遍;M1M2M4M5M6M7M8M3M1M2S4M3M5M6M8S7深度優(yōu)先策略:⑤用M3代替S3,并以S7代替M7,對由M185深度優(yōu)先策略:⑥用M7代替S7,對由M1、M2、M5、M8、M6、M3、M7、S4組成的子系統(tǒng)再測試一遍;M1M2M4M5M6M7M8M3M1M2S4M3M5M6M8M7深度優(yōu)先策略:⑥用M7代替S7,對由M1、M2、M5、M86深度優(yōu)先策略:⑦用M4代替S4,對由M1、M2、M5、M8、M6、M3、M7、M4組成的子系統(tǒng)再測試一遍;至此,整個系統(tǒng)測試完。M1M2M4M5M6M7M8M3M1M2M4M3M5M6M8M7深度優(yōu)先策略:⑦用M4代替S4,對由M1、M2、M5、M87廣度優(yōu)先策略廣度優(yōu)先策略——沿控制層次結(jié)構(gòu)水平地向下移動,按一層一層的順序?qū)⒛K一個個地集成起來。如圖的集成的順序為M1、M2、M3、M4、M5、M6、M7、M8,在集成的過程中也需樁模塊的配合。M1M2M4M5M6M7M8M3廣度優(yōu)先策略廣度優(yōu)先策略——沿控制層次結(jié)構(gòu)水平地向下移動,按88自頂向下集成的優(yōu)缺點自頂向下集成的特點是不需要驅(qū)動模塊,但需要大量的樁模塊。優(yōu)點是能夠盡早地驗證程序的主要控制和判斷機制,可以較早發(fā)現(xiàn)此類錯誤,從而減少以后的返工。缺點是在測試較高層模塊時,低層模塊采用較簡單的樁模塊來代替,不能反映實際情況,測試可能不充分。自頂向下集成的優(yōu)缺點自頂向下集成的特點是不需要驅(qū)動模塊,但需892)自底向上集成即從程序結(jié)構(gòu)的最底層模塊開始組裝和測試。這種測試需要一定數(shù)量的驅(qū)動模塊,而不需要樁模塊。自底向上集成測試的具體步驟:①把低層模塊組織成實現(xiàn)某個特定的軟件子功能的模塊群(modulecluster);②為每一個模塊群開發(fā)一個驅(qū)動模塊,控制測試數(shù)據(jù)的輸入和測試結(jié)果的輸出;③對每個模塊群進行測試;④去掉測試用的驅(qū)動模塊,用較高層模塊將幾個模塊群組成新的更大的模塊群。上述的②、③、④步重復(fù)執(zhí)行,直至整個程序構(gòu)造完畢。2)自底向上集成即從程序結(jié)構(gòu)的最底層模塊開始組裝和測試。這種90自底向上集成舉例圖14-3-4自底向上集成M1M2M3模塊群1模塊群2模塊群3自底向上集成舉例圖14-3-4自底向上集成M1M2M3模91自底向上集成舉例圖14-3-4自底向上集成M1M2M3D2D1D3模塊群1模塊群2模塊群3自底向上集成舉例圖14-3-4自底向上集成M1M2M3D92自底向上集成優(yōu)缺點優(yōu)點:①只需設(shè)計驅(qū)動模塊,不需要設(shè)計樁模塊,測試用例的設(shè)計也相對簡單。②由于涉及到復(fù)雜算法和直接輸入輸出的模塊最先得到組裝和測試,可以在早期解決這些最容易出問題的部分;③自底向上集成可以實施多個模塊并行測試。缺點:對高層控制與判斷進行測試的時間較晚,如果到測試的后期才發(fā)現(xiàn)整體存在較嚴重問題,就不得不進行較大的返工,此時代價將是巨大的。自底向上集成優(yōu)缺點優(yōu)點:933)混合式測試及重點測試自頂向下和自底向上兩種集成測試方法的優(yōu)缺點剛好相反,可結(jié)合起來使用,即對于上層模塊采用自頂向下的方法,而對于下層模塊采用自底向上的方法,這樣不但可以大大減少了開發(fā)驅(qū)動模塊和樁模塊的數(shù)量,還可以充分發(fā)揮各自的優(yōu)點。在集成測試過程中應(yīng)對關(guān)鍵模塊進行重點測試。關(guān)鍵模塊是指具有如下一個或多個特征的模塊:①對應(yīng)多條需求;②具有高層控制功能;③復(fù)雜、易出錯;④有特殊性能要求。對關(guān)鍵模塊應(yīng)盡早測試,并應(yīng)進行反復(fù)的回歸測試。3)混合式測試及重點測試自頂向下和自底向上兩種集成測試方法的943.集成測試文檔集成測試文檔即測試說明書(testspecifications)應(yīng)給出集成的總體規(guī)劃和某些特殊測試的描述。它將作為軟件配置的一部分提交給用戶。測試說明書的主要內(nèi)容提綱如下:3.集成測試文檔集成測試文檔即測試說明書(testspec95測試說明書的主要內(nèi)容提綱1)測試范圍2)測試計劃A.測試的各個階段和劃分模塊群情況B.進度安排C.開銷軟件(驅(qū)動和樁模塊)D.環(huán)境和資源測試說明書的主要內(nèi)容提綱1)測試范圍96測試說明書的主要內(nèi)容提綱3)各個模塊群測試過程的描述,包括:A.集成的順序①用途②被測模式B.模塊群中各模塊單元測試的情況①模塊的測試描述②開銷軟件描述③期望的結(jié)果測試說明書的主要內(nèi)容提綱3)各個模塊群測試過程的描述,包括:97測試說明書的主要內(nèi)容提綱C.測試環(huán)境①特殊工具和技術(shù)②開銷軟件的描述D.測試用例E.模塊群的期望結(jié)果等4)實際測試結(jié)果5)參考文獻6)附錄。測試說明書的主要內(nèi)容提綱C.測試環(huán)境9812.3.3驗收測試又稱為確認測試。確認測試是一種驗收形式的測試,主要是檢查軟件是否滿足軟件需求規(guī)格說明書中的確認標(biāo)準(zhǔn),即測試軟件能否按照合同的要求運行。12.3.3驗收測試又稱為確認測試。確認測試是一種驗收形991.驗收測試的實施驗收測試需要采用一系列的黑盒測試來完成。參加人員有:專門的測試人員,必須有用戶或客戶參加。文檔:需求規(guī)格說明書、用戶手冊等,應(yīng)事先制定測試計劃,確定測試的種類、測試進度、設(shè)計具體的測試用例。軟件驗收測試的中心任務(wù)是測試軟件是否滿足合同規(guī)定的所有功能和性能,文檔資料是否齊全,人機界面以及可移植性、兼容性、可維護性、容錯能力等方面是否達到了用戶的期望。1.驗收測試的實施驗收測試需要采用一系列的黑盒測試來完成。1001.驗收測試的實施經(jīng)過驗收測試后,其結(jié)果可能是以下兩種情況之一:1)功能、性能等各項指標(biāo)滿足需求規(guī)格說明的要求,用戶可以接受;2)功能、性能等各項指標(biāo)不滿足需求規(guī)格說明的全部要求,用戶不能接受。對于第二種結(jié)果,應(yīng)提交一份問題分析報告。1.驗收測試的實施經(jīng)過驗收測試后,其結(jié)果可能是以下兩種情況之1012.軟件配置復(fù)審軟件配置復(fù)審是驗收測試的重要環(huán)節(jié)之一。軟件配置復(fù)審的任務(wù)是審查軟件配置(組成程序、所有文檔資料、數(shù)據(jù)結(jié)構(gòu)的所有項目)的正確性、完整性和一致性,以便確保軟件配置齊全、分類有序,并包括軟件維護所必需的細節(jié),從而為以后的軟件維護工作奠定了基礎(chǔ)。2.軟件配置復(fù)審軟件配置復(fù)審是驗收測試的重要環(huán)節(jié)之一。軟件配1023.α、β測試要驗證所開發(fā)的軟件是否真正滿足最終用戶的要求,就應(yīng)由用戶在其實際工作的環(huán)境中進行一系列的“驗收測試”。但一方面用戶進行“驗收測試”可能導(dǎo)致開發(fā)延期,另一方面是一個軟件產(chǎn)品不可能由每個用戶驗收。因此,通常的做法是采用“α、β測試”的方法。3.α、β測試要驗證所開發(fā)的軟件是否真正滿足最終用戶的要求,1031)α測試所謂α測試,可以是由用戶在開發(fā)環(huán)境下進行的一種測試,也可以是軟件公司內(nèi)部的“用戶”在模擬實際操作環(huán)境下進行的一種測試。被測試的是即將面市的軟件產(chǎn)品的α版本。α測試是在受控制的環(huán)境下進行的測試,其目的是檢測軟件產(chǎn)品的功能(Function)、可使用性(Usability)、可靠性(Reliability)、性能(Performance)和支持(Support),即FURPS,特別是產(chǎn)品的界面和特色。參加α測試的人員是除了開發(fā)人員之外最先“使用”產(chǎn)品的人員,他們提出的修改意見是很有價值的。經(jīng)過α測試并對軟件進行修改后,所生成的軟件產(chǎn)品稱為β版本。1)α測試所謂α測試,可以是由用戶在開發(fā)環(huán)境下進行的一種測試1042)β測試β測試是由軟件的多個用戶在用戶的實際使用環(huán)境下對軟件產(chǎn)品的β版本進行的測試。β測試,開發(fā)者不在現(xiàn)場,要求用戶記錄所遇到的問題,并定期向開發(fā)者報告異常情況、提出意見和建議,供開發(fā)者修改、完善。β測試將進一步檢測軟件的FURPS,并著重于產(chǎn)品的支持性(包括文檔、用戶培訓(xùn)等)。在β測試階段,軟件產(chǎn)品的所有手冊應(yīng)完全定稿,可以向用戶提交最終的軟件產(chǎn)品了。2)β測試β測試是由軟件的多個用戶在用戶的實際使用環(huán)境下對軟10512.3.4系統(tǒng)測試軟件開發(fā)完畢,就應(yīng)和系統(tǒng)硬件、數(shù)據(jù)庫等其他系統(tǒng)要素集成為一個完整的系統(tǒng)。在集成的過程中,要進行一系列的系統(tǒng)調(diào)試和測試,以便驗證各個系統(tǒng)要素能否在軟件的控制下有條不紊地工作,實現(xiàn)系統(tǒng)規(guī)格說明中所規(guī)定的系統(tǒng)功能、性能等系統(tǒng)需求。系統(tǒng)測試需要有硬件工程師、軟件工程師、數(shù)據(jù)庫工程師、專業(yè)領(lǐng)域的專家等各類技術(shù)人員參加,協(xié)同完成調(diào)試和測試任務(wù)。12.3.4系統(tǒng)測試軟件開發(fā)完畢,就應(yīng)和系統(tǒng)硬件、數(shù)據(jù)庫10612.3.4系統(tǒng)測試在進行系統(tǒng)測試之前,軟件工程師應(yīng)該完成以下幾項工作:1)參與系統(tǒng)測試的規(guī)劃和設(shè)計,從軟件的角度保證系統(tǒng)測試的合理性;2)設(shè)計測試用例,模擬錯誤數(shù)據(jù)和軟件界面可能發(fā)生的錯誤,記錄測試結(jié)果,為系統(tǒng)測試提供支持和幫助;3)為測試軟件系統(tǒng)的輸入信息設(shè)計出錯處理通路。系統(tǒng)測試應(yīng)根據(jù)系統(tǒng)規(guī)格說明書的驗收準(zhǔn)則進行各種不同的測試,目的是使系統(tǒng)充分運行,驗證其是否實現(xiàn)了系統(tǒng)需求。12.3.4系統(tǒng)測試在進行系統(tǒng)測試之前,軟件工程師應(yīng)該完107幾類系統(tǒng)測試簡介①功能測試:許多系統(tǒng)功能只有在系統(tǒng)環(huán)境下進行測試,才能驗證是否滿足系統(tǒng)功能需求。②性能測試:在整個系統(tǒng)的真實環(huán)境下,必需進行系統(tǒng)性能測試,以便全面、可靠地測試系統(tǒng)的運行性能。③恢復(fù)測試:主要是驗證系統(tǒng)的容錯能力以及在發(fā)生錯誤導(dǎo)致系統(tǒng)失敗后系統(tǒng)的恢復(fù)能力。測試的方法是采取各種方法使系統(tǒng)失敗,再驗證系統(tǒng)能否按照預(yù)定的要求盡快恢復(fù)。幾類系統(tǒng)測試簡介①功能測試:許多系統(tǒng)功能只有在系統(tǒng)環(huán)境下進行108幾類系統(tǒng)測試簡介④安全測試:檢查系統(tǒng)對非法入侵者的防范能力??捎蓽y試人員扮演入侵者的角色。⑤容量測試:例如使操作系統(tǒng)作業(yè)隊列“滿員”,考核是否能處理規(guī)定數(shù)量的任務(wù)。⑥壓力測試:對負荷可變的系統(tǒng)驗證其在超負荷的情況下的承受能力。⑦可用性測試:對接口結(jié)構(gòu)、輸出量定義、出錯信息、精度、響應(yīng)方式的可用性的考核。⑧存儲器測試:考核有關(guān)存儲器的指標(biāo),如緩沖區(qū)的大小等。⑨兼容性/轉(zhuǎn)換性能測試:用于測試程序的兼容性和變換規(guī)程。幾類系統(tǒng)測試簡介④安全測試:檢查系統(tǒng)對非法入侵者的防范能力。109幾類系統(tǒng)測試簡介⑩構(gòu)成測試:對程序本身每種可能的構(gòu)成進行測試,至少對每種硬設(shè)備,程序的最小和最大構(gòu)成進行測試。⑾可靠性測試:按照規(guī)格說明的規(guī)定,考核程序的可靠性。⑿可服務(wù)性測試:對系統(tǒng)的服務(wù)性手段如診斷程序、維護規(guī)程等的測試。⒀資料測試:測試用戶資料的準(zhǔn)確性。⒁規(guī)程測試:測試各類人員應(yīng)執(zhí)行的規(guī)程。⒂安裝測試:對安裝規(guī)程的考核測試。幾類系統(tǒng)測試簡介⑩構(gòu)成測試:對程序本身每種可能的構(gòu)成進行測試11012.4調(diào)試

12.4.1調(diào)試的概念

調(diào)試則是在進行了一次成功的測試之后立即開始的。調(diào)試的目的是確定錯誤的位置和引起錯誤的原因,并加以改正。因此,又稱為排錯或糾錯。實踐表明,錯誤定位是軟件工程中最困難的工作,確定發(fā)生錯誤的位置和內(nèi)在原因所需的工作量幾乎占整個調(diào)試工作量的90%。12.4調(diào)試

12.4.1調(diào)試的概念調(diào)試則是在進11112.4.1調(diào)試的概念隱藏在程序中的錯誤的特殊的性質(zhì)包括:①錯誤的表現(xiàn)遠離引起錯誤的位置和內(nèi)在原因,尤其對高度耦合的程序結(jié)構(gòu)更是如此;②某些錯誤現(xiàn)象可能是假象;③糾正一個錯誤可能引起多個錯誤,也可能掩蓋其他錯誤;④由于操作員的疏忽致使錯誤現(xiàn)象無法重現(xiàn),很難追蹤;⑤錯誤可能不是直接由程序引起的;⑥某些輸入條件難于精確地再構(gòu)造(如某些實時系統(tǒng)的輸入次序不確定);⑦錯誤現(xiàn)象時有時無。12.4.1調(diào)試的概念隱藏在程序中的錯誤的特殊的性質(zhì)包括11212.4.2調(diào)試策略分為三類:原始類;歸納法排除類;回溯類。演繹法1.原始類(bruteforce)其主要思想是“通過程序運行現(xiàn)場找錯”。例如輸出存儲器、寄存器的內(nèi)容,在程序中插入打印語句等等。這種方法的效率低,還需要修改程序,更依賴測試人員的能力和經(jīng)驗。12.4.2調(diào)試策略分為三類:原始類;11312.4.2調(diào)試策略2.歸納法調(diào)試歸納法調(diào)試是從測試結(jié)果發(fā)現(xiàn)的錯誤入手,收集正常執(zhí)行或出錯的數(shù)據(jù),分析他們之間的關(guān)系,提出出錯原因的假設(shè),然后再驗證或否定這個假設(shè)。其具體步驟如下:1)收集數(shù)據(jù):收集程序做對了什么和做錯了什么的有關(guān)全部數(shù)據(jù);2)整理、分析數(shù)據(jù):對收集的數(shù)據(jù)進行分析、比較和整理,注意觀察數(shù)據(jù)間的關(guān)系,從錯誤的癥狀中發(fā)現(xiàn)線索;12.4.2調(diào)試策略2.歸納法調(diào)試1142.歸納法調(diào)試3)提出假設(shè):對這些線索進行研究和推測,提出有關(guān)錯誤產(chǎn)生的原因和部位的一個或多個假設(shè)。如果有多個假設(shè),首先選擇可能性最大的一個。4)證明假設(shè):由數(shù)據(jù)驗證或反正假設(shè),如果假設(shè)得到證實,據(jù)此閱讀程序找出出錯原因和位置并進行改正;如果無法驗證,則可能假設(shè)錯誤或有多重錯誤,需要提出新的假設(shè),進行新的驗證。2.歸納法調(diào)試3)提出假設(shè):對這些線索進行研究和推測,提出有11512.4.2調(diào)試策略3.演繹法調(diào)試演繹法是枚舉所有可能引起出錯的原因作為假設(shè),然后從中排除不可能發(fā)生的原因和假設(shè),對余下的假設(shè)進行不斷地驗證和改進,最后從中推演出出錯的原因和部位。4.回溯法調(diào)試對小型程序進行調(diào)試,回溯法是一種有效的方法。該方法是從發(fā)現(xiàn)錯誤現(xiàn)象的地方出發(fā),人工沿程序的控制流程向回追蹤,直至找到產(chǎn)生錯誤的原因為止。但是,當(dāng)程序的規(guī)模較大時,由于需回溯的路線顯著增加,因此無法做到完全回溯,只好采用其他的調(diào)試方法。12.4.2調(diào)試策略3.演繹法調(diào)試11612.5測試工具

12.5.1自動測試工具1)模塊驅(qū)動工具(moduleanimatetool)2)靜態(tài)分析器(staticanalyzers);3)測試覆蓋監(jiān)視器;4)程序正確性證明器;5)測試數(shù)據(jù)生成器(testdatagenerators);6)環(huán)境模擬器;此外,還有:代碼審查器、測試文件產(chǎn)生器、測試驗證器、符號處理系統(tǒng)、輸出比較器、測試套具,等等。12.5測試工具

12.5.1自動測試工具1)模11712.5.2調(diào)試工具在早期,調(diào)試工具用符號調(diào)試器。目前的大多數(shù)程序設(shè)計環(huán)境,如VB、VC++、BorlandC++Builder、PB、C#等都是帶有CASE工具的集成開發(fā)環(huán)境,即將編輯、編譯、連接、運行、調(diào)試、打包、項目管理、文件管理、部件管理、數(shù)據(jù)庫等多個工具集成在一起。其中的調(diào)試工具常見的功能有設(shè)置斷點,單步執(zhí)行,跟蹤,查看、修改變量或表達式的值等等。12.5.2調(diào)試工具在早期,調(diào)試工具用符號調(diào)試器。118習(xí)題12.6假設(shè)某程序讀入三個整數(shù),分別解釋為三角形的各邊,并據(jù)此打印信息,說明三角形是普通的、等腰的或等邊的。為此程序設(shè)計一組有效的測試用例。12.7設(shè)計并實現(xiàn)上題說明的程序(必要的地方增加出錯處理),用基本路徑測試法設(shè)計測試用例,實際測試和調(diào)試后總結(jié)所得到的結(jié)果。習(xí)題12.6假設(shè)某程序讀入三個整數(shù),分別解釋為三角形的各119解:1)程序流程圖如下:輸入a,b,ca+b<=c|||a-b|>=ca==ba<=0||b<=0||c<=0輸入a,b,c輸出不是a==c輸出等邊輸出等腰a==c輸出等腰b==c輸出等腰輸出普通FTTTTTTFFFFF開始結(jié)束12、3和456和789101112131415161718解:1)程序流程圖如下:輸入a,b,ca+b<=c|||1202)C語言程序如下:#include"math.h"main(){inta,b,c;printf("pleaseinputa,b,c:

");scanf("%d%d%d

",&a,&b,&c);while(a<=0||b<=0||c<=0){printf("a,b,cmustbe>0!\npleaseinputa,b,c:

");scanf("%d%d%d

",&a,&b,&c);}if(a+b<=c||abs(a-b)>=c)printf(“Itisnotatriangle!\n

");elseif(a==b)if(a==c)printf("Itisaequilateraltriangle!\n

");elseprintf("Itisaisoscelestriangle!\n

");elseif(a==c)printf("Itisaisoscelestriangle!\n

");elseif(b==c)printf("Itisaisoscelestriangle!\n

");elseprintf("Itisageneraltriangle!\n

");}2)C語言程序如下:1213)程序圖(流圖)如下:4)求出巡回秩數(shù):①V(G)=E-N+2=26-18+2=10②V(G)=P+1=9+1=10其中結(jié)點2、3、4、6、7、9、10、13、15是謂詞結(jié)點③V(G)=10(個區(qū)域)181716151413121110987654321R3R1R2R4R5R6R7R8R9R103)程序圖(流圖)如下:1817161514131211101225)確定基本路徑集合(10條)路徑1:1–2–5–2路徑2:1–2–3–5–2路徑3:1–2–3–4–5–2路徑4:1–2–3–4–6–8–18路徑5:1–2–3–4–6–7–8–18路徑6:1–2–3–4–6–7–9–10–11–18路徑7:1–2–3–4–6–7–9–10–12–18路徑8:1–2–3–4–6–7–9–13–14–18路徑9:1–2–3–4–6–7–9–13–15–16–18路徑10:1–2–3–4–6–7–9–13–15–17–185)確定基本路徑集合(10條)1236)為每一條獨立路徑設(shè)計設(shè)計用例:①路徑1的測試用例:a=–3,b=4,c=5;期望結(jié)果:輸出出錯:a,b,cmustbe>0!

提示輸入:pleaseinputa,b,c:②路徑2的測試用例:a=3,b=–4,c=5;期望結(jié)果:輸出出錯:a,b,cmustbe>0!

提示輸入:pleaseinputa,b,c:③路徑3的測試用例:a=3,b=4,c=–5;期望結(jié)果:輸出出錯:a,b,cmustbe>0!

提示輸入:pleaseinputa,b,c:④路徑4的測試用例:a=3,b=1,c=5;期望結(jié)果:輸出:Itisnotatriangle!⑤路徑5的測試用例:a=3,b=7,c=2;期望結(jié)果:輸出:Itisnotatriangle!6)為每一條獨立路徑設(shè)計設(shè)計用例:124⑥路徑6的測試用例:a=3,b=3,c=3;期望結(jié)果:輸出:Itisaequilateraltriangle!⑦路徑7的測試用例:a=3,b=3,c=5;期望結(jié)果:輸出:Itisaisoscelestriangle!⑧路徑8的測試用例:a=3,b=4,c=3;期望結(jié)果:輸出:Itisaisoscelestriangle!⑨路徑9的測試用例:a=3,b=4,c=4;期望結(jié)果:輸出:Itisaisoscelestriangle!⑩路徑10的測試用例:a=3,b=4,c=5;期望結(jié)果:輸出:Itisageneraltriangle!⑥路徑6的測試用例:a=3,b=3,c=125第12章 軟件測試軟件測試是對軟件規(guī)格說明、軟件設(shè)計和編碼的最全面也是最后的審查。通過軟件測試,可以發(fā)現(xiàn)軟件中絕大部分潛伏的錯誤,從而可以大大提高軟件產(chǎn)品的正確性、可靠性,進而可顯著提高產(chǎn)品質(zhì)量。統(tǒng)計表明,軟件測試工作往往占軟件開發(fā)總工作量的40%以上。甚至3~5倍以上。第12章 軟件測試軟件測試是對軟件規(guī)格說明、軟件設(shè)計和編碼的126第12章 軟件測試本章將介紹:軟件測試的基本知識;軟件測試的常用方法和技術(shù);軟件測試的過程;軟件的調(diào)試與排錯技術(shù);軟件測試的工具。第12章 軟件測試本章將介紹:127第12章 軟件測試12.1軟件測試的基本知識12.2軟件測試技術(shù)12.3軟件測試過程12.4調(diào)試12.5測試工具第12章 軟件測試12.1軟件測試的基本知識12812.1軟件測試的基本知識軟件測試是執(zhí)行程序發(fā)現(xiàn)并排除程序中潛伏的錯誤的過程。軟件測試是軟件投入運行前,對軟件需求分析、設(shè)計、實現(xiàn)的強有力的最終審查。12.1軟件測試的基本知

溫馨提示

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

評論

0/150

提交評論