面向?qū)ο蟮能浖y試_第1頁
面向?qū)ο蟮能浖y試_第2頁
面向?qū)ο蟮能浖y試_第3頁
面向?qū)ο蟮能浖y試_第4頁
面向?qū)ο蟮能浖y試_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

軟件測試(六)面向?qū)ο蟮能浖y試本章要點(diǎn)面向?qū)ο蟮幕靖拍蠲嫦驅(qū)ο蟮臏y試模型面向?qū)ο蟮膯卧獪y試面向?qū)ο蟮募珊拖到y(tǒng)測試面向?qū)ο蟮幕靖拍蠲嫦驅(qū)ο蟮母拍詈蛻?yīng)用已超越了程序設(shè)計(jì)和軟件開發(fā),擴(kuò)展到很寬的范圍,成為20世紀(jì)90年代以來軟件開發(fā)的主流。面向?qū)ο蟮能浖_發(fā)以抽象、繼承、封裝、重載、多態(tài)為基本特征。抽象類的定義中明確指出類是一組具有內(nèi)部狀態(tài)和運(yùn)動(dòng)規(guī)律的對象的抽象。抽象是一種從一般的觀點(diǎn)看待事物的方法,它要求我們集中于事物的本質(zhì)特征(內(nèi)部狀態(tài)和運(yùn)動(dòng)規(guī)律),而非具體細(xì)節(jié)或具體實(shí)現(xiàn)。面向?qū)ο蠊膭?lì)我們用抽象的觀點(diǎn)來看待現(xiàn)實(shí)世界,也就是說,現(xiàn)實(shí)世界是一組抽象的對象——類組成的。繼承繼承是指這樣一種能力:它可以使用現(xiàn)有類的所有功能,并在無需重新編寫原來的類的情況下對這些功能進(jìn)行擴(kuò)展。通過繼承創(chuàng)建的新類稱為“子類”或“派生類”。被繼承的類稱為“基類”、“父類”或“超類”。繼承的過程,就是從一般到特殊的過程。繼承概念的實(shí)現(xiàn)方式有三類:實(shí)現(xiàn)繼承、接口繼承和可視繼承。實(shí)現(xiàn)繼承是指使用基類的屬性和方法而無需額外編碼的能力;接口繼承是指僅使用屬性和方法的名稱、但是子類必須提供實(shí)現(xiàn)的能力;可視繼承是指子窗體(類)使用基窗體(類)的外觀和實(shí)現(xiàn)代碼的能力。封裝封裝,也就是把客觀事物封裝成抽象的類,并且類可以把自己的數(shù)據(jù)和方法只讓可信的類或者對象操作,對不可信的進(jìn)行信息隱藏。對象間的相互聯(lián)系和相互作用過程主要通過消息機(jī)制得以實(shí)現(xiàn)。對象之間并不需要過多的了解對方內(nèi)部的具體狀態(tài)或運(yùn)動(dòng)規(guī)律。面向?qū)ο蟮念愂欠庋b良好的模塊,類定義將其說明(用戶可見的外部接口)與實(shí)現(xiàn)(用戶不可見的內(nèi)部實(shí)現(xiàn))顯式地分開,其內(nèi)部實(shí)現(xiàn)按其具體定義的作用域提供保護(hù)。類是封裝的最基本單位。封裝防止了程序相互依賴性而帶來的變動(dòng)影響。在類中定義的接收對方消息的方法稱為類的接口。多態(tài)多態(tài)性(polymorphism)是指同名的方法可在不同的類中具有不同的運(yùn)動(dòng)規(guī)律。在父類演繹為子類時(shí),類的運(yùn)動(dòng)規(guī)律也同樣可以演繹,演繹使子類的同名運(yùn)動(dòng)規(guī)律或運(yùn)動(dòng)形式更具體,甚至子類可以有不同于父類的運(yùn)動(dòng)規(guī)律或運(yùn)動(dòng)形式。不同的子類可以演繹出不同的運(yùn)動(dòng)規(guī)律。實(shí)現(xiàn)多態(tài),有兩種方式:覆蓋、重載。覆蓋,是指子類重新定義父類的虛函數(shù)的做法。重載,是指允許存在多個(gè)同名函數(shù),而這些函數(shù)的參數(shù)表不同(或許參數(shù)個(gè)數(shù)不同,或許參數(shù)類型不同,或許兩者都不同)。類和對象類是一個(gè)對一組像是對象的一般性描述(如,模板、模式或藍(lán)圖)。通過定義,存在于類中的所有對象繼承其屬性和用于操縱屬性的操作。父類是類的集合,子類是類的實(shí)例。這些定義蘊(yùn)含了類層次的存在,父類的屬性和操作被子類繼承,而子類也可以加入自己“私有的”屬性和方法。屬性屬性依附于類和對象,并且以某種方式描述類或?qū)ο?。Champeaux及其同事給出了如下的關(guān)于屬性的討論:現(xiàn)實(shí)的實(shí)體經(jīng)常用指明其穩(wěn)定特性的詞來描述。大多數(shù)物理對象具有形狀、重量、顏色和材料類型等特性;人具有生日、父母、名字、膚色等特性,特性可被視為在類和某確定域之間的二元關(guān)系。面向?qū)ο蟮拈_發(fā)方法傳統(tǒng)的面向過程的開發(fā)方法是以過程為中心,以算法為驅(qū)動(dòng),因此,面向過程的編程語言是程序=算法+數(shù)據(jù)面向?qū)ο蟮拈_發(fā)方法是以對象為中心,以消息為驅(qū)動(dòng),因此,面向?qū)ο蟮木幊陶Z言是程序=對象+消息。傳統(tǒng)開發(fā)方法開發(fā)軟件存在的問題軟件重用性差軟件可維護(hù)性差軟件穩(wěn)定性差面向?qū)ο蟮姆治雒嫦驅(qū)ο蟮姆治觯∣bjectOrientedAnalysis,OOA),是在一個(gè)系統(tǒng)的開發(fā)過程中進(jìn)行了系統(tǒng)業(yè)務(wù)調(diào)查以后,按照面向?qū)ο蟮乃枷雭矸治鰡栴}。四個(gè)基本步驟:第一步,獲取功能需求。第二步,根據(jù)功能和參與者確定系統(tǒng)的對象和類。第三步,確定類的結(jié)構(gòu)、主題、屬性和方法。第四步,建造對象模型。面向?qū)ο蟮脑O(shè)計(jì)面向?qū)ο蟮脑O(shè)計(jì)(ObjectOrientedDesign,OOD),是根據(jù)OOA中確定的類和對象,設(shè)計(jì)軟件系統(tǒng),以作為面向?qū)ο蟮木幊痰幕A(chǔ)。整個(gè)設(shè)計(jì)過程分為系統(tǒng)設(shè)計(jì)和對象設(shè)計(jì)。系統(tǒng)設(shè)計(jì)過程包括:系統(tǒng)分解確定并發(fā)性設(shè)計(jì)人機(jī)交互子系統(tǒng)設(shè)計(jì)任務(wù)管理子系統(tǒng)設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)面向?qū)ο蟮哪P湍P褪菍?shí)體的特征和變化規(guī)律的一種表示或抽象,即把對象實(shí)體通過適當(dāng)?shù)倪^濾,用適當(dāng)?shù)谋憩F(xiàn)規(guī)則描繪出的模仿品。該模型主要關(guān)心系統(tǒng)中對象的結(jié)構(gòu)、屬性和操作,它是分析階段三個(gè)模型的核心,是其他兩個(gè)模型的框架。在面向?qū)ο蟮拈_發(fā)中,有對象模型、動(dòng)態(tài)模型和功能模型這三種常用模型。對象模型對象模型使表示了靜態(tài)的、結(jié)構(gòu)化的系統(tǒng)數(shù)據(jù)性質(zhì),描繪了系統(tǒng)的靜態(tài)結(jié)構(gòu),它是從客觀世界實(shí)體的對象關(guān)系角度來描繪的,表現(xiàn)了對象的相互關(guān)系。在該模型中包括以下幾方面的元素。對象和類關(guān)聯(lián)和鏈層次結(jié)構(gòu)動(dòng)態(tài)模型動(dòng)態(tài)模型是與時(shí)間和變化有關(guān)的系統(tǒng)性質(zhì)。該模型描述了系統(tǒng)的控制結(jié)構(gòu),它表示了瞬間的、行為化的系統(tǒng)控制。它關(guān)心的是系統(tǒng)的控制、操作的執(zhí)行順序,它從對象的事件和狀態(tài)的角度出發(fā),表現(xiàn)了對象的相互行為。事件狀態(tài)狀態(tài)圖功能模型功能模型描述了系統(tǒng)的所有計(jì)算。功能模型指出發(fā)生了什么,動(dòng)態(tài)模型確定什么時(shí)候發(fā)生,而對象模型確定發(fā)生的客體。功能模型由多張數(shù)據(jù)流圖組成。處理數(shù)據(jù)流動(dòng)作對象數(shù)據(jù)存儲對象面向?qū)ο筌浖臏y試策略面向?qū)ο鬁y試的目標(biāo)和傳統(tǒng)的結(jié)構(gòu)化軟件測試相同,都是需要在現(xiàn)實(shí)和時(shí)間范圍內(nèi)利用有限的時(shí)間和工作量盡可能多的發(fā)現(xiàn)錯(cuò)誤。面向?qū)ο笙到y(tǒng)測試一般都包含以下主題:單元測試類的集成測試系統(tǒng)測試回歸測試面向?qū)ο鬁y試的相關(guān)模型面向?qū)ο蟮膯卧獪y試當(dāng)考慮到面向?qū)ο筌浖r(shí),單元測試的概念發(fā)生了變化。面向?qū)ο筌浖肓朔庋b和類的概念,這意味著每個(gè)類的實(shí)例(對象)包裝有屬性(數(shù)據(jù))和處理這些數(shù)據(jù)的操作(函數(shù))。封裝的類常是單元測試的重點(diǎn),然而,類中包含的操作是最小的可測試單元。以方法為單元以方法為單元可以將面向?qū)ο髥卧獪y試歸結(jié)為傳統(tǒng)的(面向過程的)單元測試。方法幾乎等價(jià)于過程,所以可以使用所有傳統(tǒng)功能性和結(jié)構(gòu)性測試技術(shù)。面向?qū)ο蟮膯卧獪y試以類為單元在以類為單元的測試中不再孤立的對單個(gè)操作進(jìn)行測試,而是將其作為類的一部分。以類作為單元可以解決類內(nèi)集成問題,但是會產(chǎn)生其他問題。不能測試抽象類,因?yàn)樗荒鼙粚?shí)例化;如果使用充分扁平化的類,則還要在單元測試結(jié)束后將其“恢復(fù)”為原來的形式;如果不使用充分扁平化的類,則為了編譯類需要在繼承樹中高于除該類外的所有其他類。面向?qū)ο蟮募蓽y試對于面向?qū)ο笙到y(tǒng),由于測試重點(diǎn)是重用和類,因此測試這種集成單元是至關(guān)重要的。多態(tài)性中存在的一種方式是通過動(dòng)態(tài)綁定實(shí)現(xiàn)的多態(tài),這也為測試帶來了很大的挑戰(zhàn)。面向?qū)ο笙到y(tǒng)的集成測試有兩種不同的策略一種是基于線程的測試,集成影響系統(tǒng)的一個(gè)輸入或者事件所需的一組類,每個(gè)線程單獨(dú)的集成和測試。應(yīng)用回歸測試以確保沒有其他關(guān)聯(lián)產(chǎn)生。另一種方法是基于使用的測試,通過測試很少使用服務(wù)類的那些類(獨(dú)立類)開始構(gòu)造系統(tǒng),獨(dú)立類測試完成后,利用獨(dú)立類測試下一層的類(依賴類)。繼續(xù)依賴類的測試,直到完成整個(gè)系統(tǒng)的測試。面向?qū)ο蟮募蓽y試在面向?qū)ο笙到y(tǒng)的集成測試中需要注意以下幾點(diǎn):面向?qū)ο笙到y(tǒng)本質(zhì)上是通過小的、可重用的組件構(gòu)成。因此,集成測試對于面向?qū)ο笙到y(tǒng)來說更重要。面向?qū)ο笙到y(tǒng)下組件的開發(fā)一般更具并行性,因此對頻繁集成的要求更高。由于并行性提高,集成測試時(shí)需要考慮類的完成順序,也需要設(shè)計(jì)驅(qū)動(dòng)器來模擬外沒有完成的類功能。面向?qū)ο蟮南到y(tǒng)測試面向?qū)ο蟮南到y(tǒng)測試是針對非功能需求的測試,它所包含的范圍是所有功能需求以外的需求以及注意事項(xiàng)。面向?qū)ο笙到y(tǒng)測試有三個(gè)主要目的:驗(yàn)證產(chǎn)品交付的組件和系統(tǒng)性能能否達(dá)到要求;定位產(chǎn)品的容量以及邊界限制;定位系統(tǒng)性能瓶頸。面向?qū)ο笙到y(tǒng)的回歸測試將集成測試的討論再向前推進(jìn)一步,回歸測試對于面向?qū)ο笙到y(tǒng)非常重要。作為面向?qū)ο笙到y(tǒng)強(qiáng)調(diào)依賴可重用組件的結(jié)果,對任何組件的變更都可能對使用該組件的客戶引入潛在的副作用,對于面向?qū)ο笙到y(tǒng)測試來說,頻繁運(yùn)行集成和回歸測試用例是很有必要的。此外,由于繼承等性質(zhì)導(dǎo)致的變更級聯(lián)效果,盡可能早地捕獲缺陷是很有意義的?;貧w測試需要時(shí)間、經(jīng)費(fèi)和人力來計(jì)劃、實(shí)施和管理。為了在給定的預(yù)算和進(jìn)度下,盡可能有效力地進(jìn)行回歸測試,需要對測試用例庫進(jìn)行維護(hù)并依據(jù)一定的策略選擇相應(yīng)的回歸測試包。面向?qū)ο筌浖臏y試用例設(shè)計(jì)面向?qū)ο鬁y試與傳統(tǒng)測試相類似,但它們的測試策略是不同的。由于面向?qū)ο蠓治雠c設(shè)計(jì)模型在結(jié)構(gòu)和內(nèi)容上與面向?qū)ο蟪绦蛳囝愃疲虼?,測試從對這些模型的評審開始。當(dāng)代碼產(chǎn)生后,面向?qū)ο鬁y試則是從設(shè)計(jì)一系列用例檢驗(yàn)類操作的小型測試和類與其他類進(jìn)行協(xié)作時(shí)是否出現(xiàn)錯(cuò)誤開始。當(dāng)集成類形成一個(gè)子系統(tǒng)時(shí),結(jié)合基于故障的方法,運(yùn)用基于使用的測試對相互協(xié)作的類進(jìn)行完全檢查。最后,利用用例發(fā)現(xiàn)軟件確認(rèn)層的錯(cuò)誤。相比于傳統(tǒng)的結(jié)構(gòu)化程序測試通過軟件的【輸入】-【處理】-【輸出】視圖或者單個(gè)模塊的算法細(xì)節(jié)來設(shè)計(jì)測試用例的方式,面向?qū)ο鬁y試側(cè)重于設(shè)計(jì)適當(dāng)?shù)牟僮餍蛄衼頇z查類的狀態(tài)。面向?qū)ο鬁y試用例設(shè)計(jì)的基本概念類經(jīng)過分析模型到設(shè)計(jì)模型的演變,它成為測試用例設(shè)計(jì)目標(biāo)。由于操作和屬性是封裝的,從類的外面測試操作通常是不現(xiàn)實(shí)的。盡管封裝是面向?qū)ο蟮幕咎卣髦?,但可能成為測試的阻礙。前面描述的白盒測試方法可以應(yīng)用于類中定義的操作。基本路徑、循環(huán)測試或者數(shù)據(jù)流技術(shù)有助于確保測試一個(gè)操作的每一條語句。但是,因?yàn)轭惖牟僮鹘Y(jié)構(gòu)簡潔,所以通常采用白盒測試方法來測試類的層次的測試。并且,與利用傳統(tǒng)的軟件工程方法開發(fā)的系統(tǒng)一樣,黑盒測試方法同樣也適用于面向?qū)ο笙到y(tǒng)測試。用例可以為黑盒測試提供有用的輸入。面向?qū)ο缶幊虒y試的影響面向?qū)ο缶幊炭赡軐y試有幾種方式的影響,依賴于面向?qū)ο缶幊痰姆椒āD承╊愋偷墓收献兊镁筒豢赡埽ú恢档萌y試);某些類型的故障變得更加可能(值得進(jìn)行測試);出現(xiàn)某些新的故障類型。測試面向?qū)ο蟮念惒僮黝愃朴跍y試一段代碼,它設(shè)置了函數(shù)參數(shù),然后調(diào)用該函數(shù)。繼承是一種方便的生產(chǎn)多態(tài)的方式,在調(diào)用點(diǎn),關(guān)心的不是繼承,而是多態(tài)?;诠收系臏y試在面向?qū)ο笙到y(tǒng)中,基于故障的測試的目標(biāo)是設(shè)計(jì)最有可能發(fā)現(xiàn)似乎可能的故障的測試。集成測試在消息鏈接中查找似乎可能的故障,在此語境下,會遇到三種類型的故障:非期望的結(jié)果、錯(cuò)誤的操作/消息使用、不正確的調(diào)用。基于場景的測試基于故障測試忽略了兩種主要的錯(cuò)誤類型:(1)不正確的規(guī)格說明;(2)子系統(tǒng)間的交互?;趫鼍暗臏y試關(guān)心用戶做什么,而不是產(chǎn)品做什么。這意味著需要通過用例捕獲用戶必須完成的任務(wù),然后在測試時(shí)使用它們及其變體。場景可以發(fā)現(xiàn)交互錯(cuò)誤。為了達(dá)到這一標(biāo)準(zhǔn),測試用例必須比基于故障的測試更復(fù)雜且更切合實(shí)際。基于場景的測試傾向于用單一的測試檢查多個(gè)子系統(tǒng),用戶并不限制自己一次只使用一個(gè)子系統(tǒng)。表層結(jié)構(gòu)和深層結(jié)構(gòu)的測試表層結(jié)構(gòu)是指面向?qū)ο蟪绦虻耐獠靠捎^察的結(jié)構(gòu),即對最終用戶顯而易見的。許多面向?qū)ο笙到y(tǒng)的用戶可能不是完成某個(gè)功能,而是得到以某種方式操縱的對象。但是,無論接口是什么,測試仍然是基于用戶任務(wù)進(jìn)行的。捕捉這些任務(wù)涉及理解、觀察以及與有代表性的用戶進(jìn)行交談。深層結(jié)構(gòu)指面向?qū)ο蟪绦虻膬?nèi)部技術(shù)細(xì)節(jié),即通過檢查設(shè)計(jì)和代碼來理解的數(shù)據(jù)結(jié)構(gòu)。設(shè)計(jì)深層結(jié)構(gòu)測試來檢查面向?qū)ο筌浖O(shè)計(jì)模型中的依賴關(guān)系、行為和通信機(jī)制。分析模型和設(shè)計(jì)模型用作深層結(jié)構(gòu)測試的基礎(chǔ)。面向?qū)ο蟮能浖y試案例HelloWorld類的測試每一種語言在其學(xué)習(xí)用書的第一個(gè)例子通常都是最簡單的HelloWorld。HelloWorld類的測試為了對HelloWorld類進(jìn)行測試,可以編寫以下測試用例,它本身也是一個(gè)Java類文件。Date.increment方法的測試首先對于類CalendarUnit,它提供一個(gè)方法在所繼承的類中設(shè)置取值,提供一個(gè)布爾方法說明所繼承類中的屬性是否可以增1。Date.increment方法的測試要測試Date.increment方法需要開發(fā)類testIt用做測試驅(qū)動(dòng),即創(chuàng)建一個(gè)測試日期對象,然后請求該對象對其本身增1,最后打印新值。Date.increment方法的測試Date類的CRC卡中的信息類名:Date責(zé)任:Date對象由日期、月份和年對象組成。Date對象使用所繼承的Day和Month對象中的布爾增量方法對其本身增1;如果日期和月份對象本身不能增1(例如月份或年的最后一天),則Date的增量方法會根據(jù)需要重新設(shè)置日期和月份。如果是12月31日,則年也要增1。printDate操作使用Day、Month和Year對象中的get()方法,

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論