版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目標(biāo)理解語(yǔ)用的重要性理解測(cè)試的目的理解軟件可靠性掌握測(cè)試技術(shù)設(shè)計(jì)測(cè)試用例第7章實(shí)現(xiàn)(I)通常把編碼和測(cè)試統(tǒng)稱為實(shí)現(xiàn)。程序的質(zhì)量主要取決于軟件設(shè)計(jì)的質(zhì)量。所選用的程序設(shè)計(jì)語(yǔ)言的特點(diǎn)及編碼風(fēng)格也將對(duì)程序的可靠性、可讀性、可測(cè)試性和可維護(hù)性產(chǎn)生深遠(yuǎn)的影響。第7章實(shí)現(xiàn)(II)測(cè)試的目的就是在軟件投入生產(chǎn)性運(yùn)行之前,盡可能多地發(fā)現(xiàn)軟件中的錯(cuò)誤。目前軟件測(cè)試仍然是保證軟件質(zhì)量的關(guān)鍵步驟,它是對(duì)軟件規(guī)格說(shuō)明、設(shè)計(jì)和編碼的最后復(fù)審。軟件測(cè)試在軟件生命周期中橫跨兩個(gè)階段。單元測(cè)試:通常在編寫出每個(gè)模塊之后就對(duì)它做必要的測(cè)試綜合測(cè)試:在這個(gè)階段結(jié)束之后,對(duì)軟件系統(tǒng)還應(yīng)該進(jìn)行各種綜合測(cè)試第7章實(shí)現(xiàn)(III)通過(guò)測(cè)試發(fā)現(xiàn)錯(cuò)誤之后還必須診斷并改正錯(cuò)誤,這就是調(diào)試的目的。調(diào)試是測(cè)試階段最困難的工作。軟件可靠性模型使用故障率數(shù)據(jù),估計(jì)軟件將來(lái)出現(xiàn)故障的情況并預(yù)測(cè)軟件的可靠性。7.1編碼7.1.1選擇程序設(shè)計(jì)語(yǔ)言7.1.2編碼風(fēng)格7.1.1選擇程序設(shè)計(jì)語(yǔ)言(I)編碼之前的一項(xiàng)重要工作就是選擇一種適當(dāng)?shù)某绦蛟O(shè)計(jì)語(yǔ)言。在選擇的時(shí)候我們要考慮各種方面的限制。下面是主要的實(shí)用標(biāo)準(zhǔn):(1)系統(tǒng)用戶的要求。(2)可以得到的軟件工具。(3)程序員的知識(shí)。(4)軟件可移植性要求。(5)軟件的應(yīng)用領(lǐng)域。7.1.1選擇程序設(shè)計(jì)語(yǔ)言(I)編碼之前的一項(xiàng)重要工作就是選擇一種適當(dāng)?shù)某绦蛟O(shè)計(jì)語(yǔ)言。在選擇的時(shí)候我們要考慮各種方面的限制。下面是主要的實(shí)用標(biāo)準(zhǔn):(1)系統(tǒng)用戶的要求。(2)可以得到的軟件工具。(3)程序員的知識(shí)。(4)軟件可移植性要求。(5)軟件的應(yīng)用領(lǐng)域。7.1.2編碼風(fēng)格(I)1、程序內(nèi)部的文檔2、數(shù)據(jù)說(shuō)明3、語(yǔ)句構(gòu)造4、輸入輸出5、效率
程序內(nèi)部文檔(I)所謂程序內(nèi)部的文檔包括恰當(dāng)?shù)臉?biāo)識(shí)符、適當(dāng)?shù)淖⒔夂统绦虻囊曈X(jué)組織等等。1、標(biāo)識(shí)符開發(fā)小組采取統(tǒng)一的命名規(guī)則(匈牙利命名法)使用可以準(zhǔn)確說(shuō)明變量/字段/類的完整的英文描述符。比如firstName,少用單變量名稱如l,t這樣的名字。采用該領(lǐng)域的術(shù)語(yǔ)。盡量不要生造詞匯。
程序內(nèi)部文檔(II)采用大小寫混合,提高名字的可讀性。一般應(yīng)該采用小寫字母,但是類和接口的名字的首字母,以及任何中間單詞的首字母應(yīng)該大寫。如類名DBConnection,方法名getFirstName(),isAtEnd(),setFirstName(StringaName)等等盡量少用縮寫,但如果一定要使用,就要謹(jǐn)慎地使用。例如,想對(duì)單詞“number”采用縮寫,可從no或者num中選取一個(gè),且只用這種形式。避免使用下劃線作為名字的首末字母。
程序內(nèi)部文檔-注釋(I)在每個(gè)模塊開始前有一段序言性的注釋,簡(jiǎn)要描述模塊的功能、主要算法、接口、重要數(shù)據(jù)、版本、編寫(修改)時(shí)間、作者等。
/**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@>,…… */
程序內(nèi)部文檔-注釋(II)插在程序中間與一段程序代碼有關(guān)的注解,主要解釋包含這段代碼的必要性。/** DeliverIPPacketstothehigherprotocollayers.*/intip_local_deliver(structsk_buff*skb){…… /*Allprotocolschecked. *Ifthispacketwasabroadcast,wemay*not*replytoit,sincethat *causes(proven,grin)ARPstormsandaleakageofmemory(i.e.all *ICMPreplymessagesgetqueuedupfortransmission...) */……}
程序內(nèi)部文檔-注釋(III)應(yīng)該用空格或空行清楚地區(qū)分注解和程序。程序清單的布局對(duì)于程序的可讀性也有很大影響,應(yīng)該利用適當(dāng)?shù)碾A梯形式使程序的層次結(jié)構(gòu)清晰明顯。
數(shù)據(jù)說(shuō)明數(shù)據(jù)說(shuō)明的次序應(yīng)該標(biāo)準(zhǔn)化。有次序就容易查閱,因此能夠加速測(cè)試、調(diào)試和維護(hù)的過(guò)程。當(dāng)多個(gè)變量名在一個(gè)語(yǔ)句中說(shuō)明時(shí),應(yīng)該按字母順序排列這些變量。如果設(shè)計(jì)時(shí)使用了一個(gè)復(fù)雜的數(shù)據(jù)結(jié)構(gòu),則應(yīng)該用注解說(shuō)明用程序設(shè)計(jì)語(yǔ)言實(shí)現(xiàn)這個(gè)數(shù)據(jù)結(jié)構(gòu)的方法和特點(diǎn)。
語(yǔ)句構(gòu)造(I)構(gòu)造語(yǔ)句時(shí)應(yīng)該遵循的原則是,每個(gè)語(yǔ)句都應(yīng)該簡(jiǎn)單而直接。采用下述規(guī)則:不要為了節(jié)省空間而把多個(gè)語(yǔ)句寫在同一行;FORI:=1TON-1DOBEGINT:=I;FORJ:=I+1TONDOIFA[J]<A[T]THENT:=J;IFT≠ITHENBEGINWORK:=A[T];A[T]:=A[I];A[I]:=WORK;ENDEND;
語(yǔ)句構(gòu)造(II)FORI:=1TON-1DO//改進(jìn)布局
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;
語(yǔ)句構(gòu)造(III)程序編寫首先應(yīng)當(dāng)考慮清晰性
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;
語(yǔ)句構(gòu)造(IV)盡量避免復(fù)雜的條件;盡量減少對(duì)“非”條件;避免大量使用循環(huán)嵌套和條件嵌套;利用括號(hào)使邏輯表達(dá)式或算術(shù)表達(dá)式的運(yùn)算次序清晰直觀。
輸入輸出在設(shè)計(jì)和編寫程序時(shí)應(yīng)該考慮下述有關(guān)輸入輸出風(fēng)格的規(guī)則:對(duì)所有輸入數(shù)據(jù)都進(jìn)行檢驗(yàn);保持輸入格式簡(jiǎn)單;明確提示交互式輸入的請(qǐng)求,詳細(xì)說(shuō)明可用的選擇或邊界數(shù)值;當(dāng)程序設(shè)計(jì)語(yǔ)言對(duì)格式有嚴(yán)格要求時(shí),應(yīng)保持輸入格式一致;設(shè)計(jì)良好的輸出報(bào)表;
效率(I)效率主要指處理機(jī)時(shí)間和存儲(chǔ)器容量?jī)蓚€(gè)方面。應(yīng)該記住3條原則:首先,效率是性能要求。其次,效率是靠好設(shè)計(jì)來(lái)提高的。第三,程序的效率和程序的簡(jiǎn)單程度是一致的,不要犧牲程序的清晰性和可讀性來(lái)不必要地提高效率。
效率(II)(1)程序運(yùn)行時(shí)間應(yīng)用下述規(guī)則:寫程序之前先簡(jiǎn)化算術(shù)的和邏輯的表達(dá)式;仔細(xì)研究嵌套的循環(huán),以確定是否有語(yǔ)句可以從內(nèi)層往外移;盡量避免使用多維數(shù)組;盡量避免使用指針和復(fù)雜的表;使用執(zhí)行時(shí)間短的算術(shù)運(yùn)算;不要混合使用不同的數(shù)據(jù)類型;盡量使用整數(shù)運(yùn)算和布爾表達(dá)式。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);}
內(nèi)循環(huán)次數(shù)
20X4=80
外循環(huán)次數(shù)
21
總循環(huán)次數(shù)
101
∑∑(i+1)2(j+2)
203
i=1j=1main(){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);}
內(nèi)循環(huán)次數(shù)
3X21=63
外循環(huán)次數(shù)
4
總循環(huán)次數(shù)
67main(){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共計(jì)執(zhí)行了
3X20=60次
應(yīng)盡量把與循環(huán)變量無(wú)關(guān)的運(yùn)算移到循環(huán)外去。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共計(jì)執(zhí)行了
3次
減少了57次
效率(III)(2)存儲(chǔ)器效率在大型計(jì)算機(jī)中必須考慮操作系統(tǒng)頁(yè)式調(diào)度的特點(diǎn)。如果要求使用最少的存儲(chǔ)器,應(yīng)選用有緊縮存儲(chǔ)器特性的編譯程序,必要時(shí)可使用匯編。提高執(zhí)行效率的技術(shù)也能提高存儲(chǔ)器效率。
效率(IV)(3)輸入輸出的效率簡(jiǎn)單清晰同樣是提高人機(jī)通信效率的關(guān)鍵。硬件之間的通信效率是很復(fù)雜的問(wèn)題,有些簡(jiǎn)單的原則可以提高輸入輸出的效率。例如:所有輸入輸出都應(yīng)該有緩沖,以減少用于通信的額外開銷;對(duì)輔存應(yīng)選用最簡(jiǎn)單的訪問(wèn)方法;輔存的輸入輸出應(yīng)該以信息組為單位進(jìn)行;7.2軟件測(cè)試基礎(chǔ)7.2.1軟件測(cè)試的目標(biāo)7.2.2軟件測(cè)試準(zhǔn)則7.2.3測(cè)試方法7.2.4測(cè)試步驟7.2.5測(cè)試階段的信息流7.2軟件測(cè)試基礎(chǔ)暴露問(wèn)題并不是軟件測(cè)試的最終目的,發(fā)現(xiàn)問(wèn)題是為了解決問(wèn)題測(cè)試階段的根本目標(biāo)是盡可能多地發(fā)現(xiàn)并排除軟件中潛藏的錯(cuò)誤,最終把一個(gè)高質(zhì)量的軟件系統(tǒng)交給用戶使用。軟件測(cè)試基礎(chǔ)測(cè)試工作量約占開發(fā)總工作量的40%以上測(cè)試內(nèi)容文檔程序測(cè)試步驟單元測(cè)試(模塊測(cè)試)集成測(cè)試(綜合測(cè)試)確認(rèn)測(cè)試(有效性測(cè)試)系統(tǒng)測(cè)試7.2臭名昭著的軟件錯(cuò)誤1、迪斯尼獅子王游戲(1994年)—未能對(duì)平臺(tái)進(jìn)行廣泛的測(cè)試2、奔騰浮點(diǎn)除法缺陷(1994年)—(4195835/3145727)*3145727-41958353、火星極地登錄者號(hào)探測(cè)器(1999年)—數(shù)據(jù)位被意外置位,機(jī)械震動(dòng)會(huì)觸發(fā)著陸點(diǎn)觸點(diǎn)開關(guān)4、愛(ài)國(guó)者導(dǎo)彈(1991年)—海灣戰(zhàn)爭(zhēng)中失利,系統(tǒng)時(shí)鐘累計(jì)錯(cuò)誤,14小時(shí)后,跟蹤系統(tǒng)不再準(zhǔn)確5、千年蟲問(wèn)題(1974年)6、JPEG圖片病毒7、1992年6月26日,鳳凰城機(jī)場(chǎng)停飛一天,原因:當(dāng)天氣溫122℉,儀器設(shè)定最高溫度120℉7.2.1軟件測(cè)試的目標(biāo)G.Myers給出了關(guān)于測(cè)試的一些規(guī)則,這些規(guī)則也可以看作是測(cè)試的目標(biāo)或定義。(1)測(cè)試是為了發(fā)現(xiàn)程序中的錯(cuò)誤而執(zhí)行程序的過(guò)程;(2)好的測(cè)試方案是極可能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試方案;(3)成功的測(cè)試是發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試。【例】三角形的邊長(zhǎng)(整數(shù))三角形性質(zhì)異常情況
a+b≤ca≤0a∈Na是字符型排列次序相關(guān)abc正常情況合理的不等邊三角形合理的等邊三角形合理的等腰三角形排列次序相關(guān)a=3,b=4,c=5a=3,b=3,c=4a=3,b=3,c=3測(cè)試目標(biāo)其它SE階段——“建設(shè)性”測(cè)試:找錯(cuò)過(guò)程——“破壞性”?
改錯(cuò)提高軟件質(zhì)量——“建設(shè)性”
G.Myers
為了發(fā)現(xiàn)程序中的錯(cuò)誤而執(zhí)行程序的過(guò)程 證明程序正確,沒(méi)有錯(cuò)誤?
證明程序錯(cuò)誤,暴露錯(cuò)誤? 7.2.2軟件測(cè)試準(zhǔn)則預(yù)先制定嚴(yán)格的測(cè)試計(jì)劃,防止測(cè)試的隨意性、盲目性預(yù)先確定測(cè)試結(jié)果測(cè)試目的:檢測(cè)的功能 測(cè)試a+b≤c時(shí)的輸出測(cè)試用例:測(cè)試數(shù)據(jù) 1,2,3
預(yù)期結(jié)果 inputisinvalid小規(guī)模測(cè)試→大規(guī)模測(cè)試“窮舉測(cè)試”不可能Pareto原理:80%error——20%module錯(cuò)誤的群集現(xiàn)象獨(dú)立第三方測(cè)試保存測(cè)試報(bào)告窮盡測(cè)試(completetest)包含所有可能情況的測(cè)試a,b,c:integer計(jì)算機(jī)字長(zhǎng)16位→可能取值有216可能的排列組合216
×216
×216≈3×101111ms/次3×101111萬(wàn)年!=仍然不是窮盡測(cè)試!不能嚴(yán)格證明程序正確性!無(wú)效輸入的情況沒(méi)有測(cè)試,更容易發(fā)生錯(cuò)誤7.2.3測(cè)試方法(I)測(cè)試技術(shù)1、白盒測(cè)試(WhiteBoxTesting)2、黑盒測(cè)試(BlackBoxTesting)結(jié)構(gòu)測(cè)試功能測(cè)試7.2.4測(cè)試步驟大型軟件系統(tǒng)的測(cè)試過(guò)程基本上由下述幾個(gè)步驟組成。1.模塊測(cè)試2.子系統(tǒng)測(cè)試3.系統(tǒng)測(cè)試4.驗(yàn)收測(cè)試5.平行運(yùn)行7.2.5測(cè)試階段的信息流圖7.1測(cè)試階段的信息流需求說(shuō)明書、設(shè)計(jì)說(shuō)明書、程序清單測(cè)試計(jì)劃測(cè)試方案:輸入數(shù)據(jù)要檢驗(yàn)的功能預(yù)期正確輸出由程序編寫者負(fù)責(zé)完成7.3.1測(cè)試重點(diǎn)(I)在單元測(cè)試期間著重從下述5個(gè)方面對(duì)模塊進(jìn)行測(cè)試1.模塊接口:參數(shù)的數(shù)目、次序、屬性等;全局變量的定義和用法在各個(gè)模塊中是否一致。2.局部數(shù)據(jù)結(jié)構(gòu):局部數(shù)據(jù)說(shuō)明、初始化、默認(rèn)值等3.重要的執(zhí)行通路4.出錯(cuò)處理通路5.邊界條件7.3.2代碼審查(I)人工測(cè)試源程序可以由編寫者本人非正式地進(jìn)行,也可以由審查小組正式進(jìn)行。在審查會(huì)上由程序的編寫者解釋他是怎樣用程序代碼實(shí)現(xiàn)這個(gè)設(shè)計(jì)的,通常是逐個(gè)語(yǔ)句地講述程序的邏輯,小組其他成員仔細(xì)傾聽他的講解,并力圖發(fā)現(xiàn)其中的錯(cuò)誤。審查會(huì)上進(jìn)行的另外一項(xiàng)工作,是對(duì)照程序設(shè)計(jì)常見錯(cuò)誤清單,分析審查這個(gè)程序。7.3.2代碼審查(II)代碼審查比計(jì)算機(jī)測(cè)試優(yōu)越的是:一次審查會(huì)上可以發(fā)現(xiàn)許多錯(cuò)誤;用計(jì)算機(jī)測(cè)試的方法發(fā)現(xiàn)錯(cuò)誤之后,通常需要先改正這個(gè)錯(cuò)誤才能繼續(xù)測(cè)試,因此錯(cuò)誤是一個(gè)一個(gè)地發(fā)現(xiàn)并改正的。人工測(cè)試和計(jì)算機(jī)測(cè)試是互相補(bǔ)充,相輔相成的,缺少其中任何一種方法都會(huì)使查找錯(cuò)誤的效率降低。7.3.3計(jì)算機(jī)測(cè)試模塊并不是一個(gè)獨(dú)立的程序,每個(gè)單元測(cè)試開發(fā)驅(qū)動(dòng)程序和(或)存根程序。通常驅(qū)動(dòng)程序也就是一個(gè)“主程序”,調(diào)用該模塊。存根程序代替被測(cè)試的模塊所調(diào)用的模塊。因此存根程序也可以稱為“虛擬子程序”。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;}測(cè)試用例設(shè)計(jì)三角形NextDate7.4集成測(cè)試集成測(cè)試非漸增式測(cè)試漸增式測(cè)試非增式測(cè)試法——增式測(cè)試法非增式測(cè)試法增式測(cè)試法一步到位、集成所有模塊一次集成一個(gè)模塊可并行測(cè)試易分離、診斷定位、改正錯(cuò)誤對(duì)接口測(cè)試更徹底較早發(fā)現(xiàn)接口錯(cuò)誤所需機(jī)器時(shí)間少編寫driver,stub工作量較小增式測(cè)試法(Incrementaltesting)Top-downMS1S2M1S3S4M2S2Bottom-upMMMMMMMMMMMMDDDDDD(1)自頂向下集成(Top-down)深度優(yōu)先策略M1M2M5M8M6M3M7M4寬度優(yōu)先策略M1M2M3M4M5M6M7M8M1M2M3M5M6M8S7S4M1M2M3M4M5M6M7M8自頂向下集成優(yōu)點(diǎn)盡早測(cè)試主要的控制、關(guān)鍵的抉擇(上層)盡早實(shí)現(xiàn)軟件的完整功能并驗(yàn)證(深度優(yōu)先)無(wú)需driver缺點(diǎn)需編寫stub底層關(guān)鍵模塊測(cè)試晚軟件結(jié)構(gòu)中沒(méi)有重要的數(shù)據(jù)自下往上流并行測(cè)試?yán)щyTop-down(2)自底向上集成(Bottom-up)優(yōu)點(diǎn)無(wú)需stub可盡早并行測(cè)試可盡早發(fā)現(xiàn)底層關(guān)鍵模塊的錯(cuò)誤易建立測(cè)試條件,易判定測(cè)試結(jié)果缺點(diǎn)需編寫driver接口出錯(cuò)發(fā)現(xiàn)較遲系統(tǒng)輪廓形成較晚Bottom-up(3)混合法兼有Top-down和Bottom-up的優(yōu)、缺點(diǎn)當(dāng)被測(cè)試軟件中關(guān)鍵模塊較多時(shí),是最好的折衷方法SandwichtestingTop-downBottom-upstubdriver7.4.4回歸測(cè)試回歸測(cè)試是指重新執(zhí)行已經(jīng)做過(guò)的測(cè)試的某個(gè)子集,以保證上述這些變化沒(méi)有帶來(lái)非預(yù)期的副作用。7.5確認(rèn)測(cè)試確認(rèn)測(cè)試也稱為驗(yàn)收測(cè)試,它的目標(biāo)是驗(yàn)證軟件的有效性。軟件有效性的一個(gè)簡(jiǎn)單定義是:如果軟件的功能和性能如同用戶所合理期待的那樣,軟件就是有效的。確認(rèn)測(cè)試(ValidationTesting)目的:驗(yàn)證軟件的有效性主體:以用戶為主或用戶積極參與方法:黑盒法SoftwareRequirementsSpecification=================>ValidationCriteriaConfigurationreviewDeficiencyList7.5.2Alpha和Beta測(cè)試(I)Alpha測(cè)試由用戶在開發(fā)者的場(chǎng)所進(jìn)行,并且在開發(fā)者對(duì)用戶的“指導(dǎo)”下進(jìn)行測(cè)試。Alpha測(cè)試是在受控的環(huán)境中進(jìn)行的。Beta測(cè)試是軟件在開發(fā)者不能控制的環(huán)境中的“真實(shí)”應(yīng)用。7.6白盒測(cè)試法關(guān)注軟件內(nèi)部邏輯結(jié)構(gòu)(controlstructure)測(cè)試每條邏輯通路,檢查斷點(diǎn)(breakpoint)狀態(tài)測(cè)試方案對(duì)程序邏輯的覆蓋程度決定測(cè)試的完全性程度White-BoxTestingUsethestructureoftheprogramtotest.——Structuraltesting白盒測(cè)試可能的執(zhí)行通路=51+52+……
+520
loop=20X123453170年!365×24小時(shí)/年1毫秒/條1014條=1014條365×24小時(shí)/年窮盡測(cè)試(completetest)一系列測(cè)試過(guò)程的總稱,這組測(cè)試過(guò)程逐漸進(jìn)行越來(lái)越完整的通路測(cè)試。邏輯覆蓋(Logicalcoverage)4.白盒法測(cè)試方案的設(shè)計(jì)窮盡測(cè)試不可能
選少量“最有效”的testcases,做到盡可能完備的測(cè)試Error!選擇足夠多的測(cè)試數(shù)據(jù),使程序中每個(gè)可執(zhí)行的語(yǔ)句至少執(zhí)行一次。a(1)語(yǔ)句覆蓋(Statementcoverage)例: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入口A>1ANDB=0TA=2ORX>1TX=X/AX=X+1返回FFSabcdETestcase1:A=2,B=0,X=3覆蓋路徑SabcdEA>1ANDB=0 TA=2ORX>1 T語(yǔ)句覆蓋語(yǔ)句覆蓋入口A>1ANDB=0TA=2ORX>1TX=X/AX=X+1返回FFSabcdE問(wèn)題:只測(cè)試了判定表達(dá)式=T,為F時(shí)如有錯(cuò)誤無(wú)法發(fā)現(xiàn)!只關(guān)心判定表達(dá)式的值,不關(guān)心判定表達(dá)式中每個(gè)條件的取不同值的情況。Testcase1:A=2,B=0,X=3很弱的邏輯覆蓋若A>1ANDB=0錯(cuò)寫成A>1ORB=0,無(wú)法測(cè)試出!同樣,若A=2ORX>1錯(cuò)寫成 A=2ORX<1
,無(wú)法測(cè)試出!選擇足夠多的測(cè)試數(shù)據(jù),使每個(gè)判定的每個(gè)分支至少執(zhí)行一次。(分支覆蓋)入口A>1ANDB=0TA=2ORX>1TX=X/AX=X+1返回FFSabcdE兩種方案:1. SabcdE+SacE (TT) (FF)2.SabcE+SacdE (TF) (FT)(2)判定覆蓋(Branchcoverage)入口A>1ANDB=0TA=2ORX>1TX=X/AX=X+1返回FFSabcdETestcases3:①A=4,B=0,X=4(SabcE)②A=2,B=1,X=3(SacdE)問(wèn)題:任一方案都只檢查了全部路徑的一半(2/4)無(wú)法判斷內(nèi)部條件的錯(cuò)誤(如X>1錯(cuò)寫為X<1)方案2.SabcE+SacdE (TF) (FT)比語(yǔ)句覆蓋強(qiáng)判定覆蓋入口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測(cè)試用例必須覆蓋這8種可能的結(jié)果!選擇足夠多的測(cè)試數(shù)據(jù),使每個(gè)判定表達(dá)式中的每個(gè)條件都取到各種可能的結(jié)果。(3)條件覆蓋(Conditioncoverage)入口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條件覆蓋 判定覆蓋?條件覆蓋入口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表達(dá)式
(A=2ORX>1)始終為T,沒(méi)有覆蓋分支cE,不是判定覆蓋!條件覆蓋不一定包含判定覆蓋,判定覆蓋也不一定包含條件覆蓋!條件覆蓋選擇足夠多的測(cè)試數(shù)據(jù),使判定表達(dá)式中的每個(gè)條件都取到各種可能的值,而且每個(gè)判定表達(dá)式也都取到各種可能的結(jié)果。(4)判定-條件覆蓋入口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問(wèn)題:沒(méi)能覆蓋判定表達(dá)式中各條件取值的所有可能組合!若A>1ANDB=0錯(cuò)寫成
A>1ORB=0,無(wú)法測(cè)試出!同樣,若A=2ORX>1錯(cuò)寫成
A=2ANDX>1
,無(wú)法測(cè)試出!不一定能發(fā)現(xiàn)判定表達(dá)式中的邏輯錯(cuò)誤!判定-條件覆蓋選擇足夠多的測(cè)試數(shù)據(jù),使每個(gè)判定表達(dá)式中條件的各種可能組合都至少出現(xiàn)一次。滿足條件組合覆蓋一定能滿足判定覆蓋、條件覆蓋和判定—條件覆蓋。(5)條件組合覆蓋全部可能的條件組合為:①A>1,B=0TT②A>1,B0TF③A1,B=0FT
④A1,B0FF⑤A=2,X>1TT⑥A=2,X1TF
⑦A2,X>1FT⑧A2,X1FFTestcases7:①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問(wèn)題:不能保證覆蓋程序中的每一條路徑!沒(méi)有測(cè)試到路徑SabcE(表達(dá)式TF,條件①和⑧的組合)的情形入口A>1ANDB=0TA=2ORX>1TX=X/AX=X+1返回FFSabcdE最強(qiáng)的邏輯覆蓋條件組合覆蓋5.條件組合覆蓋4.判定-條件覆蓋3.條件覆蓋2.判定覆蓋1.語(yǔ)句覆蓋測(cè)試充分性測(cè)試代價(jià)邏輯覆蓋的關(guān)系7.6.2控制結(jié)構(gòu)測(cè)試(I)基本路徑測(cè)試步驟如下:第一步,根據(jù)過(guò)程設(shè)計(jì)結(jié)果畫出相應(yīng)的流圖第二步,計(jì)算流圖的環(huán)形復(fù)雜度。第三步,確定線性獨(dú)立路徑的基本集合。第四步,設(shè)計(jì)可強(qiáng)制執(zhí)行基本集合中每條路徑的測(cè)試用例。圖7.6求平均值過(guò)程的流圖圖7.6求平均值過(guò)程的流圖環(huán)形復(fù)雜度=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
當(dāng)程序中判定多于一個(gè)時(shí),形成的分支結(jié)構(gòu)可以分為兩類:嵌套型分支結(jié)構(gòu)和連鎖型分支結(jié)構(gòu)。對(duì)于嵌套型分支結(jié)構(gòu),若有n個(gè)判定語(yǔ)句,需要n+1個(gè)測(cè)試用例;對(duì)于連鎖型分支結(jié)構(gòu),若有n個(gè)判定語(yǔ)句,需要有2n個(gè)測(cè)試用例,覆蓋它的2n條路徑。條件測(cè)試路徑選擇循環(huán)分為4種不同類型:簡(jiǎn)單循環(huán)、連鎖循環(huán)、嵌套循環(huán)和非結(jié)構(gòu)循環(huán)。
(1)簡(jiǎn)單循環(huán)①零次循環(huán):從循環(huán)入口到出口
②一次循環(huán):檢查循環(huán)初始值
③二次循環(huán):檢查多次循環(huán)
④m次循環(huán):檢查在多次循環(huán)
⑤最大次數(shù)循環(huán)、比最大次數(shù)多一次、少一次的循環(huán)。循環(huán)測(cè)試路徑選擇例:求最小值k=i;for(j=i+1;j<=n;j++)
if(A[j]<A[k])k=j;
k=i;j=i+1;j<=n?A[j]<A[k]?k=jj++fdcabe測(cè)試用例選擇
①對(duì)最內(nèi)層循環(huán)做簡(jiǎn)單循環(huán)的全部測(cè)試。所有其它層的循環(huán)變量置為最小值;
②逐步外推,對(duì)其外面一層循環(huán)進(jìn)行測(cè)試。測(cè)試時(shí)保持所有外層循環(huán)的循環(huán)變量取最小值,所有其它嵌套內(nèi)層循環(huán)的循環(huán)變量取“典型”值。
③反復(fù)進(jìn)行,直到所有各層循環(huán)測(cè)試完畢。 ④對(duì)全部各層循環(huán)同時(shí)取最小循環(huán)次數(shù),或者同時(shí)取最大循環(huán)次數(shù)(2)
嵌套循環(huán)
(3)連鎖循環(huán)
如果各個(gè)循環(huán)互相獨(dú)立,則可以用與簡(jiǎn)單循環(huán)相同的方法進(jìn)行測(cè)試。但如果幾個(gè)循環(huán)不是互相獨(dú)立的,則需要使用測(cè)試嵌套循環(huán)的辦法來(lái)處理。(4)非結(jié)構(gòu)循環(huán)
這一類循環(huán)應(yīng)該使用結(jié)構(gòu)化程序設(shè)計(jì)方法重新設(shè)計(jì)測(cè)試用例。
STARTINPUT(A,B,C)IFA>5 THENX=10 ELSEX=1ENDIFIFB>10 THENY=20 ELSEY=2ENDIFIFC>15THENZ=30 ELSEZ=3ENDIFPRINT(X,Y,Z)STOP習(xí)題:設(shè)計(jì)下列偽碼程序的語(yǔ)句覆蓋和路徑覆蓋測(cè)試用例:注意路徑覆蓋指把程序的每條路徑執(zhí)行一次,與基本路徑測(cè)試不同(考慮獨(dú)立路徑)STARTINPUT(A,B,C)IFA>5 THENX=10 ELSEX=1ENDIFIFB>10 THENY=20 ELSEY=2ENDIFIFC>15THENZ=30 ELSEZ=3ENDIFPRINT(X,Y,Z)STOP(1)語(yǔ)句覆蓋的測(cè)試用例有三個(gè)判斷表達(dá)式,并且每個(gè)表達(dá)式為真和為假都有語(yǔ)句執(zhí)行,因此需要兩組測(cè)試數(shù)據(jù),使每個(gè)判定的真假各一次,這樣才能使每條語(yǔ)句都至少執(zhí)行一次。第一組,使三個(gè)判定全假:輸入:A=1,B=1,C=1預(yù)期的輸出:X=1,Y=2,Z=3第二組,使三個(gè)判定全真:輸入:A=10,B=20,C=30預(yù)期的輸出:X=10,Y=20,Z=30STARTINPUT(A,B,C)IFA>5 THENX=10 ELSEX=1ENDIFIFB>10 THENY=20 ELSEY=2ENDIFIFC>15THENZ=30 ELSEZ=3ENDIFPRINT(X,Y,Z)STOP(2)路徑覆蓋測(cè)試用例:該程序共有2*2*2=8條可能的路徑,為了能覆蓋每條路徑,需要8組測(cè)試數(shù)據(jù),剛才的全真和全假已經(jīng)有了,只需補(bǔ)充剩余6個(gè):第三組,真真假:輸入:A=10,B=20,C=10預(yù)期的輸出:X=10,Y=20,Z=3第四組,真假假:輸入:A=10,B=10,C=10預(yù)期的輸出:X=10,Y=2,Z=3第五組,真假真:輸入:A=10,B=10,C=30預(yù)期的輸出:X=10,Y=2,Z=30其余的依次類推,不再贅述。習(xí)題:設(shè)計(jì)下列偽碼的分支覆蓋和條件組合覆蓋測(cè)試用例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)STOPSTARTINPUT(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)分支覆蓋測(cè)試用例:分支覆蓋即判定覆蓋,指的是判定的每個(gè)分支都執(zhí)行一次,本題有兩個(gè)判定,因此設(shè)計(jì)兩組測(cè)試數(shù)據(jù):第一組,判定全真輸入:A=1,B=1,C=2,D=0預(yù)期輸出:X=2,Y=2第二組,判定全假輸入:A=1,B=0,C=0,D=1預(yù)期輸出:X=1,Y=1STARTINPUT(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)條件組合覆蓋測(cè)試用例:條件組合要求每個(gè)表達(dá)式的各種可能組合都至少出現(xiàn)一次。對(duì)于第一個(gè)表達(dá)式有4種組合:對(duì)于第二個(gè)表達(dá)式有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對(duì)應(yīng)組合之。具體不再贅述。習(xí)題:使用基本路徑測(cè)試方法,設(shè)計(jì)測(cè)試下面列出的偽碼程序的測(cè)試用例: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)
STOP123647911125810用基本路徑測(cè)試方法設(shè)計(jì)測(cè)試用例有4步:(1)畫出流圖(2)計(jì)算環(huán)形復(fù)雜度為5(3)確定獨(dú)立路徑的基本集合路徑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)設(shè)計(jì)測(cè)試用例,不再贅述7.7黑盒測(cè)試技術(shù)黑盒測(cè)試著重測(cè)試軟件功能。它很可能發(fā)現(xiàn)白盒測(cè)試不易發(fā)現(xiàn)的其他類型的錯(cuò)誤。黑盒測(cè)試力圖發(fā)現(xiàn)下述類型的錯(cuò)誤:
①功能不正確或遺漏了功能;
②界面錯(cuò)誤;
③數(shù)據(jù)結(jié)構(gòu)錯(cuò)誤或外部數(shù)據(jù)庫(kù)訪問(wèn)錯(cuò)誤;
④性能錯(cuò)誤;
⑤初始化和終止錯(cuò)誤。7.7黑盒測(cè)試技術(shù)1、等價(jià)劃分2、邊界值分析3、錯(cuò)誤推測(cè)7.7.1等價(jià)劃分(I)等價(jià)劃分是一種黑盒測(cè)試技術(shù),這種技術(shù)把程序的輸入域劃分成若干個(gè)數(shù)據(jù)類,據(jù)此導(dǎo)出測(cè)試用例。等價(jià)類測(cè)試的關(guān)鍵就是選擇確定類的等價(jià)關(guān)系。(1)等價(jià)劃分思想:將程序的所有輸入數(shù)據(jù)劃分為不同的區(qū)域,同一區(qū)域中各個(gè)輸入數(shù)據(jù)對(duì)于揭露程序中的錯(cuò)誤是等價(jià)的,稱為等價(jià)類。然后從每一個(gè)等價(jià)類中選取少數(shù)有代表性的數(shù)據(jù)做為測(cè)試用例。等價(jià)類有效等價(jià)類無(wú)效等價(jià)類輸出等價(jià)類優(yōu)點(diǎn):可以濾掉同類數(shù)據(jù),提高測(cè)試效率劃分:試探性、經(jīng)驗(yàn)劃分等價(jià)類的啟發(fā)式規(guī)則值的范圍 x∈[a,b]
x<a,x>b
值的個(gè)數(shù) x=a
x<a,x>a
值約束 x∈A={a1,a2,…,an} x∈A
值的規(guī)則 {x|P(x)}
{x|┐P(x)}
等價(jià)類的細(xì)化 x∈Z Z+,0,Z-
表格 空表、一行、多行建立等價(jià)類表輸入條件有效等價(jià)類無(wú)效等價(jià)類.........設(shè)計(jì)步驟劃分等價(jià)類,建立等價(jià)類表設(shè)計(jì)測(cè)試用例設(shè)計(jì)一新測(cè)試方案,盡可能多覆蓋尚未被覆蓋的有效等價(jià)類,重復(fù),直至全部覆蓋
——減少testcases設(shè)計(jì)一新測(cè)試方案,覆蓋且僅覆蓋一個(gè)無(wú)效等價(jià)類,重復(fù),直至全部覆蓋
——避免無(wú)效測(cè)試?yán)何募?/p>
以字母為首的字母數(shù)字串
testcase: 9A*B設(shè)變量x1和x2和函數(shù)F聯(lián)系起來(lái)。設(shè)X1,x2有以下邊界以及邊界內(nèi)的區(qū)間:a<=x1<=d,區(qū)間[a,b),[b,c),[c,d]e<=x2<=g,區(qū)間[e,f),(f,g]X1,x2的無(wú)效值是x1<a,x1>d,x2<e,x2>g.
弱一般等價(jià)類測(cè)試弱一般等價(jià)類測(cè)試通過(guò)使用一個(gè)測(cè)試用例中的每個(gè)等價(jià)類的一個(gè)變量實(shí)現(xiàn)。
強(qiáng)一般等價(jià)類測(cè)試強(qiáng)一般等價(jià)類測(cè)試基于多缺陷假設(shè)
弱健壯等價(jià)類測(cè)試弱:?jiǎn)稳毕菁僭O(shè)健壯:考慮了無(wú)效值
強(qiáng)健壯等價(jià)類測(cè)試強(qiáng):多缺陷假設(shè)健壯:考慮無(wú)效值7.7.1例(I)NextDate:月日年等價(jià)類M1={1..12}M2={<1}M3={>12}D1={1..31}D2={<1}D3={>31}Y1={1912..2112}Y2={<1912}Y3={>2112}有效類的數(shù)量等于獨(dú)立變量個(gè)數(shù)強(qiáng)弱一般等價(jià)類用例相同用例ID月份日期年預(yù)期輸出WN1,SN161520122012年6月167.7.1例(II)弱健壯等價(jià)類用例用例ID月份日期年預(yù)期輸出WR161520122012年6月16WR2-1152012月份不在WR313152012月份不在WR46-12012日期不在WR56322012日期不在WR66151911年份不在WR76152113年份不在7.7.1例(III)額外強(qiáng)健壯等價(jià)類用例用例ID月份日期年預(yù)期輸出SR1-1152012月份不在SR26-12012日期不在SR313151911年份不在SR4-1-12012日期不在、月份不在SR56-11911日期不在、年份不在SR6-1151911年份不在、月份不在SR7-1-11911年月日不在7.7.1例(IV)NextDate:月日年等價(jià)類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}7.7.1例(V)強(qiáng)一般等價(jià)類用例個(gè)數(shù)=3*4*3=36個(gè)(略)強(qiáng)健壯等價(jià)類用例個(gè)數(shù)=5*6*5=150個(gè)(略)用例ID月份日期年預(yù)期輸出WN161420002000年6月15WN272919961996年7月30WN32302002不可能的日期WN46312000不可能的輸入日期弱等價(jià)類測(cè)試用例等價(jià)劃分法的評(píng)價(jià)選用等價(jià)類中典型值/任意值作為testcases沒(méi)有選用某些高效率的測(cè)試方案7.7.2邊界值分析(BoundaryValueAnalysis,BVA)處理邊界情況最易出錯(cuò)選擇邊界值作testcases,暴露error的可能性大剛好等于等價(jià)類邊界值稍小于稍大于"Bugslurkincornersandcongregateatboundaries..."——BorisBeizer邊界值分析的規(guī)則值的范圍 x∈[a,b] a-1,a,b,b+1
值的個(gè)數(shù) a~b a-1,a,b,b+1
輸出等價(jià)類 sinx 1 π/2
0 0
-1 -π/2
有序集 [1,n]
[0,n-1] 錯(cuò)位_π210-1π2【例】stringinteger (計(jì)算機(jī)字長(zhǎng)16位,二進(jìn)制補(bǔ)碼表示)合法輸出等價(jià)類[-32768,0)內(nèi)的負(fù)整數(shù)0(0,32767]內(nèi)的正整數(shù)非法輸出等價(jià)類<-32768>32767函數(shù)說(shuō)明 Functionstrtoint(dstr:shortstr):integer;參數(shù)類型說(shuō)明 typeshortstr=array[1..6]ofchar;假設(shè)不考慮PASCAL編譯程序可過(guò)濾的錯(cuò)誤‘-32769’→錯(cuò)!下溢‘32768’→錯(cuò)!上溢‘-32768’→-32768‘000000’→0‘32767’→32767邊界值分析方法的評(píng)價(jià)邊界值→testcases,易發(fā)現(xiàn)錯(cuò)誤考慮輸出等價(jià)類聯(lián)合使用等價(jià)劃分、邊界值分析方法7.7.3錯(cuò)誤推測(cè)法特
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年版酒店餐飲行業(yè)食品安全與售后服務(wù)標(biāo)準(zhǔn)協(xié)議3篇
- 二零二五年船舶安全監(jiān)督與船員資質(zhì)審核協(xié)議3篇
- 2025年度商業(yè)空間瓷磚定制及安裝服務(wù)合同4篇
- 二零二五版蒙娜麗莎瓷磚環(huán)保認(rèn)證與市場(chǎng)準(zhǔn)入?yún)f(xié)議4篇
- 2025年度校園建筑裝修設(shè)計(jì)及施工合同模板4篇
- 2025年跨境電商物流成本分析與合同執(zhí)行監(jiān)控協(xié)議4篇
- 2025年度購(gòu)房贈(zèng)送全屋水電改造及裝修服務(wù)合同4篇
- 2025年度廠外施工環(huán)境保護(hù)合同范本3篇
- 2025版虛擬貨幣交易平臺(tái)免責(zé)聲明合同范本4篇
- 2025年智慧環(huán)衛(wèi)綠化服務(wù)外包合同標(biāo)準(zhǔn)范本3篇
- 農(nóng)民工考勤表(模板)
- 承臺(tái)混凝土施工技術(shù)交底
- 臥床患者更換床單-軸線翻身
- 加強(qiáng)保育員隊(duì)伍專業(yè)化建設(shè)提升幼兒園保教質(zhì)量
- 計(jì)量基礎(chǔ)知識(shí)培訓(xùn)教材201309
- 中考英語(yǔ) 短文填詞、選詞填空練習(xí)
- 一汽集團(tuán)及各合資公司組織架構(gòu)
- 阿特拉斯基本擰緊技術(shù)ppt課件
- 初一至初三數(shù)學(xué)全部知識(shí)點(diǎn)
- 新課程理念下的班主任工作藝術(shù)
- (完整版)企業(yè)破產(chǎn)流程圖(四張)
評(píng)論
0/150
提交評(píng)論