




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、第第12章章 面向?qū)ο髮崿F(xiàn)面向?qū)ο髮崿F(xiàn)12.1 程序設計語言程序設計語言12.2 程序設計風格程序設計風格12.3 測試策略測試策略12.4 設計測試用例設計測試用例12.5 小結(jié)小結(jié)1面向?qū)ο髮崿F(xiàn)與面向過程的一樣應包括:面向?qū)ο髮崿F(xiàn)與面向過程的一樣應包括:編碼,測試。編碼,測試。面向?qū)ο蟮姆治龊驮O計共同的模型使它們難于分開。面向?qū)ο蟮姆治龊驮O計共同的模型使它們難于分開。面向?qū)ο缶幊堂嫦驅(qū)ο缶幊?OOP)需要需要OOP語言語言OOLOOL具有自己的特點和風格。具有自己的特點和風格。面向?qū)ο蟪绦蛑械姆庋b、繼承和多態(tài)等機制,給測面向?qū)ο蟪绦蛑械姆庋b、繼承和多態(tài)等機制,給測試帶來新特點,增加了測試和
2、調(diào)試的難度。試帶來新特點,增加了測試和調(diào)試的難度。23面向?qū)ο蟮脑O計適宜用面向?qū)ο蟮脑O計適宜用OOL來實現(xiàn),來實現(xiàn), 理論上也可理論上也可以用非以用非OOL實現(xiàn)但不可取。實現(xiàn)但不可取。若用非若用非OOL編寫面向?qū)ο蟪绦颍瑒t程序員必須自編寫面向?qū)ο蟪绦?,則程序員必須自己實現(xiàn)己實現(xiàn)OOL編譯程序自動提供的面向?qū)ο蟮母拍罹幾g程序自動提供的面向?qū)ο蟮母拍詈蜋C制:類,繼承,封裝。和機制:類,繼承,封裝。若有可能,應選用若有可能,應選用OOL,因為它的下述重要優(yōu)點。,因為它的下述重要優(yōu)點。12.1 程序設計語言程序設計語言 12.1.1 面向?qū)ο笳Z言面向?qū)ο笳Z言OOL的優(yōu)點的優(yōu)點41. 一致的表示方法一致
3、的表示方法面向?qū)ο箝_發(fā)基于不隨時間變化的、一致的表示方面向?qū)ο箝_發(fā)基于不隨時間變化的、一致的表示方法法OO模型:模型:OOA,OOD,OOP。2. 可重用性可重用性軟件開發(fā)組織可重用軟件開發(fā)組織可重用OOA, OOD和和OOP結(jié)果。結(jié)果。3. 可維護性可維護性保持文檔與源程序一致的完全一致幾乎不可能。保持文檔與源程序一致的完全一致幾乎不可能。OOL的可讀性的可讀性(對象名等對象名等) =可維護性可維護性。5兩大類面向?qū)ο笳Z言兩大類面向?qū)ο笳Z言:純面向?qū)ο笳Z言純面向?qū)ο笳Z言: Smalltalk和和Eiffel等等混合型面向?qū)ο笳Z言混合型面向?qū)ο笳Z言: 過程語言過程語言+OO,如,如C+純面向?qū)?/p>
4、象語言著重支持面向?qū)ο蠓椒ㄑ芯亢涂焖偌兠嫦驅(qū)ο笳Z言著重支持面向?qū)ο蠓椒ㄑ芯亢涂焖僭偷膶崿F(xiàn),原型的實現(xiàn),混合型面向?qū)ο笳Z言的目標則是提高運行速度和使混合型面向?qū)ο笳Z言的目標則是提高運行速度和使傳統(tǒng)程序員容易接受面向?qū)ο笏枷?。傳統(tǒng)程序員容易接受面向?qū)ο笏枷?。比較面向?qū)ο笳Z言比較面向?qū)ο笳Z言/開發(fā)環(huán)境時需要考察的特點:開發(fā)環(huán)境時需要考察的特點:12.1.2 面向?qū)ο笳Z言的技術特點面向?qū)ο笳Z言的技術特點61. 支持類與對象概念的機制支持類與對象概念的機制:內(nèi)存管理內(nèi)存管理允許用戶動態(tài)創(chuàng)建對象意味著系統(tǒng)必須處理內(nèi)存管允許用戶動態(tài)創(chuàng)建對象意味著系統(tǒng)必須處理內(nèi)存管理問題。理問題。有兩種管理內(nèi)存的方法有兩種
5、管理內(nèi)存的方法:1)語言的運行機制自動管理內(nèi)存,即自動回收語言的運行機制自動管理內(nèi)存,即自動回收“垃垃圾圾”的機制;的機制;(必須采用先進的垃圾收集算法必須采用先進的垃圾收集算法)2)由程序員編寫釋放內(nèi)存的代碼。由程序員編寫釋放內(nèi)存的代碼。(例如例如: 程序員定義析構(gòu)函數(shù)程序員定義析構(gòu)函數(shù)(destructor)。每當一個。每當一個對象超出范圍或被顯式刪除時,就自動調(diào)用析構(gòu)函對象超出范圍或被顯式刪除時,就自動調(diào)用析構(gòu)函數(shù)。這種機制使得程序員能夠方便地構(gòu)造和喚醒釋數(shù)。這種機制使得程序員能夠方便地構(gòu)造和喚醒釋放內(nèi)存的操作放內(nèi)存的操作)72. 實現(xiàn)整體實現(xiàn)整體-部分部分(即聚集即聚集)結(jié)構(gòu)的機制結(jié)構(gòu)
6、的機制兩種實現(xiàn)關聯(lián)方法兩種實現(xiàn)關聯(lián)方法: 指針和獨立的關聯(lián)對象指針和獨立的關聯(lián)對象大多數(shù)現(xiàn)有的面向?qū)ο笳Z言并不顯式支持獨立的關大多數(shù)現(xiàn)有的面向?qū)ο笳Z言并不顯式支持獨立的關聯(lián)對象,在這種情況下,使用指針是最容易的實現(xiàn)聯(lián)對象,在這種情況下,使用指針是最容易的實現(xiàn)關聯(lián)的方法。關聯(lián)的方法。83. 實現(xiàn)一般實現(xiàn)一般-特殊特殊(即泛化即泛化)結(jié)構(gòu)的機制結(jié)構(gòu)的機制實現(xiàn)繼承實現(xiàn)繼承 + 解決名字沖突。解決名字沖突。名字沖突指的是繼承多個基類可能出現(xiàn)的重名問題。名字沖突指的是繼承多個基類可能出現(xiàn)的重名問題。某些語言拒絕接受有名字沖突的程序,另一些語言某些語言拒絕接受有名字沖突的程序,另一些語言提供了解決沖突的協(xié)
7、議。提供了解決沖突的協(xié)議。程序員應該盡力避免出現(xiàn)名字沖突。程序員應該盡力避免出現(xiàn)名字沖突。94. 實現(xiàn)屬性和服務的機制實現(xiàn)屬性和服務的機制屬性的機制:屬性的機制: 支持實例連接;支持實例連接;屬性的可見性控制;屬性的可見性控制;對屬性值的約束。對屬性值的約束。服務的機制:服務的機制: 支持消息連接支持消息連接(即表達對象交互關系即表達對象交互關系) ;控制服務可見性;控制服務可見性;動態(tài)聯(lián)編。動態(tài)聯(lián)編。105. 類型檢查類型檢查強強/弱類型弱類型: 語法規(guī)定變量語法規(guī)定變量/屬性分類的嚴格性。屬性分類的嚴格性。強類型優(yōu)點:強類型優(yōu)點: 一是在編譯時能發(fā)現(xiàn)程序錯誤,一是在編譯時能發(fā)現(xiàn)程序錯誤,二
8、是增加了優(yōu)化的可能性。二是增加了優(yōu)化的可能性。強類型有助于提高軟件的可靠性和運行效率強類型有助于提高軟件的可靠性和運行效率.強類型宜用于開發(fā)軟件產(chǎn)品,強類型宜用于開發(fā)軟件產(chǎn)品,弱類型適于快速開發(fā)原型。弱類型適于快速開發(fā)原型。116. 類庫類庫類庫類庫:編譯編譯/開發(fā)環(huán)境提供的重用類構(gòu)件。開發(fā)環(huán)境提供的重用類構(gòu)件。類庫包含實現(xiàn)通用數(shù)據(jù)結(jié)構(gòu)類庫包含實現(xiàn)通用數(shù)據(jù)結(jié)構(gòu)(例如,動態(tài)數(shù)組、表、例如,動態(tài)數(shù)組、表、隊列、棧、樹等等隊列、棧、樹等等)的類,的類,GUI用戶界面類。用戶界面類。7. 效率效率面向?qū)ο笳Z言的主要缺點是效率低面向?qū)ο笳Z言的主要缺點是效率低: 解釋型語言解釋型語言, 動態(tài)聯(lián)編動態(tài)聯(lián)編.
9、類庫中提供的算法和數(shù)據(jù)結(jié)構(gòu)更高效類庫中提供的算法和數(shù)據(jù)結(jié)構(gòu)更高效.差別可以忽略,利大于弊。差別可以忽略,利大于弊。128. 持久保存對象持久保存對象不依賴于程序執(zhí)行的生命期而長時間保存數(shù)據(jù)對象不依賴于程序執(zhí)行的生命期而長時間保存數(shù)據(jù)對象的兩個原因:的兩個原因: (1) 實現(xiàn)不同時運行程序間傳遞數(shù)據(jù)實現(xiàn)不同時運行程序間傳遞數(shù)據(jù)(2) 恢復被中斷了的程序的運行恢復被中斷了的程序的運行理想情況下,應該使程序設計語言語法與對象存儲理想情況下,應該使程序設計語言語法與對象存儲管理語法實現(xiàn)無縫集成。管理語法實現(xiàn)無縫集成。139. 參數(shù)化類參數(shù)化類類的數(shù)據(jù)類的數(shù)據(jù)(屬性屬性)類型可以由參數(shù)給定。類型可以由參
10、數(shù)給定。一個類可以對不同的數(shù)據(jù)類型施以同樣的操作。如一個類可以對不同的數(shù)據(jù)類型施以同樣的操作。如對整數(shù)和實數(shù)排序。對整數(shù)和實數(shù)排序。Eiffel 和和C+語言提供了參數(shù)化類語言提供了參數(shù)化類/類模板。類模板。10. 開發(fā)環(huán)境開發(fā)環(huán)境軟件工具或開發(fā)環(huán)境對軟件生產(chǎn)率有很大影響。軟件工具或開發(fā)環(huán)境對軟件生產(chǎn)率有很大影響。一個語言可有不同的編譯程序。一個語言可有不同的編譯程序。CASE工具與語言的兼容性。工具與語言的兼容性。14選擇面向?qū)ο笳Z言應考慮的因素選擇面向?qū)ο笳Z言應考慮的因素:1. 將來能否占主導地位將來能否占主導地位語言的生命力及穩(wěn)定性:維護的考慮。語言的生命力及穩(wěn)定性:維護的考慮。2. 可
11、重用性可重用性影響重用的要素:封裝,繼承,多態(tài)。影響重用的要素:封裝,繼承,多態(tài)。3. 類庫和開發(fā)環(huán)境類庫和開發(fā)環(huán)境語言、開發(fā)環(huán)境和類庫這語言、開發(fā)環(huán)境和類庫這3個因素共同決定可重用個因素共同決定可重用性。性。類庫是否提供有價值的類?類庫是否提供有價值的類?開發(fā)環(huán)境是否提供使用方便的類庫編輯和瀏覽工具。開發(fā)環(huán)境是否提供使用方便的類庫編輯和瀏覽工具。12.1.3 選擇面向?qū)ο笳Z言選擇面向?qū)ο笳Z言154. 其他因素其他因素在選擇編程語言時,應該考慮的其他因素還有:在選擇編程語言時,應該考慮的其他因素還有: 對用戶學習面向?qū)ο蠓治?、設計和編碼技術所能提對用戶學習面向?qū)ο蠓治?、設計和編碼技術所能提供的
12、培訓服務;供的培訓服務;在使用這個面向?qū)ο笳Z言期間能提供的技術支持;在使用這個面向?qū)ο笳Z言期間能提供的技術支持;能提供給開發(fā)人員使用的開發(fā)工具、開發(fā)平臺、發(fā)能提供給開發(fā)人員使用的開發(fā)工具、開發(fā)平臺、發(fā)行平臺;行平臺;對機器性能和內(nèi)存的需求;對機器性能和內(nèi)存的需求;集成已有軟件的容易程度集成已有軟件的容易程度(調(diào)用其它語言的模塊調(diào)用其它語言的模塊)。16為適應面向?qū)ο蠓椒ㄋ赜械母拍顬檫m應面向?qū)ο蠓椒ㄋ赜械母拍?例如,繼承性例如,繼承性)而必須遵循的一些新準則。而必須遵循的一些新準則。12.2 程序設計風格程序設計風格17兩種代碼重用:兩種代碼重用: 1) 本項目內(nèi)的代碼重用,本項目內(nèi)的代碼重
13、用,2) 重用重用舊舊/外項目的代碼。外項目的代碼。 1) 內(nèi)部重用內(nèi)部重用:利用繼承機制共享相同或相似的部分利用繼承機制共享相同或相似的部分12.2.1 提高可重用性提高可重用性兩種代碼重用:兩種代碼重用: 1) 本項目內(nèi)的代碼重用,本項目內(nèi)的代碼重用,2) 重用重用舊舊/外項目的代碼。外項目的代碼。 1) 內(nèi)部重用內(nèi)部重用:利用繼承機制共享相同或相似的部分利用繼承機制共享相同或相似的部分12.2.1 提高可重用性提高可重用性18實現(xiàn)兩類重用的程序設計準則:實現(xiàn)兩類重用的程序設計準則:1. 提高方法的內(nèi)聚提高方法的內(nèi)聚一個方法一個方法(即服務即服務)只完成單個功能只完成單個功能, 否則把它分
14、解否則把它分解成幾個更小的方法。成幾個更小的方法。2. 減小方法的規(guī)模減小方法的規(guī)模把規(guī)模過大的方法把規(guī)模過大的方法(代碼長度超過一頁紙代碼長度超過一頁紙),分解成,分解成幾個更小的方法。幾個更小的方法。3. 保持方法的一致性保持方法的一致性功能相似的方法應該有一致的名字、參數(shù)特征功能相似的方法應該有一致的名字、參數(shù)特征(包包括參數(shù)個數(shù)、類型和次序括參數(shù)個數(shù)、類型和次序)、返回值類型、使用條、返回值類型、使用條件及出錯條件等。件及出錯條件等。194. 把策略與實現(xiàn)分開把策略與實現(xiàn)分開兩種不同類型的方法:策略與實現(xiàn)。兩種不同類型的方法:策略與實現(xiàn)。策略方法策略方法(拼積木拼積木)調(diào)用實現(xiàn)方法調(diào)用
15、實現(xiàn)方法(積木積木)來完成任務來完成任務(實現(xiàn)圖案實現(xiàn)圖案)。策略方法通常緊密依賴于具體應用。策略方法通常緊密依賴于具體應用。實現(xiàn)方法針對具體數(shù)據(jù)完成特定處理,用于實現(xiàn)復實現(xiàn)方法針對具體數(shù)據(jù)完成特定處理,用于實現(xiàn)復雜的算法。相對獨立于應用,因此,較可能被重用。雜的算法。相對獨立于應用,因此,較可能被重用。205. 全面覆蓋全面覆蓋方法的實現(xiàn)不僅滿足當前應用而且應該考慮其它應方法的實現(xiàn)不僅滿足當前應用而且應該考慮其它應用的潛在需要。用的潛在需要。此外,方法對空值、極限值及界外值等異常情況也此外,方法對空值、極限值及界外值等異常情況也應該能夠作出有意義的響應。應該能夠作出有意義的響應。6. 盡量不
16、使用全局信息盡量不使用全局信息應該盡量降低方法與外界的耦合程度,不使用全局應該盡量降低方法與外界的耦合程度,不使用全局信息,如類變量。信息,如類變量。217. 利用繼承機制利用繼承機制繼承是實現(xiàn)共享和提高重用的主要途徑。繼承是實現(xiàn)共享和提高重用的主要途徑。(1) 調(diào)用子過程:把公共的代碼分離出來,構(gòu)成一個調(diào)用子過程:把公共的代碼分離出來,構(gòu)成一個被其他方法調(diào)用的公用方法,被其他方法調(diào)用的公用方法, 并在基類中定義它。并在基類中定義它。(2) 分解因子。從不同類的相似方法中分解出不同的分解因子。從不同類的相似方法中分解出不同的“因子因子”(即不同的代碼即不同的代碼),把余下的代碼作為公用方,把余
17、下的代碼作為公用方法中的公共代碼,把分解出的因子作為法中的公共代碼,把分解出的因子作為名字相同名字相同(多多態(tài)性機制態(tài)性機制)算法不同的方法,放在不同類中定義,并算法不同的方法,放在不同類中定義,并被這個公用方法調(diào)用,如圖所示。被這個公用方法調(diào)用,如圖所示。22(3) 使用委托。僅當確實存在一般使用委托。僅當確實存在一般-特殊關系時,使特殊關系時,使用繼承才是恰當?shù)?,否則,可以利用委托機制,如用繼承才是恰當?shù)模駝t,可以利用委托機制,如本書本書11.11.3小節(jié)所述。小節(jié)所述。(4) 把代碼封裝在類中。把代碼封裝在類中。(與繼承無關)(與繼承無關)把被重用的代碼封裝在類中比較安全和修改。把被重
18、用的代碼封裝在類中比較安全和修改。23提高可重用性的準則,也能提高程序的可擴充性。提高可重用性的準則,也能提高程序的可擴充性。此外,下列準則也有助于提高可擴充性:此外,下列準則也有助于提高可擴充性: 1. 封裝實現(xiàn)策略封裝實現(xiàn)策略把類的實現(xiàn)策略把類的實現(xiàn)策略(包括描述屬性的數(shù)據(jù)結(jié)構(gòu)、修改包括描述屬性的數(shù)據(jù)結(jié)構(gòu)、修改屬性的算法等屬性的算法等)封裝起來,將提高今后修改數(shù)據(jù)結(jié)封裝起來,將提高今后修改數(shù)據(jù)結(jié)構(gòu)或算法的自由度。構(gòu)或算法的自由度。12.2.2 提高可擴充性提高可擴充性242. 不要用一個方法遍歷多條關聯(lián)鏈不要用一個方法遍歷多條關聯(lián)鏈一個方法應該只包含對象模型中的有限內(nèi)容,一個方法應該只包含
19、對象模型中的有限內(nèi)容, 除除非內(nèi)容與方法無關。否則將導致方法過分復雜,既非內(nèi)容與方法無關。否則將導致方法過分復雜,既不易理解,也不易修改擴充。不易理解,也不易修改擴充。3. 避免使用多分支語句避免使用多分支語句可以利用可以利用DO_CASE語句測試對象的內(nèi)部狀態(tài),而語句測試對象的內(nèi)部狀態(tài),而不要用來根據(jù)對象類型選擇應有的行為不要用來根據(jù)對象類型選擇應有的行為(強耦合強耦合),否則在增添新類時將不得不修改原有的代碼。應該否則在增添新類時將不得不修改原有的代碼。應該利用多態(tài)性機制,根據(jù)對象當前類型,自動決定應利用多態(tài)性機制,根據(jù)對象當前類型,自動決定應有的行為。有的行為。254. 精心確定公有方法
20、精心確定公有方法公有方法是向公眾公布的接口。對這類方法的修改公有方法是向公眾公布的接口。對這類方法的修改往往會涉及許多其他類。為提高穩(wěn)定性,可修改性,往往會涉及許多其他類。為提高穩(wěn)定性,可修改性,降低維護成本,必須精心選擇和定義公有方法。降低維護成本,必須精心選擇和定義公有方法。刪除、增加或修改私有方法所涉及的面要窄得多,刪除、增加或修改私有方法所涉及的面要窄得多,因此代價也比較低。因此代價也比較低。26既應該考慮效率,也應該考慮健壯性。需要在健壯既應該考慮效率,也應該考慮健壯性。需要在健壯性與效率之間做出適當?shù)恼壑浴P耘c效率之間做出適當?shù)恼壑?。為提高健壯性應該遵守以下幾條準則:為提高健壯性應
21、該遵守以下幾條準則:1. 預防用戶的操作錯誤預防用戶的操作錯誤軟件系統(tǒng)必須具有處理用戶操作錯誤的能力。任何軟件系統(tǒng)必須具有處理用戶操作錯誤的能力。任何一個接收用戶輸入數(shù)據(jù)的方法,對其接收到的數(shù)據(jù)一個接收用戶輸入數(shù)據(jù)的方法,對其接收到的數(shù)據(jù)都必須進行檢查,發(fā)現(xiàn)了錯誤,應該給出恰當?shù)奶岫急仨氝M行檢查,發(fā)現(xiàn)了錯誤,應該給出恰當?shù)奶崾拘畔?,并準備再次接收用戶的輸入。示信息,并準備再次接收用戶的輸入?2.2.3 提高健壯性提高健壯性272. 檢查參數(shù)的合法性檢查參數(shù)的合法性對公有方法,尤其應該著重檢查其參數(shù)的合法性,對公有方法,尤其應該著重檢查其參數(shù)的合法性,因為調(diào)用公有方法時可能違反參數(shù)的約束條件。
22、因為調(diào)用公有方法時可能違反參數(shù)的約束條件。3. 不要輕易限定數(shù)據(jù)容量不要輕易限定數(shù)據(jù)容量在設計階段,很難準確地預測出應用系統(tǒng)中數(shù)據(jù)結(jié)在設計階段,很難準確地預測出應用系統(tǒng)中數(shù)據(jù)結(jié)構(gòu)的最大容量需求。如果有必要和可能,應該使用構(gòu)的最大容量需求。如果有必要和可能,應該使用動態(tài)內(nèi)存分配機制。動態(tài)內(nèi)存分配機制。284. 先測試后優(yōu)化先測試后優(yōu)化測試程序的性能以確定是否為提高效率而進行優(yōu)化。測試程序的性能以確定是否為提高效率而進行優(yōu)化。如果實現(xiàn)某個操作的算法有許多種,則應該綜合考如果實現(xiàn)某個操作的算法有許多種,則應該綜合考慮內(nèi)存需求、速度及實現(xiàn)的簡易程度等因素,經(jīng)合慮內(nèi)存需求、速度及實現(xiàn)的簡易程度等因素,經(jīng)
23、合理折衷選定適當?shù)乃惴?。理折衷選定適當?shù)乃惴ā?9測試面向?qū)ο筌浖牟呗耘c與面向過程的策略基本測試面向?qū)ο筌浖牟呗耘c與面向過程的策略基本相同,但也有許多新特點。相同,但也有許多新特點。12.3 測試策略測試策略30最小的可測試單元是單個封裝起來的類和對象。最小的可測試單元是單個封裝起來的類和對象。測試一個類就是測試它的對象子集測試一個類就是測試它的對象子集(不可窮盡不可窮盡).測試對象主要是測試它的操作測試對象主要是測試它的操作.不能孤立地測試單個操作不能孤立地測試單個操作:同一個操作在不同狀態(tài)下行為不同同一個操作在不同狀態(tài)下行為不同.同一個操作在不同類中有不同的實現(xiàn)同一個操作在不同類中有不
24、同的實現(xiàn)(多態(tài)性多態(tài)性).有必要在每個子類的語境中測試操作有必要在每個子類的語境中測試操作比面向過程更復雜比面向過程更復雜12.3.1 面向?qū)ο蟮膯卧獪y試面向?qū)ο蟮膯卧獪y試31集成集成=組裝有關聯(lián)的類組裝有關聯(lián)的類不存在層次的控制結(jié)構(gòu)不存在層次的控制結(jié)構(gòu)(隱含在類中隱含在類中)傳統(tǒng)的自頂向下傳統(tǒng)的自頂向下/自底向上的集成策略無意義。自底向上的集成策略無意義。12.3.2 面向?qū)ο蟮募蓽y試面向?qū)ο蟮募蓽y試32面向?qū)ο筌浖募蓽y試的兩種策略面向?qū)ο筌浖募蓽y試的兩種策略:(1) 基于線程的測試(基于線程的測試(thread based testing): 把把響應系統(tǒng)的一個輸入或一個事件所
25、需要的那些類響應系統(tǒng)的一個輸入或一個事件所需要的那些類(線程線程)集成起來。集成起來。(2) 基于使用的測試(基于使用的測試(use based testing): 首先測首先測試獨立類試獨立類(幾乎不使用其它類的類幾乎不使用其它類的類),再測試使用獨,再測試使用獨立類的下一個層次的類(稱為依賴類)。據(jù)此依賴立類的下一個層次的類(稱為依賴類)。據(jù)此依賴關系持續(xù)下去,直至把整個軟件系統(tǒng)構(gòu)造完為止。關系持續(xù)下去,直至把整個軟件系統(tǒng)構(gòu)造完為止。集群測試(集群測試(cluster testing):用精心設計的測試用):用精心設計的測試用例檢查一群相互協(xié)作的類(通過研究對象模型可以例檢查一群相互協(xié)作的
26、類(通過研究對象模型可以確定協(xié)作類),以發(fā)現(xiàn)不同的類之間的協(xié)作錯誤。確定協(xié)作類),以發(fā)現(xiàn)不同的類之間的協(xié)作錯誤。33和傳統(tǒng)的確認測試一樣,面向?qū)ο筌浖拇_認測試和傳統(tǒng)的確認測試一樣,面向?qū)ο筌浖拇_認測試也集中檢查用戶可見的動作和用戶可識別的輸出。也集中檢查用戶可見的動作和用戶可識別的輸出。從動態(tài)模型和描述系統(tǒng)行為的腳本可導出確認測試從動態(tài)模型和描述系統(tǒng)行為的腳本可導出確認測試用例,以發(fā)現(xiàn)用戶交互需求可能錯誤的情景。用例,以發(fā)現(xiàn)用戶交互需求可能錯誤的情景。黑盒測試方法也可用于設計上述確認測試用例。黑盒測試方法也可用于設計上述確認測試用例。12.3.3 面向?qū)ο蟮拇_認測試面向?qū)ο蟮拇_認測試34與
27、傳統(tǒng)軟件測試不同,面向?qū)ο鬁y試關注設計適當與傳統(tǒng)軟件測試不同,面向?qū)ο鬁y試關注設計適當?shù)牟僮餍蛄幸詸z查類的狀態(tài)。的操作序列以檢查類的狀態(tài)。 (1)傳統(tǒng)方法的可用性)傳統(tǒng)方法的可用性 白盒測試:用于類級別的測試。測試類中封裝的白盒測試:用于類級別的測試。測試類中封裝的操作,檢查類的狀態(tài)以確定是否存在錯誤。操作,檢查類的狀態(tài)以確定是否存在錯誤。 黑盒測試:用于集成測試、確認測試。黑盒測試:用于集成測試、確認測試。12.4 設計測試用例設計測試用例35著重測試單個類和類中封裝的方法主要有:隨機測著重測試單個類和類中封裝的方法主要有:隨機測試、劃分測試和基于故障的測試等試、劃分測試和基于故障的測試等3
28、種。種。12.4.1 測試類(單元)的方法測試類(單元)的方法1. 隨機測試隨機測試 隨機選取測試隨機選取測試類操作類操作序列以測試該類對象不同的生序列以測試該類對象不同的生命歷史命歷史 問題的性質(zhì)隱含了一些限制問題的性質(zhì)隱含了一些限制例:銀行應用系統(tǒng)的例:銀行應用系統(tǒng)的account(賬戶)類有下列操作:賬戶)類有下列操作: open(打開),打開),setup(建立),建立),deposit(存款),存款),withdraw(取款),取款),balance(余額),余額),summarize(清清單),單),creditLimit(透支限額)和透支限額)和close(關閉)。關閉)。限制:
29、必須在其他操作前打開賬戶,完成了限制:必須在其他操作前打開賬戶,完成了全部全部操操作之后作之后才能才能(/必須必須)關閉賬戶。關閉賬戶。36一個一個account類實例的最小類實例的最小(正常正常)行為歷史包含下列行為歷史包含下列操作:操作: opensetupdeposit.withdrawclose可能發(fā)生許多其他行為:可能發(fā)生許多其他行為: Opensetupdeposit deposit|withdraw|balance|summarize|creditLimitn.withdrawclose從上列序列可以隨機地產(chǎn)生一系列不同的操作序列:從上列序列可以隨機地產(chǎn)生一系列不同的操作序列:
30、#r1:opensetupdepositdepositbalancesummarize.withdrawclose#r2:opensetupdepositcreditLimitwithdrawclose也要考慮異常(用戶或編程也要考慮異常(用戶或編程)序列:序列:opensetup.withdrawclosesetupdeposit.withdrawclose372. 劃分測試劃分測試劃分測試(劃分測試(partition testing)可以減少測試用例的)可以減少測試用例的數(shù)量。數(shù)量。3種劃分:狀態(tài),屬性,功能。種劃分:狀態(tài),屬性,功能。(1) 基于狀態(tài)的劃分基于狀態(tài)的劃分根據(jù)類操作是否改
31、變類狀態(tài)來劃分。根據(jù)類操作是否改變類狀態(tài)來劃分??紤]考慮account類,狀態(tài)操作包括類,狀態(tài)操作包括deposit和和withdraw,而非狀態(tài)操作有而非狀態(tài)操作有balance, summarize和和creditLimit。然后為每個類別設計測試序列。用例應覆蓋各類操然后為每個類別設計測試序列。用例應覆蓋各類操作的每一操作。作的每一操作。38(2) 基于屬性的劃分基于屬性的劃分根據(jù)類操作使用的屬性來劃分。根據(jù)類操作使用的屬性來劃分。對于對于account類來說,可使用屬性類來說,可使用屬性balance(余額余額=狀狀態(tài)態(tài)) 把操作劃分成把操作劃分成3個類別:個類別: 使用使用balan
32、ce的操作;的操作;修改修改balance的操作;的操作;不使用也不修改不使用也不修改balance的操作。的操作。用重要屬性(狀態(tài))而非每個屬性來劃分。用重要屬性(狀態(tài))而非每個屬性來劃分。39(3) 基于功能的劃分基于功能的劃分根據(jù)類操作所完成的功能來劃分。根據(jù)類操作所完成的功能來劃分。例如,可以把例如,可以把account類中的操作分類為初始化操類中的操作分類為初始化操作(作(open,setup),計算操作(),計算操作(deposit, withdraw),查詢操作(),查詢操作(balance, summarize,creditLimit)和終止操作()和終止操作(close)。)
33、。403. 基于故障的測試基于故障的測試Fault based testing與傳統(tǒng)的錯誤推測法類似,首先與傳統(tǒng)的錯誤推測法類似,首先推測軟件中可能有的錯誤,然后設計出最可能發(fā)現(xiàn)推測軟件中可能有的錯誤,然后設計出最可能發(fā)現(xiàn)這些錯誤的測試用例。這些錯誤的測試用例。它的效率依靠測試人員的經(jīng)驗和直覺。它的效率依靠測試人員的經(jīng)驗和直覺。它與面向?qū)ο蟮姆椒o關。它與面向?qū)ο蟮姆椒o關。41集成測試用例主要針對類間協(xié)作進行測試。集成測試用例主要針對類間協(xié)作進行測試。測試類間協(xié)作可運用基于使用的測試策略測試類間協(xié)作可運用基于使用的測試策略, 找出相找出相互依賴的類互依賴的類. 然后設計用例觸發(fā)類間的各種交互
34、序然后設計用例觸發(fā)類間的各種交互序列列.測試類協(xié)作可以使用隨機測試方法和劃分測試方法,測試類協(xié)作可以使用隨機測試方法和劃分測試方法,以及基于情景以及基于情景/腳本的測試和行為測試來完成。腳本的測試和行為測試來完成。UML的協(xié)作圖能幫助我們找出相互依賴的類和交的協(xié)作圖能幫助我們找出相互依賴的類和交互序列互序列.下圖展示了一個銀行系統(tǒng)的類協(xié)作圖。下圖展示了一個銀行系統(tǒng)的類協(xié)作圖。12.4.2 集成測試方法集成測試方法42圖圖12.3 銀行系統(tǒng)的類銀行系統(tǒng)的類-協(xié)作圖協(xié)作圖43箭頭線上的標注:協(xié)作而調(diào)用的操作1. 多類測試多類測試生成多個類的測試用例步驟:生成多個類的測試用例步驟:1) 對每個客戶對
35、每個客戶/UI類,為其生成一系列測試序列來類,為其生成一系列測試序列來覆蓋所有操作。覆蓋所有操作。2) 對這些操作所生成的每個消息,確定接收消息的對這些操作所生成的每個消息,確定接收消息的協(xié)作類協(xié)作類/服務器對象中的對應操作。服務器對象中的對應操作。3)把每個)把每個2)的操作,結(jié)合進測試序列中。對每個)的操作,結(jié)合進測試序列中。對每個產(chǎn)生消息的操作,繼續(xù)產(chǎn)生消息的操作,繼續(xù)2)44例,儲戶存款,操作序列:例,儲戶存款,操作序列: ATM:cardInserted.password.depositBank: verifyAcctverifyPINdepositReqValidationInfo
36、 : validAcct validPINAccount: deposit#r4:verifyAcctBankvalidAcctValidationInfoverifyPINBankvalidPINvalidationInfodepositReqdepositaccount45多個類的劃分測試方法類似于單個類。多個類的劃分測試方法類似于單個類。另一種劃分測試方法,根據(jù)與特定類的接口來劃分另一種劃分測試方法,根據(jù)與特定類的接口來劃分類操作。類操作。Bank類接收來自類接收來自ATM類和類和Cashier類的消息,類的消息,可以把可以把Bank類中的方法劃分成服務于類中的方法劃分成服務于ATM和和
37、Cashier的兩類來測試它們。的兩類來測試它們。462. 從動態(tài)模型導出測試用例從動態(tài)模型導出測試用例類的狀態(tài)圖可以幫助我們導出測試該類(及與其協(xié)類的狀態(tài)圖可以幫助我們導出測試該類(及與其協(xié)作的那些類)的動態(tài)行為的測試用例。作的那些類)的動態(tài)行為的測試用例。47設計出的測試用例至少應該覆蓋所有狀態(tài):設計出的測試用例至少應該覆蓋所有狀態(tài): #s1:opensetupAccntdeposit(initial)withdraw(final)close導出更多測試用例,以保證所有行為都被測試:導出更多測試用例,以保證所有行為都被測試:#s2:opensetupAccntdeposit(initial
38、)depositbalancecreditwithdraw(final)close#s3:opensetupAccntdeposit(initial)depositwithdrawaccntInfowithdraw(final)close在多個類協(xié)作的情況下,應該使用多個狀態(tài)圖。在多個類協(xié)作的情況下,應該使用多個狀態(tài)圖。48面向?qū)ο笤O計原則上不依賴于特定的實現(xiàn)環(huán)境,面向?qū)ο笤O計原則上不依賴于特定的實現(xiàn)環(huán)境,但實現(xiàn)結(jié)果和成本卻取決于實現(xiàn)環(huán)境。但實現(xiàn)結(jié)果和成本卻取決于實現(xiàn)環(huán)境。支持面向?qū)ο笤O計范式的程序語言、開發(fā)環(huán)境及類支持面向?qū)ο笤O計范式的程序語言、開發(fā)環(huán)境及類庫,對于面向?qū)ο蟮膶崿F(xiàn)非常重要。庫
39、,對于面向?qū)ο蟮膶崿F(xiàn)非常重要。具有方便的開發(fā)環(huán)境和豐富的類庫的面向?qū)ο蟪绦蚓哂蟹奖愕拈_發(fā)環(huán)境和豐富的類庫的面向?qū)ο蟪绦蛟O計語言,是實現(xiàn)面向?qū)ο笤O計的最佳選擇。設計語言,是實現(xiàn)面向?qū)ο笤O計的最佳選擇。良好的程序設計風格對于面向?qū)ο髮崿F(xiàn)來說同樣重良好的程序設計風格對于面向?qū)ο髮崿F(xiàn)來說同樣重要。要。傳統(tǒng)的程序設計風格準則依然成立,面向?qū)ο蠓椒▊鹘y(tǒng)的程序設計風格準則依然成立,面向?qū)ο蠓椒ㄟ€有一些新準則。還有一些新準則。12.5 小結(jié)小結(jié)49面向?qū)ο鬁y試的策略和技術與傳統(tǒng)測試有所不同,面向?qū)ο鬁y試的策略和技術與傳統(tǒng)測試有所不同,對象類成為測試的焦點。對象類成為測試的焦點。測試類時使用的方法主要有隨機測試
40、、劃分測試和測試類時使用的方法主要有隨機測試、劃分測試和基于故障的測試。每種方法都測試類中封裝的操作?;诠收系臏y試。每種方法都測試類中封裝的操作。每種操作要在不同的對象狀態(tài)(由對象的屬性值表每種操作要在不同的對象狀態(tài)(由對象的屬性值表示)下測試。示)下測試。可以采用基于線程或基于使用的策略完成集成測試??梢圆捎没诰€程或基于使用的策略完成集成測試。從動態(tài)模型導出的測試用例,可以測試指定的類及從動態(tài)模型導出的測試用例,可以測試指定的類及其協(xié)作者。其協(xié)作者。面向?qū)ο笙到y(tǒng)的確認測試可以用傳統(tǒng)的黑盒方法完面向?qū)ο笙到y(tǒng)的確認測試可以用傳統(tǒng)的黑盒方法完成。成。情景情景/腳本為系統(tǒng)確認測試提供了用例。腳本
41、為系統(tǒng)確認測試提供了用例。50Test Tools CASE tool index - Quite a comprehensive list of CASE Tools Old site: http:/www.cs.queensu.ca/Software-Engineering/toolcat.html 400 categories; 10% for test List of Test related tools51LOGISCOPE LOGISCOPE: Software Quality, Testing, Maintenance and Reverse-Engineering http:/ VERILOG IBM Rational Performance Tester 和和 HP Mercury LoadRunner 的比較的比較 http:/ 52Mercury Interactivewww. M With Mercury Quality Center, y
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 刨冰店加盟合同范本
- 出境旅游協(xié)議合同范本
- 出售養(yǎng)殖大院合同范本
- 加盟商家合同范本
- 共享專機采購合同范本
- 關于工程維護合同范本
- 綜合整治土地平整施工方案
- 劇本殺儲值卡合同范本
- 買賣叉車合同范本
- 分紅合同范本
- 中小學領導班子包級包組包班制度
- 汽車掛靠經(jīng)營合同協(xié)議書模板
- 基坑土方開挖專項施工方案(完整版)
- 電網(wǎng)工程設備材料信息參考價(2024年第四季度)
- 2025年江蘇農(nóng)牧科技職業(yè)學院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 數(shù)據(jù)中心運維服務投標方案(技術標)
- 瑞幸對賭協(xié)議
- 幼兒園一日活動流程教師培訓
- 2024-2025學年山東省濰坊市高一上冊1月期末考試數(shù)學檢測試題(附解析)
- 征信入校園教育課件
- 《你當像鳥飛往你的山》讀書分享讀書分享筆記
評論
0/150
提交評論