版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第六章 面向?qū)ο筌浖臏y(cè)試,[本章要點(diǎn)] 面向?qū)ο筌浖臏y(cè)試與傳統(tǒng)軟件的區(qū)別;類測(cè)試價(jià)值的評(píng)估方法;類測(cè)試用例設(shè)計(jì)方法;特殊類的測(cè)試方法;劃分面向?qū)ο筌浖y(cè)試的方法;開源工具Junit的使用方法。,[本章目標(biāo)] 了解面向?qū)ο蟮臏y(cè)試與傳統(tǒng)軟件測(cè)試的異同;掌握類測(cè)試的基礎(chǔ)知識(shí);重點(diǎn)理解針對(duì)抽象類以及接口類等特殊類的測(cè)試技巧,設(shè)計(jì)類測(cè)試用例和測(cè)試驅(qū)動(dòng)程序的幾種方法;初步了解Junit。,6.1面向?qū)ο蟮臏y(cè)試與傳統(tǒng)測(cè)試的比
2、較 傳統(tǒng)的測(cè)試計(jì)算機(jī)軟件的策略是從“小型測(cè)試”開始,逐步走向“大型測(cè)試”,且單元測(cè)試集中在最小的可編譯程序單位——子程序。 面向?qū)ο蟪绦虻慕Y(jié)構(gòu)不再是傳統(tǒng)的功能模塊結(jié)構(gòu),而是作為一個(gè)整體,并且對(duì)每個(gè)開發(fā)階段都有不同以往的要求和結(jié)果,已經(jīng)不可能用功能細(xì)化的觀點(diǎn)來檢測(cè)面向?qū)ο蠓治龊驮O(shè)計(jì)的結(jié)果。 面向?qū)ο蟮能浖y(cè)試分為:面向?qū)ο蠓治龅臏y(cè)試,面向?qū)ο笤O(shè)計(jì)的測(cè)試,面向?qū)ο缶幊痰臏y(cè)試,,面向?qū)ο髥卧獪y(cè)
3、試,面向?qū)ο蠹蓽y(cè)試,面向?qū)ο笙到y(tǒng)測(cè)試。 1、傳統(tǒng)的面向過程分析與面向?qū)ο蠓治觯∣OA) 2、結(jié)構(gòu)化的設(shè)計(jì)方法與面向?qū)ο笤O(shè)計(jì)(OOD) 3、典型的面向?qū)ο蟪绦蚓哂欣^承、封裝和多態(tài)的新特性。 4、傳統(tǒng)的單元測(cè)試的對(duì)象是軟件設(shè)計(jì)的最小單位——模塊。 5、傳統(tǒng)的集成測(cè)試,主要有兩種功能模塊測(cè)試的方式:①自頂向下集成 ②自底向上集成。面向?qū)ο蠹蓽y(cè)試采用基于路徑的集成策略(MM-路徑)。,6、為了保證軟件的功能完整性,除
4、了單元測(cè)試和集成測(cè)試,還必須經(jīng)過規(guī)范的系統(tǒng)測(cè)試。 6.1.1信息隱蔽對(duì)測(cè)試的影響 類的重要作用之一是信息隱蔽。它對(duì)類中所封裝的信息的存取進(jìn)行控制,從而避免類中有關(guān)實(shí)現(xiàn)細(xì)節(jié)的信息被錯(cuò)誤地使用。該隱蔽機(jī)制給測(cè)試帶來了困難。 6.1.2封裝和繼承對(duì)測(cè)試的影響 若一個(gè)類得到了充分的測(cè)試,當(dāng)其被子類繼承后,繼承的方法在子類的環(huán)境中的行為特征需要重新測(cè)試。,6.1.3多態(tài)性對(duì)測(cè)試的影響 傳統(tǒng)軟件
5、測(cè)試中經(jīng)常使用靜態(tài)分析技術(shù)對(duì)代碼進(jìn)行分析;面向?qū)ο筌浖校捎趧?dòng)態(tài)綁定和多態(tài)性的存在所帶來的不確定性,給測(cè)試覆蓋率的滿足增大了難度。 6.2 類測(cè)試基礎(chǔ) 1、類測(cè)試概念:驗(yàn)證類的實(shí)現(xiàn)是否和該類的說明完全一致。 2、類測(cè)試的方法:通過代碼檢查或執(zhí)行測(cè)試用例的方法來有效地進(jìn)行類測(cè)試。(后者優(yōu)于前者)。,3、類測(cè)試人員 類測(cè)試通常由開發(fā)人員來進(jìn)行;(會(huì)帶來好處和不足之處)。4、類測(cè)試時(shí)間 類的測(cè)試
6、伴隨著開發(fā)過程中的各個(gè)階段,當(dāng)類的說明或?qū)崿F(xiàn)發(fā)生變化時(shí)應(yīng)該執(zhí)行回歸測(cè)試。5、類測(cè)試過程 為類創(chuàng)建實(shí)例-->創(chuàng)造適當(dāng)?shù)沫h(huán)境-->運(yùn)行測(cè)試用例(向一個(gè)實(shí)例發(fā)送一個(gè)或多個(gè)消息)-->通過參數(shù)來檢查測(cè)試運(yùn)行的結(jié)果-->清除執(zhí)行測(cè)試用例所需的測(cè)試環(huán)境。,6.2.1類在UML中的描述 UML(Unified Modeling Language)語言是一種支持對(duì)象技術(shù)的建模語言,是在計(jì)算機(jī)
7、系統(tǒng)中表示真實(shí)世界的語言,描述真實(shí)世界中的對(duì)象和它們之間的關(guān)系,支持應(yīng)用的開發(fā)。 在UML中,用來表示類的符號(hào)是矩形,并劃分為三個(gè)區(qū)域,分別是: ⑴名稱區(qū)域:顯示類的名稱 ⑵屬性區(qū)域:顯示在類中定義的變量。 ⑶操作區(qū)域:顯示在類中定義的方法。 如圖6-1所示:,,圖6-1 類的UML表示法,類之間的關(guān)系分為六類,分別是關(guān)聯(lián)、泛化、實(shí)現(xiàn)、依賴、聚合和組合。每種關(guān)系分別使用不
8、同的符號(hào)來表示(如:表6-1所示),并分別用私有的、保護(hù)的和公有的三個(gè)關(guān)鍵字來修飾類(如:表6-2所示)。,表6-1 UML類圖符號(hào)描述,,表6-2 UML類圖作用域描述,,6.2.2類測(cè)試的價(jià)值 選擇將每個(gè)類作為一個(gè)單元進(jìn)行單獨(dú)的測(cè)試,還是將其同其他類綁定進(jìn)行集成測(cè)試,需要使用如下4個(gè)要素來進(jìn)行測(cè)試價(jià)值的評(píng)估:,,1、類本身的復(fù)雜程度 2、類在整個(gè)系統(tǒng)中的層次 3、開發(fā)該類測(cè)試驅(qū)動(dòng)程序需要投入的成本
9、 4、類本身的風(fēng)險(xiǎn)程度6.2.3類測(cè)試用例設(shè)計(jì) 一般基于如下3個(gè)標(biāo)準(zhǔn)設(shè)計(jì)測(cè)試系列,即基于狀態(tài)的覆蓋率、基于限制的覆蓋率和基于代碼的覆蓋率。 根據(jù)狀態(tài)轉(zhuǎn)換確定測(cè)試用例,6.2.4類測(cè)試驅(qū)動(dòng)程序設(shè)計(jì) 從開發(fā)的角度:測(cè)試驅(qū)動(dòng)的基本思想是在設(shè)計(jì)之前先考慮好測(cè)試代碼;從測(cè)試的角度:為了執(zhí)行測(cè)試,運(yùn)行測(cè)試用例,找出軟件中隱藏的BUG。 因此,測(cè)試驅(qū)動(dòng)程序的構(gòu)建應(yīng)該簡(jiǎn)單、透明、易維護(hù),能
10、夠提供盡可能多的服務(wù),同時(shí)兼顧自增量更新,更理想的情況就是能夠復(fù)用已存在的測(cè)試驅(qū)動(dòng)程序的代碼。,編寫類測(cè)試驅(qū)動(dòng)程序的方法有很多種 ,以Java語言為例來說明測(cè)試驅(qū)動(dòng)程序設(shè)計(jì)的結(jié)構(gòu)。 1、在main方法中寫入需要運(yùn)行的測(cè)試用例,即實(shí)現(xiàn)main方法,然后編譯、執(zhí)行該類。 2、在類中實(shí)現(xiàn)一個(gè)靜態(tài)測(cè)試方法,通過調(diào)用該測(cè)試方法來收集每個(gè)測(cè)試用例的執(zhí)行結(jié)果。 3、實(shí)現(xiàn)獨(dú)立的測(cè)試類,它的職責(zé)是執(zhí)行并收集每個(gè)測(cè)試用例的結(jié)果。
11、,6.3類測(cè)試的延伸 類測(cè)試構(gòu)造思想以及如何對(duì)接口類、抽象類等進(jìn)行測(cè)試的方法。 一、繼承層次結(jié)構(gòu)中類的測(cè)試 繼承是實(shí)現(xiàn)接口和代碼復(fù)用的有效機(jī)制。根據(jù)繼承機(jī)制的特點(diǎn),父類中被測(cè)試用例所測(cè)試的代碼被子類繼承,只要父類代碼沒有被子類“覆蓋”,那么就不用重新創(chuàng)建這些測(cè)試用例。 圖6-6顯示了各類之間的繼承關(guān)系:,,圖6-6 類之間的繼承關(guān)系,Class_A類有兩個(gè)實(shí)例方法operation
12、1()和operation2(),Class_B類繼承了Class_A類并且實(shí)現(xiàn)了新的實(shí)例方法operation3(),Class_C類繼承了Class_B類,覆蓋了Class_B類的實(shí)例方法operation3()和實(shí)例方法operation2().,根據(jù)圖6-6中這三個(gè)類之間的區(qū)別,可以確定繼承的測(cè)試用例中是否需要產(chǎn)生新的子類測(cè)試用例,哪些測(cè)試用例適用于測(cè)試子類,哪些測(cè)試用例在測(cè)試子類中不必執(zhí)行,如下表6-7所示:,,由此,可以得出
13、繼承層次結(jié)構(gòu)中類測(cè)試的測(cè)試用例可以采用如下增補(bǔ)原則: 1)如果子類新增了一個(gè)或者多個(gè)新的操作,就需要增加相應(yīng)的測(cè)試用例。 2)如果子類定義的同名方法覆蓋了父類的方法,就需要增加相應(yīng)的測(cè)試用例。 那么,在具體構(gòu)建類測(cè)試用例時(shí)可以采用如圖6-7所示的結(jié)構(gòu)。對(duì)于基類我們要全部測(cè)試,底層的測(cè)試類可以對(duì)其父類的測(cè)試方法回歸。,,圖6-7 類測(cè)試用例的構(gòu)建,二、接口類測(cè)試 對(duì)類進(jìn)行測(cè)試時(shí)需要構(gòu)建可執(zhí)
14、行的類實(shí)例,而接口不存在任何構(gòu)造方法無法被實(shí)現(xiàn)。 由于接口一定會(huì)在某個(gè)類中實(shí)現(xiàn),因此就使用一個(gè)實(shí)現(xiàn)接口的類來做測(cè)試。遵循以下原則:如果接口沒有被任何類實(shí)現(xiàn)就無需進(jìn)行測(cè)試。如果已被別的類實(shí)現(xiàn),那么就針對(duì)實(shí)現(xiàn)該接口的類進(jìn)行測(cè)試。(如下圖6-8),,圖6-8 InterFace接口測(cè)試類圖,6.4面向?qū)ο鬁y(cè)試的層次 在傳統(tǒng)軟件中,確定單元的指導(dǎo)方針是: 1、能夠自身編譯的最小程序塊; 2、
15、單一過程/函數(shù)(獨(dú)立); 3、由一個(gè)人完成的小規(guī)模工作。 面向?qū)ο筌浖y(cè)試與傳統(tǒng)方法的區(qū)別:指導(dǎo)方針中沒有明確說明是把類還是方法作為單元。 下面對(duì)分別以方法和類作為單元的測(cè)試進(jìn)行簡(jiǎn)單的介紹和比較。,⑴ 以方法為單元 可以將面向?qū)ο髥卧獪y(cè)試歸結(jié)為傳統(tǒng)的單元測(cè)試??梢允褂盟袀鹘y(tǒng)功能性測(cè)試和結(jié)構(gòu)性測(cè)試技術(shù)。前期工作相對(duì)容易,但后續(xù)測(cè)試工作重。⑵ 以類為單元面向?qū)ο鬁y(cè)試的層次,取決于單元的構(gòu)成,
16、一般采用三層或四層方式。如果把單個(gè)操作或方法看作單元,則有四層測(cè)試,即操作/方法、類、繼承和系統(tǒng)測(cè)試。 面向?qū)ο鬁y(cè)試的主要問題是集成測(cè)試,可以看作是第三層,即通過測(cè)試的類之間的交互測(cè)試。,6.5 Junit簡(jiǎn)介 Junit是用于測(cè)試使用Java語言編寫的面向?qū)ο蟪绦虻膯卧?jí)測(cè)試工具。 (由Eric Gamma及Kent Beck編寫的,由SourceForge發(fā)行,使用許可證遵循IBM’s common
17、 Public License Version 1.0公開版權(quán)規(guī)范) *優(yōu)點(diǎn)* : 1、提升程序代碼的質(zhì)量的同時(shí),Junit測(cè)試使我們能夠更快速的編寫程序。 2、Junit使用簡(jiǎn)單 3、Junit能夠檢驗(yàn)測(cè)試結(jié)果并立即提供反饋。,4、Junit測(cè)試可以組織成一個(gè)有層次的測(cè)試系列架構(gòu)。 5、使用Junit開發(fā)測(cè)試成本低。 6、Junit測(cè)試提升軟件的穩(wěn)定性。
18、 7、Junit測(cè)試是使用Java語言開發(fā)的。 8、Junit是免費(fèi)的。 一、Junit的安裝和配置 (略) 二、Junit的卸載步驟 (略) 三、支持Junit的Java IDE (略) 目前主要有 Forte for Java 3.0 Enterprise Edition; JBuilder 6 Enterprise Edition; Visual A
19、ge for Java等 。,四、Junit的各種斷言 Junit提供了一些用于幫助我們確定某個(gè)被測(cè)試函數(shù)是否正常工作的輔助函數(shù),通常把這些函數(shù)稱之為斷言??梢耘袛嗄硹l件是否為真;兩數(shù)據(jù)是否相等。 下面舉出一些斷言方法: ⑴用于判斷是否相等 AssertEquals([報(bào)告出錯(cuò)信息String message],期望值expected,實(shí)際產(chǎn)生的值actual) ⑵用來判斷給定
20、的對(duì)象是否為空/(是否為非空) assertNull/ assertNotNull([String message],java.lang.Object object) 如果答案為否,則會(huì)失敗,同樣message參數(shù)是可選的。,注意:當(dāng)某個(gè)斷言失敗的時(shí)候,其所在的測(cè)試方法就會(huì)停止,也就是說剩余的斷言將不會(huì)執(zhí)行,此時(shí)應(yīng)該先修復(fù)這個(gè)失敗的測(cè)試再繼續(xù)進(jìn)行其他測(cè)試。另外,當(dāng)有的測(cè)試失敗時(shí)不能給原有代碼添加新的特性!此時(shí),應(yīng)該盡快的
21、修復(fù)這個(gè)錯(cuò)誤,直到所有的測(cè)試都順利通過。 五、Junit自動(dòng)化測(cè)試框架 定義:就是可以對(duì)代碼進(jìn)行單元測(cè)試的框架。,簡(jiǎn)單的自動(dòng)化測(cè)試框架應(yīng)該滿足如下幾個(gè)要求: 1、能夠以某種方式將測(cè)試用例組織成一個(gè)測(cè)試包,以便可以一次執(zhí)行所有測(cè)試用例,盡量達(dá)到讓實(shí)現(xiàn)人員或者測(cè)試人員按一個(gè)按鈕就能完成所有的測(cè)試工作,并且輸出清晰的測(cè)試結(jié)果的目的。2、支持簡(jiǎn)單的操作,可以向測(cè)試包中添加任意多個(gè)測(cè)試用例,并且不影響測(cè)試包的正常運(yùn)行。3、
22、支持測(cè)試隨意組合(一個(gè)測(cè)試包可以包含其他的測(cè)試包)。 Junit的自動(dòng)化測(cè)試框架如圖6-9所示:,,圖6-9 Junit的自動(dòng)化測(cè)試框架,Junit.Framework包中包含了Junit測(cè)試類所需的所有基類(Base Class),實(shí)際上這個(gè)包也是整個(gè)Junit的基礎(chǔ)框架(Base_Framework)。TestCase類是這個(gè)包的核心,測(cè)試人員可在繼承TestCase類的基礎(chǔ)上開發(fā)自己的測(cè)試驅(qū)動(dòng)程序。其余的類用來支持TestCa
23、se類,其中的TestSuite用來聚合多個(gè)測(cè)試用例(TestCase);Assert類用來驗(yàn)證期望值和實(shí)際值。 下面通過一段代碼對(duì)Junit框架的使用進(jìn)行簡(jiǎn)單介紹(包含了前面介紹的斷言)。,Line 1 import junit.framework.*; //導(dǎo)入必需的Junit類庫 2 public class TestSimple extends TestCase{
24、 //在繼承TestCase類的基礎(chǔ)上開發(fā) 3 public TestSimple(String name){ 4 super(name); 5 } 6 public void testPlus(){ 7 assertEquals(2,3-1); 8 } 9 } 一個(gè)測(cè)試類會(huì)包含一些測(cè)試方法;每個(gè)方法可以包含一
25、個(gè)或者多個(gè)斷言語句,這些功能能滿足最基本的測(cè)試要求。 但有時(shí)候希望在一個(gè)測(cè)試類中能調(diào)用其他測(cè)試類,或者測(cè)試人員可能只想運(yùn)行一個(gè)測(cè)試類中的某些方法??梢酝ㄟ^創(chuàng)建Test suite來實(shí)現(xiàn)。,,例如,給出如下一個(gè)類似TestSimple的測(cè)試驅(qū)動(dòng)類,二者不同之處在于增加了一個(gè)靜態(tài)的Test suite方法,通過suite()方法就可以返回任何想得到的測(cè)試集合代碼如下:Line 1 import junit.framework.*;
26、 2 public class TestSimple extends TestCase{ 3 public TestSimple(String name){ 4 super(name); 5 }6 public void testPlus(){7 assertEquals(2,3-1);8 },9
27、 public void testAdd(){10 assertEquals(4,2+2); } public void testMultiple(){ assertEquals(4,2╳2); }15 public static Test suite(){ TestSuite suite=new TestSuite(); Suite.addTest(
28、 new TestClassOne(“testPlus”)); Suite.addTest(20 new TestClassOne(“testAdd”)); return suite; } },六、環(huán)境的建立和清理 每個(gè)測(cè)試的運(yùn)行是相互獨(dú)立的,每次測(cè)試都要重新設(shè)置某些測(cè)試環(huán)境;在測(cè)試完成之后釋放一些資源。 Junit中的TestCase基類就為我
29、們提供了這樣兩個(gè)方法,可以分別用于環(huán)境的建立和清理: protected void setUp(); protected void teardown();,本章小結(jié) 本章在分析面向?qū)ο蟮能浖y(cè)試與傳統(tǒng)的軟件測(cè)試的基礎(chǔ)之上,對(duì)面向?qū)ο蟮能浖y(cè)試的基本知識(shí)進(jìn)行了簡(jiǎn)單的介紹; 接下來分別從不同層面分析了面向?qū)ο蟮能浖y(cè)試技術(shù)。 并介紹了面向?qū)ο髥卧獪y(cè)試的常用工具(junit),及安裝和卸載的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 面向?qū)ο筌浖y(cè)試技術(shù).pdf
- 面向?qū)ο笫謾C(jī)軟件測(cè)試
- 事件驅(qū)動(dòng)面向?qū)ο蟮能浖y(cè)試.pdf
- 面向?qū)ο蟮能浖y(cè)試方案研究.pdf
- 面向?qū)ο筌浖y(cè)試方法研究.pdf
- 面向?qū)ο筌浖悳y(cè)試研究.pdf
- 面向?qū)ο筌浖y(cè)試技術(shù)的研究.pdf
- 面向?qū)ο蟮能浖y(cè)試方法研究.pdf
- 面向?qū)ο筌浖臏y(cè)試方法研究.pdf
- 面向?qū)ο筌浖y(cè)試的研究與應(yīng)用.pdf
- 面向?qū)ο蟮能浖Y(jié)構(gòu)測(cè)試方法研究.pdf
- 面向?qū)ο筌浖y(cè)試的充分性研究.pdf
- 面向?qū)ο筌浖幕貧w測(cè)試方法研究.pdf
- 面向?qū)ο筌浖蓽y(cè)試策略研究.pdf
- 面向?qū)ο筌浖y(cè)試及其方法研究.pdf
- 基于UML的面向?qū)ο筌浖y(cè)試方法研究.pdf
- 面向?qū)ο筌浖y(cè)試中類測(cè)試的研究與應(yīng)用.pdf
- 面向?qū)ο筌浖y(cè)試技術(shù)分析與應(yīng)用.pdf
- 面向?qū)ο筌浖y(cè)試方法分析與研究.pdf
- 面向?qū)ο笫謾C(jī)軟件測(cè)試畢業(yè)論文
評(píng)論
0/150
提交評(píng)論