版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
軟件工程電子課件第10章面向?qū)ο髮?shí)現(xiàn)10.1.1面向?qū)ο笳Z(yǔ)言的優(yōu)點(diǎn)
到底應(yīng)該選用面向?qū)ο笳Z(yǔ)言還是非面向?qū)ο笳Z(yǔ)言,關(guān)鍵不在于語(yǔ)言功能強(qiáng)弱。選擇編程語(yǔ)言的關(guān)鍵因素,是語(yǔ)言的一致的表達(dá)能力、可重用性及可維護(hù)性。從面向?qū)ο笥^點(diǎn)看來(lái),能夠更完整、更準(zhǔn)確地表達(dá)問(wèn)題域語(yǔ)義的面向?qū)ο笳Z(yǔ)言的語(yǔ)法是非常重要的,因?yàn)檫@會(huì)帶來(lái)下述幾個(gè)重要優(yōu)點(diǎn)。10.1.1面向?qū)ο笳Z(yǔ)言的優(yōu)點(diǎn)1.一致的表示方法
從前面章節(jié)的講述中可以知道,面向?qū)ο箝_(kāi)發(fā)基于不隨時(shí)間變化的、一致的表示方法。這種表示方法應(yīng)該從問(wèn)題域到OOA,從OOA到OOD,最后從OOD到面向?qū)ο缶幊蹋∣OP),始終穩(wěn)定不變。一致的表示方法既有利于在軟件開(kāi)發(fā)過(guò)程中始終使用統(tǒng)一的概念,也有利于維護(hù)人員理解軟件的各種配置成分。10.1.1面向?qū)ο笳Z(yǔ)言的優(yōu)點(diǎn)2.可重用性
為了能帶來(lái)可觀的商業(yè)利益,必須在更廣泛的范圍中運(yùn)用重用機(jī)制,而不是僅僅在程序設(shè)計(jì)這個(gè)層次上進(jìn)行重用。因此,在OOA、OOD直到OOP中都顯式地表示問(wèn)題域語(yǔ)義,其意義是十分深遠(yuǎn)的。隨著時(shí)間的推移,軟件開(kāi)發(fā)組織既可能重用它在某個(gè)問(wèn)題域內(nèi)的OOA結(jié)果,也可能重用相應(yīng)的OOD和OOP結(jié)果。10.1.1面向?qū)ο笳Z(yǔ)言的優(yōu)點(diǎn)3.可維護(hù)性
盡管人們反復(fù)強(qiáng)調(diào)保持文檔與源程序一致的必要性,但是,在實(shí)際工作中很難做到交付兩類(lèi)不同的文檔,并使它們保持彼此完全一致。特別是考慮到進(jìn)度、預(yù)算、能力、人員等限制因素時(shí),做到兩類(lèi)文檔完全一致幾乎是不可能的。因此,維護(hù)人員最終面對(duì)的往往只有源程序本身。10.1.2面向?qū)ο笳Z(yǔ)言的技術(shù)特點(diǎn)
一般說(shuō)來(lái),純面向?qū)ο笳Z(yǔ)言著重支持面向?qū)ο蠓椒ㄑ芯亢涂焖僭偷膶?shí)現(xiàn),而混合型面向?qū)ο笳Z(yǔ)言的目標(biāo)則是提高運(yùn)行速度和使傳統(tǒng)程序員容易接受面向?qū)ο笏枷?。成熟的面向?qū)ο笳Z(yǔ)言通常都提供豐富的類(lèi)庫(kù)和強(qiáng)有力的開(kāi)發(fā)環(huán)境。10.1.2面向?qū)ο笳Z(yǔ)言的技術(shù)特點(diǎn)1.支持類(lèi)與對(duì)象概念的機(jī)制
所有面向?qū)ο笳Z(yǔ)言都允許用戶(hù)動(dòng)態(tài)創(chuàng)建對(duì)象,并且可以用指針引用動(dòng)態(tài)創(chuàng)建的對(duì)象。允許動(dòng)態(tài)創(chuàng)建對(duì)象,就意味著系統(tǒng)必須處理內(nèi)存管理問(wèn)題。有兩種管理內(nèi)存的方法:一種是由語(yǔ)言的運(yùn)行機(jī)制自動(dòng)管理內(nèi)存,即提供自動(dòng)回收“垃圾”的機(jī)制;另一種是由程序員編寫(xiě)釋放內(nèi)存的代碼。10.1.2面向?qū)ο笳Z(yǔ)言的技術(shù)特點(diǎn)
自動(dòng)管理內(nèi)存不僅方便而且安全,但是必須采用先進(jìn)的垃圾收集算法才能減少開(kāi)銷(xiāo)。某些面向?qū)ο蟮恼Z(yǔ)言(如C++)允許程序員定義析構(gòu)函數(shù)(destructor)。每當(dāng)一個(gè)對(duì)象超出范圍或被顯式刪除時(shí),就自動(dòng)調(diào)用析構(gòu)函數(shù)。這種機(jī)制使得程序員能夠方便地構(gòu)造和喚醒釋放內(nèi)存的操作,卻又不是垃圾收集機(jī)制。10.1.2面向?qū)ο笳Z(yǔ)言的技術(shù)特點(diǎn)2.實(shí)現(xiàn)整體一部分結(jié)構(gòu)的機(jī)制
一般說(shuō)來(lái),有兩種實(shí)現(xiàn)方法,分別使用指針和獨(dú)立的關(guān)聯(lián)對(duì)象實(shí)現(xiàn)整體一部分結(jié)構(gòu)。大多數(shù)現(xiàn)有的面向?qū)ο笳Z(yǔ)言并不顯式支持獨(dú)立的關(guān)聯(lián)對(duì)象,在這種情況下,使用指針是最容易的實(shí)現(xiàn)方法,通過(guò)增加內(nèi)部指針可以方便地實(shí)現(xiàn)關(guān)聯(lián)。10.1.2面向?qū)ο笳Z(yǔ)言的技術(shù)特點(diǎn)3.實(shí)現(xiàn)一般一特殊結(jié)
這里既包括實(shí)現(xiàn)繼承的機(jī)制也包括解決名字沖突的機(jī)制。所謂解決名字沖突,指的是處理在多個(gè)基類(lèi)中可能出現(xiàn)的重名問(wèn)題,這個(gè)問(wèn)題僅在支持多重繼承的語(yǔ)言中才會(huì)遇到。某些語(yǔ)言拒絕接受有名字沖突的程序,另一些語(yǔ)言提供了解決沖突的協(xié)議。不論使用何種語(yǔ)言,程序員都應(yīng)該盡力避免出現(xiàn)名字沖突。10.1.2面向?qū)ο笳Z(yǔ)言的技術(shù)特點(diǎn)4.實(shí)現(xiàn)屬性和服務(wù)的機(jī)制
對(duì)于實(shí)現(xiàn)屬性的機(jī)制應(yīng)該著重考慮以下幾個(gè)方面:支持實(shí)例連接的機(jī)制;屬性的可見(jiàn)性控制;對(duì)屬性值的約束。對(duì)于服務(wù)來(lái)說(shuō),主要應(yīng)該考慮下列因素:支持消息連接(即表達(dá)對(duì)象交互關(guān)系)的機(jī)制;控制服務(wù)可見(jiàn)性的機(jī)制;動(dòng)態(tài)聯(lián)編。10.1.2面向?qū)ο笳Z(yǔ)言的技術(shù)特點(diǎn)
所謂動(dòng)態(tài)聯(lián)編,是指應(yīng)用系統(tǒng)在運(yùn)行過(guò)程中,當(dāng)需要執(zhí)行一個(gè)特定服務(wù)的時(shí)候,選擇(或聯(lián)編)實(shí)現(xiàn)該服務(wù)的適當(dāng)算法的能力。動(dòng)態(tài)聯(lián)編機(jī)制使得程序員在向?qū)ο蟀l(fā)送消息時(shí)擁有較大自由,在發(fā)送消息前,無(wú)須知道接受消息的對(duì)象當(dāng)時(shí)屬于哪個(gè)類(lèi)。10.1.2面向?qū)ο笳Z(yǔ)言的技術(shù)特點(diǎn)5.類(lèi)型檢查
程序設(shè)計(jì)語(yǔ)言可以按照編譯時(shí)進(jìn)行類(lèi)型檢查的嚴(yán)格程度來(lái)分類(lèi)。如果語(yǔ)言?xún)H要求每個(gè)變量或?qū)傩噪`屬于一個(gè)對(duì)象,則是弱類(lèi)型的;如果語(yǔ)法規(guī)定每個(gè)變量或?qū)傩员仨殰?zhǔn)確地屬于某個(gè)特定的類(lèi),則這樣的語(yǔ)言是強(qiáng)類(lèi)型的。面向?qū)ο笳Z(yǔ)言在這方面差異很大。10.1.2面向?qū)ο笳Z(yǔ)言的技術(shù)特點(diǎn)
強(qiáng)類(lèi)型語(yǔ)言主要有兩個(gè)優(yōu)點(diǎn):一是有利于在編譯時(shí)發(fā)現(xiàn)程序錯(cuò)誤,二是增加了優(yōu)化的可能性。通常使用強(qiáng)類(lèi)型編譯型語(yǔ)言開(kāi)發(fā)軟件產(chǎn)品,使用弱類(lèi)型解釋型語(yǔ)言快速開(kāi)發(fā)原型。總的來(lái)說(shuō),強(qiáng)類(lèi)型語(yǔ)言有助于提高軟件的可靠性和運(yùn)行效率,現(xiàn)代的程序語(yǔ)言理論支持強(qiáng)類(lèi)型檢查,大多數(shù)新語(yǔ)言都是強(qiáng)類(lèi)型的。10.1.2面向?qū)ο笳Z(yǔ)言的技術(shù)特點(diǎn)6.類(lèi)庫(kù)大多數(shù)面向?qū)ο笳Z(yǔ)言都提供一個(gè)實(shí)用的類(lèi)庫(kù)
某些語(yǔ)言本身并沒(méi)有規(guī)定提供什么樣的類(lèi)庫(kù),而是由實(shí)現(xiàn)這種語(yǔ)言的編譯系統(tǒng)自行提供類(lèi)庫(kù)。存在類(lèi)庫(kù),許多軟構(gòu)件就不必由程序員重頭編寫(xiě)了,這為實(shí)現(xiàn)軟件重用帶來(lái)很大方便。10.1.2面向?qū)ο笳Z(yǔ)言的技術(shù)特點(diǎn)7.效率
事實(shí)上,使用擁有完整類(lèi)庫(kù)的面向?qū)ο笳Z(yǔ)言,有時(shí)能比使用非面向?qū)ο笳Z(yǔ)言得到運(yùn)行更快的代碼,這是因?yàn)轭?lèi)庫(kù)中提供了更高效的算法和更好的數(shù)據(jù)結(jié)構(gòu)。例如,程序員已經(jīng)無(wú)須編寫(xiě)實(shí)現(xiàn)哈希表或平衡樹(shù)算法的代碼了,類(lèi)庫(kù)中已經(jīng)提供了這類(lèi)數(shù)據(jù)結(jié)構(gòu),而且算法先進(jìn)、代碼精巧可靠。10.1.2面向?qū)ο笳Z(yǔ)言的技術(shù)特點(diǎn)
一些面向?qū)ο笳Z(yǔ)言(如C++),沒(méi)有提供直接存儲(chǔ)對(duì)象的機(jī)制。這些語(yǔ)言的用戶(hù)必須自己管理對(duì)象的輸入/輸出,或者購(gòu)買(mǎi)面向?qū)ο蟮臄?shù)據(jù)庫(kù)管理系統(tǒng)。
另外一些面向?qū)ο笳Z(yǔ)言(如Smalltalk),把當(dāng)前的執(zhí)行狀態(tài)完整地保存在磁盤(pán)上。還有一些面向?qū)ο笳Z(yǔ)言,提供了訪問(wèn)磁盤(pán)對(duì)象的輸入/輸出操作。10.1.2面向?qū)ο笳Z(yǔ)言的技術(shù)特點(diǎn)
通過(guò)在類(lèi)庫(kù)中增加對(duì)象存儲(chǔ)管理功能,可以在不改變語(yǔ)言定義或不增加關(guān)鍵字的情況下,就在開(kāi)發(fā)環(huán)境中提供這種功能。然后,可以從“可存儲(chǔ)的類(lèi)”中派生出需要持久保存的對(duì)象,該對(duì)象自然繼承了對(duì)象存儲(chǔ)管理功能。這就是Eiffel語(yǔ)言采用的策略。理想情況下,應(yīng)該使程序設(shè)計(jì)語(yǔ)言語(yǔ)法與對(duì)象存儲(chǔ)管理語(yǔ)法實(shí)現(xiàn)無(wú)縫集成。10.1.2面向?qū)ο笳Z(yǔ)言的技術(shù)特點(diǎn)9.參數(shù)化類(lèi)
所謂參數(shù)化類(lèi),就是使用一個(gè)或多個(gè)類(lèi)型去參數(shù)化一個(gè)類(lèi)的機(jī)制。有了這種機(jī)制,程序員就可以先定義一個(gè)參數(shù)化的類(lèi)模板(即在類(lèi)定義中包含以參數(shù)形式出現(xiàn)的一個(gè)或多個(gè)類(lèi)型),然后把數(shù)據(jù)類(lèi)型作為參數(shù)傳遞進(jìn)來(lái),從而把這個(gè)類(lèi)模板應(yīng)用在不同的應(yīng)用程序中,或用在同一應(yīng)用程序的不同部分。10.1.2面向?qū)ο笳Z(yǔ)言的技術(shù)特點(diǎn)10.開(kāi)發(fā)環(huán)境軟件工具和軟件工程環(huán)境對(duì)軟件生產(chǎn)率有很大影響
由于面向?qū)ο蟪绦蛑欣^承關(guān)系和動(dòng)態(tài)聯(lián)編等引入的特殊復(fù)雜性,面向?qū)ο笳Z(yǔ)言所提供的軟件工具或開(kāi)發(fā)環(huán)境就顯得尤其重要了。
至少應(yīng)該包括下列一些最基本的軟件工具:編輯程序、編譯程序或解釋程序、瀏覽工具、調(diào)試器(debugger)等。10.1.3選擇面向?qū)ο笳Z(yǔ)言1.選擇將來(lái)能否占主導(dǎo)地位的語(yǔ)言
根據(jù)目前占有的市場(chǎng)份額,以及專(zhuān)業(yè)書(shū)刊和學(xué)術(shù)會(huì)議上所做的分析、評(píng)價(jià),人們往往能夠?qū)ξ磥?lái)哪種面向?qū)ο笳Z(yǔ)言將占據(jù)主導(dǎo)地位做出預(yù)測(cè)。
但是,最終決定選用哪種面向?qū)ο笳Z(yǔ)言的實(shí)際因素,往往是諸如成本之類(lèi)的經(jīng)濟(jì)因素而不是技術(shù)因素。10.1.3選擇面向?qū)ο笳Z(yǔ)言2.考慮具有良好類(lèi)庫(kù)和開(kāi)發(fā)環(huán)境的語(yǔ)言
語(yǔ)言、開(kāi)發(fā)環(huán)境和類(lèi)庫(kù)這3個(gè)因素綜合起來(lái),共同決定了可重用性??紤]類(lèi)庫(kù)的時(shí)候,不僅應(yīng)該考慮是否提供了類(lèi)庫(kù),還應(yīng)該考慮類(lèi)庫(kù)中提供了哪些有價(jià)值的類(lèi)。隨著類(lèi)庫(kù)的日益成熟和豐富,在開(kāi)發(fā)新應(yīng)用系統(tǒng)時(shí),需要開(kāi)發(fā)人員自己編寫(xiě)的代碼將越來(lái)越少。10.1.3選擇面向?qū)ο笳Z(yǔ)言3.考慮其他因素
在選擇編程語(yǔ)言時(shí),應(yīng)該考慮的其他因素還有:對(duì)用戶(hù)學(xué)習(xí)面向?qū)ο蠓治?、設(shè)計(jì)和編碼技術(shù)所能提供的培訓(xùn)服務(wù);在使用這個(gè)面向?qū)ο笳Z(yǔ)言期間能提供的技術(shù)支持;能提供給開(kāi)發(fā)人員使用的開(kāi)發(fā)工具、開(kāi)發(fā)平臺(tái)和發(fā)行平臺(tái),對(duì)機(jī)器性能和內(nèi)存的需求,集成已有軟件的容易程度等。10.2面向?qū)ο蟪绦蛟O(shè)計(jì)風(fēng)格10.2.1提高可重用性10.2.2提高可擴(kuò)充性10.2.3提高健壯性10.2.1提高可重用性
面向?qū)ο蠓椒ǖ囊粋€(gè)主要目標(biāo),就是提高軟件的可重用性。軟件重用有多個(gè)層次,在編碼階段主要考慮代碼重用的問(wèn)題。一般說(shuō)來(lái),代碼重用有兩種:一種是本項(xiàng)目?jī)?nèi)的代碼重用,另一種是新項(xiàng)目重用舊項(xiàng)目的代碼。10.2.1提高可重用性
內(nèi)部重用主要是找出設(shè)計(jì)中相同或相似的部分,然后利用繼承機(jī)制共享它們。為做到外部重用(即一個(gè)項(xiàng)目重用另一項(xiàng)目的代碼),必須有長(zhǎng)遠(yuǎn)眼光,需要反復(fù)考慮、精心設(shè)計(jì)。雖然為實(shí)現(xiàn)外部重用所需要考慮的面,比為實(shí)現(xiàn)內(nèi)部重用而需要考慮的面更廣,但是,有助于實(shí)現(xiàn)這兩類(lèi)重用的程序設(shè)計(jì)準(zhǔn)則卻是相同的。10.2.1提高可重用性1.提高方法的內(nèi)聚
一個(gè)方法(即服務(wù))應(yīng)該只完成單個(gè)功能。如果某個(gè)方法涉及兩個(gè)或多個(gè)不相關(guān)的功能,則應(yīng)該把它分解成幾個(gè)更小的方法。10.2.1提高可重用性2.減小方法的規(guī)模
應(yīng)該減小方法的規(guī)模,如果某個(gè)方法規(guī)模過(guò)大(代碼長(zhǎng)度超過(guò)一頁(yè)紙可能就太大了),則應(yīng)該把它分解成幾個(gè)更小的方法。10.2.1提高可重用性3.保持方法的一致性
保持方法的一致性,有助于實(shí)現(xiàn)代碼重用。一般來(lái)說(shuō),功能相似的方法應(yīng)該有一致的名字、參數(shù)特征(包括參數(shù)個(gè)數(shù)、類(lèi)型和次序)、返回值類(lèi)型、使用條件、出錯(cuò)條件等。10.2.1提高可重用性4.把策略與實(shí)現(xiàn)分開(kāi)
從所完成的功能看,有兩種不同類(lèi)型的方法:一類(lèi)方法負(fù)責(zé)做出決策,提供變?cè)?,并且管理全局資源,可稱(chēng)為策略方法;另一類(lèi)方法負(fù)責(zé)完成具體的操作,但卻并不做出是否執(zhí)行這個(gè)操作的決定,也不知道為什么執(zhí)行這個(gè)操作,可稱(chēng)為實(shí)現(xiàn)方法。10.2.1提高可重用性
策略方法應(yīng)該檢查系統(tǒng)運(yùn)行狀態(tài),并處理出錯(cuò)情況,它們并不直接完成計(jì)算或?qū)崿F(xiàn)復(fù)雜的算法。策略方法通常緊密依賴(lài)于具體應(yīng)用,這類(lèi)方法比較容易編寫(xiě),也比較容易理解。10.2.1提高可重用性5.全面覆蓋
如果輸入條件的各種組合都可能出現(xiàn),則應(yīng)該針對(duì)所有組合寫(xiě)出方法,而不能僅僅針對(duì)當(dāng)前用到的組合情況寫(xiě)方法。例如,如果在當(dāng)前應(yīng)用中需要寫(xiě)一個(gè)方法,以獲取表中第一個(gè)元素,則至少還應(yīng)該為獲取表中最后一個(gè)元素再寫(xiě)一個(gè)方法。10.2.1提高可重用性6.盡量不使用全局信息
應(yīng)該盡量降低方法與外界的耦合程度,不使用全局信息是降低耦合度的一項(xiàng)主要措施。10.2.1提高可重用性7.利用繼承機(jī)制
在面向?qū)ο蟪绦蛑校褂美^承機(jī)制是實(shí)現(xiàn)共享和提高重用程度的主要途徑。10.2.1提高可重用性(1)調(diào)用子過(guò)程
最簡(jiǎn)單的做法是把公共的代碼分離出來(lái),構(gòu)成一個(gè)被其他方法調(diào)用的公用方法??梢栽诨?lèi)中定義這個(gè)公用方法,供派生類(lèi)中的方法調(diào)用。10.2.1提高可重用性(2)分解因子
有時(shí)提高相似類(lèi)代碼可重用性的一個(gè)有效途徑,是從不同類(lèi)的相似方法中分解出不同的“因子”(即不同的代碼),把余下的代碼作為公用方法中的公共代碼,把分解出的因子作為名字相同算法不同的方法,放在不同類(lèi)中定義,并被這個(gè)公用方法調(diào)用。10.2.1提高可重用性
使用這種途徑通常額外定義一個(gè)抽象基類(lèi),并在這個(gè)抽象基類(lèi)中定義公用方法。把這種途徑與面向?qū)ο笳Z(yǔ)言提供的多態(tài)性機(jī)制結(jié)合起來(lái),讓派生類(lèi)繼承抽象基類(lèi)中定義的公用方法,可以明顯降低為增添新子類(lèi)而需付出的工作量,因?yàn)橹恍柙谛伦宇?lèi)中編寫(xiě)其特有的代碼。10.2.1提高可重用性(3)把代碼封裝在類(lèi)中
程序員往往希望重用用其他方法編寫(xiě)的、解決同一類(lèi)應(yīng)用問(wèn)題的程序代碼。重用這類(lèi)代碼的一個(gè)比較安全的途徑,是把被重用的代碼封裝在類(lèi)中。10.2.2提高可擴(kuò)充性1.封裝實(shí)現(xiàn)策略
應(yīng)該把類(lèi)的實(shí)現(xiàn)策略(包括描述屬性的數(shù)據(jù)結(jié)構(gòu)、修改屬性的算法等)封裝起來(lái),對(duì)外只提供公有的接口,否則將降低今后修改數(shù)據(jù)結(jié)構(gòu)或算法的自由度。10.2.2提高可擴(kuò)充性2.慎用公有方法
公有方法是向公眾公布的接口。為提高可修改性,降低維護(hù)成本,必須精心選擇和定義公有方法。私有方法是僅在類(lèi)內(nèi)使用的方法,通常利用私有方法來(lái)實(shí)現(xiàn)公有方法。刪除、增加或修改私有方法所涉及的面要窄得多,因此代價(jià)也比較低。10.2.2提高可擴(kuò)充性3.不要用一個(gè)方法遍歷多條關(guān)聯(lián)鏈
一個(gè)方法應(yīng)該只包含對(duì)象模型中的有限內(nèi)容。違反這條準(zhǔn)則將導(dǎo)致方法過(guò)分復(fù)雜,既不易理解,也不易修改擴(kuò)充。10.2.2提高可擴(kuò)充性4.避免使用多分支語(yǔ)句
一般說(shuō)來(lái),可以利用DO-CASE語(yǔ)句測(cè)試對(duì)象的內(nèi)部狀態(tài),而不要用來(lái)根據(jù)對(duì)象類(lèi)型選擇應(yīng)有的行為,否則在增添新類(lèi)時(shí)將不得不修改原有的代碼。應(yīng)該合理地利用多態(tài)性機(jī)制,根據(jù)對(duì)象當(dāng)前類(lèi)型,自動(dòng)決定應(yīng)有的行為。10.2.3提高健壯性
程序員在編寫(xiě)實(shí)現(xiàn)方法的代碼時(shí),既應(yīng)該考慮效率,也應(yīng)該考慮健壯性。通常需要在健壯性與效率之間做出適當(dāng)?shù)恼壑?。必須認(rèn)識(shí)到,對(duì)于任何一個(gè)實(shí)用軟件來(lái)說(shuō),健壯性都是不可忽略的質(zhì)量指標(biāo)。為提高健壯性應(yīng)該遵守以下幾條準(zhǔn)則。10.2.3提高健壯性1.具備處理用戶(hù)操作錯(cuò)誤的能力
軟件系統(tǒng)必須具有處理用戶(hù)操作錯(cuò)誤的能力。當(dāng)用戶(hù)在輸入數(shù)據(jù)時(shí)發(fā)生錯(cuò)誤,不應(yīng)該引起程序運(yùn)行中斷,更不應(yīng)該造成“死機(jī)”。任何一個(gè)接收用戶(hù)輸入數(shù)據(jù)的方法,對(duì)其接收到的數(shù)據(jù)必須進(jìn)行檢查,即使發(fā)現(xiàn)了非常嚴(yán)重的錯(cuò)誤,也應(yīng)該給出恰當(dāng)?shù)奶崾拘畔?,并?zhǔn)備再次接收用戶(hù)的輸入。10.2.3提高健壯性2.檢查參數(shù)的合法性
對(duì)公有方法,尤其應(yīng)該著重檢查其參數(shù)的合法性,因?yàn)橛脩?hù)在使用公有方法時(shí)可能違反參數(shù)的約束條件。10.2.3提高健壯性3.不要預(yù)先確定限制條件
在設(shè)計(jì)階段,往往很難準(zhǔn)確地預(yù)測(cè)出應(yīng)用系統(tǒng)中使用的數(shù)據(jù)結(jié)構(gòu)的最大容量需求。因此不應(yīng)該預(yù)先設(shè)定限制條件。如果有必要和可能,則應(yīng)該使用動(dòng)態(tài)內(nèi)存分配機(jī)制,創(chuàng)建未預(yù)先設(shè)定限制條件的數(shù)據(jù)結(jié)構(gòu)。10.2.3提高健壯性4.先測(cè)試后優(yōu)化
為在效率與健壯性之間做出合理的折中,應(yīng)該在為提高效率而進(jìn)行優(yōu)化之前,先測(cè)試程序的性能。經(jīng)過(guò)測(cè)試,合理地確定為提高性能應(yīng)該著重優(yōu)化的關(guān)鍵部分。如果實(shí)現(xiàn)某個(gè)操作的算法有許多種,則應(yīng)該綜合考慮內(nèi)存需求、速度、實(shí)現(xiàn)的簡(jiǎn)易程度等因素,經(jīng)合理折中選定適當(dāng)?shù)乃惴ā?0.3測(cè)試策略10.3.1面向?qū)ο鬁y(cè)試模型
面向?qū)ο蟮拈_(kāi)發(fā)模型突破了傳統(tǒng)的瀑布模型,將開(kāi)發(fā)分為面向?qū)ο蠓治?OOA),面向?qū)ο笤O(shè)計(jì)(OOD)和面向?qū)ο缶幊?OOP)三個(gè)階段。針對(duì)這種開(kāi)發(fā)模型,結(jié)合傳統(tǒng)的測(cè)試步驟的劃分,把面向?qū)ο蟮能浖y(cè)試分為:面向?qū)ο蠓治龅臏y(cè)試、面向?qū)ο笤O(shè)計(jì)的測(cè)試、面向?qū)ο缶幊痰臏y(cè)試、面向?qū)ο髥卧獪y(cè)試、面向?qū)ο蠹蓽y(cè)試、面向?qū)ο笙到y(tǒng)測(cè)試。10.3.2面向?qū)ο蠓治龅臏y(cè)試(1)對(duì)認(rèn)定的對(duì)象的測(cè)試。(2)對(duì)認(rèn)定的結(jié)構(gòu)的測(cè)試。(3)對(duì)認(rèn)定的主題的測(cè)試。(4)對(duì)定義的屬性和實(shí)例關(guān)聯(lián)的測(cè)試。(5)對(duì)定義的服務(wù)和消息關(guān)聯(lián)的測(cè)試。10.3.3面向?qū)ο笤O(shè)計(jì)的測(cè)試對(duì)OOD的測(cè)試,應(yīng)從如下三方面考慮:對(duì)認(rèn)定的類(lèi)的測(cè)試;對(duì)構(gòu)造的類(lèi)層次結(jié)構(gòu)的測(cè)試;對(duì)類(lèi)庫(kù)的支持的測(cè)試。10.3.4面向?qū)ο缶幊痰臏y(cè)試在面向?qū)ο缶幊?OOP)階段,忽略類(lèi)功能實(shí)現(xiàn)的細(xì)則,將測(cè)試的目光集中在類(lèi)功能的實(shí)現(xiàn)和相應(yīng)的面向?qū)ο蟪绦蝻L(fēng)格,主要體現(xiàn)為以下兩個(gè)方面。(1)數(shù)據(jù)成員是否滿(mǎn)足數(shù)據(jù)封裝的要求。(2)類(lèi)是否實(shí)現(xiàn)了要求的功能。10.3.5面向?qū)ο蟮膯卧獪y(cè)試
“封裝”導(dǎo)致了類(lèi)和對(duì)象的定義,這意味著類(lèi)和類(lèi)的實(shí)例(對(duì)象)包裝了屬性(數(shù)據(jù))和處理這些數(shù)據(jù)的操作(也稱(chēng)為方法或服務(wù))?,F(xiàn)在,最小的可測(cè)試單元是封裝起來(lái)的類(lèi)和對(duì)象。一個(gè)類(lèi)可以包含一組不同的操作,而一個(gè)特定的操作也可能存在于一組不同的類(lèi)中。因此,對(duì)于面向?qū)ο蟮能浖?lái)說(shuō),單元測(cè)試的含義發(fā)生了很大變化。10.3.5面向?qū)ο蟮膯卧獪y(cè)試
不能再孤立地測(cè)試單個(gè)操作,而應(yīng)該把操作作為類(lèi)的一部分來(lái)測(cè)試。讓我們舉例說(shuō)明上述論點(diǎn):考慮一個(gè)類(lèi)層次,操作X在超類(lèi)中定義并被一組子類(lèi)繼承,每個(gè)子類(lèi)都使用操作X,但是,X調(diào)用子類(lèi)中定義的操作并處理子類(lèi)的私有屬性。10.3.5面向?qū)ο蟮膯卧獪y(cè)試
由于在不同的子類(lèi)中使用操作X的環(huán)境有微妙的不同,因此有必要在每個(gè)子類(lèi)的語(yǔ)境中測(cè)試操作X。這就意味著,當(dāng)測(cè)試面向?qū)ο筌浖r(shí),傳統(tǒng)的單元測(cè)試方法是無(wú)效的,我們不能再在“真空”中(即孤立地)測(cè)試操作X。10.3.6面向?qū)ο蟮募蓽y(cè)試
因?yàn)樵诿嫦驅(qū)ο蟮能浖胁淮嬖趯哟蔚目刂平Y(jié)構(gòu),傳統(tǒng)的自頂向下和自底向上的集成策略就沒(méi)有意義了。此外,由于構(gòu)成類(lèi)的成分彼此間存在直接或間接的交互,一次集成一個(gè)操作到類(lèi)中(傳統(tǒng)的漸增式集成方法),通常是不可能的。10.3.7面向?qū)ο蟮南到y(tǒng)測(cè)試1)應(yīng)當(dāng)盡早和不斷地測(cè)試。2)程序員應(yīng)避免檢查自己的程序,測(cè)試工作應(yīng)該由獨(dú)立的專(zhuān)業(yè)的軟件測(cè)試機(jī)構(gòu)來(lái)完成。3)設(shè)計(jì)測(cè)試用例時(shí),應(yīng)該考慮到合法的輸入和不合法的輸入,以及各種邊界條件,特殊情況下要制造極端狀態(tài)和意外狀態(tài),比如網(wǎng)絡(luò)異常中斷、電源斷電等情況。4)注意測(cè)試中的錯(cuò)誤集中現(xiàn)象,這和程序員的編程水平以及習(xí)慣有很大的關(guān)系。10.3.7面向?qū)ο蟮南到y(tǒng)測(cè)試5)對(duì)測(cè)試錯(cuò)誤結(jié)果一定要有一個(gè)確認(rèn)的過(guò)程。一般由A測(cè)試出來(lái)的錯(cuò)誤,一定要有一個(gè)B來(lái)確認(rèn),嚴(yán)重的錯(cuò)誤可以召開(kāi)評(píng)審會(huì)進(jìn)行討論和分析。6)制定嚴(yán)格的測(cè)試計(jì)劃,并把測(cè)試時(shí)間安排得盡量寬松,不要希望在極短的時(shí)間內(nèi)完成一個(gè)高水平的測(cè)試。7)回歸測(cè)試的關(guān)聯(lián)性一定要引起充分的注意。修改一個(gè)錯(cuò)誤而引起更多錯(cuò)誤出現(xiàn)的現(xiàn)象并不少見(jiàn)。8)妥善保存一切測(cè)試過(guò)程中的文檔,測(cè)試的重現(xiàn)性要以測(cè)試文檔為依據(jù)。10.4設(shè)計(jì)測(cè)試用例設(shè)計(jì)測(cè)試用例有以下幾個(gè)要點(diǎn)。1)應(yīng)該唯一標(biāo)識(shí)每一個(gè)測(cè)試案例,并且與被測(cè)試的類(lèi)明顯地建立關(guān)聯(lián)。2)陳述測(cè)試對(duì)象的一組特定狀態(tài)。3)對(duì)每一個(gè)測(cè)試建立一組測(cè)試步驟,要思考或確定的問(wèn)題包括:對(duì)被測(cè)試對(duì)象的一組特定狀態(tài),一組消息和操作,考慮當(dāng)對(duì)象測(cè)試時(shí)可能產(chǎn)生的一組異常,一組外部條件,輔助理解和實(shí)現(xiàn)測(cè)試的補(bǔ)充信息。10.4.1設(shè)計(jì)類(lèi)測(cè)試用例
前面已經(jīng)講過(guò),軟件測(cè)試從“小型”測(cè)試開(kāi)始,逐步過(guò)渡到“大型”測(cè)試。對(duì)面向?qū)ο蟮能浖?lái)說(shuō),小型測(cè)試著重測(cè)試單個(gè)類(lèi)和類(lèi)中封裝的方法。測(cè)試單個(gè)類(lèi)的方法主要有隨機(jī)測(cè)試、劃分測(cè)試和基于故障的測(cè)試3種。10.4.1設(shè)計(jì)類(lèi)測(cè)試用例1.類(lèi)級(jí)隨機(jī)測(cè)試
下面通過(guò)銀行應(yīng)用系統(tǒng)的例子,簡(jiǎn)要地說(shuō)明這種測(cè)試方法。10.4.1設(shè)計(jì)類(lèi)測(cè)試用例
該系統(tǒng)的account(賬戶(hù))類(lèi)有下列操作:open(打開(kāi)),setup(建立),deposit(存款),withdraw(取款),balance(余額),summarize(清單),creditLimit(透支限額)和close(關(guān)閉)。每個(gè)操作都可以應(yīng)用于account類(lèi)的實(shí)例,但是,該系統(tǒng)的性質(zhì)也對(duì)操作的應(yīng)用施加了一些限制。10.4.1設(shè)計(jì)類(lèi)測(cè)試用例
例如,必須在應(yīng)用其他操作之前先打開(kāi)賬戶(hù),在完成了全部操作之后應(yīng)該關(guān)閉賬戶(hù)。即使有這些限制,可做的操作也有許多種排列方法。一個(gè)account類(lèi)實(shí)例的最小行為歷史包括下列操作:open·setup·deposit·withdraw·close
這就是對(duì)account類(lèi)的最小測(cè)試序列。10.4.1設(shè)計(jì)類(lèi)測(cè)試用例
但是,在下面的序列中可能發(fā)生許多其他行為:open·setup·deposit·〔deposit|withdrew|balance|summarize|creditLimit〕·withdraw·close
從上列序列可以隨機(jī)地產(chǎn)生一系列不同的操作序列,例如:10.4.1設(shè)計(jì)類(lèi)測(cè)試用例測(cè)試用例#r1:open·setup·deposit·deposit·balance·summarize·withdraw·close測(cè)試用例#r2:open·setup·deposit·withdraw·deposit·balance·creditLimit·withdraw·close
執(zhí)行上述這些及另外一些隨機(jī)產(chǎn)生的測(cè)試用例,可以測(cè)試類(lèi)實(shí)例的不同生存歷史。10.4.1設(shè)計(jì)類(lèi)測(cè)試用例2.類(lèi)級(jí)劃分測(cè)試
與測(cè)試傳統(tǒng)軟件時(shí)采用等價(jià)劃分方法類(lèi)似,采用劃分測(cè)試(partitiontesting)方法可以減少測(cè)試類(lèi)時(shí)所需要的測(cè)試用例的數(shù)量。首先,把輸入和輸出分類(lèi),然后設(shè)計(jì)測(cè)試用例以測(cè)試劃分出的每個(gè)類(lèi)別。10.4.1設(shè)計(jì)類(lèi)測(cè)試用例(1)基于狀態(tài)的劃分
這種方法根據(jù)類(lèi)操作改變類(lèi)狀態(tài)的能力來(lái)劃分類(lèi)操作。讓我們?cè)僖淮慰紤]account類(lèi),狀態(tài)操作包括deposit和withdraw,而非狀態(tài)操作有balance、summarize和creditLimit。設(shè)計(jì)測(cè)試用例,以分別測(cè)試改變狀態(tài)的操作和不改變狀態(tài)的操作。10.4.1設(shè)計(jì)類(lèi)測(cè)試用例例如,用這種方法可以設(shè)計(jì)出如下的測(cè)試用例:測(cè)試用例#p1:open·setup·deposit·deposit·withdraw·withdraw·close測(cè)試用例#p2:open
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中班臺(tái)風(fēng)安全教育教案
- 2025版乙肝常見(jiàn)癥狀及護(hù)理技巧
- 小學(xué)體育課教學(xué)設(shè)計(jì)與課件制作
- 五年級(jí)語(yǔ)文上冊(cè)古詩(shī)文教學(xué)設(shè)計(jì)范例
- 建筑材料質(zhì)量檢驗(yàn)與進(jìn)場(chǎng)報(bào)驗(yàn)流程
- 小學(xué)數(shù)學(xué)教學(xué)績(jī)效分析報(bào)告范本
- 妊娠高血壓患者的產(chǎn)前護(hù)理方案
- 2025年幼兒園保育員資格試卷
- 微生物科室培養(yǎng)操作規(guī)范
- 秩序維護(hù)服務(wù)方案及執(zhí)行效果反饋
- 面包加工技術(shù) 早餐包的制作
- 液壓與氣動(dòng)技術(shù)PPT完整版全套教學(xué)課件
- 巴旦木脫青皮的設(shè)計(jì)說(shuō)明書(shū)
- 中藥配位化學(xué)研究及應(yīng)用
- 2023屆廣東省深圳市高三第二次調(diào)研考試語(yǔ)文講評(píng)課件
- 全國(guó)碩士研究生入學(xué)統(tǒng)一考試《思想政治理論》試題答題卡模板
- 水肥一體化技術(shù)稿
- GB/T 31849-2015汽車(chē)貼膜玻璃
- FZ/T 73023-2006抗菌針織品
- 智慧檔案館大數(shù)據(jù)平臺(tái)建設(shè)和運(yùn)營(yíng)整體解決方案
- 酒店施工策劃演示文稿1
評(píng)論
0/150
提交評(píng)論