軟件測試(完整版).ppt_第1頁
軟件測試(完整版).ppt_第2頁
軟件測試(完整版).ppt_第3頁
軟件測試(完整版).ppt_第4頁
軟件測試(完整版).ppt_第5頁
已閱讀5頁,還剩489頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、軟件測試Software testing,軟件學院 段喜龍 D312 2014.9,2,課程安排:,學時分配:40學時(32+8) 教材: 軟件測試技術 聯(lián)系方式:,3,第一部分 基礎篇,第1章 軟件測試背景 1.1 軟件錯誤案例(when software attacks) 1.2 軟件缺陷(whats?why comes?and its cost) 1.3 軟件測試員(job and qualification),1.1 軟件錯誤案例,Software cases,5,趣事(The funny),美國國稅局(IRS)的尷尬 1993年7月,IRS發(fā)出了近680億美元的稅單 最大方的自動柜員

2、機 2001年1月,歐元正式流通后幾天,德國的某些自動柜員機竟能在提款后不記入帳目! 壞脾氣的洗手間 2001年6月,在英國,一個全自動的洗手間突然出現(xiàn)故障,將一位老太太整整困了2小時,6,嚴重事故(The serious),1996年12月,歐洲航天局(ESA)阿利亞娜5型火箭在發(fā)射39秒以后爆炸(10年,70億) 原因:運算溢出錯誤 1999年11月,美國國家航空航天局(NASA)發(fā)射火星溫度探測器失蹤 原因:單位換算錯誤 千年蟲問題,大約1974 原因:盲目的強調(diào)數(shù)據(jù)壓縮,7,悲?。═he tragic),愛國者導彈的失利(1991年2月) 原因:積累的時鐘誤差 美國海軍“文森斯”號巡洋

3、艦誤擊伊朗客機(1987年4月) 原因:不可靠的模式識別算法,1.2 軟件缺陷,software fault Defect-缺點 Variance-偏差 Fault-缺陷 Failure-失敗 Problem-問題 Inconsistency-矛盾 Error-錯誤 Feature-特殊 Incident-毛病 Bug Anomaly-異常,9,1.2.1軟件缺陷是什么?,定義:只有符合下列5個規(guī)則的軟件問題,我們將其定義為軟件缺陷(software fault) 軟件未達到產(chǎn)品說明書標明的功能 軟件出現(xiàn)了產(chǎn)品說明書指明不會出現(xiàn)的錯誤 軟件功能超出產(chǎn)品說明書指明范圍 軟件未達到產(chǎn)品說明書雖未指

4、出但應達到的目標 軟件測試員認為軟件難以理解、不易使用、運行速度緩慢、或者最終用戶認為不好。,10,1.2.2為什么會出現(xiàn)軟件缺陷?,從小程序到大項目的無數(shù)研究得出:導致軟件缺陷最大的原因是產(chǎn)品說明書(需求) 其次的原因是設計方案的問題。,11,1.2.3軟件缺陷的修復費用,1.2.4 軟件質量,軟件質量是軟件產(chǎn)品滿足使用要求的程度。 質量模型: McCall模型 Boehm模型 ISO/IEC9126模型,1.3 軟件測試員,Software tester,14,1.3.1軟件測試員的工作,軟件測試員是客戶的眼睛,是第一次看到軟件的人,代表客戶說話,應力求完美。 軟件測試員的目標是盡可能早的

5、找出軟件缺陷,并確保其得以修復。,15,The Software Job Spectrum,SDE: Software Design Engineer SDE/T: Software Design Engineer in Test STE: Software Test Engineer PM: Program Manager,SDE,STE,Development,Testing,16,Division of Labor,Windows 2000 Product Team,Total of 5,245 People 900 Developers 1,800 Testers Largest pr

6、oduct team in Microsoft history(at the time),17,1.3.2怎樣成為優(yōu)秀的軟件測試員,技術能力 探索精神 不懈努力 創(chuàng)造力,說服力 準確的洞察力 老練穩(wěn)重 追求完美,18,第2章 軟件測試基礎,2.1 測試原則(principle) 2.2 測試目的(purpose) 2.3 測試對象(object) 2.4 測試術語(glossary) 2.5 測試方法(method),2.1測試原則,principle,20,1.完全測試程序是不可能的,輸入量太大 輸出結果多 軟件實現(xiàn)途徑太多 軟件說明書沒有客觀標準,21,2.軟件測試是有風險的行為,如果試圖

7、測試所有情況,費用將大幅增加,軟件缺陷漏掉的數(shù)量并不會隨費用上漲而顯著下降。 如果減少測試或者錯誤地確定測試對象,那么費用很低,但是會漏掉大量軟件缺陷。 (每個項目都有一個最優(yōu)的測試量),22,3.測試無法顯示潛伏的軟件缺陷,“Program testing can be used to show the presence of bugs but never to show their absence.” Edsger W. Dijkstra, 1972,23,4.找到的軟件缺陷越多,就說明軟件缺陷越多,充分注意測試中的群集現(xiàn)象。經(jīng)驗表明,測試后程序中殘存的錯誤數(shù)目與該程序中已發(fā)現(xiàn)的錯誤數(shù)目成

8、正比。,There is Always One More Bug,24,5.并非所有軟件缺陷都能修復,沒有足夠的時間必須保證按時完成 不算真正的軟件缺陷 修復的風險太大修復一個可能導致其他 不值得修復不常出現(xiàn)或在不常用功能中出現(xiàn)的,對于軟件缺陷是否應該修復,其決策過程應由軟件測試員、項目管理員和程序員共同參與。,25,6. 軟件測試是一項講究條理的技術專業(yè),對于軟件測試應嚴格制定并執(zhí)行測試計劃,排除測試的隨意性。 應當對每一個測試結果做全面檢查。 妥善保存測試計劃,測試用例,出錯統(tǒng)計和最終分析報告,為維護提供方便。 程序員應避免檢查自己的程序。,2.2測試目的,purpose,27,基于不同的

9、立場,存在著兩種完全不同的測試目的,從用戶的角度出發(fā),普遍希望通過軟件測試暴露軟件中隱藏的錯誤和缺陷,以考慮是否可接受該產(chǎn)品。 從軟件開發(fā)者的角度出發(fā),則希望測試成為表明軟件產(chǎn)品中不存在錯誤的過程,驗證該軟件已正確地實現(xiàn)了用戶的要求,確立人們對軟件質量的信心,28,Myerss Testing Objectives,Testing is a process of executing a program with the intent of finding an error. A good test is one that has a high probability of finding an

10、 as yet undiscovered error. A successful test is one that uncovers an as yet undiscovered error.,29,換言之,測試的目的是:,以最少的時間和人力,系統(tǒng)地找出軟件中潛在的各種錯誤和缺陷。 證明 檢測 預防,2.3測試對象,object,31,測試對象,軟件測試并不等于程序測試。軟件測試應貫穿于軟件定義與開發(fā)的整個期間。 需求分析、概要設計、詳細設計以及程序編碼等各階段所得到的文檔,包括需求規(guī)格說明、概要設計規(guī)格說明、詳細設計規(guī)格說明以及源程序,都應成為軟件測試的對象。,2.4測試術語,glossar

11、y,33,錯誤(error),人類會犯錯誤,很接近的一個同義詞是過錯(mistake)。人們在編寫代碼是會出現(xiàn)過錯,我們把這種過錯叫做bug。,34,缺陷(fault),缺陷是錯誤的結果。更精確地說,缺陷是錯誤的表現(xiàn),而表現(xiàn)是表示的模式,例如:敘述性文字、數(shù)據(jù)流框圖、層次結構圖、源代碼等。 缺陷分為過錯缺陷和遺漏缺陷。 若把某些信息輸入到不正確的表示中,就是過錯缺陷;如果沒有輸入正確信息,則為遺漏缺陷。,35,失效(failure),當缺陷執(zhí)行時會發(fā)生失效。有兩點需要解釋:一是失效只出現(xiàn)在可執(zhí)行的表現(xiàn)中,通常是源代碼,或更確切地說是被裝載的目標代碼;二是這種定義只與過錯缺陷有關。對于遺漏缺陷,

12、可以通過有效的評審來避免其產(chǎn)生的失效。,事故(incident),當出現(xiàn)失效時,可能會也可能不會呈現(xiàn)給用戶,事故說明出現(xiàn)了與失效類似的情況,警告用戶注意所出現(xiàn)的失效。,36,測試(test),測試顯然要處理錯誤、缺陷、失效和事故。,測試用例(test case),測試用例應由測試輸入數(shù)據(jù)和對應的預期輸出結果這兩部分組成。,OVER,37,通過維恩圖理解測試,軟件測試基本上關心的是行為,而行為與軟件(和系統(tǒng))開發(fā)人員很常見的結構視圖無關。 結構視圖關注的是它是什么,而行為視圖關注的是它做什么。 一直困擾測試人員的難點之一,就是基本文檔通常都是由開發(fā)人員編寫, 并且是針對開發(fā)人員的,因此這些文檔強

13、調(diào)的是結構信息,而不是行為信息。,38,考慮一個程序行為全域。給定一段程序及其規(guī)格說明,集合S是所描述的行為,集合P是用程序實現(xiàn)的行為。,S 規(guī)格說明,P 程序,程序行為,預期的,所實現(xiàn)的,39,遺漏缺陷,過錯缺陷,測試就是確定既被描述又被實現(xiàn)的程序行為的范圍,同時盡量找出缺陷。,S和P相交的部分是“正確”部分,即既被描述又被實現(xiàn)的行為。,40,41,2和5,可能會有沒有測試的已描述行為。 1和4,經(jīng)過測試的已描述行為。 3和7,對應于未描述行為的測試用例。 2和6,可能會有沒有測試的程序行為。 1和3,經(jīng)過測試的程序行為。 4和7,未通過程序實現(xiàn)的行為。,測試的目標:測試人員怎樣才能使這些集

14、合的相交區(qū)域(區(qū)域1)盡可能地大。,2.5測試方法,43,從代碼的特性角度(即內(nèi)部)出發(fā),單元測試(Unit Test):最微小規(guī)模的測試,用以測試某個功能或代碼塊。典型的單元測試應由程序員而非測試員來做,因為它需要知道內(nèi)部程序設計和編碼的細節(jié)知識。 功能測試(Function Test)或特性測試(Feature Test):按照軟件的功能或特性逐個進行測試。,覆蓋測試(Coverage Testing),44,提交測試 (Check-in Test):在開發(fā)人員對代碼做了任何修改,或者修復了某個Bug時,需要重新Check-in代碼 (即將修改后的代碼放大到整個大的系統(tǒng)中) 基本驗證測試

15、(Build Verification Test,簡稱BVT):對完成的代碼進行編譯和連接,產(chǎn)生一個構造,以檢查程序的主要功能是否會像預期一樣進行工作。這是最簡單而又最省時的一種測試方法。每產(chǎn)生一個新的構造時都要進行測試。如果BVT通不過,表明問題很嚴重,開發(fā)人員需要盡快修復出現(xiàn)的問題,測試人員也就不用浪費時間做其他測試了,45,回歸測試(Regression Test): 過一段時間以后,再回過頭來對以前修復過的Bug重新進行測試,看該Bug是否會重新出現(xiàn)。,46,從用戶的角度(即外部)出發(fā),配置測試(Configuration Test):從用戶的使用出發(fā)進行多方面的測試,要考慮到用戶的多

16、種情況,用多種配置對軟件進行測試。 兼容性測試(Compatibility Test):主要考慮兼容性問題,比如同一個產(chǎn)品的不同版本之間的兼容問題,不同廠家的同一個產(chǎn)品之間的兼容問題,不同類型軟件之間的兼容問題等。,使用測試(Usage testing),47,強力測試(StressTest):在各種極限情況下對產(chǎn)品進行測試 (如很多人同時使用該軟件,或者反復運行該軟件),以檢查產(chǎn)品的長期穩(wěn)定性。 性能測試(Performance Test):本項測試是保證程序具有良好的性能。如果別人的產(chǎn)品只需5秒鐘就能得出結果,而你的產(chǎn)品需要10秒鐘才能得出結果,就說明你的產(chǎn)品性能不好。,48,文檔和幫助文

17、件測試(Documentation and help file Test): 因為用戶通常是通過文檔和幫助文件來學習使用產(chǎn)品的,如果文檔和幫助文件存在錯誤,就可能會導致用戶無法正常使用產(chǎn)品。 Alpha和Beta測試(Alpha and Beta Test):在正式發(fā)布產(chǎn)品之前往往要先發(fā)布一些測試版,讓用戶能夠反饋出相關信息,或者找到存在的Bug,以便在正式版中得到解決。,49,從區(qū)分測試用例的角度出發(fā),黑盒測試(Black Box Testing ):功能性,基于軟件規(guī)格說明的測試,任何程序都可以看作是將從輸入定義域取值映射到輸出值域的函數(shù)。,50,測試用例,對于功能性測試,不管采用什么方法

18、,測試用例集合完全局限在已描述行為集合內(nèi)。(基于已描述行為),51,黑盒測試的優(yōu)點:,黑盒測試(功能性測試)與軟件如何實現(xiàn)無關,所以如果實現(xiàn)發(fā)生變化,測試用例仍然有用; 測試用例開發(fā)可以與實現(xiàn)并行進行,可縮短項目總的開發(fā)時間。,不足!測試用例之間可能存在嚴重的冗余,此外可能還會有未測試的軟件漏洞,52,白盒測試(white box testing):結構性測試,基于覆蓋全部代碼、分支、路徑、條件的測試。,由于實現(xiàn)是已知的,測試人員可以嚴格描述要測試的確切內(nèi)容。,53,測試用例,對于結構性測試,不管采用什么方法,測試用例集合完全局限在已由程序實現(xiàn)的行為集合內(nèi)。 (基于程序行為),54,結構性測試

19、的特點,測試人員可以利用線性圖論的理論,嚴格描述要測試的確切內(nèi)容。 在結構性測試中,測試覆蓋指標能提供明確的測試范圍。,55,從測試方式出發(fā),靜態(tài)測試:靜態(tài)分析技術,不運行程序,分析文檔(說明書、源程序)進行測試。 動態(tài)測試:執(zhí)行被測程序,通過執(zhí)行結果分析軟件可能出現(xiàn)的錯誤。,56,從測試階段出發(fā),單元測試 集成測試 系統(tǒng)測試,57,示例,編程:從鍵盤輸入三角形三條邊a、b、c,判斷該三角形是什么三角形(等腰、等邊、直角、等腰直角、一般、非),并從屏幕上輸出結果。,第3章 軟件測試風險管理,Risk Management,59,3.1 測試風險的基本概念,在軟件測試中,即使很小的軟件系統(tǒng),也不

20、可能對系統(tǒng)的所有方面進行測試,就會存在測試風險,即沒有安排或執(zhí)行測試用例,但是存在用戶發(fā)現(xiàn)缺陷的可能性。 測試風險發(fā)生的可能性 測試風險發(fā)生后的影響,測試風險的分類,技術風險 管理風險,3.2 測試風險的識別技術,頭腦風暴法 訪談 風險檢查表,3.3 測試風險分析,確定測試范圍的功能點和性能屬性 確定測試風險發(fā)生的可能 確定測試風險發(fā)生后產(chǎn)生的影響程度 計算測試風險優(yōu)先級 確定測試風險優(yōu)先級,3.4 測試計劃風險的應對措施,縮小范圍 推遲實現(xiàn) 增加資源 減少質量過程,第4章 測試過程概述,Testing Process,4.1 常見的測試過程模型,瀑布模型 V模型 W模型 X模型 H模型,瀑布

21、模型,瀑布模型的核心思想是按工序將問題化簡,將功能的實現(xiàn)與設計分開,采用機構化的分析與設計方法將邏輯實現(xiàn)與物理實現(xiàn)分開。 軟件生命周期劃分為制定計劃、需求分析、軟件設計、程序編寫、軟件測試、運行維護。 規(guī)定活動自上而下、相互銜接的固定次序,逐級下落。,瀑布模型的重要地位,瀑布模型是最早出現(xiàn)的軟件開發(fā)模型,在軟件工程中占有重要的地位,它提供了軟件開發(fā)的基本框架。其過程是從上一項活動接收該項活動的工作對象作為輸入,利用這一輸入實施該項活動應完成的內(nèi)容給出該項活動的工作成果,并作為輸出傳給下一項活動。同時評審該項活動的實施,若確認,則繼續(xù)下一項活動;否則返回前面,甚至更前面的活動。對于經(jīng)常變化的項目

22、而言,瀑布模型毫無價值。,瀑布模型的優(yōu)點,為項目提供了按階段劃分的檢查點。 當前一階段完成后,您只需要去關注后續(xù)階段。 可在迭代模型中應用瀑布模型。,缺點,在項目各個階段之間極少有反饋。 只有在項目生命周期的后期才能看到結果。 通過過多的強制完成日期和里程碑來跟蹤各個項目階段。,總結,傳統(tǒng)的瀑布模型,軟件測試的地位和價值并沒有體現(xiàn)出來,測試只能作為一個事后補救工作。早期的錯誤可能要等到開發(fā)后期的測試階段才能發(fā)現(xiàn),進而帶來嚴重的后果。 各個階段的劃分完全固定,階段之間產(chǎn)生大量的文檔,極大地增加了工作量。 由于開發(fā)模型是線性的,用戶只有等到整個過程的末期才能見到開發(fā)成果,從而增加 了開發(fā)的風險。,

23、測試傳統(tǒng)模型-V模型,V模型是最廣為人知的測試模型 由Paul Rook在世紀年代后期提出的,旨在改進軟件開發(fā)的效率和效果。 從左到右,描述了基本的開發(fā)過程和測試行為 非常明確地標明了測試過程中存在的不同級別,描述了這些測試階段和開發(fā)過程期間各階段的對應關系,V模型(測試與開發(fā)階段對應關系),單元和集成測試應檢測程序的執(zhí)行是否滿足軟件設計的要求; 系統(tǒng)測試應檢測系統(tǒng)功能、性能的質量特性是否達到系統(tǒng)要求的指標; 驗收測試確定軟件的實現(xiàn)是否滿足用戶需要或合同的要求。,V模型的缺陷,存在局限性,僅僅把測試過程作為在需求分析、系統(tǒng)設計及編碼之后的一個階段,只針對程序進行的尋找錯誤的活動,忽視了測試活動

24、對需求分析,系統(tǒng)設計等活動的驗證和確認的功能,直到后期的驗收測試才被發(fā)現(xiàn)。,W模型,W模型由Evolutif公司提出。 W模型從V模型演化過來,實際上開發(fā)是V,測試也是與此并行的V。 相對于V模型,W模型增加了軟件各開發(fā)階段中應同步進行的驗證和確認活動。,W模型,測試伴隨整個軟件開發(fā)周期,而且測試的對象不僅僅是程序,需求、設計等同樣要測試,測試與開發(fā)是同步進行的。 W模型有利于盡早地全面的發(fā)現(xiàn)問題。,W模型的缺點,W模型也存在局限性。在W模型中,需求、設計、編碼等活動被視為串行的,同時,測試和開發(fā)活動也保持著一種線性的前后關系,上一階段完全結束,才可正式開始下一個階段工作。這樣就無法支持迭代的

25、開發(fā)模型。 對于當前軟件開發(fā)復雜多變的情況,W模型并不能解除測試管理面臨著困惑。,X模型,很好地處理測試與開發(fā)的交接過程(交接的過程是一個時間段,而不是一個點) 左邊描述的是針對單獨程序片段所進行的相互分離的編碼和測試,此后將進行頻繁的交接,通過集成最終合成為可執(zhí)行的程序,然后再對這些可執(zhí)行程序進行測試。 己通過集成測試的成品可以進行封裝并提交給用戶,也可以作為更大規(guī)模和范圍內(nèi)集成的一部分。多根并行的曲線表示變更可以在各個部分發(fā)生。 X模型還定位了探索性測試,這是不進行事先計劃的特殊類型的測試,給有經(jīng)驗的測試人員在測試計劃之外發(fā)現(xiàn)更多的軟件缺陷。,H模型,H模型,在H模型中,軟件測試過程是一個

26、獨立的流程,貫穿于整個產(chǎn)品周期,與其他流程并發(fā)地進行。 H模型指出,軟件測試要盡早準備,盡早執(zhí)行。 當某個測試時間點就緒時,軟件測試即從測試準備階段進入測試執(zhí)行階段。 軟件測試可以根據(jù)被測物的不同而分層次進行。不同的測試活動可以是按照某個次序先后進行的。但也可能是反復的,只要某個測試達到準備就緒點,測試執(zhí)行活動就可以開展。,第3章 數(shù)學背景離散數(shù)學,84,關于集合,重要的是它使我們能夠作為一個單位,或一個整體引用多個事物。 例如:我們可能要引用正好有30天的月份,若采用集合論表示法可以寫為: M1= 以上表示法讀做“M1”是元素4月、6月、9月、11月的集合。,3.1集合論(set theor

27、y),85,集合中的項叫做集合的元素或成員,這種關系采用符號 表示。 因此,我們可以有,3.1.1集合成員關系,如果事物是集合成員,如果事物不是集合成員,86,3.1.2集合定義,集合定義有三種方式:簡單列出集合的元素,給出辨別規(guī)則,或通過其他集合構建。 定義一個年份集合為: Y =1812,1813,1814, ,2011,2012 通過列出元素定義集合時,與元素順序沒有關系,87,也可以通過給出辨別規(guī)則來定義。 如可以把年份定為: Y =year:1812year2012 讀做 “Y是所有year的集合,使得year在1812(含)2012(含)之間” 。 當采用辨別規(guī)則定義集合時,必須保

28、證是無歧義的,即定義要清晰。給出年份的所有可能取值,因此可以判斷某個年份是否在我們的集合中。,88,3.1.3空集,空集采用符號 ,在集合論中占有特殊位置??占话?。 空集是唯一的,即不會有兩個空集; 、 都是不同的集合。 如果集合被辨別規(guī)則定義為永遠失敗。那么該集合就是空集。如: =year:2012year1812,89,在維恩圖中,集合被表示為一個圓圈,圓圈中的點表示集合元素。這樣我們可以把集合M1= ,表示為,3.1.4維恩圖,4月 11月 9月 6月,U,90,給定集合A和B,包括并、交、補、相對補、對稱差。 兩個集合的笛卡爾積(又叫做叉積),它取決于有序對偶的概念,無序和有序

29、對偶的表示法一般是: 無序對偶:(a,b) 有序對偶: 若 ab 則,(a,b)= (b,a), 但 ,3.1.5集合操作,91,定義:兩個集合A和B的笛卡爾積,是集合 AB= :xAyB 集合A的勢是A中的元素數(shù),采用|A|表示,對于集合A和B, |AB|=|A|B|,利用笛卡爾積可以描述具有多個輸入變量的程序的測試用例。 笛卡爾積的乘法性質,意味著這種形式的測試會生成大量測試用例。,92,A是B的子集,記做 ,當且僅當 A是B的真子集,記做 ,當且僅當 A和B是相等集合,記做A=B,當且僅當 若A的每個元素也是B的元素,集合A是集合B 的子集;如果A和B互為子集,則A和B相等。,3.1.6

30、集合關系,93,3.1.7子集劃分,“劃分”的含義是將一個整體分為小塊,使得所有事物都在某個小塊中,不會遺漏。 形式化的描述是: 定義:給定集合B,以及B的一組子集A1、A2, ,An,這些子集是B的一個劃分,當且僅當A1A2An=B,且,94,由于一個劃分是一組子集,因此我們常常把單個子集看作是劃分的元素。 這個定義的兩部分對于測試人員很重要。第一部分保證B的所有元素都在某個子集中,第二部分保證B沒有元素在兩個子集中。 劃分對測試人員很有用,因為劃分能保證:完備性和無冗余性。當研究功能性測試,經(jīng)常會出現(xiàn)漏洞和冗余性:有些內(nèi)容沒有被測試,而另外一些內(nèi)容被測試多次。功能性測試的主要困難之一,就是

31、找出合適的劃分。,95,3.1.8集合恒等式,96,97,所有功能性測試的基礎都是函數(shù)。 定義:給定集合A和B,函數(shù)f是AB的一個子集,使得對于ai,ajA,bi,bjB, f(ai)=bi ,f(aj)=bj,3.2函數(shù),3.2.1定義域與值域,集合A是函數(shù)f的定義域,集合B是值域。 函數(shù)的表示法:f:A B或,98,在以下定義中,首先給出函數(shù)f:A B,并且定義集合: 這個集合有時記做A在f下的映象。 定義: f是從A到B的上函數(shù),當且僅當f(A)=B; f是從A到B的中函數(shù),當且僅當 f是從A到B的一對一函數(shù),當且僅當對于所有 ai,ajA,,3.2.2函數(shù)類型,99,f是從A到B的多對

32、一函數(shù),當且僅當存在ai,ajA, aiaj使得f(ai) = f(aj); 所有這些對于測試都很重要。中函數(shù)與上函數(shù),意味著基于定義域還是基于值域的功能性測試,一對一函數(shù)要求比多對一函數(shù)要多得多的測試。,100,假設取A、B和C作為NextDate程序的日期集合,其中: A =日期:1812年1月1日日期2012年12月31日 B =日期:1812年1月2日日期2013年1月1日 C = A B 現(xiàn)在, NextDate : A B是一個一對一的上函數(shù),NextDate : A C是一個一對一 的中函數(shù)。,101,3.2.3函數(shù)合成,假設我們有集合和函數(shù),使得一個函數(shù)的值域是另一個函數(shù)的定義

33、域: f:A B g:BC h:CD 如果出現(xiàn)這種情況,則可以合成函數(shù)。 設引用集合定義域和值域的特定元素aA、 bB、cC、 dD,并假設f(a)=b、g(b)=c和h(c)=d,則函數(shù)g和f的合成為:,102,3.3關系,函數(shù)是關系的一種特例 定義:給定兩個集合A和B,關系R是笛卡爾積AB的一個子集。 給定兩個集合A和B,一個關系 關系R的勢是: 一對一勢,當且僅當R是A到B的一對一函數(shù) 多對一勢,當且僅當R是A到B的多對一函數(shù) 一對多勢,當且僅當至少有一個元素aA在R中的兩個有序對偶中,即(a,bi)R和(a,bj)R,103,設A是一個集合,設 是定義在A上的 一個關系,關系具有四個特

34、殊屬性: 自反的,當且僅當所有aA,R 對稱的,當且僅當若R,則R 反對稱的,當且僅當若、R,則 a=b 傳遞的,當且僅當若、R,則R,3.3.2單個集合上的關系,104,關系 是偏序關系,如果R是自反、反對稱和傳遞的。 關系 是等價關系,如果R是自反、對稱和傳遞的。 如果b1和b2是在相同的劃分元素中,則我們說b1和b2是相關的(b1Rb2),這個關系是自反的、對稱的、傳遞的。叫由劃分歸納的等價關系。 如果從定義在一個集合上的等價關系開始,則可根據(jù)與該等價關系相關的元素定義子集,這些子集就構成劃分,由等價關系歸納的劃分,劃分中的集合叫做等價類。 因此,只測試等價類中的一個元素,并假設剩余的元

35、素有類似的測試結果,可大大提高測試效率。,舉例,106,NextDate問題,NextDate是一個有三個變量(月份、日期和年)的函數(shù)。函數(shù)返回輸入日期后面的那個日期。變量月份、日期和年都具有整數(shù)值,且滿足以下條件: c1. 1月份12 c2. 1月份31 c3. 1812年2012,107,程序要求,類Date:year、month、day、Isleapyear()、Week()、NextDate()、PreDate() 對該程序進行調(diào)試、測試、確保沒有錯誤,記錄所有測試的輸入數(shù)據(jù)、輸出數(shù)據(jù),OVER,第4章 數(shù)學背景圖論,109,4.1圖,圖(又叫線性圖)是一種由兩個集合定義的抽象數(shù)學結構

36、,即一個節(jié)點集合和一個構成節(jié)點之間連接的邊集合。 定義:圖G=由節(jié)點的有限(并且非空) 集合V和節(jié)點無序對偶集合E組成。 V=n1,n2, ,nm和E=e1,e2, ,ep 其中每條邊ek=ni,nj, ni,njV。 ni,nj是一個無序對偶,有時記做(ni,nj),110,如左圖所示,節(jié)點和邊集合為: V=n1,n2,n3, n4,n5,n6,n7 和 E=e1,e2, e3, e4,e5 =(n1,n2), (n1,n4), (n3,n4), (n2,n5), (n4,n6) 把節(jié)點看做是程序語句,并且邊表示控制流或定義/使用關系。,111,4.1.1節(jié)點的度,定義:節(jié)點的度是以該節(jié)點作

37、為端點的邊的條數(shù)。我們把節(jié)點n的度記做deg(n)。 可以說,節(jié)點的度表示它在圖中的“流行程度”。如果圖中的節(jié)點表示對象,邊表示消息,則節(jié)點(對象)的度表示適合該對象的集成測試范圍。 上圖中節(jié)點的度是:deg(n1)=2,deg(n2)=2 deg(n3)=1,deg(n4)=3, deg(n5)=1,deg(n6)=1, deg(n7)=0,112,4.1.2關聯(lián)矩陣,定義:擁有m個節(jié)點和n條邊的圖G=的關聯(lián)矩陣是一種mn矩陣,其中第i行第j列的元素是1,當且僅當節(jié)點i是邊j的一個端點,否則元素是0。 任何列的表項和為2,這是因為每條邊都是恰好有兩個端點。,113,4.1.3相鄰矩陣,定義:

38、擁有m個節(jié)點和n條邊的圖G=的相鄰矩陣是一種mm矩陣,其中第i行第j列的元素是1,當且僅當節(jié)點i和節(jié)點j之間存在一條邊,否則元素是0。 相鄰矩陣是對稱的,行的和即是該節(jié)點的度,114,4.1.4路徑,定義:路徑是一系列的邊,對于序列中的任何相鄰邊對偶ei,ej, 邊都擁有相同的(節(jié)點)端點。 上圖中的一些路徑是:,115,4.1.5連接性,定義:節(jié)點ni和nj是被連接的,當且僅當它們都在同一條路徑上。 “連接性”是一種圖的節(jié)點集合上的等價關系。 連接性是自反的, 連接性是對稱的, 連接性是傳遞的。 圖的組件是相連節(jié)點的最大集合。上圖中有兩個組件:n1,n2,n3,n4,n5,n6和n7,116

39、,4.1.6壓縮圖,給定圖G=,其壓縮圖通過用壓縮節(jié)點替代每個組件構成。 在我們的例子中的組件是 s1=n1,n2,n3,n4,n5,n6 和s2=n7,117,4.1.7圈數(shù),圖G的圈數(shù)由V(G)=e-n+p給出,其中: e是G中的邊數(shù) n是G中的節(jié)點數(shù) p是G中的組件數(shù) V(G)是圖中不同區(qū)域的個數(shù)。 在結構性測試的一個定理要求使用程序中的基本路徑概念,并使得程序圖的圈數(shù)就是這些基本路徑的數(shù)量。,118,4.2有向圖,對于有向圖,邊有了方向含義,在符號上,無序對偶(ni ,nj)變成有序對偶,我們說有向邊從節(jié)點ni到nj,而不是在節(jié)點之間。 定義:有向圖(或框圖)D=(V,E)包含:一個節(jié)

40、點的有限集合V= n1,n2, ,nm,一個邊的集合E=e1,e2, ,ep,其中每條ek=是節(jié)點ni,njV的一個有序對偶。 有向圖中的邊適合很多軟件概念:串性行為、命令式程序設計語言、按時間順序的事件等。,119,如左圖所示,節(jié)點和邊集合為: V=n1,n2,n3, n4,n5,n6,n7 和 E=e1,e2, e3, e4,e5 =, , ,120,4.2.1內(nèi)度與外度,定義: 有向圖中節(jié)點的內(nèi)度,是將該節(jié)點做為終止節(jié)點的不同邊的條數(shù)。記為indeg(n)。 有向圖中節(jié)點的外度,是將該節(jié)點做為開始節(jié)點的不同邊的條數(shù)。記為outdeg(n)。 如在上圖中節(jié)點具有以下內(nèi)度和外度: indeg

41、(n1)=0 outdeg(n1)=2 indeg(n2)=1 outdeg(n2)=1 一般圖和有向圖存在某種聯(lián)系,比如: deg(n)=indeg(n)+outdeg(n),121,4.2.2節(jié)點的類型,定義: 內(nèi)度為0的節(jié)點是源節(jié)點。 外度為0的節(jié)點是吸收節(jié)點。 內(nèi)度不為0,并且外度不為0的節(jié)點是傳遞節(jié)點 源節(jié)點和吸收節(jié)點構成圖的外部邊界。 既是源節(jié)點又是吸收節(jié)點的節(jié)點是孤立節(jié)點。 在上圖中,n1,n3和n7是源節(jié)點,n5,n6和n7是吸收節(jié)點,n2和n4是傳遞節(jié)點。n7是孤立節(jié)點,122,4.2.3有向圖的相鄰矩陣,定義:有m個節(jié)點和n條邊的圖D=的相鄰矩陣是一種mm矩陣,A=(aij

42、),其中aij=1,當且僅當從節(jié)點I到節(jié)點j之間有一條邊,否則該元素是0。,123,4.2.4路徑與半路徑,定義: (有向)路徑是一系列邊,使得第一條邊的終止節(jié)點是第二條邊的初始節(jié)點。 環(huán)路是一個在同一個節(jié)點上開始和結束的有向路徑。 半路徑是一系列邊,至少有一對相鄰邊對偶ei、ej來說,第一條邊的初始節(jié)點是第二條邊的初始節(jié)點,或第一條邊的終止節(jié)點是第二條邊的終止節(jié)點。 在上圖中,從n1到n6存在一條路徑,n1和n3之間有一條半路徑。,124,4.2.5可到達性矩陣,有m個節(jié)點和n條邊的圖D=的相鄰矩陣是一種mm矩陣,R=(rij),其中rij=1,當且僅當從節(jié)點I到節(jié)點j之間有一條路徑,否則該

43、元素是0。,125,4.2.6 n-連接性,有向圖中的兩個節(jié)點ni和nj是: 0-連接,當且僅當ni和nj之間沒有路徑。 1-連接,當且僅當ni和nj之間有一條半路徑,但是沒有路徑。 2-連接,當且僅當ni和nj之間有一條路徑。 3-連接,當且僅當從ni和nj之間有一條路徑,并且從nj和ni之間有一條路徑,126,n1和n7是0-連接 n2和n4是1-連接 n1和n6是2-連接 n3和n6是3-連接,127,4.2.7強組件,定義:有向圖的強組件是3-連接節(jié)點的最大集合。 在我們上一 個例子中, 強組件是集合 s1=n3,n4, n6 和s2=n7,128,強組件使我們能夠通過清除循環(huán)和孤立節(jié)

44、點來簡化有向圖。 有向圖的壓縮圖永遠不會包含環(huán)路。(如果包含環(huán)路,則環(huán)路會被劃分的最大化特性壓縮掉。),即有向無環(huán)圖,又叫DAG(directed acyclic graph),129,4.3用于測試的圖,廣泛用于測試的四種特殊圖。第一種是程序圖,主要用于單元測試層次。其他三種圖分別是:有限狀態(tài)機 、狀態(tài)圖和petri圖,這三種圖最適合用來描述系統(tǒng)級行為,盡管也可以用于較低層次的測試。,130,4.3.1程序圖,定義:給定一個采用命令式程序設計語言編寫的程序,其程序圖是一種有向圖,其中: 傳統(tǒng)定義: 節(jié)點是程序語句,邊表示控制流(從節(jié)點i到節(jié)點j有一條邊,當且僅當對應節(jié)點j的語句可以立即在節(jié)點

45、i對應的語句之后執(zhí)行)。 改進后的定義: 節(jié)點要么是整個語句,要么是語句的一部分,邊表示控制流(從節(jié)點i到節(jié)點j有一條邊,當且僅當對應節(jié)點j的語句或語句的一部分,可以立即在節(jié)點i對應的語句或語句的一部分之后執(zhí)行),131,結構化程序設計基本結構的有向圖:,串行,If-Then-Else,If-Then,132,條件(多分支),前測試環(huán)路,后測試環(huán)路,133,4.3.2有限自動機,有限狀態(tài)機是表示需求規(guī)格說明的一種相當標準的方法。所有結構化分析的實時擴展,都要使用某種形式的有限狀態(tài)機,并且?guī)缀跛行问降拿嫦驅ο蠓治鲆捕家褂糜邢逘顟B(tài)機。 有限狀態(tài)機是一種有向圖,其中狀態(tài)是節(jié)點,轉移是邊。源狀態(tài)和

46、吸收狀態(tài)是初始節(jié)點和終止節(jié)點。大多數(shù)有限狀態(tài)機表示方法都要為邊增加信息,以表示轉移的原因和作為轉移的結果要發(fā)生的行為。,134,ATM PIN識別部分,135,4.3.3狀態(tài)圖,David Harel在開發(fā)狀態(tài)圖表示法時,考慮到兩個功能:維恩圖描述層次結構的能力以及有向圖描述連接性的能力。 狀態(tài)圖現(xiàn)在被Rational公司選為統(tǒng)一建模語言(UML)的控制模型。 在狀態(tài)圖中,用“團點”表示基本構件塊。團點可以像維恩圖顯示集合包含那樣包含其它團點,團點還可以像在有向圖中連接節(jié)點一樣地通過邊連接其它團點。,136,團點A包含兩個團點(B和C),通過邊連接。團點A通過邊與團點D連接。,137,我們可以

47、把團點解釋為狀態(tài),把邊解釋為轉移。 狀態(tài)圖的“初始狀態(tài)”由沒有源狀態(tài)的邊表示。當狀態(tài)嵌入在其他狀態(tài)內(nèi)部時,使用同樣的方式顯示低層初始狀態(tài)。,狀態(tài)A是初始狀態(tài),當進入這個狀態(tài)時,也進入低層狀態(tài)B,138,當進入某個狀態(tài)時,我們可以認為該狀態(tài)是活動的。 從狀態(tài)A轉移到狀態(tài)D初看起來是有歧義的,因為它沒有區(qū)分狀態(tài)B和C 約定:邊必須開始和結束于狀態(tài)的外圍。如果狀態(tài)包含子狀態(tài),邊會“引用”所有的子狀態(tài)。 因此,從A到D的邊意味著轉移可以從狀態(tài)B或從狀態(tài)C發(fā)生。如果有從狀態(tài)D到狀態(tài)A的邊,則意味著轉移實際上是從狀態(tài)D到狀態(tài)B,139,傭金問題,前亞利桑那洲境內(nèi)的一位步槍銷售商銷售密蘇里州制造商制造的步槍

48、機(lock)、槍托(stock)和槍管(barrel)。槍機賣45美元,槍托賣30美元,槍管賣25美元。銷售商每月至少要售出一支完整的步槍,且生產(chǎn)限額是大多數(shù)銷售商在一個月內(nèi)可銷售70個槍機、80個槍托和90個槍管。,140,要求,根據(jù)當月的銷售情況,并計算銷售商的傭金如下: 不到(含)1000美元的部分為10%; 1000(不含)1800(含)美元的部分為15%; 超過1800美元的部分為20%。 傭金程序生成月份銷售報告,匯總售出的槍機、槍托和槍管總數(shù),銷售商的總銷售額以及傭金。,第三講 邊界值測試,Boundary test If you can safely and confiden

49、tly walk along the edge of a cliff without falling off, you can almost certainly walk in the middle of a field.,142,函數(shù):是將一個集合(函數(shù)的定義域)的值映射到另一個集合(函數(shù)的值域)的值上。任何程序都可以看做是一個函數(shù),程序的輸入構成函數(shù)的定義域,程序的輸出構成函數(shù)的值域。 輸入定義域測試是最著名的功能性測試手段。,143,3.1邊界值分析,設有兩個變量x1和x2的函數(shù)F,如果函數(shù)F實現(xiàn)為一個程序,則輸入兩個變量x1和x2會有一些邊界(可能為規(guī)定): ax1b cx2d 邊界值

50、分析關注的是輸入空間的邊界,以標識測試用例。 邊界值測試背后的基本原理是錯誤更可能出現(xiàn)在輸入變量的極值附近。,144,有些強類型語言(Pascal和Ada)允許顯示地定義變量值域。其目的就是要防止程序員出現(xiàn)某些類型的錯誤。而邊界測試更適用于采用非強類型語言編寫的程序。,145,邊界值分析的基本思想是使用在最小值、略高于最小值、正常值、略低于最大值和最大值處取得的值作為輸入變量值。 我們將以上這些在邊界值分析中取得的輸入變量值分別記做:min、min+、nom、max-和max。 邊界值分析的下一部分基于一種關鍵假設,叫做“單缺陷”假設。這種假設是說,失效極少是由兩個(或多個)缺陷的同時發(fā)生引起

51、的。 因此,通過使所有變量取正常值,而只使一個變量取極值來獲得邊界值分析測試用例。,146,對于我們的兩變量函數(shù)F,其邊界值分析測試用例是: , , , , , , , , ,147,3.1.1歸納邊界值分析,基本邊界值分析手段可以用兩種方式歸納:變量數(shù)量和值域。 歸納變量數(shù)量:如果有一個n變量函數(shù),使除一個以外的所有變量取正常值,使剩余的那個變量取最小值、略高于最小值、正常值、略低于最大值和最大值,對每個變量都重復進行,這樣,對于一個n變量函數(shù),邊界值分析會產(chǎn)生4n+1個測試用例。 歸納值域取決于變量本身的性質。,148,3.1.2邊界值分析的局限性,因為,邊界值分析假設變量是完全獨立的。如

52、果被測程序是多個獨立變量的函數(shù),這些變量受物理量的限制,則很適合邊界值分析。 而實際上,變量之間卻存在某種依賴關系。所以,邊界值分析測試用例是初步的。即便如此,邊界值分析也能捕獲大量的邊界值缺陷。,149,邊界值分析假設變量是完全獨立的。 邊界值分析測試用例通過引用物理量的邊界獨立變量極值導出,不考慮函數(shù)的性質,也不考慮變量的語義含義。 因此,由邊界值分析產(chǎn)生的測試用例是一種初步的測試用例。,150,3.2健壯性測試,健壯性測試是邊界值分析的一種簡單擴展:除了變量的五個邊界值分析取值,還要通過采用一個略超過最大值(max+)的取值,以及一個略小于最小值(min-)的取值,看看超過極值時系統(tǒng)會有

53、什么表現(xiàn)。 此時,輸入變量值可?。?min-、min、min+、nom、max-、max和max+。,151,變量取值7個,其中一個取正常值,用例個數(shù)6n+1,152,3.3最壞情況測試,邊界值測試分析采用了可靠性理論的單缺陷假設。拒絕這種假設,意味著我們關心當多個變量取極值時會出現(xiàn)什么情況。我們在這里使用這種思想來生成最壞情況測試用例。 對每個變量,首先進行包含min、min+、nom、max-和max五元素集合的測試,然后對這些集合進行笛卡爾積計算,以生成最壞測試用例。 顯然,邊界值分析測試用例是最壞情況測試用例的真子集。n變量函數(shù)的最壞情況測試,會產(chǎn)生5n個測試用例,而邊界值分析只產(chǎn)生4

54、n+1個測試用例。,153,min,min+,nom,max-,max min,min+,nom,max-,max,154,對于最壞情況測試的健壯性測試,采用健壯性測試的七元素集合的笛卡爾積作為測試用例。(72=49個用例),155,3.4 特殊值測試,特殊值測試大概是運用得最廣泛的一種功能性測試。 當測試人員使用其領域知識、使用類似程序的經(jīng)驗以及關于“軟點”信息開發(fā)測試用例時,會出現(xiàn)特殊值測試。 特殊測試特別依賴測試人員的能力。盡管特殊值測試是高度主觀性的,但是所產(chǎn)生的測試用例集合,常常更能有效地發(fā)現(xiàn)缺陷。,156,3.5用例,3.5.1三角形問題的測試用例 3.5.2Nextdate函數(shù)的

55、測試用例 3.5.3傭金問題的測試用例,157,3.5.3傭金問題的測試用例,對于產(chǎn)生傭金問題的測試用例,我們研究輸出值域的邊界值,特別是接近1000美元和1800美元門限點的值。,158,低于較低平面的值,對應低于1000美元門限的銷售額。兩個平面之間的值是15%傭金區(qū)域。 使用輸出值域確定測試用例的部分原因是,通過輸入值域生成的測試用例幾乎都在20%傭金區(qū)域。 我們要找出強調(diào)邊界值100美元、1000美元、1800美元和7800美元對應的輸入變量組合。 最大值和最小值的確定很容易,給出的數(shù)正好便于生成邊界點。對于邊界值1000美元、1800美元也可以確定出輸入的邊界點。(1000:槍機:1

56、0,槍托:10,槍管:10; 1800:槍機:18,槍托:18,槍管:18),159,3.6 隨機測試,隨機測試的思想是:不是永遠選取有界變量的最小值、略高于最小值、正常值、略低于最大值和最大值,而是使用隨機數(shù)生成器選出測試用例值。 隨機測試可以避免出現(xiàn)測試偏見,但是也帶來了一個嚴重的問題:多少隨機測試用例才是充分的。 對于有界變量axb可采用以下程序(C)生成:x=int(b-a+1)*random(1)+a 這個程序持續(xù)生成隨機測試用例,直到每種輸出至少出現(xiàn)一次。在每張表中,程序循環(huán)“七次”。,160,3.7邊界值測試的指導方針,除了特殊值測試,基于函數(shù)(程序)輸入定義域的測試方法,是所有

57、測試方法中最基本的。 這類測試方法都有一種假設,即輸入變量是真正獨立的,如果不能保證這種假設,則這類方法會產(chǎn)生不能令人滿意的測試用例(例如在Nextdate中的1912年2月31日)。 另一種很有用的基于輸出的測試用例形式,可用于生成錯誤消息的系統(tǒng)。測試人員應該設計測試用例,以檢查在適當?shù)臅r候,錯誤消息是否被生成,并且不會被錯誤地生成。,161,傭金問題,前亞利桑那洲境內(nèi)的一位步槍銷售商銷售密蘇里州制造商制造的步槍機(lock)、槍托(stock)和槍管(barrel)。槍機賣45美元,槍托賣30美元,槍管賣25美元。銷售商每月至少要售出一支完整的步槍,且生產(chǎn)限額是大多數(shù)銷售商在一個月內(nèi)可銷售

58、70個槍機、80個槍托和90個槍管。,162,要求,根據(jù)當月的銷售情況,并計算銷售商的傭金如下: 不到(含)1000美元的部分為10%; 1000(不含)1800(含)美元的部分為15%; 超過1800美元的部分為20%。 傭金程序生成月份銷售報告,匯總售出的槍機、槍托和槍管總數(shù),銷售商的總銷售額以及傭金。,找零錢最佳組合,假 設 商 店 貨 品 價 格 (R) 皆 不 大 于 100 元 ( 且 為 整 數(shù) ) , 若 顧 客 付 款 在 100 元 內(nèi) (P) , 求 找 給 顧 客 之 最 少 貨幣 個(張) 數(shù) ? ( 貨 幣 面 值 50 元 (N50) , 10 元 (N10) ,

59、 5 元 (N5) , 1 元 (N1) 四 種 ),163,第7章 等價類測試,Equivalence Class test,165,使用等價類作為功能性測試的基礎有兩個動機:我們希望進行完備的測試,同時又希望避免冗余。 而邊界值測試不能實現(xiàn)這兩種希望中的任意一個;研究那些測試用例表,很容易看出存在大量冗余,并且還會發(fā)現(xiàn)嚴重漏洞。 等價類測試重復邊界值測試的兩個決定因素,即健壯性和單/多缺陷假設。,166,7.1 等價類概述,在劃分中,由于子集是由等價關系決定的,因此,子集的元素都有一些共同點。所以,等價類測試的思想是通過每個等價類中的一個元素標識測試用例。如果廣泛選擇等價類,則這樣可以大大降低測試用例之間的冗余。 等價類測試的關鍵,就是選擇確定類的等價關系。但必須區(qū)分弱和強等價類。,167,7.2 等價類特點,測試的內(nèi)容相同 一個等價類中的某個測試可以發(fā)現(xiàn)缺陷,那么這個等價類的其他測試也能發(fā)現(xiàn)該缺陷。

溫馨提示

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

評論

0/150

提交評論