軟件工程第七講實現(共133張)_第1頁
軟件工程第七講實現(共133張)_第2頁
軟件工程第七講實現(共133張)_第3頁
軟件工程第七講實現(共133張)_第4頁
軟件工程第七講實現(共133張)_第5頁
已閱讀5頁,還剩127頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

軟件工程第七講實現第一頁,共133頁。目標理解語用的重要性理解測試的目的理解軟件可靠性掌握測試技術設計測試用例第二頁,共133頁。第7章實現(I)通常把編碼和測試統稱為實現。程序的質量主要取決于軟件設計的質量。所選用的程序設計語言的特點及編碼風格也將對程序的可靠性、可讀性、可測試性和可維護性產生深遠的影響。第三頁,共133頁。第7章實現(II)測試的目的就是在軟件投入生產性運行之前,盡可能多地發現軟件中的錯誤。目前軟件測試仍然是保證軟件質量的關鍵步驟,它是對軟件規格說明、設計和編碼的最后復審。軟件測試在軟件生命周期中橫跨兩個階段。單元測試:通常在編寫出每個模塊之后就對它做必要的測試綜合測試:在這個階段結束之后,對軟件系統還應該進行各種綜合測試第四頁,共133頁。第7章實現(III)通過測試發現錯誤之后還必須診斷并改正錯誤,這就是調試的目的。調試是測試階段最困難的工作。軟件可靠性模型使用故障率數據,估計軟件將來出現故障的情況并預測軟件的可靠性。第五頁,共133頁。7.1編碼7.1.1選擇程序設計語言7.1.2編碼風格第六頁,共133頁。7.1.1選擇程序設計語言(I)編碼之前的一項重要工作就是選擇一種適當的程序設計語言。在選擇的時候我們要考慮各種方面的限制。下面是主要的實用標準:(1)系統用戶的要求。(2)可以得到的軟件工具。(3)程序員的知識。(4)軟件可移植性要求。(5)軟件的應用領域。第七頁,共133頁。7.1.1選擇程序設計語言(I)編碼之前的一項重要工作就是選擇一種適當的程序設計語言。在選擇的時候我們要考慮各種方面的限制。下面是主要的實用標準:(1)系統用戶的要求。(2)可以得到的軟件工具。(3)程序員的知識。(4)軟件可移植性要求。(5)軟件的應用領域。第八頁,共133頁。7.1.2編碼風格(I)1、程序內部的文檔2、數據說明3、語句構造4、輸入輸出5、效率第九頁,共133頁。

程序內部文檔(I)所謂程序內部的文檔包括恰當的標識符、適當的注解和程序的視覺組織等等。1、標識符開發小組采取統一的命名規則(匈牙利命名法)使用可以準確說明變量/字段/類的完整的英文描述符。比如firstName,少用單變量名稱如l,t這樣的名字。采用該領域的術語。盡量不要生造詞匯。第十頁,共133頁。

程序內部文檔(II)采用大小寫混合,提高名字的可讀性。一般應該采用小寫字母,但是類和接口的名字的首字母,以及任何中間單詞的首字母應該大寫。如類名DBConnection,方法名getFirstName(),isAtEnd(),setFirstName(StringaName)等等盡量少用縮寫,但如果一定要使用,就要謹慎地使用。例如,想對單詞“number”采用縮寫,可從no或者num中選取一個,且只用這種形式。避免使用下劃線作為名字的首末字母。第十一頁,共133頁。

程序內部文檔-注釋(I)在每個模塊開始前有一段序言性的注釋,簡要描述模塊的功能、主要算法、接口、重要數據、版本、編寫(修改)時間、作者等。

/**INET AnimplementationoftheTCP/IPprotocolsuitefortheLINUXoperatingsystem.INETisimplementedusingtheBSDSocketinterfaceasthemeansofcommunicationwiththeuserlevel.* TheInternetProtocol(IP)module.*Version: $Id:ip_input.c,v1.401999/06/0910:10:55davemExp$*Authors: RossBiro,<bir7@leland.Stanford.Edu>* FredN.vanKempen,<waltje@uWalt.NL.Mugnet.ORG>* DonaldBecker,<becker@>* AlanCox,<Alan.Cox@>,…… */第十二頁,共133頁。

程序內部文檔-注釋(II)插在程序中間與一段程序代碼有關的注解,主要解釋包含這段代碼的必要性。/** DeliverIPPacketstothehigherprotocollayers.*/intip_local_deliver(structsk_buff*skb){…… /*Allprotocolschecked. *Ifthispacketwasabroadcast,wemay*not*replytoit,sincethat *causes(proven,grin)ARPstormsandaleakageofmemory(i.e.all *ICMPreplymessagesgetqueuedupfortransmission...) */……}第十三頁,共133頁。

程序內部文檔-注釋(III)應該用空格或空行清楚地區分注解和程序。程序清單的布局對于程序的可讀性也有很大影響,應該利用適當的階梯形式使程序的層次結構清晰明顯。第十四頁,共133頁。

數據說明數據說明的次序應該標準化。有次序就容易查閱,因此能夠加速測試、調試和維護的過程。當多個變量名在一個語句中說明時,應該按字母順序排列這些變量。如果設計時使用了一個復雜的數據結構,則應該用注解說明用程序設計語言實現這個數據結構的方法和特點。第十五頁,共133頁。

語句構造(I)構造語句時應該遵循的原則是,每個語句都應該簡單而直接。采用下述規則:不要為了節省空間而把多個語句寫在同一行;FORI:=1TON-1DOBEGINT:=I;FORJ:=I+1TONDOIFA[J]<A[T]THENT:=J;IFT≠ITHENBEGINWORK:=A[T];A[T]:=A[I];A[I]:=WORK;ENDEND;第十六頁,共133頁。

語句構造(II)FORI:=1TON-1DO//改進布局

BEGIN

T:=I;

FORJ:=I+1TONDO

IFA[J]<A[T]THENT:=J;

IFT≠ITHEN

BEGIN

WORK:=A[T];

A[T]:=A[I];

A[I]:=WORK;

END

END;第十七頁,共133頁。

語句構造(III)程序編寫首先應當考慮清晰性

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;第十八頁,共133頁。

語句構造(IV)盡量避免復雜的條件;盡量減少對“非”條件;避免大量使用循環嵌套和條件嵌套;利用括號使邏輯表達式或算術表達式的運算次序清晰直觀。第十九頁,共133頁。

輸入輸出在設計和編寫程序時應該考慮下述有關輸入輸出風格的規則:對所有輸入數據都進行檢驗;保持輸入格式簡單;明確提示交互式輸入的請求,詳細說明可用的選擇或邊界數值;當程序設計語言對格式有嚴格要求時,應保持輸入格式一致;設計良好的輸出報表;第二十頁,共133頁。

效率(I)效率主要指處理機時間和存儲器容量兩個方面。應該記住3條原則:首先,效率是性能要求。其次,效率是靠好設計來提高的。第三,程序的效率和程序的簡單程度是一致的,不要犧牲程序的清晰性和可讀性來不必要地提高效率。第二十一頁,共133頁。

效率(II)(1)程序運行時間應用下述規則:寫程序之前先簡化算術的和邏輯的表達式;仔細研究嵌套的循環,以確定是否有語句可以從內層往外移;盡量避免使用多維數組;盡量避免使用指針和復雜的表;使用執行時間短的算術運算;不要混合使用不同的數據類型;盡量使用整數運算和布爾表達式。第二十二頁,共133頁。main(){inti,j;longsum=0;for(i=1;i<=20;i++)for(j=1;j<=3;j++)sum=sum+(i+1)*(i+1)*(j+2);printf(“sum=%d\n”,sum);}

內循環次數

20X4=80

外循環次數

21

總循環次數

101

∑∑(i+1)2(j+2)

203

i=1j=1第二十三頁,共133頁。main(){inti,j;longsum=0;

for(j=1;j<=3;j++)for(i=1;i<=20;i++)sum=sum+(i+1)*(i+1)*(j+2);printf(“sum=%d\n”,sum);}

內循環次數

3X21=63

外循環次數

4

總循環次數

67第二十四頁,共133頁。main(){inti,j;longsum=0;

for(j=1;j<=3;j++)for(i=1;i<=20;i++)sum=sum+(i+1)*(i+1)*(j+2);printf(“sum=%d\n”,sum);}

j+2共計執行了

3X20=60次

第二十五頁,共133頁。應盡量把與循環變量無關的運算移到循環外去。main(){inti,j,k;longsum=0;

for(j=1;j<=3;j++){k=j+2;

for(i=1;i<=20;i++)sum=sum+(i+1)*(i+1)*k;}printf(“sum=%d\n”,sum);}

j+2共計執行了

3次

減少了57次第二十六頁,共133頁。

效率(III)(2)存儲器效率在大型計算機中必須考慮操作系統頁式調度的特點。如果要求使用最少的存儲器,應選用有緊縮存儲器特性的編譯程序,必要時可使用匯編。提高執行效率的技術也能提高存儲器效率。第二十七頁,共133頁。

效率(IV)(3)輸入輸出的效率簡單清晰同樣是提高人機通信效率的關鍵。硬件之間的通信效率是很復雜的問題,有些簡單的原則可以提高輸入輸出的效率。例如:所有輸入輸出都應該有緩沖,以減少用于通信的額外開銷;對輔存應選用最簡單的訪問方法;輔存的輸入輸出應該以信息組為單位進行;第二十八頁,共133頁。7.2軟件測試基礎7.2.1軟件測試的目標7.2.2軟件測試準則7.2.3測試方法7.2.4測試步驟7.2.5測試階段的信息流第二十九頁,共133頁。7.2軟件測試基礎暴露問題并不是軟件測試的最終目的,發現問題是為了解決問題測試階段的根本目標是盡可能多地發現并排除軟件中潛藏的錯誤,最終把一個高質量的軟件系統交給用戶使用。第三十頁,共133頁。軟件測試基礎

測試工作量約占開發總工作量的40%以上測試內容文檔程序測試步驟單元測試(模塊測試)集成測試(綜合測試)確認測試(有效性測試)系統測試第三十一頁,共133頁。7.2臭名昭著的軟件錯誤1、迪斯尼獅子王游戲(1994年)—未能對平臺進行廣泛的測試2、奔騰浮點除法缺陷(1994年)—(4195835/3145727)*3145727-41958353、火星極地登錄者號探測器(1999年)—數據位被意外置位,機械震動會觸發著陸點觸點開關4、愛國者導彈(1991年)—海灣戰爭中失利,系統時鐘累計錯誤,14小時后,跟蹤系統不再準確5、千年蟲問題(1974年)6、JPEG圖片病毒7、1992年6月26日,鳳凰城機場停飛一天,原因:當天氣溫122℉,儀器設定最高溫度120℉第三十二頁,共133頁。7.2.1軟件測試的目標給出了關于測試的一些規則,這些規則也可以看作是測試的目標或定義。(1)測試是為了發現程序中的錯誤而執行程序的過程;(2)好的測試方案是極可能發現迄今為止尚未發現的錯誤的測試方案;(3)成功的測試是發現了至今為止尚未發現的錯誤的測試。第三十三頁,共133頁。【例】三角形的邊長(整數)

三角形性質異常情況

a+b≤ca≤0a∈Na是字符型排列次序相關abc正常情況合理的不等邊三角形合理的等邊三角形合理的等腰三角形排列次序相關a=3,b=4,c=5a=3,b=3,c=4a=3,b=3,c=3第三十四頁,共133頁。測試目標

其它SE階段——“建設性”測試:找錯過程——“破壞性”?

改錯

提高軟件質量——“建設性”

G.Myers

為了發現程序中的錯誤而執行程序的過程 證明程序正確,沒有錯誤?

證明程序錯誤,暴露錯誤?

第三十五頁,共133頁。7.2.2軟件測試準則預先制定嚴格的測試計劃,防止測試的隨意性、盲目性預先確定測試結果測試目的:檢測的功能 測試a+b≤c時的輸出測試用例:測試數據 1,2,3

預期結果 inputisinvalid小規模測試→大規模測試“窮舉測試”不可能Pareto原理:80%error——20%module錯誤的群集現象獨立第三方測試保存測試報告第三十六頁,共133頁。窮盡測試(completetest)包含所有可能情況的測試a,b,c:integer計算機字長16位→可能取值有216可能的排列組合216

×216

×216≈3×101111ms/次3×10111

1萬年!=仍然不是窮盡測試!不能嚴格證明程序正確性!無效輸入的情況沒有測試,更容易發生錯誤第三十七頁,共133頁。7.2.3測試方法(I)測試技術1、白盒測試(WhiteBoxTesting)2、黑盒測試(BlackBoxTesting)結構測試功能測試第三十八頁,共133頁。7.2.4測試步驟大型軟件系統的測試過程基本上由下述幾個步驟組成。1.模塊測試2.子系統測試3.系統測試4.驗收測試5.平行運行第三十九頁,共133頁。第四十頁,共133頁。7.2.5測試階段的信息流圖7.1測試階段的信息流需求說明書、設計說明書、程序清單測試計劃測試方案:輸入數據要檢驗的功能預期正確輸出由程序編寫者負責完成第四十一頁,共133頁。7.3.1測試重點(I)在單元測試期間著重從下述5個方面對模塊進行測試1.模塊接口:參數的數目、次序、屬性等;全局變量的定義和用法在各個模塊中是否一致。2.局部數據結構:局部數據說明、初始化、默認值等3.重要的執行通路4.出錯處理通路5.邊界條件第四十二頁,共133頁。7.3.2代碼審查(I)人工測試源程序可以由編寫者本人非正式地進行,也可以由審查小組正式進行。在審查會上由程序的編寫者解釋他是怎樣用程序代碼實現這個設計的,通常是逐個語句地講述程序的邏輯,小組其他成員仔細傾聽他的講解,并力圖發現其中的錯誤。審查會上進行的另外一項工作,是對照程序設計常見錯誤清單,分析審查這個程序。第四十三頁,共133頁。7.3.2代碼審查(II)代碼審查比計算機測試優越的是:一次審查會上可以發現許多錯誤;用計算機測試的方法發現錯誤之后,通常需要先改正這個錯誤才能繼續測試,因此錯誤是一個一個地發現并改正的。人工測試和計算機測試是互相補充,相輔相成的,缺少其中任何一種方法都會使查找錯誤的效率降低。第四十四頁,共133頁。7.3.3計算機測試模塊并不是一個獨立的程序,每個單元測試開發驅動程序和(或)存根程序。通常驅動程序也就是一個“主程序”,調用該模塊。存根程序代替被測試的模塊所調用的模塊。因此存根程序也可以稱為“虛擬子程序”。第四十五頁,共133頁。ModulestubdriverinterfacelocaldatastructuresboundaryconditionsindependentpathserrorhandlingpathstestcasesRESULTSmain(){input(test_case);result=Module(test_case);output(result);}result_typeModule(test_case){……;value=stubmodule(data);……;}value_typestubmodule(data){output(data);value=fake_value();returnvalue;}第四十六頁,共133頁。測試用例設計三角形NextDate第四十七頁,共133頁。7.4集成測試集成測試非漸增式測試漸增式測試第四十八頁,共133頁。非增式測試法——增式測試法非增式測試法增式測試法一步到位、集成所有模塊一次集成一個模塊可并行測試易分離、診斷定位、改正錯誤對接口測試更徹底較早發現接口錯誤所需機器時間少編寫driver,stub工作量較小第四十九頁,共133頁。增式測試法(Incrementaltesting)Top-downMS1S2M1S3S4M2S2Bottom-upMMMMMMMMMMMMDDDDDD第五十頁,共133頁。(1)自頂向下集成(Top-down)深度優先策略M1M2M5M8M6M3M7M4寬度優先策略M1M2M3M4M5M6M7M8M1M2M3M5M6M8S7S4M1M2M3M4M5M6M7M8第五十一頁,共133頁。自頂向下集成優點盡早測試主要的控制、關鍵的抉擇(上層)盡早實現軟件的完整功能并驗證(深度優先)無需driver缺點需編寫stub底層關鍵模塊測試晚軟件結構中沒有重要的數據自下往上流并行測試困難Top-down第五十二頁,共133頁。(2)自底向上集成(Bottom-up)優點無需stub可盡早并行測試可盡早發現底層關鍵模塊的錯誤易建立測試條件,易判定測試結果缺點需編寫driver接口出錯發現較遲系統輪廓形成較晚Bottom-up第五十三頁,共133頁。(3)混合法兼有Top-down和Bottom-up的優、缺點當被測試軟件中關鍵模塊較多時,是最好的折衷方法SandwichtestingTop-downBottom-upstubdriver第五十四頁,共133頁。7.4.4回歸測試回歸測試是指重新執行已經做過的測試的某個子集,以保證上述這些變化沒有帶來非預期的副作用。第五十五頁,共133頁。7.5確認測試確認測試也稱為驗收測試,它的目標是驗證軟件的有效性。軟件有效性的一個簡單定義是:如果軟件的功能和性能如同用戶所合理期待的那樣,軟件就是有效的。第五十六頁,共133頁。確認測試(ValidationTesting)目的:驗證軟件的有效性主體:以用戶為主或用戶積極參與方法:黑盒法SoftwareRequirementsSpecification=================>ValidationCriteriaConfigurationreviewDeficiencyList第五十七頁,共133頁。7.5.2Alpha和Beta測試(I)Alpha測試由用戶在開發者的場所進行,并且在開發者對用戶的“指導”下進行測試。Alpha測試是在受控的環境中進行的。Beta測試是軟件在開發者不能控制的環境中的“真實”應用。第五十八頁,共133頁。7.6白盒測試法關注軟件內部邏輯結構(controlstructure)測試每條邏輯通路,檢查斷點(breakpoint)狀態測試方案對程序邏輯的覆蓋程度決定測試的完全性程度White-BoxTestingUsethestructureoftheprogramtotest.——Structuraltesting白盒測試第五十九頁,共133頁。可能的執行通路=51+52+……

+520

loop=20X123453170年!365×24小時/年1毫秒/條1014條

=1014條365×24小時/年窮盡測試(completetest)第六十頁,共133頁。一系列測試過程的總稱,這組測試過程逐漸進行越來越完整的通路測試。邏輯覆蓋(Logicalcoverage)4.白盒法測試方案的設計窮盡測試不可能

選少量“最有效”的testcases,做到盡可能完備的測試第六十一頁,共133頁。Error!選擇足夠多的測試數據,使程序中每個可執行的語句至少執行一次。a(1)語句覆蓋(Statementcoverage)第六十二頁,共133頁。例:PROCEDURESAMPAL(A,B:REAL;VARX:REAL);BEGINIF(A>1)AND(B=0)THENX:=X/AIF(A=2)OR(X>1)THENX:=X+1END;入口A>1ANDB=0TA=2ORX>1TX=X/AX=X+1返回FFSabcdE第六十三頁,共133頁。入口A>1ANDB=0TA=2ORX>1TX=X/AX=X+1返回FFSabcdETestcase1:A=2,B=0,X=3覆蓋路徑SabcdEA>1ANDB=0 TA=2ORX>1 T語句覆蓋第六十四頁,共133頁。語句覆蓋入口A>1ANDB=0TA=2ORX>1TX=X/AX=X+1返回FFSabcdE問題:只測試了判定表達式=T,為F時如有錯誤無法發現!只關心判定表達式的值,不關心判定表達式中每個條件的取不同值的情況。Testcase1:A=2,B=0,X=3很弱的邏輯覆蓋若A>1ANDB=0錯寫成A>1ORB=0,無法測試出!同樣,若A=2ORX>1錯寫成 A=2ORX<1

,無法測試出!第六十五頁,共133頁。選擇足夠多的測試數據,使每個判定的每個分支至少執行一次。(分支覆蓋)入口A>1ANDB=0TA=2ORX>1TX=X/AX=X+1返回FFSabcdE兩種方案:1. SabcdE+SacE (TT) (FF)2.SabcE+SacdE (TF) (FT)(2)判定覆蓋(Branchcoverage)第六十六頁,共133頁。入口A>1ANDB=0TA=2ORX>1TX=X/AX=X+1返回FFSabcdETestcases3:①A=4,B=0,X=4(SabcE)②A=2,B=1,X=3(SacdE)問題:任一方案都只檢查了全部路徑的一半(2/4)無法判斷內部條件的錯誤(如X>1錯寫為X<1)方案2.SabcE+SacdE (TF) (FT)比語句覆蓋強判定覆蓋第六十七頁,共133頁。入口A>1ANDB=0TA=2ORX>1TX=X/AX=X+1返回FFSabcdEA>1 TA≤1 FB=0

TB≠0

FA=2 TA≠2 FX>1 TX≤1 F測試用例必須覆蓋這8種可能的結果!選擇足夠多的測試數據,使每個判定表達式中的每個條件都取到各種可能的結果。(3)條件覆蓋(Conditioncoverage)第六十八頁,共133頁。入口A>1ANDB=0TA=2ORX>1TX=X/AX=X+1返回FFSabcdETestcases4:①A=2,B=0,X=4 [SabcdE](滿足A>1,B=0;A=2,X>1)TTTT②A=1,B=1,X=1 [SacE](滿足A1,B0;A2,X1)FFFF條件覆蓋 判定覆蓋?條件覆蓋第六十九頁,共133頁。入口A>1ANDB=0TA=2ORX>1TX=X/AX=X+1返回FFSabcdETestcases5:①A=2,B=0,X=1

[SabcdE](滿足A>1,B=0;A=2,X1)TTTF②A=1,B=1,X=2

[SacdE](滿足A1,B0;A2,X>1)FFFT表達式

(A=2ORX>1)始終為T,沒有覆蓋分支cE,不是判定覆蓋!條件覆蓋不一定包含判定覆蓋,判定覆蓋也不一定包含條件覆蓋!條件覆蓋第七十頁,共133頁。選擇足夠多的測試數據,使判定表達式中的每個條件都取到各種可能的值,而且每個判定表達式也都取到各種可能的結果。(4)判定-條件覆蓋第七十一頁,共133頁。入口A>1ANDB=0TA=2ORX>1TX=X/AX=X+1返回FFSabcdETestcases6:①A=2,B=0,X=4

[SabcdE](滿足A>1,B=0;A=2,X>1)TTTT②A=1,B=1,X=1

[SacE](滿足A1,B0;A2,X1)FFFFTestcases4問題:沒能覆蓋判定表達式中各條件取值的所有可能組合!若A>1ANDB=0錯寫成

A>1ORB=0,無法測試出!同樣,若A=2ORX>1錯寫成

A=2ANDX>1

,無法測試出!不一定能發現判定表達式中的邏輯錯誤!判定-條件覆蓋第七十二頁,共133頁。選擇足夠多的測試數據,使每個判定表達式中條件的各種可能組合都至少出現一次。滿足條件組合覆蓋

一定能滿足判定覆蓋、條件覆蓋和判定—條件覆蓋。(5)條件組合覆蓋第七十三頁,共133頁。全部可能的條件組合為:①A>1,B=0TT②A>1,B0TF③A1,B=0FT

④A1,B0FF⑤A=2,X>1TT⑥A=2,X

1TF

⑦A

2,X>1FT⑧A

2,X

1FFTestcases7:①A=2,B=0,X=4(TT)SabcdE②A=2.B=1,X=1(FT)SacdE③A=1,B=0,X=2(FT)SacdE④A=1,B=1,X=1(FF)SacE問題:不能保證覆蓋程序中的每一條路徑!沒有測試到路徑SabcE(表達式TF,條件①和⑧的組合)的情形入口A>1ANDB=0TA=2ORX>1TX=X/AX=X+1返回FFSabcdE最強的邏輯覆蓋條件組合覆蓋第七十四頁,共133頁。5.條件組合覆蓋4.判定-條件覆蓋3.條件覆蓋2.判定覆蓋1.語句覆蓋測試充分性測試代價邏輯覆蓋的關系第七十五頁,共133頁。7.6.2控制結構測試(I)基本路徑測試步驟如下:第一步,根據過程設計結果畫出相應的流圖第二步,計算流圖的環形復雜度。第三步,確定線性獨立路徑的基本集合。第四步,設計可強制執行基本集合中每條路徑的測試用例。第七十六頁,共133頁。圖7.6求平均值過程的流圖第七十七頁,共133頁。圖7.6求平均值過程的流圖環形復雜度=6路徑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-……12345678910111213第七十八頁,共133頁。第十五頁,共133頁。result_typeModule(test_case)第七十二頁,共133頁。輸入:A=1,B=1,C=1審查會上進行的另外一項工作,是對照程序設計常見錯誤清單,分析審查這個程序。1選擇程序設計語言(I)①A=2,B=0,X=4 [SabcdE]軟件測試在軟件生命周期中橫跨兩個階段。對所有輸入數據都進行檢驗;(1)簡單循環無效輸入的情況沒有測試,更容易發生錯誤IF(C>A)OR(D<B)著重測試已發現了較多錯誤的程序段(錯誤的群集現象)測試的目的就是在軟件投入生產性運行之前,盡可能多地發現軟件中的錯誤。弱一般等價類測試通過使用一個測試用例中的每個等價類的一個變量實現。假設不考慮PASCAL編譯程序可過濾的錯誤

當程序中判定多于一個時,形成的分支結構可以分為兩類:嵌套型分支結構和連鎖型分支結構。對于嵌套型分支結構,若有n個判定語句,需要n+1個測試用例;對于連鎖型分支結構,若有n個判定語句,需要有2n個測試用例,覆蓋它的2n條路徑。條件測試路徑選擇第七十九頁,共133頁。第八十頁,共133頁。循環分為4種不同類型:簡單循環、連鎖循環、嵌套循環和非結構循環。

(1)簡單循環①零次循環:從循環入口到出口

②一次循環:檢查循環初始值

③二次循環:檢查多次循環

④m次循環:檢查在多次循環

⑤最大次數循環、比最大次數多一次、少一次的循環。循環測試路徑選擇第八十一頁,共133頁。例:求最小值k=i;for(j=i+1;j<=n;j++)

if(A[j]<A[k])k=j;

第八十二頁,共133頁。k=i;j=i+1;j<=n?A[j]<A[k]?k=jj++fdcabe第八十三頁,共133頁。測試用例選擇第八十四頁,共133頁。

①對最內層循環做簡單循環的全部測試。所有其它層的循環變量置為最小值;

②逐步外推,對其外面一層循環進行測試。測試時保持所有外層循環的循環變量取最小值,所有其它嵌套內層循環的循環變量取“典型”值。

③反復進行,直到所有各層循環測試完畢。 ④對全部各層循環同時取最小循環次數,或者同時取最大循環次數(2)

嵌套循環第八十五頁,共133頁。第八十六頁,共133頁。

(3)連鎖循環

如果各個循環互相獨立,則可以用與簡單循環相同的方法進行測試。但如果幾個循環不是互相獨立的,則需要使用測試嵌套循環的辦法來處理。(4)非結構循環

這一類循環應該使用結構化程序設計方法重新設計測試用例。

第八十七頁,共133頁。STARTINPUT(A,B,C)IFA>5 THENX=10 ELSEX=1ENDIFIFB>10 THENY=20 ELSEY=2ENDIFIFC>15THENZ=30 ELSEZ=3ENDIFPRINT(X,Y,Z)STOP習題:設計下列偽碼程序的語句覆蓋和路徑覆蓋測試用例:注意路徑覆蓋指把程序的每條路徑執行一次,與基本路徑測試不同(考慮獨立路徑)第八十八頁,共133頁。STARTINPUT(A,B,C)IFA>5 THENX=10 ELSEX=1ENDIFIFB>10 THENY=20 ELSEY=2ENDIFIFC>15THENZ=30 ELSEZ=3ENDIFPRINT(X,Y,Z)STOP(1)語句覆蓋的測試用例有三個判斷表達式,并且每個表達式為真和為假都有語句執行,因此需要兩組測試數據,使每個判定的真假各一次,這樣才能使每條語句都至少執行一次。第一組,使三個判定全假:輸入:A=1,B=1,C=1預期的輸出:X=1,Y=2,Z=3第二組,使三個判定全真:輸入:A=10,B=20,C=30預期的輸出:X=10,Y=20,Z=30第八十九頁,共133頁。STARTINPUT(A,B,C)IFA>5 THENX=10 ELSEX=1ENDIFIFB>10 THENY=20 ELSEY=2ENDIFIFC>15THENZ=30 ELSEZ=3ENDIFPRINT(X,Y,Z)STOP(2)路徑覆蓋測試用例:該程序共有2*2*2=8條可能的路徑,為了能覆蓋每條路徑,需要8組測試數據,剛才的全真和全假已經有了,只需補充剩余6個:第三組,真真假:輸入:A=10,B=20,C=10預期的輸出:X=10,Y=20,Z=3第四組,真假假:輸入:A=10,B=10,C=10預期的輸出:X=10,Y=2,Z=3第五組,真假真:輸入:A=10,B=10,C=30預期的輸出:X=10,Y=2,Z=30其余的依次類推,不再贅述。第九十頁,共133頁。習題:設計下列偽碼的分支覆蓋和條件組合覆蓋測試用例STARTINPUT(A,B,C,D)IF(A>0)AND(B>0)

THENX=A+BELSEX=A-BENDIF(C>A)OR(D<B)

THENY=C-DELSEY=C+DENDPRINT(X,Y)STOP第九十一頁,共133頁。STARTINPUT(A,B,C,D)IF(A>0)AND(B>0)

THENX=A+BELSEX=A-BENDIF(C>A)OR(D<B)

THENY=C-DELSEY=C+DENDPRINT(X,Y)STOP(1)分支覆蓋測試用例:分支覆蓋即判定覆蓋,指的是判定的每個分支都執行一次,本題有兩個判定,因此設計兩組測試數據:第一組,判定全真輸入:A=1,B=1,C=2,D=0預期輸出:X=2,Y=2第二組,判定全假輸入:A=1,B=0,C=0,D=1預期輸出:X=1,Y=1第九十二頁,共133頁。STARTINPUT(A,B,C,D)IF(A>0)AND(B>0)

THENX=A+BELSEX=A-BENDIF(C>A)OR(D<B)

THENY=C-DELSEY=C+DENDPRINT(X,Y)STOP(2)條件組合覆蓋測試用例:條件組合要求每個表達式的各種可能組合都至少出現一次。對于第一個表達式有4種組合:對于第二個表達式有4種組合:A>0,B>0C>A,D<BA>0,B<=0C>A,D>=BA<=0,B>0C<=A,D<BA<=0,B<=0C<=A,D>=B對應組合之。具體不再贅述。第九十三頁,共133頁。習題:使用基本路徑測試方法,設計測試下面列出的偽碼程序的測試用例:1:STARTINPUT(A,B,C,D)2:IF(A>0)3:AND(B>0)4:THENX=A+B5:ELSEX=A-B6:END7:IF(C>A)8:OR(D<B)9:THENY=C-D10:ELSEY=C+D11:END12:PRINT(X,Y)

STOP第九十四頁,共133頁。123647911125810用基本路徑測試方法設計測試用例有4步:(1)畫出流圖(2)計算環形復雜度為5(3)確定獨立路徑的基本集合路徑1:1-2-3-4-6-7-9-11-12路徑2:1-2-3-4-6-7-8-9-11-12路徑3:1-2-3-4-6-7-8-10-11-12路徑4:1-2-5-6-7-9-11-12路徑5:1-2-3-5-6-7-9-11-12(4)設計測試用例,不再贅述第九十五頁,共133頁。7.7黑盒測試技術黑盒測試著重測試軟件功能。它很可能發現白盒測試不易發現的其他類型的錯誤。黑盒測試力圖發現下述類型的錯誤:①功能不正確或遺漏了功能;②界面錯誤;③數據結構錯誤或外部數據庫訪問錯誤;④性能錯誤;⑤初始化和終止錯誤。第九十六頁,共133頁。7.7黑盒測試技術1、等價劃分2、邊界值分析3、錯誤推測第九十七頁,共133頁。7.7.1等價劃分(I)等價劃分是一種黑盒測試技術,這種技術把程序的輸入域劃分成若干個數據類,據此導出測試用例。等價類測試的關鍵就是選擇確定類的等價關系。第九十八頁,共133頁。(1)等價劃分思想:將程序的所有輸入數據劃分為不同的區域,同一區域中各個輸入數據對于揭露程序中的錯誤是等價的,稱為等價類。然后從每一個等價類中選取少數有代表性的數據做為測試用例。等價類有效等價類無效等價類輸出等價類優點:可以濾掉同類數據,提高測試效率劃分:試探性、經驗第九十九頁,共133頁。劃分等價類的啟發式規則

值的范圍 x∈[a,b]

x<a,x>b

值的個數 x=a

x<a,x>a

值約束 x∈A={a1,a2,…,an} x∈A

值的規則 {x|P(x)}

{x|┐P(x)}

等價類的細化 x∈Z Z+,0,Z-

表格

空表、一行、多行第一百頁,共133頁。建立等價類表輸入條件有效等價類無效等價類.........第一百零一頁,共133頁。設計步驟劃分等價類,建立等價類表設計測試用例設計一新測試方案,盡可能多覆蓋尚未被覆蓋的有效等價類,重復,直至全部覆蓋

——減少testcases設計一新測試方案,覆蓋且僅覆蓋一個無效等價類,重復,直至全部覆蓋

——避免無效測試例:文件名——

以字母為首的字母數字串

testcase: 9A*B第一百零二頁,共133頁。設變量x1和x2和函數F聯系起來。設X1,x2有以下邊界以及邊界內的區間:a<=x1<=d,區間[a,b),[b,c),[c,d]e<=x2<=g,區間[e,f),(f,g]X1,x2的無效值是x1<a,x1>d,x2<e,x2>g.第一百零三頁,共133頁。

弱一般等價類測試弱一般等價類測試通過使用一個測試用例中的每個等價類的一個變量實現。第一百零四頁,共133頁。

強一般等價類測試強一般等價類測試基于多缺陷假設第一百零五頁,共133頁。

弱健壯等價類測試弱:單缺陷假設健壯:考慮了無效值第一百零六頁,共133頁。

強健壯等價類測試強:多缺陷假設健壯:考慮無效值第一百零七頁,共133頁。7.7.1例(I)NextDate:月日年等價類M1={1..12}M2={<1}M3={>12}D1={1..31}D2={<1}D3={>31}Y1={1912..2112}Y2={<1912}Y3={>2112}有效類的數量等于獨立變量個數強弱一般等價類用例相同用例ID月份日期年預期輸出WN1,SN161520122012年6月16第一百零八頁,共133頁。7.7.1例(II)弱健壯等價類用例用例ID月份日期年預期輸出WR161520122012年6月16WR2-1152012月份不在WR313152012月份不在WR46-12012日期不在WR56322012日期不在WR66151911年份不在WR76152113年份不在第一百零九頁,共133頁。7.7.1例(III)額外強健壯等價類用例用例ID月份日期年預期輸出SR1-1152012月份不在SR26-12012日期不在SR313151911年份不在SR4-1-12012日期不在、月份不在SR56-11911日期不在、年份不在SR6-1151911年份不在、月份不在SR7-1-11911年月日不在第一百一十頁,共133頁。7.7.1例(IV)NextDate:月日年等價類M1={每月有30天}M2={每月有31天}M3={2月}M4={<1}M5={>12}D1={1..28}D2={29}D3={30}D4={31}D5={<1}D6={>31}Y1={2000年}Y2={閏年}Y3={平年}Y4={<1912}Y5={>2112}第一百一十一頁,共133頁。7.7.1例(V)強一般等價類用例個數=3*4*3=36個(略)強健壯等價類用例個數=5*6*5=150個(略)用例ID月份日期年預期輸出WN161420002000年6月15WN272919961996年7月30WN32302002不可能的日期WN46312000不可能的輸入日期弱等價類測試用例第一百一十二頁,共133頁。等價劃分法的評價選用等價類中典型值/任意值作為testcases沒有選用某些高效率的測試方案第一百一十三頁,共133頁。7.7.2邊界值分析(BoundaryValueAnalysis,BVA)處理邊界情況最易出錯選擇邊界值作testcases,暴露error的可能性大剛好等于等價類邊界值稍小于稍大于"Bugslurkincornersandcongregateatboundaries..."——BorisBeizer第一百一十四頁,共133頁。邊界值分析的規則

值的范圍 x∈[a,b] a-1,a,b,b+1

值的個數 a~b a-1,a,b,b+1

輸出等價類 sinx 1 π/2

0 0

-1 -π/2

有序集 [1,n]

[0,n-1] 錯位_π210-1π2第一百一十五頁,共133頁。【例】string

integer (計算機字長16位,二進制補碼表示)合法輸出等價類[-32768,0)內的負整數0(0,32767]內的正整數非法輸出等價類<-32768>32767函數說明 Functionstrtoint(dstr:shortstr):integer;參數類型說明 typeshortstr=array[1..6]ofchar;假設不考慮PASCAL編譯程序可過濾的錯誤‘-32769’→錯!下溢‘32768’→錯!上溢‘-32768’→-32768‘000000’→0‘32767’→3

溫馨提示

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

評論

0/150

提交評論