第12章 面向?qū)ο髮?shí)現(xiàn)_第1頁(yè)
第12章 面向?qū)ο髮?shí)現(xiàn)_第2頁(yè)
第12章 面向?qū)ο髮?shí)現(xiàn)_第3頁(yè)
第12章 面向?qū)ο髮?shí)現(xiàn)_第4頁(yè)
第12章 面向?qū)ο髮?shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩48頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第第12章章 面向?qū)ο髮?shí)現(xiàn)面向?qū)ο髮?shí)現(xiàn)12.1 程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)語(yǔ)言12.2 程序設(shè)計(jì)風(fēng)格程序設(shè)計(jì)風(fēng)格12.3 測(cè)試策略測(cè)試策略12.4 設(shè)計(jì)測(cè)試用例設(shè)計(jì)測(cè)試用例12.5 小結(jié)小結(jié)1n面向?qū)ο髮?shí)現(xiàn)與面向過(guò)程的一樣應(yīng)包括:面向?qū)ο髮?shí)現(xiàn)與面向過(guò)程的一樣應(yīng)包括:編碼,測(cè)試。編碼,測(cè)試。n面向?qū)ο蟮姆治龊驮O(shè)計(jì)共同的模型使它們難于分開(kāi)。面向?qū)ο蟮姆治龊驮O(shè)計(jì)共同的模型使它們難于分開(kāi)。n面向?qū)ο缶幊堂嫦驅(qū)ο缶幊?OOP)需要需要OOP語(yǔ)言語(yǔ)言O(shè)OLnOOL具有自己的特點(diǎn)和風(fēng)格。具有自己的特點(diǎn)和風(fēng)格。n面向?qū)ο蟪绦蛑械姆庋b、繼承和多態(tài)等機(jī)制,給測(cè)試面向?qū)ο蟪绦蛑械姆庋b、繼承和多態(tài)等機(jī)制,給測(cè)試帶來(lái)新特點(diǎn),

2、增加了測(cè)試和調(diào)試的難度。帶來(lái)新特點(diǎn),增加了測(cè)試和調(diào)試的難度。23n面向?qū)ο蟮脑O(shè)計(jì)適宜用面向?qū)ο蟮脑O(shè)計(jì)適宜用OOL來(lái)實(shí)現(xiàn),來(lái)實(shí)現(xiàn), 理論上也理論上也可以用非可以用非OOL實(shí)現(xiàn)但不可取。實(shí)現(xiàn)但不可取。n若用非若用非OOL編寫(xiě)面向?qū)ο蟪绦?,則程序員必須自編寫(xiě)面向?qū)ο蟪绦?,則程序員必須自己實(shí)現(xiàn)己實(shí)現(xiàn)OOL編譯程序自動(dòng)提供的面向?qū)ο蟮母拍罹幾g程序自動(dòng)提供的面向?qū)ο蟮母拍詈蜋C(jī)制:類(lèi),繼承,封裝。和機(jī)制:類(lèi),繼承,封裝。若有可能,應(yīng)選用若有可能,應(yīng)選用OOL。12.1 程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)語(yǔ)言 12.1.1 面向?qū)ο笳Z(yǔ)言面向?qū)ο笳Z(yǔ)言O(shè)OL的優(yōu)點(diǎn)的優(yōu)點(diǎn)41. 一致的表示方法一致的表示方法 面向?qū)ο箝_(kāi)發(fā)基于不隨

3、時(shí)間變化的、一致的表面向?qū)ο箝_(kāi)發(fā)基于不隨時(shí)間變化的、一致的表示方法示方法OOOO模型:模型:OOAOOA,OODOOD,OOPOOP。2. 可重用性可重用性軟件開(kāi)發(fā)組織可重用軟件開(kāi)發(fā)組織可重用OOA, OOD和和OOP結(jié)果。結(jié)果。3. 可維護(hù)性可維護(hù)性 保持文檔與源程序一致的完全一致幾乎不可能。保持文檔與源程序一致的完全一致幾乎不可能。OOLOOL的可讀性的可讀性( (對(duì)象名等對(duì)象名等) ) = =可維護(hù)性可維護(hù)性。5兩大類(lèi)面向?qū)ο笳Z(yǔ)言?xún)纱箢?lèi)面向?qū)ο笳Z(yǔ)言:u純面向?qū)ο笳Z(yǔ)言純面向?qū)ο笳Z(yǔ)言: Smalltalk和和Eiffel等等u混合型面向?qū)ο笳Z(yǔ)言混合型面向?qū)ο笳Z(yǔ)言: 過(guò)程語(yǔ)言過(guò)程語(yǔ)言+OO,如

4、,如C+n純面向?qū)ο笳Z(yǔ)言著重支持面向?qū)ο蠓椒ㄑ芯亢涂旒兠嫦驅(qū)ο笳Z(yǔ)言著重支持面向?qū)ο蠓椒ㄑ芯亢涂焖僭偷膶?shí)現(xiàn)。速原型的實(shí)現(xiàn)。n混合型面向?qū)ο笳Z(yǔ)言的目標(biāo)則是提高運(yùn)行速度和混合型面向?qū)ο笳Z(yǔ)言的目標(biāo)則是提高運(yùn)行速度和使傳統(tǒng)程序員容易接受面向?qū)ο笏枷?。使傳統(tǒng)程序員容易接受面向?qū)ο笏枷?。比較面向?qū)ο笳Z(yǔ)言比較面向?qū)ο笳Z(yǔ)言/開(kāi)發(fā)環(huán)境時(shí)需要考察的特點(diǎn):開(kāi)發(fā)環(huán)境時(shí)需要考察的特點(diǎn):12.1.2 面向?qū)ο笳Z(yǔ)言的技術(shù)特點(diǎn)面向?qū)ο笳Z(yǔ)言的技術(shù)特點(diǎn)61. 支持類(lèi)與對(duì)象概念的機(jī)制支持類(lèi)與對(duì)象概念的機(jī)制:內(nèi)存管理內(nèi)存管理 允許用戶(hù)動(dòng)態(tài)創(chuàng)建對(duì)象意味著系統(tǒng)必須處理內(nèi)允許用戶(hù)動(dòng)態(tài)創(chuàng)建對(duì)象意味著系統(tǒng)必須處理內(nèi)存管理問(wèn)題。存管理問(wèn)題。 有

5、兩種管理內(nèi)存的方法有兩種管理內(nèi)存的方法: : 1) 1)語(yǔ)言的運(yùn)行機(jī)制自動(dòng)管理內(nèi)存,即自動(dòng)回收語(yǔ)言的運(yùn)行機(jī)制自動(dòng)管理內(nèi)存,即自動(dòng)回收“垃圾垃圾”的機(jī)制;的機(jī)制;( (必須采用先進(jìn)的垃圾收集算法必須采用先進(jìn)的垃圾收集算法) ) 2) 2)由程序員編寫(xiě)釋放內(nèi)存的代碼。由程序員編寫(xiě)釋放內(nèi)存的代碼。 ( (例如例如: : 程序員定義析構(gòu)函數(shù)程序員定義析構(gòu)函數(shù)(destructor)(destructor)。每當(dāng)一個(gè)對(duì)象超出范圍或被顯式刪除時(shí),就自動(dòng)調(diào)每當(dāng)一個(gè)對(duì)象超出范圍或被顯式刪除時(shí),就自動(dòng)調(diào)用析構(gòu)函數(shù)。這種機(jī)制使得程序員能夠方便地構(gòu)造用析構(gòu)函數(shù)。這種機(jī)制使得程序員能夠方便地構(gòu)造和喚醒釋放內(nèi)存的操作和

6、喚醒釋放內(nèi)存的操作) )72. 實(shí)現(xiàn)整體實(shí)現(xiàn)整體-部分部分(即聚集即聚集)結(jié)構(gòu)的機(jī)制結(jié)構(gòu)的機(jī)制兩種實(shí)現(xiàn)關(guān)聯(lián)方法兩種實(shí)現(xiàn)關(guān)聯(lián)方法: 指針和獨(dú)立的關(guān)聯(lián)對(duì)象指針和獨(dú)立的關(guān)聯(lián)對(duì)象 大多數(shù)現(xiàn)有的面向?qū)ο笳Z(yǔ)言并不顯式支持獨(dú)立大多數(shù)現(xiàn)有的面向?qū)ο笳Z(yǔ)言并不顯式支持獨(dú)立的關(guān)聯(lián)對(duì)象,在這種情況下,使用指針是最容易的的關(guān)聯(lián)對(duì)象,在這種情況下,使用指針是最容易的實(shí)現(xiàn)關(guān)聯(lián)的方法。實(shí)現(xiàn)關(guān)聯(lián)的方法。83. 實(shí)現(xiàn)一般實(shí)現(xiàn)一般-特殊特殊(即泛化即泛化)結(jié)構(gòu)的機(jī)制結(jié)構(gòu)的機(jī)制實(shí)現(xiàn)繼承實(shí)現(xiàn)繼承 + 解決名字沖突。解決名字沖突。 名字沖突指的是繼承多個(gè)基類(lèi)可能出現(xiàn)的重名名字沖突指的是繼承多個(gè)基類(lèi)可能出現(xiàn)的重名問(wèn)題。問(wèn)題。n某些語(yǔ)言拒絕

7、接受有名字沖突的程序,另一些語(yǔ)某些語(yǔ)言拒絕接受有名字沖突的程序,另一些語(yǔ)言提供了解決沖突的協(xié)議。言提供了解決沖突的協(xié)議。n程序員應(yīng)該盡力避免出現(xiàn)名字沖突。程序員應(yīng)該盡力避免出現(xiàn)名字沖突。94. 實(shí)現(xiàn)屬性和服務(wù)的機(jī)制實(shí)現(xiàn)屬性和服務(wù)的機(jī)制屬性的機(jī)制:屬性的機(jī)制: 支持實(shí)例連接;支持實(shí)例連接;屬性的可見(jiàn)性控制;屬性的可見(jiàn)性控制;對(duì)屬性值的約束。對(duì)屬性值的約束。服務(wù)的機(jī)制:服務(wù)的機(jī)制: 支持消息連接支持消息連接(即表達(dá)對(duì)象交互關(guān)系即表達(dá)對(duì)象交互關(guān)系) ;控制服務(wù)可見(jiàn)性;控制服務(wù)可見(jiàn)性;動(dòng)態(tài)聯(lián)編。動(dòng)態(tài)聯(lián)編。105. 類(lèi)型檢查類(lèi)型檢查強(qiáng)強(qiáng)/弱類(lèi)型弱類(lèi)型: 語(yǔ)法規(guī)定變量語(yǔ)法規(guī)定變量/屬性分類(lèi)的嚴(yán)格性。屬性分

8、類(lèi)的嚴(yán)格性。強(qiáng)類(lèi)型優(yōu)點(diǎn):強(qiáng)類(lèi)型優(yōu)點(diǎn): u一是在編譯時(shí)能發(fā)現(xiàn)程序錯(cuò)誤,一是在編譯時(shí)能發(fā)現(xiàn)程序錯(cuò)誤,u二是增加了優(yōu)化的可能性。二是增加了優(yōu)化的可能性。強(qiáng)類(lèi)型有助于提高軟件的可靠性和運(yùn)行效率。強(qiáng)類(lèi)型有助于提高軟件的可靠性和運(yùn)行效率。強(qiáng)類(lèi)型宜用于開(kāi)發(fā)軟件產(chǎn)品,強(qiáng)類(lèi)型宜用于開(kāi)發(fā)軟件產(chǎn)品,弱類(lèi)型適于快速開(kāi)發(fā)原型。弱類(lèi)型適于快速開(kāi)發(fā)原型。116. 類(lèi)庫(kù)類(lèi)庫(kù)n類(lèi)庫(kù)類(lèi)庫(kù):編譯編譯/開(kāi)發(fā)環(huán)境提供的重用類(lèi)構(gòu)件。開(kāi)發(fā)環(huán)境提供的重用類(lèi)構(gòu)件。n類(lèi)庫(kù)包含實(shí)現(xiàn)通用數(shù)據(jù)結(jié)構(gòu)類(lèi)庫(kù)包含實(shí)現(xiàn)通用數(shù)據(jù)結(jié)構(gòu)(例如,動(dòng)態(tài)數(shù)組、表、例如,動(dòng)態(tài)數(shù)組、表、隊(duì)列、棧、樹(shù)等等隊(duì)列、棧、樹(shù)等等)的類(lèi),的類(lèi),GUI用戶(hù)界面類(lèi)。用戶(hù)界面類(lèi)。7. 效率效率

9、n面向?qū)ο笳Z(yǔ)言的主要缺點(diǎn)是效率低:早期解釋型面向?qū)ο笳Z(yǔ)言的主要缺點(diǎn)是效率低:早期解釋型語(yǔ)言語(yǔ)言, 動(dòng)態(tài)聯(lián)編。動(dòng)態(tài)聯(lián)編。n類(lèi)庫(kù)中提供的算法和數(shù)據(jù)結(jié)構(gòu)更高效。類(lèi)庫(kù)中提供的算法和數(shù)據(jù)結(jié)構(gòu)更高效。n與結(jié)構(gòu)化語(yǔ)言的效率差別可以忽略,總體上利大與結(jié)構(gòu)化語(yǔ)言的效率差別可以忽略,總體上利大于弊。于弊。128. 持久保存對(duì)象持久保存對(duì)象 不依賴(lài)于程序執(zhí)行的生命期而長(zhǎng)時(shí)間保存數(shù)據(jù)不依賴(lài)于程序執(zhí)行的生命期而長(zhǎng)時(shí)間保存數(shù)據(jù)對(duì)象的兩個(gè)原因:對(duì)象的兩個(gè)原因: (1) (1) 實(shí)現(xiàn)不同時(shí)運(yùn)行程序間傳遞數(shù)據(jù)實(shí)現(xiàn)不同時(shí)運(yùn)行程序間傳遞數(shù)據(jù)(2) (2) 恢復(fù)被中斷了的程序的運(yùn)行恢復(fù)被中斷了的程序的運(yùn)行 理想情況下,應(yīng)該使程序設(shè)計(jì)

10、語(yǔ)言語(yǔ)法與對(duì)象理想情況下,應(yīng)該使程序設(shè)計(jì)語(yǔ)言語(yǔ)法與對(duì)象存儲(chǔ)管理語(yǔ)法實(shí)現(xiàn)無(wú)縫集成。存儲(chǔ)管理語(yǔ)法實(shí)現(xiàn)無(wú)縫集成。139. 參數(shù)化類(lèi)參數(shù)化類(lèi)n類(lèi)的數(shù)據(jù)類(lèi)的數(shù)據(jù)(屬性屬性)類(lèi)型可以由參數(shù)給定。類(lèi)型可以由參數(shù)給定。n一個(gè)類(lèi)可以對(duì)不同的數(shù)據(jù)類(lèi)型施以同樣的操作。一個(gè)類(lèi)可以對(duì)不同的數(shù)據(jù)類(lèi)型施以同樣的操作。如對(duì)整數(shù)和實(shí)數(shù)排序。如對(duì)整數(shù)和實(shí)數(shù)排序。nEiffel 和和C+語(yǔ)言提供了參數(shù)化類(lèi)語(yǔ)言提供了參數(shù)化類(lèi)/類(lèi)模板。類(lèi)模板。10. 開(kāi)發(fā)環(huán)境開(kāi)發(fā)環(huán)境n軟件工具或開(kāi)發(fā)環(huán)境對(duì)軟件生產(chǎn)率有很大影響。軟件工具或開(kāi)發(fā)環(huán)境對(duì)軟件生產(chǎn)率有很大影響。n一個(gè)語(yǔ)言可有不同的編譯程序。一個(gè)語(yǔ)言可有不同的編譯程序。nCASE工具與語(yǔ)言的兼容

11、性。工具與語(yǔ)言的兼容性。14選擇面向?qū)ο笳Z(yǔ)言應(yīng)考慮的因素選擇面向?qū)ο笳Z(yǔ)言應(yīng)考慮的因素:1. 將來(lái)能否占主導(dǎo)地位將來(lái)能否占主導(dǎo)地位語(yǔ)言的生命力及穩(wěn)定性:維護(hù)的考慮。語(yǔ)言的生命力及穩(wěn)定性:維護(hù)的考慮。2. 可重用性可重用性影響重用的要素:封裝、繼承、多態(tài)。影響重用的要素:封裝、繼承、多態(tài)。3. 類(lèi)庫(kù)和開(kāi)發(fā)環(huán)境類(lèi)庫(kù)和開(kāi)發(fā)環(huán)境n語(yǔ)言、開(kāi)發(fā)環(huán)境和類(lèi)庫(kù)這語(yǔ)言、開(kāi)發(fā)環(huán)境和類(lèi)庫(kù)這3個(gè)因素共同決定可重用性。個(gè)因素共同決定可重用性。n類(lèi)庫(kù)是否提供有價(jià)值的類(lèi)?類(lèi)庫(kù)是否提供有價(jià)值的類(lèi)?n開(kāi)發(fā)環(huán)境是否提供使用方便的類(lèi)庫(kù)編輯和瀏覽工具。開(kāi)發(fā)環(huán)境是否提供使用方便的類(lèi)庫(kù)編輯和瀏覽工具。12.1.3 選擇面向?qū)ο笳Z(yǔ)言選擇面向?qū)?/p>

12、象語(yǔ)言154. 其他因素其他因素u在選擇編程語(yǔ)言時(shí),應(yīng)該考慮的其他因素還有:在選擇編程語(yǔ)言時(shí),應(yīng)該考慮的其他因素還有:對(duì)用戶(hù)學(xué)習(xí)面向?qū)ο蠓治?、設(shè)計(jì)和編碼技術(shù)所能提對(duì)用戶(hù)學(xué)習(xí)面向?qū)ο蠓治?、設(shè)計(jì)和編碼技術(shù)所能提供的培訓(xùn)服務(wù);供的培訓(xùn)服務(wù);u在使用這個(gè)面向?qū)ο笳Z(yǔ)言期間能提供的技術(shù)支持;在使用這個(gè)面向?qū)ο笳Z(yǔ)言期間能提供的技術(shù)支持;能提供給開(kāi)發(fā)人員使用的開(kāi)發(fā)工具、開(kāi)發(fā)平臺(tái)、發(fā)能提供給開(kāi)發(fā)人員使用的開(kāi)發(fā)工具、開(kāi)發(fā)平臺(tái)、發(fā)行平臺(tái);行平臺(tái);u對(duì)機(jī)器性能和內(nèi)存的需求;對(duì)機(jī)器性能和內(nèi)存的需求;u集成已有軟件的容易程度集成已有軟件的容易程度(調(diào)用其它語(yǔ)言的模塊調(diào)用其它語(yǔ)言的模塊)。16 為適應(yīng)面向?qū)ο蠓椒ㄋ赜械母?/p>

13、念為適應(yīng)面向?qū)ο蠓椒ㄋ赜械母拍? (例如,繼例如,繼承性承性) )而必須遵循的一些新準(zhǔn)則。而必須遵循的一些新準(zhǔn)則。12.2 程序設(shè)計(jì)風(fēng)格程序設(shè)計(jì)風(fēng)格17 兩種代碼重用:兩種代碼重用: 1) 本項(xiàng)目?jī)?nèi)的代碼重用本項(xiàng)目?jī)?nèi)的代碼重用 2) 重用舊重用舊/外項(xiàng)目的代碼。外項(xiàng)目的代碼。內(nèi)部重用內(nèi)部重用:利用繼承機(jī)制共享相同或相似的部分利用繼承機(jī)制共享相同或相似的部分12.2.1 提高可重用性提高可重用性實(shí)現(xiàn)兩類(lèi)重用的程序設(shè)計(jì)準(zhǔn)則:實(shí)現(xiàn)兩類(lèi)重用的程序設(shè)計(jì)準(zhǔn)則:1. 提高方法的內(nèi)聚提高方法的內(nèi)聚一個(gè)方法一個(gè)方法(即服務(wù)即服務(wù))只完成單個(gè)功能只完成單個(gè)功能, 否則把它分解否則把它分解成幾個(gè)更小的方法。成幾個(gè)

14、更小的方法。2. 減小方法的規(guī)模減小方法的規(guī)模把規(guī)模過(guò)大的方法把規(guī)模過(guò)大的方法(代碼長(zhǎng)度超過(guò)一頁(yè)紙代碼長(zhǎng)度超過(guò)一頁(yè)紙),分解成,分解成幾個(gè)更小的方法。幾個(gè)更小的方法。3. 保持方法的一致性保持方法的一致性功能相似的方法應(yīng)該有一致的名字、參數(shù)特征功能相似的方法應(yīng)該有一致的名字、參數(shù)特征(包包括參數(shù)個(gè)數(shù)、類(lèi)型和次序括參數(shù)個(gè)數(shù)、類(lèi)型和次序)、返回值類(lèi)型、使用條、返回值類(lèi)型、使用條件及出錯(cuò)條件等。件及出錯(cuò)條件等。184. 把策略與實(shí)現(xiàn)分開(kāi)把策略與實(shí)現(xiàn)分開(kāi)兩種不同類(lèi)型的方法:策略與實(shí)現(xiàn)。兩種不同類(lèi)型的方法:策略與實(shí)現(xiàn)。n策略方法策略方法(拼積木拼積木)調(diào)用實(shí)現(xiàn)方法調(diào)用實(shí)現(xiàn)方法(積木積木)來(lái)完成任務(wù)來(lái)完成

15、任務(wù)(實(shí)現(xiàn)圖案實(shí)現(xiàn)圖案)。n策略方法通常緊密依賴(lài)于具體應(yīng)用。策略方法通常緊密依賴(lài)于具體應(yīng)用。n實(shí)現(xiàn)方法針對(duì)具體數(shù)據(jù)完成特定處理,用于實(shí)現(xiàn)實(shí)現(xiàn)方法針對(duì)具體數(shù)據(jù)完成特定處理,用于實(shí)現(xiàn)復(fù)雜的算法。相對(duì)獨(dú)立于應(yīng)用,因此,較可能被重復(fù)雜的算法。相對(duì)獨(dú)立于應(yīng)用,因此,較可能被重用。用。這是軟件具有柔性、可裝配性的基礎(chǔ)這是軟件具有柔性、可裝配性的基礎(chǔ)195. 全面覆蓋全面覆蓋 方法的實(shí)現(xiàn)不僅滿(mǎn)足當(dāng)前應(yīng)用而且應(yīng)該考慮其方法的實(shí)現(xiàn)不僅滿(mǎn)足當(dāng)前應(yīng)用而且應(yīng)該考慮其它應(yīng)用的潛在需要。它應(yīng)用的潛在需要。 此外,方法對(duì)空值、極限值及界外值等異常情此外,方法對(duì)空值、極限值及界外值等異常情況也應(yīng)該能夠作出有意義的響應(yīng)。況也應(yīng)

16、該能夠作出有意義的響應(yīng)。6. 盡量不使用全局信息盡量不使用全局信息 應(yīng)該盡量降低方法與外界的耦合程度,不使用應(yīng)該盡量降低方法與外界的耦合程度,不使用全局信息,如類(lèi)變量。全局信息,如類(lèi)變量。207. 利用繼承機(jī)制利用繼承機(jī)制繼承是實(shí)現(xiàn)共享和提高重用的主要途徑。繼承是實(shí)現(xiàn)共享和提高重用的主要途徑。(1) 調(diào)用子過(guò)程:把公共的代碼分離出來(lái),構(gòu)成一個(gè)調(diào)用子過(guò)程:把公共的代碼分離出來(lái),構(gòu)成一個(gè)被其他方法調(diào)用的公用方法,被其他方法調(diào)用的公用方法, 并在基類(lèi)中定義它。并在基類(lèi)中定義它。(2) 分解因子。從不同類(lèi)的相似方法中分解出不同的分解因子。從不同類(lèi)的相似方法中分解出不同的“因子因子”(即不同的代碼即不同

17、的代碼),把余下的代碼作為公用方,把余下的代碼作為公用方法中的公共代碼,把分解出的因子作為法中的公共代碼,把分解出的因子作為名字相同名字相同(多多態(tài)性機(jī)制態(tài)性機(jī)制)算法不同的方法,放在不同類(lèi)中定義,并算法不同的方法,放在不同類(lèi)中定義,并被這個(gè)公用方法調(diào)用,如圖所示。被這個(gè)公用方法調(diào)用,如圖所示。21(3) 使用委托。僅當(dāng)確實(shí)存在一般使用委托。僅當(dāng)確實(shí)存在一般-特殊關(guān)系時(shí),使特殊關(guān)系時(shí),使用繼承才是恰當(dāng)?shù)模駝t,可以利用委托機(jī)制,如用繼承才是恰當(dāng)?shù)?,否則,可以利用委托機(jī)制,如本書(shū)本書(shū)11.11.3小節(jié)所述。小節(jié)所述。(4) 把代碼封裝在類(lèi)中。把代碼封裝在類(lèi)中。(與繼承無(wú)關(guān),典型用于封裝(與繼承無(wú)

18、關(guān),典型用于封裝其他軟件包功能)其他軟件包功能)把被重用的代碼封裝在類(lèi)中比較安全和易于修改。把被重用的代碼封裝在類(lèi)中比較安全和易于修改。22 提高可重用性的準(zhǔn)則,也能提高程序的可擴(kuò)充提高可重用性的準(zhǔn)則,也能提高程序的可擴(kuò)充性。此外,下列準(zhǔn)則也有助于提高可擴(kuò)充性:性。此外,下列準(zhǔn)則也有助于提高可擴(kuò)充性: 1. 1. 封裝實(shí)現(xiàn)策略封裝實(shí)現(xiàn)策略 把類(lèi)的實(shí)現(xiàn)策略把類(lèi)的實(shí)現(xiàn)策略( (包括描述屬性的數(shù)據(jù)結(jié)構(gòu)、包括描述屬性的數(shù)據(jù)結(jié)構(gòu)、修改屬性的算法等修改屬性的算法等) )封裝起來(lái),將提高今后修改數(shù)封裝起來(lái),將提高今后修改數(shù)據(jù)結(jié)構(gòu)或算法的自由度。據(jù)結(jié)構(gòu)或算法的自由度。12.2.2 提高可擴(kuò)充性提高可擴(kuò)充性23

19、2. 不要用一個(gè)方法遍歷多條關(guān)聯(lián)鏈不要用一個(gè)方法遍歷多條關(guān)聯(lián)鏈 一個(gè)方法應(yīng)該只包含對(duì)象模型中的有限內(nèi)容。一個(gè)方法應(yīng)該只包含對(duì)象模型中的有限內(nèi)容。否則將導(dǎo)致方法過(guò)分復(fù)雜,既不易理解,也不易修否則將導(dǎo)致方法過(guò)分復(fù)雜,既不易理解,也不易修改擴(kuò)充。改擴(kuò)充。3. 避免使用多分支語(yǔ)句避免使用多分支語(yǔ)句 可以利用可以利用DO_CASEDO_CASE語(yǔ)句測(cè)試對(duì)象的內(nèi)部狀態(tài),語(yǔ)句測(cè)試對(duì)象的內(nèi)部狀態(tài),而不要用來(lái)根據(jù)對(duì)象類(lèi)型選擇應(yīng)有的行為而不要用來(lái)根據(jù)對(duì)象類(lèi)型選擇應(yīng)有的行為( (強(qiáng)耦合強(qiáng)耦合) ),否則在增添新類(lèi)時(shí)將不得不修改原有的代碼。應(yīng)該否則在增添新類(lèi)時(shí)將不得不修改原有的代碼。應(yīng)該利用多態(tài)性機(jī)制,根據(jù)對(duì)象當(dāng)前類(lèi)

20、型,自動(dòng)決定應(yīng)利用多態(tài)性機(jī)制,根據(jù)對(duì)象當(dāng)前類(lèi)型,自動(dòng)決定應(yīng)有的行為。有的行為。244. 精心確定公有方法精心確定公有方法 公有方法是向公眾公布的接口。對(duì)這類(lèi)方法的公有方法是向公眾公布的接口。對(duì)這類(lèi)方法的修改往往會(huì)涉及許多其他類(lèi)。為提高穩(wěn)定性,可修修改往往會(huì)涉及許多其他類(lèi)。為提高穩(wěn)定性,可修改性,降低維護(hù)成本,必須精心選擇和定義公有方改性,降低維護(hù)成本,必須精心選擇和定義公有方法。法。 刪除、增加或修改私有方法所涉及的面要窄得刪除、增加或修改私有方法所涉及的面要窄得多,因此代價(jià)也比較低。多,因此代價(jià)也比較低。25 既應(yīng)該考慮效率,也應(yīng)該考慮健壯性。需要在既應(yīng)該考慮效率,也應(yīng)該考慮健壯性。需要在健

21、壯性與效率之間做出適當(dāng)?shù)恼壑?。健壯性與效率之間做出適當(dāng)?shù)恼壑浴?為提高健壯性應(yīng)該遵守以下幾條準(zhǔn)則:為提高健壯性應(yīng)該遵守以下幾條準(zhǔn)則:1. 1. 預(yù)防用戶(hù)的操作錯(cuò)誤預(yù)防用戶(hù)的操作錯(cuò)誤 軟件系統(tǒng)必須具有處理用戶(hù)操作錯(cuò)誤的能力。軟件系統(tǒng)必須具有處理用戶(hù)操作錯(cuò)誤的能力。任何一個(gè)接收用戶(hù)輸入數(shù)據(jù)的方法,對(duì)其接收到的任何一個(gè)接收用戶(hù)輸入數(shù)據(jù)的方法,對(duì)其接收到的數(shù)據(jù)都必須進(jìn)行檢查,發(fā)現(xiàn)了錯(cuò)誤,應(yīng)該給出恰當(dāng)數(shù)據(jù)都必須進(jìn)行檢查,發(fā)現(xiàn)了錯(cuò)誤,應(yīng)該給出恰當(dāng)?shù)奶崾拘畔?,并?zhǔn)備再次接收用戶(hù)的輸入。的提示信息,并準(zhǔn)備再次接收用戶(hù)的輸入。12.2.3 提高健壯性提高健壯性262. 2. 檢查參數(shù)的合法性檢查參數(shù)的合法性 對(duì)

22、公有方法,尤其應(yīng)該著重檢查其參數(shù)的合法對(duì)公有方法,尤其應(yīng)該著重檢查其參數(shù)的合法性,因?yàn)檎{(diào)用公有方法時(shí)可能違反參數(shù)的約束條件。性,因?yàn)檎{(diào)用公有方法時(shí)可能違反參數(shù)的約束條件。3. 3. 不要輕易限定數(shù)據(jù)容量不要輕易限定數(shù)據(jù)容量 在設(shè)計(jì)階段,很難準(zhǔn)確地預(yù)測(cè)出應(yīng)用系統(tǒng)中數(shù)在設(shè)計(jì)階段,很難準(zhǔn)確地預(yù)測(cè)出應(yīng)用系統(tǒng)中數(shù)據(jù)結(jié)構(gòu)的最大容量需求。如果有必要和可能,應(yīng)該據(jù)結(jié)構(gòu)的最大容量需求。如果有必要和可能,應(yīng)該使用動(dòng)態(tài)內(nèi)存分配機(jī)制。使用動(dòng)態(tài)內(nèi)存分配機(jī)制。274. 4. 先測(cè)試后優(yōu)化先測(cè)試后優(yōu)化 測(cè)試程序的性能以確定是否為提高效率而進(jìn)行測(cè)試程序的性能以確定是否為提高效率而進(jìn)行優(yōu)化。優(yōu)化。 如果實(shí)現(xiàn)某個(gè)操作的算法有許多

23、種,則應(yīng)該綜如果實(shí)現(xiàn)某個(gè)操作的算法有許多種,則應(yīng)該綜合考慮內(nèi)存需求、速度及實(shí)現(xiàn)的簡(jiǎn)易程度等因素,合考慮內(nèi)存需求、速度及實(shí)現(xiàn)的簡(jiǎn)易程度等因素,經(jīng)合理折衷選定適當(dāng)?shù)乃惴?。?jīng)合理折衷選定適當(dāng)?shù)乃惴ā?8 測(cè)試面向?qū)ο筌浖牟呗耘c與面向過(guò)程的策略測(cè)試面向?qū)ο筌浖牟呗耘c與面向過(guò)程的策略基本相同,但也有許多新特點(diǎn)?;鞠嗤灿性S多新特點(diǎn)。12.3 測(cè)試策略測(cè)試策略29n最小的可測(cè)試單元是單個(gè)封裝起來(lái)的類(lèi)和對(duì)象最小的可測(cè)試單元是單個(gè)封裝起來(lái)的類(lèi)和對(duì)象n測(cè)試一個(gè)類(lèi)就是測(cè)試它的對(duì)象子集測(cè)試一個(gè)類(lèi)就是測(cè)試它的對(duì)象子集(不可窮盡不可窮盡)n測(cè)試對(duì)象主要是測(cè)試它的操作測(cè)試對(duì)象主要是測(cè)試它的操作n不能孤立地測(cè)試單

24、個(gè)操作不能孤立地測(cè)試單個(gè)操作同一個(gè)操作在不同狀態(tài)下行為不同同一個(gè)操作在不同狀態(tài)下行為不同同一個(gè)操作在不同類(lèi)中有不同的實(shí)現(xiàn)同一個(gè)操作在不同類(lèi)中有不同的實(shí)現(xiàn)(多態(tài)性多態(tài)性)有必要在每個(gè)子類(lèi)的語(yǔ)境中測(cè)試操作有必要在每個(gè)子類(lèi)的語(yǔ)境中測(cè)試操作比面向過(guò)程更復(fù)雜比面向過(guò)程更復(fù)雜12.3.1 面向?qū)ο蟮膯卧獪y(cè)試面向?qū)ο蟮膯卧獪y(cè)試30集成集成=組裝有關(guān)聯(lián)的類(lèi)組裝有關(guān)聯(lián)的類(lèi)不存在層次的控制結(jié)構(gòu)不存在層次的控制結(jié)構(gòu)(隱含在類(lèi)中隱含在類(lèi)中)傳統(tǒng)的自頂向下傳統(tǒng)的自頂向下/自底向上的集成策略無(wú)意義。自底向上的集成策略無(wú)意義。12.3.2 面向?qū)ο蟮募蓽y(cè)試面向?qū)ο蟮募蓽y(cè)試31面向?qū)ο筌浖募蓽y(cè)試的兩種策略面向?qū)ο筌浖?/p>

25、的集成測(cè)試的兩種策略:(1) 基于線(xiàn)程的測(cè)試基于線(xiàn)程的測(cè)試(thread based testing): 把把響應(yīng)系統(tǒng)的一個(gè)輸入或一個(gè)事件所需要的那些類(lèi)響應(yīng)系統(tǒng)的一個(gè)輸入或一個(gè)事件所需要的那些類(lèi)(線(xiàn)程線(xiàn)程)集成起來(lái)。集成起來(lái)。(2) 基于使用的測(cè)試基于使用的測(cè)試(use based testing): 首先測(cè)首先測(cè)試獨(dú)立類(lèi)試獨(dú)立類(lèi)(幾乎不使用其它類(lèi)的類(lèi)幾乎不使用其它類(lèi)的類(lèi)),再測(cè)試使用獨(dú),再測(cè)試使用獨(dú)立類(lèi)的下一個(gè)層次的類(lèi)(稱(chēng)為依賴(lài)類(lèi))。據(jù)此依賴(lài)立類(lèi)的下一個(gè)層次的類(lèi)(稱(chēng)為依賴(lài)類(lèi))。據(jù)此依賴(lài)關(guān)系持續(xù)下去,直至把整個(gè)軟件系統(tǒng)構(gòu)造完為止。關(guān)系持續(xù)下去,直至把整個(gè)軟件系統(tǒng)構(gòu)造完為止。集群測(cè)試(集群測(cè)試(

26、cluster testing):用精心設(shè)計(jì)的測(cè)試用:用精心設(shè)計(jì)的測(cè)試用例檢查一群相互協(xié)作的類(lèi)(通過(guò)研究對(duì)象模型可以例檢查一群相互協(xié)作的類(lèi)(通過(guò)研究對(duì)象模型可以確定協(xié)作類(lèi)),以發(fā)現(xiàn)不同的類(lèi)之間的協(xié)作錯(cuò)誤。確定協(xié)作類(lèi)),以發(fā)現(xiàn)不同的類(lèi)之間的協(xié)作錯(cuò)誤。32 和傳統(tǒng)的確認(rèn)測(cè)試一樣,面向?qū)ο筌浖拇_認(rèn)和傳統(tǒng)的確認(rèn)測(cè)試一樣,面向?qū)ο筌浖拇_認(rèn)測(cè)試也集中檢查用戶(hù)可見(jiàn)的動(dòng)作和用戶(hù)可識(shí)別的輸測(cè)試也集中檢查用戶(hù)可見(jiàn)的動(dòng)作和用戶(hù)可識(shí)別的輸出。出。 從動(dòng)態(tài)模型和描述系統(tǒng)行為的腳本可導(dǎo)出確認(rèn)從動(dòng)態(tài)模型和描述系統(tǒng)行為的腳本可導(dǎo)出確認(rèn)測(cè)試用例,以發(fā)現(xiàn)用戶(hù)交互需求可能錯(cuò)誤的情景。測(cè)試用例,以發(fā)現(xiàn)用戶(hù)交互需求可能錯(cuò)誤的情景。

27、 黑盒測(cè)試方法可用于設(shè)計(jì)確認(rèn)測(cè)試用例。黑盒測(cè)試方法可用于設(shè)計(jì)確認(rèn)測(cè)試用例。12.3.3 面向?qū)ο蟮拇_認(rèn)測(cè)試面向?qū)ο蟮拇_認(rèn)測(cè)試33 與傳統(tǒng)軟件測(cè)試不同,面向?qū)ο鬁y(cè)試關(guān)注設(shè)計(jì)與傳統(tǒng)軟件測(cè)試不同,面向?qū)ο鬁y(cè)試關(guān)注設(shè)計(jì)適當(dāng)?shù)牟僮餍蛄幸詸z查類(lèi)的狀態(tài)。適當(dāng)?shù)牟僮餍蛄幸詸z查類(lèi)的狀態(tài)。 傳統(tǒng)方法的可用性:傳統(tǒng)方法的可用性:n 白盒測(cè)試:用于類(lèi)級(jí)別的測(cè)試。測(cè)試類(lèi)中封裝的白盒測(cè)試:用于類(lèi)級(jí)別的測(cè)試。測(cè)試類(lèi)中封裝的操作,檢查類(lèi)的狀態(tài)以確定是否存在錯(cuò)誤。操作,檢查類(lèi)的狀態(tài)以確定是否存在錯(cuò)誤。n 黑盒測(cè)試:用于集成測(cè)試、確認(rèn)測(cè)試。黑盒測(cè)試:用于集成測(cè)試、確認(rèn)測(cè)試。12.4 設(shè)計(jì)測(cè)試用例設(shè)計(jì)測(cè)試用例34 著重測(cè)試單個(gè)類(lèi)和

28、類(lèi)中封裝的方法,主要有:著重測(cè)試單個(gè)類(lèi)和類(lèi)中封裝的方法,主要有:隨機(jī)測(cè)試、劃分測(cè)試和基于故障的測(cè)試等隨機(jī)測(cè)試、劃分測(cè)試和基于故障的測(cè)試等3 3種。種。12.4.1 測(cè)試類(lèi)(單元)的方法測(cè)試類(lèi)(單元)的方法1. 隨機(jī)測(cè)試隨機(jī)測(cè)試隨機(jī)選取測(cè)試隨機(jī)選取測(cè)試類(lèi)操作類(lèi)操作序列以測(cè)試該類(lèi)對(duì)象不同的序列以測(cè)試該類(lèi)對(duì)象不同的生命歷史生命歷史問(wèn)題的性質(zhì)隱含了一些限制問(wèn)題的性質(zhì)隱含了一些限制 例:銀行應(yīng)用系統(tǒng)的例:銀行應(yīng)用系統(tǒng)的account(account(賬戶(hù))類(lèi)有下列賬戶(hù))類(lèi)有下列操作:操作: open(open(打開(kāi)),打開(kāi)),setup(setup(建立),建立),deposit(deposit(存款)

29、,存款),withdraw(withdraw(取款),取款),balance(balance(余余額),額),summarize(summarize(清單),清單),creditLimit(creditLimit(透支限額)透支限額)和和close(close(關(guān)閉)。關(guān)閉)。限制:限制:必須在其他操作前打開(kāi)賬戶(hù),完成了必須在其他操作前打開(kāi)賬戶(hù),完成了全部全部操操作之后作之后才能才能(/必須必須)關(guān)閉賬戶(hù)。關(guān)閉賬戶(hù)。35一個(gè)一個(gè)account類(lèi)實(shí)例的最小類(lèi)實(shí)例的最小(正常正常)行為歷史包含下列操行為歷史包含下列操作:作: opensetupdepositwithdrawclose可能發(fā)生許多其

30、他行為:可能發(fā)生許多其他行為: Opensetupdeposit deposit|withdraw|balance|summarize|creditLimitn.withdrawclose從上列序列可以隨機(jī)地產(chǎn)生一系列不同的操作序列:從上列序列可以隨機(jī)地產(chǎn)生一系列不同的操作序列: #r1:opensetupdepositdepositbalancesummarize.withdrawclose#r2:opensetupdepositcreditLimitwithdrawclose也要考慮異常(用戶(hù)或編程也要考慮異常(用戶(hù)或編程)序列:序列:opensetup.withdrawclosesetu

31、pdeposit.withdrawclose362. 劃分測(cè)試劃分測(cè)試 劃分測(cè)試(劃分測(cè)試(partition testingpartition testing)可以減少測(cè))可以減少測(cè)試用例的數(shù)量。試用例的數(shù)量。 3 3種劃分:狀態(tài)、屬性、功能。種劃分:狀態(tài)、屬性、功能。(1) 基于狀態(tài)的劃分基于狀態(tài)的劃分 根據(jù)類(lèi)操作是否改變類(lèi)狀態(tài)來(lái)劃分。根據(jù)類(lèi)操作是否改變類(lèi)狀態(tài)來(lái)劃分。 考慮考慮accountaccount類(lèi),狀態(tài)操作包括類(lèi),狀態(tài)操作包括depositdeposit和和withdrawwithdraw,而非狀態(tài)操作有,而非狀態(tài)操作有balance, summarizebalance, sum

32、marize和和creditLimitcreditLimit。 然后為每個(gè)類(lèi)別設(shè)計(jì)測(cè)試序列。用例應(yīng)覆蓋各然后為每個(gè)類(lèi)別設(shè)計(jì)測(cè)試序列。用例應(yīng)覆蓋各類(lèi)操作的每一操作。類(lèi)操作的每一操作。37(2) 基于屬性的劃分基于屬性的劃分 根據(jù)類(lèi)操作使用的屬性來(lái)劃分。根據(jù)類(lèi)操作使用的屬性來(lái)劃分。 對(duì)于對(duì)于accountaccount類(lèi)來(lái)說(shuō),可使用屬性類(lèi)來(lái)說(shuō),可使用屬性balance(balance(余余額額= =狀態(tài)狀態(tài)) ) 把操作劃分成把操作劃分成3 3個(gè)類(lèi)別:個(gè)類(lèi)別: 使用使用balance的操作;的操作; 修改修改balance的操作;的操作; 不使用也不修改不使用也不修改balance的操作。的操作。

33、 用重要屬性(狀態(tài))而非每個(gè)屬性來(lái)劃分。用重要屬性(狀態(tài))而非每個(gè)屬性來(lái)劃分。38(3) 基于功能的劃分基于功能的劃分 根據(jù)類(lèi)操作所完成的功能來(lái)劃分。根據(jù)類(lèi)操作所完成的功能來(lái)劃分。 例如,可以把例如,可以把a(bǔ)ccountaccount類(lèi)中的操作分類(lèi)為初始類(lèi)中的操作分類(lèi)為初始化操作(化操作(open,setupopen,setup),計(jì)算操作(),計(jì)算操作(deposit, deposit, withdrawwithdraw),查詢(xún)操作(),查詢(xún)操作(balance, balance, summarize,creditLimitsummarize,creditLimit)和終止操作()和終止操作

34、(closeclose)。)。393. 基于故障的測(cè)試基于故障的測(cè)試 Fault based testing Fault based testing與傳統(tǒng)的錯(cuò)誤推測(cè)法類(lèi)與傳統(tǒng)的錯(cuò)誤推測(cè)法類(lèi)似,首先推測(cè)軟件中可能有的錯(cuò)誤,然后設(shè)計(jì)出最似,首先推測(cè)軟件中可能有的錯(cuò)誤,然后設(shè)計(jì)出最可能發(fā)現(xiàn)這些錯(cuò)誤的測(cè)試用例??赡馨l(fā)現(xiàn)這些錯(cuò)誤的測(cè)試用例。 它的效率依靠測(cè)試人員的經(jīng)驗(yàn)和直覺(jué)。它的效率依靠測(cè)試人員的經(jīng)驗(yàn)和直覺(jué)。 它與面向?qū)ο蟮姆椒o(wú)關(guān)。它與面向?qū)ο蟮姆椒o(wú)關(guān)。40 集成測(cè)試用例主要針對(duì)集成測(cè)試用例主要針對(duì)類(lèi)間協(xié)作進(jìn)行測(cè)試。進(jìn)行測(cè)試。 測(cè)試類(lèi)間協(xié)作測(cè)試類(lèi)間協(xié)作可運(yùn)用基于使用的測(cè)試策略可運(yùn)用基于使用的測(cè)試策略

35、, , 找找出相互依賴(lài)的類(lèi)出相互依賴(lài)的類(lèi). . 然后設(shè)計(jì)用例觸發(fā)類(lèi)間的各種交然后設(shè)計(jì)用例觸發(fā)類(lèi)間的各種交互序列。互序列。 測(cè)試類(lèi)協(xié)作可以測(cè)試類(lèi)協(xié)作可以使用隨機(jī)測(cè)試方法和劃分測(cè)試使用隨機(jī)測(cè)試方法和劃分測(cè)試方法方法,以及,以及基于情景基于情景/ /腳本的測(cè)試和行為測(cè)試腳本的測(cè)試和行為測(cè)試來(lái)完來(lái)完成。成。 UMLUML的協(xié)作圖的協(xié)作圖能幫助我們找出相互依賴(lài)的類(lèi)和能幫助我們找出相互依賴(lài)的類(lèi)和交互序列。交互序列。 下圖展示了一個(gè)銀行系統(tǒng)的類(lèi)協(xié)作圖。下圖展示了一個(gè)銀行系統(tǒng)的類(lèi)協(xié)作圖。12.4.2 集成測(cè)試方法集成測(cè)試方法41圖圖12.3 銀行系統(tǒng)的類(lèi)銀行系統(tǒng)的類(lèi)-協(xié)作圖協(xié)作圖42箭頭線(xiàn)上的標(biāo)注箭頭線(xiàn)上的標(biāo)

36、注:協(xié)作而調(diào)用的操作協(xié)作而調(diào)用的操作1. 多類(lèi)測(cè)試多類(lèi)測(cè)試生成多個(gè)類(lèi)的測(cè)試用例步驟:生成多個(gè)類(lèi)的測(cè)試用例步驟:1) 對(duì)每個(gè)客戶(hù)對(duì)每個(gè)客戶(hù)/UI類(lèi),為其生成一系列測(cè)試序列來(lái)類(lèi),為其生成一系列測(cè)試序列來(lái)覆蓋所有操作。覆蓋所有操作。2) 對(duì)這些操作所生成的每個(gè)消息,確定接收消息的對(duì)這些操作所生成的每個(gè)消息,確定接收消息的協(xié)作類(lèi)協(xié)作類(lèi)/服務(wù)器對(duì)象中的對(duì)應(yīng)操作。服務(wù)器對(duì)象中的對(duì)應(yīng)操作。3)把每個(gè))把每個(gè)2)的操作,結(jié)合進(jìn)測(cè)試序列中。對(duì)每個(gè))的操作,結(jié)合進(jìn)測(cè)試序列中。對(duì)每個(gè)產(chǎn)生消息的操作,繼續(xù)產(chǎn)生消息的操作,繼續(xù)2)43例,儲(chǔ)戶(hù)存款,操作序列:例,儲(chǔ)戶(hù)存款,操作序列: ATM:cardInserted.p

37、assword.depositBank: verifyAcctverifyPINdepositReqValidationInfo : validAcct validPINAccount: deposit對(duì)對(duì)Bank類(lèi)的一個(gè)測(cè)試用例設(shè)計(jì)如下:類(lèi)的一個(gè)測(cè)試用例設(shè)計(jì)如下:#r4:verifyAcctBankvalidAcctValidationInfoverifyPINBankvalidPINvalidationInfodepositReqdepositaccount44 多個(gè)類(lèi)的劃分測(cè)試方法類(lèi)似于單個(gè)類(lèi)。多個(gè)類(lèi)的劃分測(cè)試方法類(lèi)似于單個(gè)類(lèi)。 另一種劃分測(cè)試方法,根據(jù)與特定類(lèi)的接口來(lái)另一種劃分測(cè)試方法

38、,根據(jù)與特定類(lèi)的接口來(lái)劃分類(lèi)操作。劃分類(lèi)操作。nBank類(lèi)接收來(lái)自類(lèi)接收來(lái)自ATM類(lèi)和類(lèi)和Cashier類(lèi)的消息,類(lèi)的消息,n可以把可以把Bank類(lèi)中的方法劃分成服務(wù)于類(lèi)中的方法劃分成服務(wù)于ATM和和Cashier的兩類(lèi)來(lái)測(cè)試它們。的兩類(lèi)來(lái)測(cè)試它們。452. 從動(dòng)態(tài)模型導(dǎo)出測(cè)試用例從動(dòng)態(tài)模型導(dǎo)出測(cè)試用例 類(lèi)的狀態(tài)圖可以幫助我們導(dǎo)出測(cè)試該類(lèi)(及與類(lèi)的狀態(tài)圖可以幫助我們導(dǎo)出測(cè)試該類(lèi)(及與其協(xié)作的那些類(lèi))的動(dòng)態(tài)行為的測(cè)試用例。其協(xié)作的那些類(lèi))的動(dòng)態(tài)行為的測(cè)試用例。46設(shè)計(jì)出的測(cè)試用例至少應(yīng)該覆蓋所有狀態(tài):設(shè)計(jì)出的測(cè)試用例至少應(yīng)該覆蓋所有狀態(tài): #s1:opensetupAccntdeposit(in

39、itial)withdraw(final)close導(dǎo)出更多測(cè)試用例,以保證所有行為都被測(cè)試:導(dǎo)出更多測(cè)試用例,以保證所有行為都被測(cè)試:#s2:opensetupAccntdeposit(initial)depositbalancecreditwithdraw(final)close#s3:opensetupAccntdeposit(initial)depositwithdrawaccntInfowithdraw(final)close類(lèi)似于傳統(tǒng)方法中的路徑覆蓋類(lèi)似于傳統(tǒng)方法中的路徑覆蓋在多個(gè)類(lèi)協(xié)作的情況下,應(yīng)該使用多個(gè)狀態(tài)圖。在多個(gè)類(lèi)協(xié)作的情況下,應(yīng)該使用多個(gè)狀態(tài)圖。47n面向?qū)ο笤O(shè)計(jì)原則上

40、不依賴(lài)于特定的實(shí)現(xiàn)環(huán)境,面向?qū)ο笤O(shè)計(jì)原則上不依賴(lài)于特定的實(shí)現(xiàn)環(huán)境,n但實(shí)現(xiàn)結(jié)果和成本卻取決于實(shí)現(xiàn)環(huán)境。但實(shí)現(xiàn)結(jié)果和成本卻取決于實(shí)現(xiàn)環(huán)境。n支持面向?qū)ο笤O(shè)計(jì)范式的程序語(yǔ)言、開(kāi)發(fā)環(huán)境及支持面向?qū)ο笤O(shè)計(jì)范式的程序語(yǔ)言、開(kāi)發(fā)環(huán)境及類(lèi)庫(kù),對(duì)于面向?qū)ο蟮膶?shí)現(xiàn)非常重要。類(lèi)庫(kù),對(duì)于面向?qū)ο蟮膶?shí)現(xiàn)非常重要。n具有方便的開(kāi)發(fā)環(huán)境和豐富的類(lèi)庫(kù)的面向?qū)ο蟪叹哂蟹奖愕拈_(kāi)發(fā)環(huán)境和豐富的類(lèi)庫(kù)的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言,是實(shí)現(xiàn)面向?qū)ο笤O(shè)計(jì)的最佳選擇。序設(shè)計(jì)語(yǔ)言,是實(shí)現(xiàn)面向?qū)ο笤O(shè)計(jì)的最佳選擇。n良好的程序設(shè)計(jì)風(fēng)格對(duì)于面向?qū)ο髮?shí)現(xiàn)來(lái)說(shuō)同樣良好的程序設(shè)計(jì)風(fēng)格對(duì)于面向?qū)ο髮?shí)現(xiàn)來(lái)說(shuō)同樣重要。重要。n傳統(tǒng)的程序設(shè)計(jì)風(fēng)格準(zhǔn)則依然成立,面向?qū)ο?/p>

41、方傳統(tǒng)的程序設(shè)計(jì)風(fēng)格準(zhǔn)則依然成立,面向?qū)ο蠓椒ㄟ€有一些新準(zhǔn)則。法還有一些新準(zhǔn)則。12.5 小結(jié)小結(jié)48n面向?qū)ο鬁y(cè)試的策略和技術(shù)與傳統(tǒng)測(cè)試有所不同,面向?qū)ο鬁y(cè)試的策略和技術(shù)與傳統(tǒng)測(cè)試有所不同,對(duì)象類(lèi)成為測(cè)試的焦點(diǎn)。對(duì)象類(lèi)成為測(cè)試的焦點(diǎn)。n測(cè)試類(lèi)時(shí)使用的方法主要有隨機(jī)測(cè)試、劃分測(cè)試測(cè)試類(lèi)時(shí)使用的方法主要有隨機(jī)測(cè)試、劃分測(cè)試和基于故障的測(cè)試。每種方法都測(cè)試類(lèi)中封裝的操和基于故障的測(cè)試。每種方法都測(cè)試類(lèi)中封裝的操作。每種操作要在不同的對(duì)象狀態(tài)(由對(duì)象的屬性作。每種操作要在不同的對(duì)象狀態(tài)(由對(duì)象的屬性值表示)下測(cè)試。值表示)下測(cè)試。n可以采用基于線(xiàn)程或基于使用的策略完成集成測(cè)可以采用基于線(xiàn)程或基于使用

42、的策略完成集成測(cè)試。試。n從動(dòng)態(tài)模型導(dǎo)出的測(cè)試用例,可以測(cè)試指定的類(lèi)從動(dòng)態(tài)模型導(dǎo)出的測(cè)試用例,可以測(cè)試指定的類(lèi)及其協(xié)作者。及其協(xié)作者。n面向?qū)ο笙到y(tǒng)的確認(rèn)測(cè)試可以用傳統(tǒng)的黑盒方法面向?qū)ο笙到y(tǒng)的確認(rèn)測(cè)試可以用傳統(tǒng)的黑盒方法完成。完成。n情景情景/腳本為系統(tǒng)確認(rèn)測(cè)試提供了用例。腳本為系統(tǒng)確認(rèn)測(cè)試提供了用例。49Test 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 tools50LOGISCOPE LOGISCOPE: Software Quality, Testing, Maintenance and Reverse-Engineering http:/ VERILOG IBM Rational Performance Tester 和和 HP Mercury LoadRunner 的比較的比較 http:/ 51Mercury Inter

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論