




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第八章
面向?qū)ο筌浖膶?shí)現(xiàn)與測(cè)試8.1類級(jí)關(guān)系8.2類的實(shí)現(xiàn)8.3應(yīng)用的實(shí)現(xiàn)8.4測(cè)試一個(gè)面向?qū)ο蟮膽?yīng)用1軟件工程在開發(fā)過(guò)程中,類的實(shí)現(xiàn)是核心問(wèn)題。在只用面向?qū)ο箫L(fēng)格所寫的系統(tǒng)中,所有的數(shù)據(jù)都被封裝在類的實(shí)例中而整個(gè)應(yīng)用則被封裝在一個(gè)更高級(jí)的類中。
2軟件工程8.1類級(jí)關(guān)系當(dāng)實(shí)現(xiàn)類的時(shí)候就會(huì)遇到類級(jí)的關(guān)系。一個(gè)類的實(shí)現(xiàn)常常在某些方面依賴于其它類的實(shí)例。類級(jí)關(guān)系可以是應(yīng)用級(jí)關(guān)系的實(shí)現(xiàn),也可以是類內(nèi)屬性的實(shí)現(xiàn)。消息組裝繼承3軟件工程1.消息(messaging)在應(yīng)用程序中,應(yīng)用級(jí)關(guān)系大多是以類的實(shí)例之間的消息連接方式實(shí)現(xiàn)通信的。在消息的參數(shù)表中指定消息的接受者(一個(gè)類的實(shí)例)。還可以通過(guò)參數(shù)表向接收者提供信息。消息指定一個(gè)屬于接收者的服務(wù),這個(gè)服務(wù)應(yīng)實(shí)現(xiàn)該類共有界面規(guī)定的行為??碊ictionary類設(shè)計(jì)的例子4軟件工程一個(gè)Dictionary是包含一些可按關(guān)鍵碼的值排序和檢索對(duì)象的部件。對(duì)于存儲(chǔ)在Dictionary內(nèi)的一個(gè)實(shí)例來(lái)說(shuō),類必須提供一個(gè)操作來(lái)取得關(guān)鍵碼。
Dictionaryprivate:contents–aHashTablepublic:add(anItem)詞典私有域散列表共有域方法add5軟件工程關(guān)系
refersto
表示了“一個(gè)類引用另一個(gè)類”,后者的實(shí)例可當(dāng)作參數(shù)在前者發(fā)送的消息中使用。由消息構(gòu)成的流圖形成了面向?qū)ο笙到y(tǒng)結(jié)構(gòu)的核心。DictionaryuseraddsDictionaryItemreferto發(fā)送消息add,同時(shí)把Item的一個(gè)實(shí)例當(dāng)作參數(shù)發(fā)送消息getKey,得到散列所需的關(guān)鍵碼6軟件工程例如,Dictionary類有一個(gè)操作add,該操作將把一個(gè)屬于Item類的對(duì)象item當(dāng)作參數(shù),把這個(gè)對(duì)象加入到Dictionary的一個(gè)對(duì)象中。具體地,add操作首先發(fā)送一個(gè)消息給做為參數(shù)的對(duì)象item,再利用它的關(guān)鍵碼,到該對(duì)象所在的Item類中引用(refersto)相應(yīng)的實(shí)例,把它加入到詞典中去。在設(shè)計(jì)階段,在兩個(gè)類之間建立消息連接要求協(xié)調(diào)這些類的共有界面的定義。7軟件工程2.組裝(Composition)組裝關(guān)系是一個(gè)實(shí)現(xiàn)級(jí)關(guān)系,它對(duì)應(yīng)于應(yīng)用級(jí)的聚合關(guān)系。它也叫做component(構(gòu)件)或叫做
ispartof(是…的一部分)。組裝與消息兩者都是類間的關(guān)系,在這種關(guān)系中,一個(gè)類的實(shí)例將是另一個(gè)類的實(shí)現(xiàn)的一部分。考慮Dictionary類的實(shí)現(xiàn)。8軟件工程在Dictionary中存儲(chǔ)item的一種數(shù)據(jù)表示是使用散列表(HashTable)。進(jìn)行Dictionary類的低層設(shè)計(jì)時(shí),要指明在Dictionary類和HashTable類之間的一個(gè)
ispartof關(guān)系。在實(shí)現(xiàn)時(shí),應(yīng)當(dāng)在Dictionary類的定義中聲明這個(gè)HashTable的實(shí)例。HashTableispartofDictionary9軟件工程3.繼承(Inheritance)繼承允許在既存類的基礎(chǔ)上定義新類。一個(gè)新類B繼承了既存類A,則B包括了A定義的某些行為,以及它自定義的某些附加行為。有多少種面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言,就有多少種不同的繼承實(shí)現(xiàn)方式。10軟件工程繼承圖ABCDEABCDEABCDE11軟件工程(1)針對(duì)實(shí)現(xiàn)的繼承兩個(gè)類之間“針對(duì)實(shí)現(xiàn)”的繼承關(guān)系的建立指的是使用既存類的內(nèi)部表示來(lái)做為新類的內(nèi)部表示的一部分。我們不推薦這種繼承方式。考慮使用繼承來(lái)實(shí)現(xiàn)一個(gè)Circle類,為了定義一個(gè)圓,需要定義一個(gè)點(diǎn)和一個(gè)值,做為圓的圓心和半徑。因此,Point類可支持Circle類的一部分實(shí)現(xiàn)。把Point類當(dāng)做派生類。12軟件工程如果Circle類直接使用Point類的數(shù)據(jù)成員x和y,將失去抽象。而且失去做為一個(gè)點(diǎn)的圓心的標(biāo)識(shí)。針對(duì)實(shí)現(xiàn)的繼承一般在原型開發(fā)中使用。Pointxy……點(diǎn)坐標(biāo)Pointxyredius……圓坐標(biāo)半徑13軟件工程(2)針對(duì)特殊化的繼承這種繼承的使用適合于大多數(shù)面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言所提供的關(guān)系,是針對(duì)一般化-特殊化關(guān)系的。isa繼承關(guān)系類B的一個(gè)實(shí)例是類A的一個(gè)實(shí)例。在使用中,既存類的界面可成為新類的界面。這表明新類具有它的基類的所有行為。14軟件工程containerisastackclassinterfaceLink-basedstackArray-basedstackisanimplementationofisanimplementationofispartofReversePolishNotationEvaluator15軟件工程iskindof繼承關(guān)系這種繼承允許有選擇地包含既存類的屬性,從而建立新的定義。一個(gè)鳥類可能有一個(gè)關(guān)于飛行的屬性。一個(gè)鴕鳥派生類在模型化時(shí)可能就不選擇這個(gè)屬性,因?yàn)轼r鳥不會(huì)飛。鴕鳥是一種鳥,但具有的屬性與鳥不完全相同。iskindof
繼承是不嚴(yán)格繼承。16軟件工程8.2類的實(shí)現(xiàn)一種方案是先開發(fā)一個(gè)比較小的比較簡(jiǎn)單的類,做為開發(fā)比較大的比較復(fù)雜的類的基礎(chǔ)。即從簡(jiǎn)單到復(fù)雜的開發(fā)方案。在這種方案中,類的開發(fā)是分層的。一個(gè)類建立在一些既存的類的基礎(chǔ)上,而這些既存的類又是建立在其它既存的類的基礎(chǔ)上。通過(guò)諸如“isa”或“ispartof”之類的關(guān)系,利用既存代碼就能著手建立新的類。17軟件工程1.軟件庫(kù)(SoftwareBase)建立軟件庫(kù)的目的是為了引用現(xiàn)成的構(gòu)件。存儲(chǔ)在軟件庫(kù)中的類以多種途徑發(fā)生關(guān)聯(lián),同時(shí),庫(kù)可以追蹤這些關(guān)聯(lián)。軟件庫(kù)工具利用這些關(guān)聯(lián)可以有效地進(jìn)行開發(fā)。18軟件工程2.復(fù)用(Reuse)伴隨著類的設(shè)計(jì),應(yīng)當(dāng)從復(fù)用開始著手類的實(shí)現(xiàn)。類的設(shè)計(jì)可以使用各種抽象的類。在類設(shè)計(jì)期間,還需要建立這些類中的“具體的”對(duì)象。一旦一個(gè)數(shù)據(jù)對(duì)象被確認(rèn)是應(yīng)用所需要的,則必須把它組織成類,以便有效地提交所需要的模型。19軟件工程產(chǎn)生所需功能的次序?qū)ふ铱伞霸獠粍?dòng)(As_is)”使用的現(xiàn)成的類,提供所需要的特性;尋找可以用做開發(fā)新類的基礎(chǔ)的現(xiàn)成的類,通過(guò)繼承演化出新的類;不用任何復(fù)用,開發(fā)一個(gè)新類。20軟件工程3.斷言(Asserttions)實(shí)現(xiàn)類的一個(gè)主動(dòng)方法是把來(lái)自類的設(shè)計(jì)信息直接納入代碼。特別要求把參數(shù)約束、循環(huán)執(zhí)行等編入到代碼中。這可以通過(guò)某些表示斷言的語(yǔ)言機(jī)制來(lái)實(shí)現(xiàn)。一個(gè)斷言就是一個(gè)語(yǔ)句,它表達(dá)了對(duì)一個(gè)過(guò)程、一個(gè)值,甚至一段代碼的約束。21軟件工程在棧的描述中,可以使用斷言來(lái)控制進(jìn)棧和退棧功能的操作:procedurepush(varS:Stack_Type;
New_Item:Item_Type);assert:ThestackSisnotfull
//precondition
…………assert:ThetopofstackScontainsNew_Item
//postconditionend;22軟件工程procedurepop(varS:Stack_Type)returnItem_Type;assert:ThestackSisnotempty
//precondition…………assert:ThestackShasonefeweritemsthatitdidonentry
//postconditionend;
前置條件precondition后置條件postcondition23軟件工程在C與C++中有一種頭文件:
“assert.h”,它支持?jǐn)嘌缘母袷?。例如,?shí)現(xiàn)者可以針對(duì)pop操作,作出斷言如下:
assert(TOP>0)這樣,宏就會(huì)檢查在試圖從棧中退出一項(xiàng)之前棧是否空。如果條件測(cè)試失敗,則會(huì)打印出一條消息,報(bào)告源文件名及在文件中發(fā)生失效的行號(hào)。24軟件工程4.調(diào)試(Debugging)數(shù)據(jù)封裝限定了許多用以修改數(shù)據(jù)值的手段,也限定了對(duì)錯(cuò)誤的數(shù)據(jù)值進(jìn)行調(diào)查以找出真正原因的功能。某些面向?qū)ο蟮某绦蛟O(shè)計(jì)環(huán)境支持使用交互工具進(jìn)行調(diào)試。工具包括斷點(diǎn)的設(shè)置、訪問(wèn)源代碼、檢查對(duì)象(包括修改數(shù)據(jù)值和表達(dá)式求值)及編輯源代碼。25軟件工程5.錯(cuò)誤處理(ErrorHandling)我們期望一個(gè)類能夠自負(fù)錯(cuò)誤處理的責(zé)任。類的實(shí)例負(fù)責(zé)定位和報(bào)告錯(cuò)誤。C在錯(cuò)誤處理中使用狀態(tài)碼方法。各種不同的狀態(tài)碼的值能夠指明任務(wù)的執(zhí)行是成功還是失敗,若是失敗又是哪種程度的失敗。例如,C中函數(shù)“fopen”返回的狀態(tài)碼。如果打開失敗,則返回零值;如果打開成功,則返回文件的標(biāo)志。26軟件工程使用狀態(tài)碼方法的難點(diǎn)在于:各個(gè)程序必須知道它所調(diào)用函數(shù)的狀態(tài)碼,并能檢驗(yàn)這些狀態(tài)碼及采用行動(dòng)。如果問(wèn)題的解決在比它發(fā)生的那一層更高的一層進(jìn)行處理,這將產(chǎn)生比預(yù)想更高程度的耦合。因此,問(wèn)題盡可能在它發(fā)生的那一層進(jìn)行處理。例如,在fopen打開文件失敗時(shí),如果當(dāng)前的文件名不存在,軟件可以要求用戶鍵入另一個(gè)文件名。27軟件工程6.內(nèi)建錯(cuò)誤處理
(Built_InErrorHandling)Ada程序員可以利用語(yǔ)言所提供的例外處理機(jī)制幫助做錯(cuò)誤處理。一個(gè)“例外”是做了意料之外的事情的處理。“例外處理器”是一段代碼,在一個(gè)特定的例外出現(xiàn)時(shí)調(diào)用。它可以是終止軟件的執(zhí)行;發(fā)信號(hào)給一個(gè)更高層的例外處理器;對(duì)問(wèn)題進(jìn)行定位處理。28軟件工程7.用戶定義的錯(cuò)誤處理
(User_DefinedErrorHandling)有兩種相對(duì)簡(jiǎn)單的錯(cuò)誤處理技術(shù),它們提供了打印出錯(cuò)信息和終止軟件執(zhí)行的能力。它們都不允許嵌套的錯(cuò)誤處理。第一種技術(shù)使用了一個(gè)全局錯(cuò)誤處理器對(duì)象。每一個(gè)類都能對(duì)這個(gè)全局對(duì)象進(jìn)行存取。29軟件工程當(dāng)在一個(gè)用戶對(duì)象中檢測(cè)出一個(gè)錯(cuò)誤的時(shí)候,就發(fā)送一個(gè)消息給這個(gè)全局對(duì)象。這個(gè)消息運(yùn)載了一個(gè)字符串,它就是要被打印的出錯(cuò)信息,消息中還有一個(gè)整數(shù),它指出錯(cuò)誤的嚴(yán)重程度。消息格式為:
ERROR_HANDLER.handle("Messagetobeprinted",1);ERROR_HANDLER將打印消息并終止應(yīng)用的執(zhí)行。30軟件工程第二種用戶定義錯(cuò)誤處理的技術(shù)要求每個(gè)類都定義或再定義一個(gè)命名為error的操作。這個(gè)操作不應(yīng)是類的共有界面部分,它應(yīng)是一個(gè)隱蔽的實(shí)現(xiàn)部分,可以被一些公共操作調(diào)用以檢測(cè)錯(cuò)誤。這種error操作可以打印消息,在適當(dāng)時(shí)候請(qǐng)求一些額外輸入,在必要時(shí)終止軟件的執(zhí)行。31軟件工程8.多重實(shí)現(xiàn)
(MultipleImplementation)同一個(gè)類可以多種方式實(shí)現(xiàn)。為此,軟件庫(kù)必須對(duì)庫(kù)中的每一部分都能保留充足的信息,使得定義能同時(shí)關(guān)聯(lián)到不止一個(gè)實(shí)現(xiàn)。為了定義連接到幾個(gè)實(shí)現(xiàn)所使用的關(guān)系。程序員應(yīng)能指出要求的實(shí)例所在的類,并確定所期待的特定實(shí)現(xiàn)。32軟件工程stackclassinterfaceLink-basedstackArray-basedstackisanimplementationofisanimplementationofstack類的界面關(guān)系是…的實(shí)現(xiàn)基于數(shù)組的?;阪湵淼臈?3軟件工程8.3應(yīng)用的實(shí)現(xiàn)應(yīng)用的實(shí)現(xiàn)是在所有的類都被實(shí)現(xiàn)之后的事情。實(shí)際上,當(dāng)把類開發(fā)出來(lái)時(shí)就已經(jīng)實(shí)現(xiàn)了應(yīng)用。每個(gè)類提供了完成應(yīng)用所需要的某種功能。在C++和C中有一個(gè)
main()函數(shù)。可以使用這個(gè)過(guò)程來(lái)說(shuō)明構(gòu)成應(yīng)用的主要對(duì)象的那些類的實(shí)例。34軟件工程C++系統(tǒng)中主過(guò)程的兩個(gè)主要職責(zé)是建立實(shí)例;
通過(guò)指針建立對(duì)象之間的通信;以圖形系統(tǒng)為例,首先建立一個(gè)用戶界面的單一實(shí)例。一旦它建立起來(lái),就發(fā)送一個(gè)消息,啟動(dòng)繪圖程序的命令循環(huán)。然后,這個(gè)對(duì)象擔(dān)負(fù)起在系統(tǒng)壽命的其余時(shí)期協(xié)調(diào)通信關(guān)系和對(duì)象建立的責(zé)任。35軟件工程對(duì)于純面向?qū)ο蟮恼Z(yǔ)言,在系統(tǒng)中的每個(gè)“事物”都是對(duì)象。在這些語(yǔ)言中沒(méi)有“主過(guò)程”。用戶建立起一個(gè)類的實(shí)例,然后,通過(guò)實(shí)例接受控制和執(zhí)行服務(wù),產(chǎn)生實(shí)例輸出的結(jié)果或接收由用戶發(fā)送來(lái)的消息。由那些原始消息而產(chǎn)生的消息序列就成為目標(biāo)軟件的功能。36軟件工程8.4面向?qū)ο鬁y(cè)試面向?qū)ο笙到y(tǒng)的測(cè)試與傳統(tǒng)的基于功能的系統(tǒng)的測(cè)試之間存在很大差別:對(duì)象作為一個(gè)單獨(dú)的構(gòu)件一般比一個(gè)功能模塊大。由對(duì)象到子系統(tǒng)的集成通常是松散耦合的,沒(méi)有一個(gè)明顯的“頂層”。如果對(duì)象被復(fù)用,測(cè)試者無(wú)權(quán)進(jìn)入構(gòu)件內(nèi)部來(lái)分析其代碼。37軟件工程面向?qū)ο笙到y(tǒng)的測(cè)試可分為4個(gè)層次:測(cè)試與對(duì)象相關(guān)聯(lián)的單個(gè)操作它們是一些函數(shù)或程序,傳統(tǒng)的白盒測(cè)試和黑盒測(cè)試方法都可以使用。測(cè)試單個(gè)對(duì)象類黑盒測(cè)試的原理不變,但等價(jià)劃分的概念要擴(kuò)展以適合操作序列的情況。測(cè)試對(duì)象簇(聚集)嚴(yán)格的自頂向下或自底向上的集成不適合一組關(guān)聯(lián)對(duì)象的情形。應(yīng)使用基于場(chǎng)景的測(cè)試等其他方法。38軟件工程對(duì)象類測(cè)試測(cè)試面向?qū)ο笙到y(tǒng)根據(jù)系統(tǒng)需求規(guī)格說(shuō)明進(jìn)行檢驗(yàn)和有效性驗(yàn)證的過(guò)程可以像對(duì)其他范型的系統(tǒng)一樣進(jìn)行。在測(cè)試對(duì)象時(shí),完全的覆蓋測(cè)試應(yīng)當(dāng)包括:隔離對(duì)象中所有操作,進(jìn)行獨(dú)立測(cè)試。測(cè)試對(duì)象中所有屬性的設(shè)置和訪問(wèn)。測(cè)試對(duì)象的所有可能的狀態(tài)轉(zhuǎn)換。所有可能引起狀態(tài)改變的事件都要模擬到。39軟件工程對(duì)象類,作為在語(yǔ)法上獨(dú)立的構(gòu)件,應(yīng)當(dāng)允許在不同應(yīng)用中使用。每個(gè)類都應(yīng)是可靠的且不需了解任何實(shí)現(xiàn)細(xì)節(jié)就能復(fù)用。因此對(duì)象類應(yīng)盡可能孤立地進(jìn)行測(cè)試。設(shè)計(jì)操作的測(cè)試用例時(shí)的要點(diǎn):首先定義測(cè)試對(duì)象各操作的測(cè)試用例。對(duì)于一個(gè)單獨(dú)的操作,可通過(guò)該操作的前置條件選擇測(cè)試用例,產(chǎn)生輸出,讓測(cè)試者能夠判斷后置條件是否能夠得到滿足。40軟件工程各個(gè)操作的測(cè)試與傳統(tǒng)對(duì)函數(shù)過(guò)程定義的測(cè)試基本相同。然后再把測(cè)試用例組擴(kuò)充,針對(duì)被測(cè)操作調(diào)用對(duì)象類中其他操作的情況,設(shè)計(jì)操作序列的測(cè)試用例組。測(cè)試可以覆蓋每個(gè)操作的整個(gè)輸入域。但這不夠,還必須測(cè)試這些操作的相互作用,才能認(rèn)為測(cè)試是充分的。各個(gè)操作間的相互作用包括類內(nèi)通信和類間通信。41軟件工程putReferencePoint(Point)moveTo(Point)ReferencePointarea()draw()erase()getReferencePoint(Point)DisplayableShape(Point)DisplayableShape類內(nèi)消息類間消息DisplayableShape()42軟件工程設(shè)計(jì)對(duì)象類的規(guī)格說(shuō)明測(cè)試時(shí)的要點(diǎn):把對(duì)象類當(dāng)做一個(gè)黑盒,確認(rèn)類的實(shí)現(xiàn)是否遵照它的定義。對(duì)于“棧”的測(cè)試應(yīng)當(dāng)確保LIFO原則得以實(shí)施。對(duì)于多數(shù)的對(duì)象類,主要檢驗(yàn)在類聲明的public域中的那些操作。對(duì)于子類,要檢查繼承父類的public域和protected域的那些操作。檢查所有public域,protected域及private
域中的操作以完全檢查對(duì)象中定義的操作。43軟件工程等價(jià)劃分的思想也可用到對(duì)象類上。將使用對(duì)象相同屬性的測(cè)試歸入同一個(gè)等價(jià)劃分集合中。這樣可以建立對(duì)對(duì)象類屬性進(jìn)行初始化、訪問(wèn)、更新等的等價(jià)劃分。在設(shè)計(jì)對(duì)象類的行為測(cè)試時(shí)需要注意:基于對(duì)象的狀態(tài)模型進(jìn)行測(cè)試時(shí),首先要識(shí)別需要測(cè)試的狀態(tài)的變遷序列,并定義事件序列來(lái)強(qiáng)制執(zhí)行這些變遷。原則上應(yīng)當(dāng)測(cè)試每一個(gè)狀態(tài)變遷序列,當(dāng)然這樣做測(cè)試成本很高。44軟件工程對(duì)象集成測(cè)試當(dāng)開發(fā)面向?qū)ο笙到y(tǒng)時(shí),集成的層次并不明顯。當(dāng)一組對(duì)象類通過(guò)組合行為提供一組服務(wù)時(shí),則需將它們一起測(cè)試,這就是簇測(cè)試。此時(shí)不存在自底向上和自頂向下的集成。完全的單元應(yīng)當(dāng)保證類的執(zhí)行必須覆蓋它的一個(gè)有代表性的狀態(tài)集合。構(gòu)造函數(shù)和消息序列(線程)的參數(shù)值的選擇應(yīng)當(dāng)滿足這個(gè)規(guī)則。45軟件工程對(duì)象集成測(cè)試又稱交互測(cè)試,目的是確保對(duì)象的消息傳遞能夠正確進(jìn)行。面向?qū)ο笙到y(tǒng)的集成測(cè)試有3種可用的方法:用例或基于場(chǎng)景的測(cè)試用例或場(chǎng)景描述了對(duì)系統(tǒng)的使用模式。測(cè)試可以根據(jù)場(chǎng)景描述和對(duì)象簇來(lái)制定。這種測(cè)試著眼于系統(tǒng)結(jié)構(gòu),首先測(cè)試幾乎不使用服務(wù)器類的獨(dú)立類,再測(cè)試那些使用了獨(dú)立類的下一層次的(依賴)類。這樣一層一層地持續(xù)下去,直到整個(gè)系統(tǒng)構(gòu)造完成。46軟件工程基于線程的測(cè)試
它把為響應(yīng)某一系統(tǒng)輸入或事件所需的一組對(duì)象類組裝在一起。每一條線程將分別測(cè)試和組裝。因?yàn)槊嫦驅(qū)ο笙到y(tǒng)通常是事件驅(qū)動(dòng)的,因此這是一個(gè)特別合適的測(cè)試形式。對(duì)象交互測(cè)試這個(gè)方法提出了集成測(cè)試的中間層概念。中間層給出叫做“方法-消息”路徑的對(duì)象交互序列。所謂“原子系統(tǒng)功能”就是指一些輸入事件加上一條“方法-消息”路徑,終止于一個(gè)輸出事件。47軟件工程子類測(cè)試在做繼承層次的測(cè)試時(shí),自頂向下測(cè)試比較容易,但如何測(cè)試有幾種看法:Fielder認(rèn)為在父類充分測(cè)試的基礎(chǔ)上,被子類繼承的方法只需最小測(cè)試。Horrold主張?jiān)跍y(cè)試子類時(shí),只需對(duì)被繼承的屬性和新的屬性之間的交互進(jìn)行測(cè)試。D.E.Perry和G.E.Kaiser以Weyuker的測(cè)試充分性公理為依據(jù),認(rèn)為子類中繼承的方法和重新定義的方法都必須在子類環(huán)境中重新測(cè)試。48軟件工程面向?qū)ο蟮拇_認(rèn)測(cè)試在確認(rèn)測(cè)試或系統(tǒng)測(cè)試的層次上,不再考慮對(duì)象類間相互連接的細(xì)節(jié)。主要著眼于用戶可見(jiàn)的動(dòng)作和用戶可識(shí)別的系統(tǒng)輸出。為了幫助確認(rèn)測(cè)試的執(zhí)行,測(cè)試者需要回到分析時(shí)的動(dòng)態(tài)模型和描述系統(tǒng)行為的事件序列(腳本)進(jìn)行測(cè)試??梢岳煤诤袦y(cè)試的方法來(lái)驅(qū)動(dòng)確認(rèn)測(cè)試。測(cè)試檢測(cè)軟件中的故障并確定軟件是否執(zhí)行了預(yù)定要開發(fā)的功能。49軟件工程面向?qū)ο鬁y(cè)試用例的設(shè)計(jì)測(cè)試過(guò)程包括了一組測(cè)試用例的開發(fā),每一個(gè)測(cè)試用例要求能檢驗(yàn)應(yīng)用的一個(gè)特定的元素。還需要分析用各個(gè)測(cè)試用例執(zhí)行測(cè)試的結(jié)果來(lái)收集有關(guān)軟件的信息。軟件測(cè)試人員可以參考以下方法:應(yīng)當(dāng)唯一標(biāo)識(shí)每一個(gè)測(cè)試用例,并與被測(cè)試的類顯式地建立關(guān)聯(lián)。陳述測(cè)試對(duì)象的一組特定狀態(tài)。50軟件工程對(duì)每一個(gè)測(cè)試建立一組測(cè)試步驟,要思考和確定的問(wèn)題包括:被測(cè)試對(duì)象的一組特定狀態(tài);一組消息和操作;考慮在對(duì)象測(cè)試時(shí)可能產(chǎn)生的一組異常;一組外部條件;輔助理解和實(shí)現(xiàn)測(cè)試時(shí)的補(bǔ)充信息。傳統(tǒng)的白盒測(cè)試方法可用在類定義的操作測(cè)試和類級(jí)別測(cè)試中,黑盒測(cè)試方法可用于多類測(cè)試。51軟件工程分布式系統(tǒng)的測(cè)試分布式處理中涉及的最基本單位是線程,線程是操作系統(tǒng)進(jìn)程內(nèi)部能夠獨(dú)立運(yùn)行的內(nèi)容,它擁有自己的程序計(jì)數(shù)器和本地?cái)?shù)據(jù)。線程是能夠被調(diào)度執(zhí)行的最小單位。分布式系統(tǒng)測(cè)試主要面臨的問(wèn)題是并發(fā)性、網(wǎng)絡(luò)化和分布式。并發(fā)性是指多個(gè)線程同時(shí)發(fā)生。針對(duì)并發(fā)性錯(cuò)誤的測(cè)試主要著重于兩個(gè)線程的交互。在實(shí)際實(shí)施交互機(jī)制前應(yīng)對(duì)相關(guān)方法進(jìn)行測(cè)試。52軟件工程在網(wǎng)絡(luò)環(huán)境中各個(gè)獨(dú)立的盒子連接到通信設(shè)施上,如何實(shí)現(xiàn)它們物理上的同步是網(wǎng)絡(luò)計(jì)算的問(wèn)題。相關(guān)的測(cè)試就是在組成一個(gè)網(wǎng)絡(luò)系統(tǒng)的各個(gè)自治機(jī)器之間同步問(wèn)題的測(cè)試。分布式系統(tǒng)使用多進(jìn)程來(lái)支持系統(tǒng)的靈活性一個(gè)對(duì)象既可以在同一臺(tái)機(jī)器上分布在多個(gè)進(jìn)程中,還可以分布在多個(gè)物理上的計(jì)算機(jī)上。所有這些分布式構(gòu)件都要能夠識(shí)別“命名服務(wù)”或“注冊(cè)”對(duì)象,能夠與其他構(gòu)件交互。所有在配置文件中登記的機(jī)器與構(gòu)件構(gòu)成基礎(chǔ)結(jié)構(gòu)。53軟件工程需要考慮與這些分布式構(gòu)件相關(guān)的測(cè)試。分布式系統(tǒng)中的路徑測(cè)試一條路徑是一系列邏輯上連續(xù)的語(yǔ)句,它只有在特定的輸入下才執(zhí)行。路徑的另一個(gè)定義是覆蓋變量的定義和使用就形成一條完整的路徑。路徑測(cè)試就是設(shè)計(jì)測(cè)試用例覆蓋一個(gè)同步順序。所謂同步順序是指同步事件按照特定次序發(fā)生的順序,而同步事件是指一個(gè)線程產(chǎn)生另一個(gè)線程。54軟件工程測(cè)試應(yīng)跟蹤一個(gè)事件到另一個(gè)事件的路徑。如果從一個(gè)同步事件到另一個(gè)同步事件有多條可能的控制流路徑,只需覆蓋其中一條路徑。生存周期測(cè)試在分布式系統(tǒng)中,生存周期測(cè)試是指選擇一系列測(cè)試用例,測(cè)試任何處于生存期中的對(duì)象。特別是在整個(gè)生存周期過(guò)程中存在多條路徑,測(cè)試必須選擇有代表性的路徑以保證最大的覆蓋范圍。55軟件工程對(duì)于一個(gè)類來(lái)說(shuō),生存周期意味著選擇一系列測(cè)試,每個(gè)測(cè)試構(gòu)造類的一個(gè)實(shí)例,并通過(guò)一系列消息來(lái)使用實(shí)例,最后再撤銷這個(gè)實(shí)例。一個(gè)有效的生存周期測(cè)試應(yīng)能證實(shí)對(duì)象本身是否正確,還應(yīng)能證實(shí)被測(cè)試項(xiàng)是否能夠與它所在的環(huán)境正確地交互。對(duì)于一個(gè)類的實(shí)例,在它被撤銷后必須檢查它占用的資源是否已被釋放掉。56軟件工程分布式模型下面討論用在分布式系統(tǒng)中的使用某些標(biāo)準(zhǔn)基礎(chǔ)結(jié)構(gòu)的測(cè)試過(guò)程。基本的客戶機(jī)-服務(wù)器模型客戶機(jī)-服務(wù)器模型是最簡(jiǎn)單的分布式模型。在這種模型下,多個(gè)客戶機(jī)都可訪問(wèn)服務(wù)器。服務(wù)器是單一進(jìn)程。由于所有客戶機(jī)都與同一個(gè)服務(wù)器交互,因此存在單點(diǎn)失敗(即服務(wù)器出現(xiàn)問(wèn)題將影響所有客戶機(jī))。測(cè)試要點(diǎn):57軟件工程在延時(shí)期間,面對(duì)同時(shí)收到的服務(wù)請(qǐng)求,服務(wù)器能否把正確結(jié)果發(fā)送給各個(gè)相應(yīng)的客戶機(jī)?服務(wù)器能否處理快速增長(zhǎng)的負(fù)載?當(dāng)負(fù)載增加時(shí),服務(wù)器的性能可能降低,因此可能選擇放棄一部分負(fù)載。標(biāo)準(zhǔn)分布式模型-CORBACORBA是對(duì)象管理組織OMG開發(fā)的公共對(duì)象請(qǐng)求代理體系結(jié)構(gòu),并將它作為分布對(duì)象系統(tǒng)的標(biāo)準(zhǔn)體系結(jié)構(gòu)。58軟件工程這種結(jié)構(gòu)的核心是對(duì)象請(qǐng)求代理(ORB),一個(gè)對(duì)象通過(guò)ORB與系統(tǒng)中的另一個(gè)對(duì)象通信。CORBA標(biāo)準(zhǔn)的特點(diǎn):與基礎(chǔ)結(jié)構(gòu)相聯(lián)系的機(jī)器可能有不同的操作系統(tǒng)和不同的存儲(chǔ)設(shè)計(jì);構(gòu)成分布式系統(tǒng)的構(gòu)件可以用不同的語(yǔ)言編寫;根據(jù)對(duì)象的分布性和網(wǎng)絡(luò)中機(jī)器的類型,基礎(chǔ)結(jié)構(gòu)可以改變它自身的配置。測(cè)試要點(diǎn):59軟件工程不考慮基礎(chǔ)結(jié)構(gòu)的配置,系統(tǒng)能夠正確的工作?測(cè)試用例應(yīng)能產(chǎn)生被測(cè)試基礎(chǔ)結(jié)構(gòu)的各種預(yù)期的配置。在標(biāo)準(zhǔn)基礎(chǔ)結(jié)構(gòu)的服務(wù)基礎(chǔ)上,構(gòu)造新的測(cè)試用例能否被重復(fù)使用?測(cè)試用例的設(shè)計(jì)應(yīng)盡可能地使用基礎(chǔ)結(jié)構(gòu)。新發(fā)布的特定基礎(chǔ)結(jié)構(gòu)能否與已有的應(yīng)有有效地結(jié)合起來(lái)?應(yīng)有一系列的回歸測(cè)試,使得新發(fā)布的基礎(chǔ)結(jié)構(gòu)能夠在被集成到產(chǎn)品中之前得到測(cè)試。60軟件工程標(biāo)準(zhǔn)分布式模型-DCOMDCOM是Microsoft開發(fā)并鼓勵(lì)的一種標(biāo)準(zhǔn)的分布式構(gòu)件對(duì)象模型。DCOM“標(biāo)準(zhǔn)”被描述為包含特定方法的標(biāo)準(zhǔn)接口,每個(gè)標(biāo)準(zhǔn)接口都提供了一套特定的服務(wù)。單個(gè)構(gòu)件可以完成幾個(gè)接口的服務(wù),或若干構(gòu)件中的每一個(gè)都能完成統(tǒng)一接口的服務(wù),只是方式不同。DCOM是低層次的技術(shù),支持構(gòu)件間最原始的聯(lián)系,它不作為應(yīng)用開發(fā)的部分。61軟件工程測(cè)試要點(diǎn):對(duì)各種構(gòu)件做任意配置時(shí)測(cè)試者能否正確編排唯一的標(biāo)識(shí)?測(cè)試用例應(yīng)能利用各種構(gòu)件確保所有必要的連接能夠成功。每個(gè)構(gòu)件能否實(shí)現(xiàn)必要的接口?測(cè)試用例應(yīng)能利用各種構(gòu)件確保所有服務(wù)是可利用的并能實(shí)現(xiàn)期望的功能。標(biāo)準(zhǔn)接口的實(shí)現(xiàn)能否提供正確的行為?應(yīng)針對(duì)每一種標(biāo)準(zhǔn)接口有一套測(cè)試。標(biāo)準(zhǔn)分布式模型-RMI62軟件工程RMI是Java中的遠(yuǎn)程方法調(diào)用包,它提供一種簡(jiǎn)化的分布式環(huán)境,該環(huán)境假定不論連接的是什么樣的或什么類型的機(jī)器,它們都能運(yùn)行Java虛擬機(jī)。RMI提供一個(gè)注冊(cè)對(duì)象,參與分布式系統(tǒng)的所有對(duì)象必須知道該注冊(cè)對(duì)象監(jiān)聽(tīng)到哪個(gè)端口的消息。RMI的最新版本使用ORB的Internet協(xié)議(IIOP),使RMI對(duì)象與CORBA對(duì)象共同工作。63軟件工程測(cè)試要點(diǎn):那些種CORBA測(cè)試模式能夠在以RMI為基礎(chǔ)的系統(tǒng)上使用?測(cè)試用例的構(gòu)造很多與CORBA的測(cè)試用例相同。一般分布式構(gòu)件模型分布式系統(tǒng)的基本體系如圖,主要活動(dòng)是服務(wù)請(qǐng)求方給服務(wù)提供方法送消息。請(qǐng)求首先發(fā)送給請(qǐng)求方本地的代理對(duì)象,代理方聯(lián)系通信基礎(chǔ)結(jié)構(gòu)并傳送請(qǐng)求,通信基礎(chǔ)結(jié)構(gòu)實(shí)例化服務(wù)提供方,從對(duì)象定64軟件工程服務(wù)請(qǐng)求方提供方代理提供方代理服務(wù)提供方通信和定位服務(wù)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 加油站項(xiàng)目選址分析
- 構(gòu)建全社會(huì)共同支持職業(yè)教育的格局
- 蘭州2025年甘肅蘭州市公安局安寧分局招聘交通管理輔警18人筆試歷年參考題庫(kù)附帶答案詳解
- 租憑魚塘合同范本
- 科技園區(qū)發(fā)展與經(jīng)濟(jì)形勢(shì)的互動(dòng)關(guān)系
- 涵洞購(gòu)銷合同范本
- U-49900-生命科學(xué)試劑-MCE
- Cyclohexanone-d4-生命科學(xué)試劑-MCE
- 未來(lái)職場(chǎng)培訓(xùn)遠(yuǎn)程教學(xué)的機(jī)遇與挑戰(zhàn)
- 電商模式下的新經(jīng)濟(jì)業(yè)態(tài)解讀
- 氣管切開病人的護(hù)理查房PPT課件
- 小學(xué)五年級(jí)下冊(cè)綜合實(shí)踐活動(dòng).話說(shuō)節(jié)儉-(13張)ppt
- 硅酸鹽水泥熟料礦物組成及配料計(jì)算概述(共101頁(yè)).ppt
- 日順電子酒店智能房控管理系統(tǒng)說(shuō)明書
- 急診與災(zāi)難醫(yī)學(xué)第二版配套課件 02 急性發(fā)熱
- 部編版四年級(jí)道德與法治下冊(cè)4《買東西的學(xué)問(wèn)》第1課時(shí)課件
- 公因數(shù)、最大公因數(shù)的應(yīng)用
- CBT主要技術(shù)精品課件
- 常用液壓元件型號(hào)對(duì)照表230
- 項(xiàng)目章程模板范文
- 泰山產(chǎn)業(yè)領(lǐng)軍人才工程系統(tǒng)
評(píng)論
0/150
提交評(píng)論