版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
面向?qū)ο蠓椒嫦驅(qū)ο蟮母拍蠲嫦驅(qū)ο筌浖拈_發(fā)過程面向?qū)ο蠓治鯫OA面向?qū)ο笤O(shè)計OOD面向?qū)ο缶幊堂嫦驅(qū)ο鬁y試OO軟件的測試用例設(shè)計intmain(){doubleA,B;intC;doubleD;cout<<“請輸入數(shù)據(jù)A:”;cin>>A;cout<<“請輸入數(shù)據(jù)B:”;cin>>B;cout<<“請輸入運算符:”;cin>>C;switch(C){case‘+’:D=A+B;break;case‘-’:D=A-B;break;case‘*’:D=A*B;break;case‘/’:D=A/B;break;}cout<<A<<C<<B<<“=”<<D<<endl;return1;}#include<exception>#include<iostream>usingnamespacestd;classCOperation//"calculator.h"{public: doublem_dFirst; doublem_dSecond; virtualdoubleGetResult()=0 { doubledResult=0; returndResult; }};classAddOperation:publicCOperation//加法{public: virtualdoubleGetResult() { returnm_dFirst+m_dSecond; }};classSubOperation:publicCOperation//減法{public: virtualdoubleGetResult() { returnm_dFirst-m_dSecond; }};classMulOperation:publicCOperation//乘法{public: virtualdoubleGetResult() { returnm_dFirst*m_dSecond; }};classDivOperation:publicCOperation//除法{public: virtualdoubleGetResult() { if(m_dSecond==0)throwexception("除數(shù)不能為0!"); returnm_dFirst/m_dSecond; }};#include"calculator.h"classCCalculatorFactory{public:staticCOperation*Create(charcOperator){COperation*oper; switch(cOperator){ case'+': oper=newAddOperation(); break; case'-': oper=newSubOperation(); break; case'*': oper=newMulOperation(); break; case'/':oper=newDivOperation(); break; default: oper=newAddOperation(); break; } returnoper;}};#include"calculator.h"intmain(){doublea,b;cin>>a>>b;COperation*op=CCalculatorFactory::Create('/');op->m_dFirst=a;op->m_dSecond=b;cout<<op->GetResult()<<endl;return0;}面向?qū)ο筌浖こ毯蛡鹘y(tǒng)的軟件工程的原理在本質(zhì)上沒有什么不同,只是在傳統(tǒng)軟件工程方法中增加了面向?qū)ο罂紤]和研究問題的思想方法。傳統(tǒng)軟件工程方法側(cè)重于解決具體問題,而面向?qū)ο蠊こ谭椒▌t是從解決一類問題的思想方法和手段來解決一個具體問題,從長遠來看會有較高的效率。傳統(tǒng)的軟件工程原則中增加面向?qū)ο蟮闹笇?dǎo)原則,更豐富了軟件工程的原理和方法。應(yīng)注意不要將傳統(tǒng)軟件工程的思想方法和面向?qū)ο筌浖こ谭椒ǜ盍验_來。面向?qū)ο蠓椒ǎ∣bject-Oriented)是一種把面向?qū)ο笏枷霊?yīng)用于軟件開發(fā)過程,從而指導(dǎo)軟件開發(fā)活動的系統(tǒng)方法,它建立在對象概念基礎(chǔ)上,是一種運用對象、類、繼承、封裝、聚合、消息發(fā)送及多態(tài)性等概念來構(gòu)造系統(tǒng)的軟件開發(fā)方法。面向?qū)ο蠓椒嫦驅(qū)ο蠹夹g(shù)的提出(類和對象的概念),最早是在編程語言Simula中提出的。其作者是Ole-JohanDahl
和KristenNygaard。Simula語言是兩個語言的統(tǒng)稱:SimulaI
和Simula67(Simula67是在1967年發(fā)布的)。Simula語言是公認的最早的面向?qū)ο笳Z言,雖然他的實現(xiàn)并不是很完整。但這是語言發(fā)展史上的一個重要的里程碑。
20世紀70年代推出的Smalltalk是一個支持面向?qū)ο?、動態(tài)類型、類型反射的程序語言,奠定了面向?qū)ο蟪绦蛟O(shè)計的基礎(chǔ)。是AlanKay
設(shè)計的系統(tǒng),DanIngalls實現(xiàn)的系統(tǒng)。AlanKay在設(shè)計的時候,借用了Simula的messagepassing思想。80年代出現(xiàn)的Smalltak-80中增加了meteclasses。這實現(xiàn)了一個思想:一切皆對象,標志著面向?qū)ο蟪绦蛟O(shè)計進入了實用階段。
//Javainttries=0;while(tries<=5){TryAgain();tries++;}//Smalltalk|tries|tries:=0;[tries<=5]whileTrue:[selfTryAgain.tries:=tries+1]alternatively:5timeRepeat:[selfTryAgain]自80年代中期起,人們注重于面向?qū)ο蠓治龊驮O(shè)計的研究,逐步形成了面向?qū)ο蠓椒▽W(xué)。P.Coad和E.Yourdon的面向?qū)ο蠓治觯∣bject-OrientedAnalysis,OOA)和面向?qū)ο笤O(shè)計(Object-OrientedDesign,OOD)GradyBooch的面向?qū)ο箝_發(fā)方法James
Rambough等人提出的對象建模技術(shù)(ObjectModelingTechnique,OMT)IvarJacobson的面向?qū)ο筌浖こ蹋∣bject-OrientedSoftwareEngineering,OOSE)面向?qū)ο蠓椒ㄅc結(jié)構(gòu)化方法區(qū)別OO方法對現(xiàn)實世界中的實體或者概念對象進行建模對象各負其責(zé)對象通過消息進行協(xié)同,完成復(fù)雜的任務(wù)結(jié)構(gòu)化方法研究功能分解的方法通過復(fù)雜的功能組合實現(xiàn)系統(tǒng)功能面向?qū)ο蠓椒ǔ蔀橹髁鏖_發(fā)方法,其原因主要有:直觀、自然和簡單。面向?qū)ο蠓椒ǚ先藗儗陀^世界的認識規(guī)律,當(dāng)用戶的需求有所改變時,由于客觀實體不變,實體之間的聯(lián)系基本不變,面向?qū)ο蟮目傮w結(jié)構(gòu)就相對比較穩(wěn)定。增加遞增性開發(fā)。面向?qū)ο蠓椒ㄩ_發(fā)的軟件系統(tǒng)其體系結(jié)構(gòu)易于理解、擴充和維護,對象的具體實現(xiàn)細節(jié)對外部可見,當(dāng)對象接口確定后,實現(xiàn)細節(jié)的修改不會影響其他對象,此外,還能依據(jù)規(guī)定的接口方便地組裝成系統(tǒng)。支持軟件重用。面向?qū)ο蠓椒ㄖ械睦^承機制有力地支持軟件復(fù)用,通過繼承服用公共的屬性和操作,補充形成新系統(tǒng)的類。結(jié)構(gòu)更科學(xué),更能適應(yīng)未來變化。軟件體系結(jié)構(gòu)、軟件復(fù)用、分布計算、分布對象技術(shù)和面向agent的軟件工程敏捷方法是網(wǎng)絡(luò)時代軟件工程技術(shù)發(fā)展的趨勢。面向?qū)ο蠓椒ǖ奶攸c包括如下:從問題領(lǐng)域的客觀事物出發(fā)構(gòu)造軟件系統(tǒng)。用對象抽象表示這些事物,并作為系統(tǒng)的基本構(gòu)成。事物的靜態(tài)特征(數(shù)據(jù)的表達特征)用對象的屬性表示,事物的動態(tài)特征(即事物的行為)用對象服務(wù)表示(即方法)。對象的屬性與服務(wù)結(jié)合成一個獨立的實體,對外屏蔽其內(nèi)部細節(jié)(封裝)。對事物進行分類,具有相同屬性和服務(wù)的對象歸成一類,類是這些對象的抽象描述,每個對象是它的類的一個實例。在不同程度上運用抽象的原則,可以得到較一般和特殊的類,特殊的類繼承一般的類的屬性與服務(wù),從而簡化系統(tǒng)的構(gòu)造過程及文檔(繼承)。復(fù)雜的對象可以用簡單對象作為其構(gòu)成部分(聚合)。對象之間通過消息進行通信以實現(xiàn)對象之間的動態(tài)聯(lián)系。通過關(guān)聯(lián)表達對象之間的靜態(tài)聯(lián)系。在面向?qū)ο蠓椒ㄩ_發(fā)的系統(tǒng)中,以類的形式進行描述,通過對類的引用而創(chuàng)建的對象是系統(tǒng)的基本構(gòu)成單位。這些對象對應(yīng)著問題論域中的各個事物,它們的屬性與服務(wù)刻畫了事物的靜態(tài)特征和動態(tài)特征。對象類之間的繼承關(guān)系、聚合關(guān)系、消息和關(guān)聯(lián)表達了問題論域中事物之間實際存在的各種關(guān)系。無論是系統(tǒng)的構(gòu)成成分,還是通過這些成分之間的關(guān)系而體現(xiàn)的系統(tǒng)結(jié)構(gòu),都可以直接地影射成問題論域。面向?qū)ο筌浖こ?OOSE)方法是面向?qū)ο蠓椒ㄔ谲浖こ填I(lǐng)域的全面應(yīng)用,包括:面向?qū)ο蠓治?OOA):針對問題論域中客觀存在的各項事物建立OOA模型中的對象,用對象的屬性和服務(wù)分別描述事物的靜態(tài)特征和行為。面向?qū)ο笤O(shè)計(OOD):針對系統(tǒng)的某個具體實現(xiàn)來運用OO方法(1)將OOA模型作為OOD的一部分;(2)針對具體實現(xiàn)中的人機界面、數(shù)據(jù)存儲和任務(wù)管理等因素補充實現(xiàn)相關(guān)操作。面向?qū)ο缶幊?OOP):用一種面向?qū)ο蟮木幊陶Z言將OOD模型中的每個成分書寫出來。面向?qū)ο鬁y試(OOT):在測試中運用OO技術(shù),以對象的類作為基本測試對象,查錯范圍主要是類定義之內(nèi)的屬性及服務(wù),以及繼承中類之間關(guān)系。面向?qū)ο筌浖S護(OOM):程序與問題論域保持一致,降低理解難度;對象的封裝減小對象的修改對系統(tǒng)的影響。面向?qū)ο蟮能浖到y(tǒng):面向?qū)ο螅∣O)=對象(Object)+類(Classfication)+繼承(Inheritance)+通過消息的通信(CommunicationWithMessage)。面向?qū)ο罂梢远x為:一種使用對象(屬性與操作封裝)、消息傳遞、類、繼承和多態(tài)等來開發(fā)問題論域的解的范型。一種基于對象、類、實例和繼承等概念的技術(shù)。用對象作為建模的單位。面向?qū)ο蟾拍?、類的實例化過程是一種實例的合成過程,而不僅僅是根據(jù)單個類型進行的空間分配、初始化和綁定。指導(dǎo)編譯程序進行這種合成的是________。
A.類層次結(jié)構(gòu) B.實例的個數(shù)C.多態(tài)的種類 D.每個實例的初始狀態(tài)2、重置的基本思想是通過_______機制的支持,使得子類在繼承父類界面定義的前提下,用適合于自己要求的實現(xiàn)去置換父類中的相應(yīng)實現(xiàn)。A.靜態(tài)綁定B.對象引用C.類型匹配D.動態(tài)綁定3、_____反映了類間的一種層次關(guān)系,而______反映了一種整體與部分的關(guān)系。A.繼承 B.組合C.封裝 D.多態(tài)A.繼承B.組合C.封裝D.多態(tài)ADBA1、類的實例化過程是一種實例的合成過程,而不僅僅是根據(jù)單個類型進行的空間分配、初始化和綁定。指導(dǎo)編譯程序進行這種合成的是________。
A.類層次結(jié)構(gòu) B.實例的個數(shù)C.多態(tài)的種類 D.每個實例的初始狀態(tài)2、重置的基本思想是通過_______機制的支持,使得子類在繼承父類界面定義的前提下,用適合于自己要求的實現(xiàn)去置換父類中的相應(yīng)實現(xiàn)。A.靜態(tài)綁定B.對象引用C.類型匹配D.動態(tài)綁定3、_____反映了類間的一種層次關(guān)系,而______反映了一種整體與部分的關(guān)系。A.繼承 B.組合C.封裝 D.多態(tài)A.繼承B.組合C.封裝D.多態(tài)ADBA面向?qū)ο蠓椒ㄔ谏嬷芷诟鱾€階段所開發(fā)出來的“部件”是類,并且各個類的信息需要進行細化,因此,類成為軟件分析、設(shè)計和實現(xiàn)的基本單位。面向?qū)ο蟮拈_發(fā)模型有:應(yīng)用生存期:對整個應(yīng)用的開發(fā)過程進行了模型化,廣泛應(yīng)用于結(jié)構(gòu)化軟件開發(fā)項目。類生存期:生存期步驟獨立于任何一個特殊應(yīng)用的開發(fā),引導(dǎo)開發(fā)工作逐個階段循序漸進。面向?qū)ο筌浖l(fā)展過程實例建立論域分析應(yīng)用分析高層設(shè)計類開發(fā)信息系統(tǒng)描述組裝測試維護客戶輸入求精和維護從廢棄型開始既存類的復(fù)用從既存類演變漸增式的測試類的規(guī)格說明測試用例和測試開發(fā)實現(xiàn)漸增式的實現(xiàn)類的定義:一旦標識了一個類,就給出了它的規(guī)格說明,其中包括類的實例可執(zhí)行的操作及其數(shù)據(jù)結(jié)構(gòu)。類的設(shè)計與實現(xiàn):類的規(guī)格說明可指導(dǎo)對存放既存類的軟件庫進行查找,這些既存類可用來提供為當(dāng)前應(yīng)用所需要的功能。既存類的復(fù)用從既存類進行演變從廢棄型進行開發(fā)求精和維護:傳統(tǒng)的維護活動是針對應(yīng)用的,二求精過程則是針對類,以及把類鏈接在一起的系統(tǒng)結(jié)構(gòu)的。概念的封裝和實現(xiàn)的隱藏,使得類具有更大的獨立性;為便于類的調(diào)整,應(yīng)盡量做到定義與實現(xiàn)的分離。將應(yīng)用生存期放在一起,給出面向?qū)ο蟮膽?yīng)用開發(fā)過程。分析階段包括論域分析和應(yīng)用分析,要標識問題論域中的抽象。高層設(shè)計應(yīng)當(dāng)把系統(tǒng)與類的設(shè)計分開。在高層設(shè)計階段,設(shè)計應(yīng)用的頂層視圖相當(dāng)于開發(fā)一個標識系統(tǒng)的類的界面。類的開發(fā)。應(yīng)用設(shè)計階段基本上上類的開發(fā),類的開發(fā)獨立于待開發(fā)的應(yīng)用,但可以支持這個應(yīng)用。實例的建立是對問題的最后解決,建立實例之間的通信通道,通道可以把引用從一個對象傳遞到另一個對象來建立。組裝測試把系統(tǒng)組裝成一個完整的應(yīng)用來進行測試。維護包括在系統(tǒng)的操作中定位故障、在現(xiàn)有的系統(tǒng)加入新的行為等。多數(shù)維護活動發(fā)生在類的這一級,把類的實現(xiàn)與其規(guī)格說明分離可局部化修改的影響。然而,為了在系統(tǒng)中增加新的行為,偶爾改變界面的需求還是會有的。面向?qū)ο蠓治龅囊话悴襟E是:在客戶和軟件工程師之間溝通基本的用戶要求,獲取客戶對系統(tǒng)的需求,包括標識場景(Scenario)和用例(UseCase),以及建造需求模型;以基本的需求為指南來選擇和標識類與對象(包括定義屬性和基本操作);定義類的結(jié)構(gòu)和層次;表示類(對象)之間的關(guān)系,建立對象-關(guān)系模型;建立對象-行為模型;利用用例/場景來復(fù)審模型,遞進地重復(fù)任務(wù)1~5,直至完成建模。面向?qū)ο蠓治雒嫦驅(qū)ο蠓治龅哪康氖情_發(fā)一系列模型,這些分析模型用來描述滿足客戶需求的計算機軟件,描述信息、功能和行為。OOA的基本內(nèi)容包括:產(chǎn)生一種描述系統(tǒng)功能和問題論域基本特征的綜合文檔,在分析過程中識別的概念是高層的抽象,這些抽象成為一個靈活的可擴充軟件的基本構(gòu)件塊。把問題看作一組相互作用的實體,并確定這些實體之間的關(guān)系,把系統(tǒng)看成一個能夠以有控制的方式執(zhí)行的模型。從分析客戶需求的文件開始,抽象出目標系統(tǒng)的本質(zhì)屬性,并用分析模型準確地表示出來。通過建立分析模型,能糾正早期開發(fā)期對問題域的誤解。面向?qū)ο蠹夹g(shù)的流行衍生出許多OOA方法,每個方法都引入一個產(chǎn)品或系統(tǒng)分析過程,一組隨過程演化的模型,以及以一致的方法創(chuàng)建模型的符號體系。Booch方法Coad和Yourdon方法Jocobson方法Rambaugh方法Wirfs-Brock方法Booch方法包含“微開發(fā)”和“宏開發(fā)”兩個過程,微開發(fā)定義了一組在宏開發(fā)過程中的每一步反復(fù)應(yīng)用的分析任務(wù)。宏開發(fā)過程概述如下:標識類和對象標識類和對象的語義標識類和對象之間的關(guān)系進行一系列精化實現(xiàn)類和對象Coad和Yourdon方法建模符號簡單,開發(fā)分析模型的指引直接明了,其OOA過程概述如下:使用“尋找什么”的標準來標識對象。定義對象之間的一般/特殊結(jié)構(gòu)。定義對象之間的整體/部分結(jié)構(gòu)。標識主題(子系統(tǒng)的構(gòu)件標識)。定義屬性及對象之間的實例連接。定義服務(wù)及對象Jocobson方法即OOSE(面向?qū)ο筌浖こ蹋貏e強調(diào)使用用例來描述用戶和產(chǎn)品或系統(tǒng)間如何交互的場景,OOA過程概述如下:標識系統(tǒng)的用戶和他們的整體責(zé)任。建造需求模型。建造分析模型。Rambaugh方法是分析、系統(tǒng)設(shè)計和對象級設(shè)計的對象建模技術(shù)(Object-ModelingTechnique),分析活動創(chuàng)建對象模型、動態(tài)模型以及功能模型。OOA過程概述如下:開發(fā)對問題的范圍陳述。建造對象模型。開發(fā)動態(tài)模型。構(gòu)造系統(tǒng)的功能模型。Wirfs-Brock方法沒有明確區(qū)分分析和設(shè)計任務(wù),而是從對客戶規(guī)約的估計到設(shè)計完成一個連續(xù)過程,與分析相關(guān)的任務(wù)概述如下:評價客戶規(guī)約。使用語法分析從規(guī)約中抽取候選集。組合類以試圖標識超類。為每個類定義責(zé)任。為每個類賦予責(zé)任。標識類之間的關(guān)系。定一類之間基于責(zé)任的協(xié)作。構(gòu)造類的層次表示以顯示繼承關(guān)系。構(gòu)造系統(tǒng)的協(xié)作圖。面向?qū)ο蠓治觯∣OA)過程分為論域分析和應(yīng)用分析。論域分析建立大致的系統(tǒng)實現(xiàn)環(huán)境,而應(yīng)用分析則根據(jù)特定應(yīng)用的需求進行分析。論域分析是基于特定應(yīng)用領(lǐng)域,標識、分析和定義可復(fù)用于應(yīng)用論域內(nèi)多個項目的公共需求的技術(shù),它的目標是發(fā)現(xiàn)和創(chuàng)建一組應(yīng)用廣泛的類,可以復(fù)用于其他系統(tǒng)的開發(fā)。論域分析是與任何軟件項目都沒有牽連的軟件工程活動論域知識源論域分析論域分析模型技術(shù)文件已有應(yīng)用客戶考察目前/未來的需求專家審議類的分類復(fù)用標準論域語言功能模型應(yīng)用分析的依據(jù)是在論域分析時建立起來的論域分析模型,并把它用于當(dāng)前正在建立的應(yīng)用中??蛻魧ο到y(tǒng)的需求可以當(dāng)作限制來使用,用它們縮減論域的信息量。相應(yīng)時間需求、用戶界面需求和某些特殊的需求,如數(shù)據(jù)安全等,都在應(yīng)用分析這一層分解抽出。語義數(shù)據(jù)模型(SemanticDataModels)是建立問題論域模型的一種技術(shù),論域分析的輸出和對應(yīng)用分析和高層設(shè)計的輸入構(gòu)成了問題論域模型。語義數(shù)據(jù)模型源于關(guān)系數(shù)據(jù)模型和實體-聯(lián)系模型,并對這類模型進行和擴充和一般化。語義數(shù)據(jù)模型可以表達問題論域的內(nèi)涵,也可以表示復(fù)雜對象和對象之間的聯(lián)系。語義數(shù)據(jù)模型由外部模型、概念模型和內(nèi)部模型等3層模型構(gòu)成,這三層模型可以映射到面向?qū)ο笤O(shè)計的3個層次。語義數(shù)據(jù)模型主要特征面向?qū)ο笤O(shè)計外部模型用戶的數(shù)據(jù)視圖類的定義(規(guī)格說明)概念模型實體及其聯(lián)系之間的內(nèi)涵類之間的應(yīng)用聯(lián)系內(nèi)部模型數(shù)據(jù)的物理模型類的實現(xiàn)外部模型是來自應(yīng)用的外部現(xiàn)實世界的視圖,反映了用戶對問題的理解。概念模型要考慮在外部模型層所標識的實體之間的關(guān)系,聯(lián)系的重要屬性是實例連接。內(nèi)部模型考慮實體的物理模型,是生存期中類的設(shè)計階段,物理模型包括數(shù)據(jù)和操作。語義數(shù)據(jù)模型中的一般聯(lián)系在面向?qū)ο笤O(shè)計中起著核心的作用,通過它們給出了繼承和實例化等概念的表達。泛化(Generalization)聚合(Aggregation)分類(classification)關(guān)聯(lián)(Association)語義數(shù)據(jù)模型提供了對外部層和概念層的支持,從用戶視圖的角度出發(fā),標識和描述實體,還提供了從這些視圖到實際數(shù)據(jù)結(jié)構(gòu)的映像,即內(nèi)部層。一般化關(guān)系表示類與類之間的繼承關(guān)系接口與接口之間的繼承關(guān)系類對接口的實現(xiàn)關(guān)系。方向:與繼承或?qū)崿F(xiàn)的方向相反從子類指向父類從實現(xiàn)接口的類指向被實現(xiàn)的接口。關(guān)聯(lián)關(guān)系是類與類之間的聯(lián)接它使一個類知道另一個類的屬性和方法。關(guān)聯(lián)可以是雙向的,也可以是單向的。雙向的關(guān)聯(lián)可以有兩個箭頭或者沒有箭頭。單向的關(guān)聯(lián)有一個箭頭,表示關(guān)聯(lián)的方向,更為普遍,通常不鼓勵使用雙向的關(guān)聯(lián)。在Java語言里,關(guān)聯(lián)關(guān)系用實例變量實現(xiàn)每一個關(guān)聯(lián)都有一個名字(Drives)每一個關(guān)聯(lián)都有兩個端點每個端點有角色名,顯示出關(guān)聯(lián)的本質(zhì)關(guān)聯(lián)的端點有基數(shù)表明該端類有幾個實例關(guān)聯(lián)關(guān)系可以進一步確定為聚合關(guān)系或者合成關(guān)系聚合關(guān)系(共享聚合)是關(guān)聯(lián)關(guān)系的一種,是強的關(guān)聯(lián)關(guān)系。是整體和個體之間的關(guān)系(汽車類與引擎類、輪胎類)關(guān)聯(lián)關(guān)系往往可以進一步確定為聚合關(guān)系或者合成關(guān)系(如唐僧(師傅)與徒弟)僅僅從Java語法上難以分辨關(guān)聯(lián)與聚合,需要考察所涉及的類之間的邏輯關(guān)系。如果不能確定,可以設(shè)置為關(guān)聯(lián)關(guān)系。合成關(guān)系(組成聚合)比聚合關(guān)系強的關(guān)聯(lián)關(guān)系。整體對象負責(zé)部分對象的生命周期。負責(zé)部分對象的存活或消亡整體對象可以將代表部分的對象傳遞給另一個對象,由后者負責(zé)此對象的生命周期。代表部分的對象在每一個時刻只能與一個對象發(fā)生合成關(guān)系,由后者排他地負責(zé)其生命周期。合成關(guān)系聚合關(guān)系依賴關(guān)系表示一個類依賴于另一個類的定義。與關(guān)聯(lián)關(guān)系不同:Person類里沒有Car和House類的屬性,Car和House類的實例是以參量的方式傳入到buy()方法中去的。人(Person)可以買車(Car〕和房子(House),Person類依賴于Car類和House類。因為Person類引用了Car類和House類分類在系統(tǒng)的設(shè)計中出現(xiàn)了一個類的各個實例間有共享信息時,常常要利用分類聯(lián)系,建立泛化/特化類的繼承層次結(jié)構(gòu)。在一個解釋性語言環(huán)境(像Smalltalk)中,類的每個實例都可具有該類的屬性。提供了一沖借助于“黑板”系統(tǒng)開發(fā)各實例間通信的能力,在這個黑板系統(tǒng)中,可以把一個實例相關(guān)屬性寫到黑板上,該類其他實例可以從黑板上讀取它。而在系統(tǒng)中的其他對象不能存取這個屬性,它僅僅對該類的實例是可訪問的。在分析階段所標識的對象是應(yīng)用級的對象,即它們對應(yīng)于應(yīng)用論域的用戶視圖。由它們產(chǎn)生的類是對用戶視圖的模型而不是對物理數(shù)據(jù)結(jié)構(gòu)的模型化。計算機顯示屏幕就是一個對象,它給出用戶界面部分,可將其抽象成一個類顯示器屏幕,以反映用戶的想法。標識的實現(xiàn)級的類可以是一個特殊的位圖存儲結(jié)構(gòu),為了確定在屏幕上將要顯示什么,就需要掃描這個結(jié)構(gòu)。作為顯示器屏幕類的實現(xiàn)部分,需要使用一個位圖類。在分析階段,特定應(yīng)用適用于要標識的聯(lián)系,這些聯(lián)系表明了問題論域中實體之間的相互作用。在設(shè)計中,應(yīng)用級聯(lián)系用下面兩種方式中的一種來表示:消息連接。兩個對象之間的通信聯(lián)系可以標識為兩個對象之件的消息。交互對象實例連接。兩個對象之間的聯(lián)系可以通過一個不依賴于兩個對象種的任一方的交互對象表示。有四種類型,表示在兩個類中實例的對應(yīng)關(guān)系,包括一對一、多對一、一對多和多對多。面向?qū)ο笤O(shè)計是將OOA所創(chuàng)建的分析模型轉(zhuǎn)化成設(shè)計模型。OOD和OOA采用相同的符號表示,沒有明顯的分界線,往往反復(fù)迭代進行。在OOA中關(guān)心的是系統(tǒng)“做什么”,而在OOD中要解決的是系統(tǒng)如何做。因此,需要在OOA模型中為系統(tǒng)的實現(xiàn)補充新的類,或在原有類中補充新屬性和操作。OOA是一個分類活動,即分析問題力圖確定在開發(fā)解決方案時可應(yīng)用的對象類,同時確定對象關(guān)系和行為。OOD使得軟件工程師能夠確定從類中導(dǎo)出的對象,以及這些對象的相互關(guān)聯(lián),此外,OOD描述了對象間的關(guān)系如何達到;行為如何實現(xiàn);對象間通信如何實現(xiàn)。OOD同樣遵循抽象、信息隱藏、功能獨立和模塊化等設(shè)計準則。面向?qū)ο笤O(shè)計面向?qū)ο笤O(shè)計一般步驟如下:系統(tǒng)設(shè)計將子系統(tǒng)分配到處理器。選擇實現(xiàn)數(shù)據(jù)管理、界面支持和任務(wù)管理的設(shè)計策略。為系統(tǒng)設(shè)計合適的控制機制。復(fù)審并考慮權(quán)衡對象設(shè)計在過程級別設(shè)計每個操作。定義內(nèi)部類。為類屬性設(shè)計內(nèi)部數(shù)據(jù)結(jié)構(gòu)消息設(shè)計:使用對象間的協(xié)作和對象-關(guān)系模型,設(shè)計消息模型。復(fù)審:復(fù)審設(shè)計模型,并在需要時迭代。OOD通常分為高層設(shè)計和低層設(shè)計兩個階段,高層設(shè)計建立應(yīng)用的體系結(jié)構(gòu),低層設(shè)計集中于類及關(guān)系的詳細設(shè)計。高層設(shè)計階段開發(fā)軟件的體系結(jié)構(gòu),構(gòu)造軟件的總體模型。主要是標識在計算機環(huán)境中解決問題所需要的概念,并增加一批新類(可使應(yīng)用軟件與系統(tǒng)的外部世界交互的類)。此階段的輸出是適合應(yīng)用軟件要求的類、類之間的關(guān)系和應(yīng)用的子系統(tǒng)視圖規(guī)格說明。從OOD導(dǎo)出的系統(tǒng)結(jié)構(gòu)圖系統(tǒng)級的抉擇將影響對應(yīng)用軟件各個子系統(tǒng)的任務(wù)分配,但不影響各個類的結(jié)構(gòu)??蛻?服務(wù)器(C/S)模型是一個典型的高層設(shè)計模型,這個模型導(dǎo)出的體系結(jié)構(gòu)既可以在過程性系統(tǒng)中使用,又可在面向?qū)ο蟮南到y(tǒng)中使用。建立高層設(shè)計模型旨在讓系統(tǒng)的一個部分(服務(wù)器子系統(tǒng))提供一組服務(wù)給另一個部分(客戶子系統(tǒng))。請求服務(wù)的對象都歸于客戶子系統(tǒng),而接受請求提供服務(wù)的就是服務(wù)器。對一個應(yīng)用進行高層設(shè)計時,可以遵守以下幾個簡單規(guī)則:最小化構(gòu)件間的通信。子系統(tǒng)各個高層構(gòu)件之間的通信量應(yīng)當(dāng)達到最小。一個用戶界面應(yīng)當(dāng)能夠自行處理交互、改正錯誤和控制硬件,而不需打擾主應(yīng)用。隱藏復(fù)雜性:子系統(tǒng)應(yīng)當(dāng)把那些成組的類打包,形成高度的內(nèi)聚。邏輯功能分組:雖然輸入和輸出設(shè)備可能相互間不通信,但邏輯上把它們歸組到一個處理輸入/輸出的子系統(tǒng)中。這樣就提供了一個單元,它很容易識別并定位問題論域中的事件。類與通過概念封裝的子系統(tǒng)十分類似。事實上,每個子系統(tǒng)都可以被當(dāng)作一個類來實現(xiàn),這個類聚集了它的構(gòu)件,提供了一組操作。高層設(shè)計標識在計算機環(huán)境中實現(xiàn)問題解決所需要的概念,并增加了一批必要的類。這些類包括那些可使應(yīng)用軟件與系統(tǒng)的外部世界交互的類。這些交互則包括與其他軟件系統(tǒng)(如數(shù)據(jù)庫管理系統(tǒng)、鼠標和鍵盤)的界面,與收集數(shù)據(jù)或者負責(zé)控制的硬件設(shè)備的界面。這個階段的輸出是適合應(yīng)用軟件要求的類、類間的聯(lián)系以及應(yīng)用的子系統(tǒng)視圖規(guī)格說明。標識應(yīng)用所需的概念是類設(shè)計的第一步。應(yīng)用分析過程包括了對問題論域所需的類的模型化。但在最終實現(xiàn)應(yīng)用時,還需要追加一些類。類設(shè)計的主要目標是:單一概念的模型。在分析與高層設(shè)計階段,常常需要使用多個類來表示一個“概念”??蓮?fù)用的“插接相容性”構(gòu)件。所開發(fā)的構(gòu)件可以在未來的應(yīng)用中使用??煽康臉?gòu)件。應(yīng)用軟件必須是可靠的(健壯的和正確定義的)軟件。而這種可靠性與它的構(gòu)件有關(guān)。每個構(gòu)件必須經(jīng)過充分的測試。標識應(yīng)用所需的概念是類設(shè)計的第一步。應(yīng)用分析過程包括了對問題論域所需的類的模型化。但在最終實現(xiàn)應(yīng)用時,還需要追加一些類。類設(shè)計的主要目標是:可集成的構(gòu)件。將類的實例用到其他類的開發(fā)和應(yīng)用中,這要求類的界面應(yīng)當(dāng)盡可能小,表示一個類所需要的數(shù)據(jù)和操作都包含在類定義中。因此,類的設(shè)計應(yīng)當(dāng)盡量減少命名沖突。類結(jié)構(gòu)提供的封裝特性使得把概念集成到應(yīng)用的工作變得很容易。封裝特性保證了把一個概念的所有細節(jié)都組合在一個界面下,而信息隱蔽則保證了實現(xiàn)級的名字將不會同其他類的名字互相干擾。類的模塊設(shè)計還有以下一些方針:信息隱蔽。軟件設(shè)計通過信息隱蔽可增強抽象,并可保護類的存儲表示不被數(shù)據(jù)類型實例的用戶直接存取。對其表示的惟一存取途徑只能是界面。消息限制。類的設(shè)計者應(yīng)當(dāng)為類的命令設(shè)計一個明確的界面,該類的實例的用戶應(yīng)當(dāng)只使用界面提供的操作。狹窄界面。不是所有的操作都是公共的。只有對其他類的實例必要的操作才放到界面上,其他操作應(yīng)是隱蔽實現(xiàn)的。強內(nèi)聚。模塊內(nèi)部各個部分之間應(yīng)有較強的關(guān)系,它們不能分別標識。類的模塊設(shè)計還有以下一些方針:弱耦合。在面向?qū)ο蠓椒ㄖ惺亲罨镜膶ο?,耦合主要指不同對象之間相互關(guān)聯(lián)的緊密程度。耦合程度依賴于所使用的分解方法,“一般/特殊”的繼承結(jié)構(gòu)損害了弱耦合的概念。包括交互耦合和繼承耦合。顯式信息傳遞。除了依賴于最少的類外,還應(yīng)該明確在這些類之間的信息流。在類之間全局變量的共享隱含了信息的傳遞,并且是一種依賴形式。因此,兩個類之間的交互應(yīng)當(dāng)僅涉及顯式信息傳遞。顯式信息傳遞是通過參數(shù)表來完成的。類的模塊設(shè)計還有以下一些方針:派生類當(dāng)作派生類型。每個派生類應(yīng)該當(dāng)做基類的特殊化來開發(fā),而基類所具有的公共界面成為派生類的共有界面的一個子集。C++允許設(shè)計者選擇類的基類是共有的或私有的。如果基類是共有的,則其共有界面將成為新的派生類的共有界面部分,這表明基類的行為成為派生類的行為部分。如果基類是私有的,它的行為將不是繼承類的公共行為部分而是實現(xiàn)部分。對基類的劃分是為了實現(xiàn)新類中的服務(wù)。抽象類。某些語言提供了一個類,用它作為繼承結(jié)構(gòu)的開始點,所有用戶定義的類都直接或間接以這個類為基類。因此,每個繼承結(jié)構(gòu)的根類應(yīng)當(dāng)是目標概念的一個抽象模型。這個抽象模型生成一個類,它不用于產(chǎn)生實例。它定義了一個最小的共有界面,許多派生類可以加到這個界面上以給出概念的一個特定視圖。利用既存類來設(shè)計類有4種方式,即選擇、分解、配置和演變,這是面向?qū)ο蠹夹g(shù)的一個重要優(yōu)點。許多類的設(shè)計都基于既存類的復(fù)用。選擇。設(shè)計類最簡單的方法是從既存構(gòu)件中簡單地選擇合乎要求的構(gòu)件。一個面向?qū)ο箝_發(fā)環(huán)境應(yīng)提供常用構(gòu)件庫,大多數(shù)語言環(huán)境都帶有一個原始構(gòu)件庫(如整數(shù)、實數(shù)和字符),它是提供其他所有功能的基礎(chǔ)層。任何基本構(gòu)件庫(如“基本數(shù)據(jù)結(jié)構(gòu)”構(gòu)件)都應(yīng)建立在這些原始層上。例如,列表、集合、棧和隊列等,都是一些一般的和可復(fù)用的類。原始層還包括一組提供其他應(yīng)用論域服務(wù)的一般類,如窗口系統(tǒng)和圖形圖元等。利用既存類來設(shè)計類有4種方式,即選擇、分解、配置和演變,這是面向?qū)ο蠹夹g(shù)的一個重要優(yōu)點。許多類的設(shè)計都基于既存類的復(fù)用。分解。最初標識的“類”常常是幾個概念的組合。在著手設(shè)計時,可能會發(fā)現(xiàn)所標識的操作落在分散的幾個概念中,或者會發(fā)現(xiàn),數(shù)據(jù)屬性被分開放到模型中拆散概念形成的幾個組內(nèi)。這樣就必須把一個類分成幾個類,希望新標識的類容易實現(xiàn),或者它們已經(jīng)存在。利用既存類來設(shè)計類有4種方式,即選擇、分解、配置和演變,這是面向?qū)ο蠹夹g(shù)的一個重要優(yōu)點。許多類的設(shè)計都基于既存類的復(fù)用。配置。在設(shè)計類時,可能會要求由既存類的實例提供類的某些特性。通過把相應(yīng)類的實例聲明為新類的屬性來配置新類。利用既存類來設(shè)計類有4種方式,即選擇、分解、配置和演變,這是面向?qū)ο蠹夹g(shù)的一個重要優(yōu)點。許多類的設(shè)計都基于既存類的復(fù)用。演變。要開發(fā)的新類可能與一個既存類非常類似,但不完全相同。此時,不適宜采用“選擇”操作,但可以將一個既存類演變成一個新類,可以利用繼承機制來表示泛化的關(guān)系。特殊化處理有3種可能的方式,例如由既存類建立子類、通過繼承層次由既存類建立新類和建立既存類的父類等。類的設(shè)計描述包括兩部分:協(xié)議描述
(protocoldescription)。協(xié)議描述定義了每個類可以接收的消息,建立一個類的界面。協(xié)議描述由一組消息及對每個消息的相應(yīng)注釋組成。實現(xiàn)描述
(implementationdescription)實現(xiàn)描述說明了每個操作的實現(xiàn)細節(jié),這些操作應(yīng)包含在類的消息中。實現(xiàn)描述的信息有:類名和對一個類引用的規(guī)格說明私有數(shù)據(jù)結(jié)構(gòu)的規(guī)格說明,包括數(shù)據(jù)項和其類型的指示。每個操作的過程描述。實現(xiàn)描述必須包含充足的信息,以提供對協(xié)議描述中所描述的所有消息的適當(dāng)處理。接受一個類所提供服務(wù)的用戶必須熟悉執(zhí)行服務(wù)的協(xié)議,即定義“什么”被描述;而服務(wù)的提供者(對象類本身)必須關(guān)心:服務(wù)如何提供給用戶,即實現(xiàn)細節(jié)的封裝問題。界面。類的界面構(gòu)成了類的規(guī)格說明,定義了與其他類的交互。界面包括操作特征及先決條件和后置條件。操作特征包括它的名字和應(yīng)歸入?yún)?shù)的類。命名操作。操作的命名指示了設(shè)計人員所采取的視點。操作的目的是操縱一個類的實例(該操作定義在此類上),或者提供有關(guān)該實例狀態(tài)的信息。操作名應(yīng)反映這個目的。傳送給操作的信息是操作的另一特征,要求數(shù)據(jù)量不要很多。操作發(fā)送消息給對象,這些對象必須在消息的參數(shù)中出現(xiàn)。因此,操作可能會引起其他對象改變它們的狀態(tài),并改變它自己對象的狀態(tài)。界面的級別。類定義中有三種不同的存取級別:Public(共有界面):類A的共有界面的使用者是所有使用類A的實例的對象的集會。這個界面是該類操作的一個列表,它包括通常使用的算法運算和輸入輸出函數(shù)。這些操作的實現(xiàn)和類的數(shù)據(jù)元素的確切表示,對類的用戶來說都是隱蔽的。Private(私有界面):類的私有界面是一些操作的集合,這些操作僅為該類的其他操作所使用。它們是依賴于實現(xiàn)的;同時它們進一步把實現(xiàn)的細節(jié)對外部世界隱蔽起來。subclass(子類):類A的子類界面是一個操作的集合,使用這些操作可存取類A子類的實例。,這些操作多少有點依賴于實現(xiàn)的。它們允許子類對類的細節(jié)進行特殊的存取。標準界面。在設(shè)計類的層次時,結(jié)構(gòu)的根類提供了一個模型或標準界面,它們能夠描述在子類中可找到的那些概念。根類是抽象的,且不必實現(xiàn)界面上的每個操作,但它應(yīng)提供將在每個子類中實現(xiàn)的操作的標準特征。內(nèi)部結(jié)構(gòu)。在類的內(nèi)部定義了兩種類型的數(shù)據(jù):數(shù)據(jù)模型的成員和支持信息。數(shù)據(jù)模型的成員提供了概念的表示;支持信息僅僅是為了幫助概念的實現(xiàn)。數(shù)據(jù)模型對象的標識和定義是分析與高層設(shè)計階段的任務(wù),而支持數(shù)據(jù)對象的標識是類設(shè)計和實現(xiàn)級的任務(wù)。消息模式。要根據(jù)功能模型及動態(tài)模型,以及實際情況設(shè)計對象的消息模式。對象之間相互傳遞消息的機制是:當(dāng)一個對象接收了一條消息后,就在該對象中尋找消息指定的操作名。假如沒有找到,就到它的父類中尋找,直到查找成功,或查找失敗(找完根類對象)為止。如果找到了所需的操作,就執(zhí)行這個操作,執(zhí)行的過程中會有進一步的消息發(fā)送。消息發(fā)送的方法是完全一樣的,不考慮具體的接收者。消息模式和處理能力共同構(gòu)成對象的外部特性。確定各類之間的繼承關(guān)系時,將各對象的公共性質(zhì)放在較上層的類中描述,通過繼承而共享對公共性質(zhì)的描述。類又是一種分層結(jié)構(gòu),類的上層可以有父類,下層有子類。子類直接繼承父類的全部描述,這也叫傳遞性。類可以有多個父類和多個子類,即多重繼承;如果只限于一個父類,叫簡單繼承,在這種情況下,類的層次結(jié)構(gòu)是樹型結(jié)構(gòu)。在實現(xiàn)時,利用繼承性可把通用的類和專用的類存儲于類庫中,根據(jù)需要可以復(fù)用它們。面向?qū)ο蠓椒ò衍浖_發(fā)的分析、設(shè)計和實現(xiàn)自然地聯(lián)系在一起。雖然面向?qū)ο笤O(shè)計原則上不依賴于特定的實現(xiàn)環(huán)境,但是實現(xiàn)的結(jié)果和成本卻在很大程度上取決于實現(xiàn)環(huán)境。因此,直接支持面向?qū)ο笤O(shè)計范式的面向?qū)ο蟪绦蛘Z言、開發(fā)環(huán)境及類庫等,對于面向?qū)ο髮崿F(xiàn)來說是非常重要的。面向?qū)ο缶幊?OOP)
是在完成面向?qū)ο蠓治觥⒚嫦驅(qū)ο笤O(shè)計的基礎(chǔ)上,利用一種或多種面向?qū)ο笳Z言,具體實現(xiàn)軟件各項功能的過程。面向?qū)ο蟮某绦蛟O(shè)計語言適合用來實現(xiàn)面向?qū)ο笤O(shè)計結(jié)果。事實上,具有方便的開發(fā)環(huán)境和豐富的類庫的面向?qū)ο蟪绦蛟O(shè)計語言,是實現(xiàn)面向?qū)ο笤O(shè)計的最佳選擇。面向?qū)ο缶幊滩徽摬捎煤畏N面向?qū)ο笳Z言進行編碼,它們都有共性的一面,即符合面向?qū)ο缶幊痰囊?guī)范,具有面向?qū)ο蟮木幊田L(fēng)格。面向?qū)ο蟮某绦蛟O(shè)計語言必須支持下面的概念:封裝的對象類和實例的概念類的繼承類的多態(tài)性面向?qū)ο缶幊讨械幕緲?gòu)件是對象和類,基本機制是方法、消息和繼承性,提高軟件開發(fā)的抽象層次、提高軟件的重用性,是面向?qū)ο缶幊痰幕舅枷牒褪侄?。設(shè)計重點集中在類和類層次結(jié)構(gòu)的設(shè)計、實現(xiàn)和重用上,是面向?qū)ο缶幊毯蛡鹘y(tǒng)程序設(shè)計的本質(zhì)區(qū)別。詳細的面向?qū)ο笤O(shè)計是與語言有關(guān)的。這樣,可以有效地為過程型語言、面向軟件包的語言、面向?qū)ο蟮恼Z言所用。通常所有的語言都可以完成面向?qū)ο髮崿F(xiàn),但某些語言能夠提供更豐富的語法,能夠顯式地描繪在面向?qū)ο蠓治龊兔嫦驅(qū)ο笤O(shè)計過程中所使用的表示法。面向?qū)ο笤O(shè)計與過程型語言面向?qū)ο笤O(shè)計與基本對象語言面向?qū)ο笤O(shè)計與面向?qū)ο蟮某绦蛟O(shè)計語言面向?qū)ο笤O(shè)計與面向?qū)ο髷?shù)據(jù)庫語言(OODBL)、面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)(OODBMS)及語言,是面向?qū)ο蟪绦蛟O(shè)計語言(OOPL)與數(shù)據(jù)管理能力的組合OODBMS有4種不同的體系結(jié)構(gòu):大屬性。擴充關(guān)系型DBMS,能容納大屬性,如一個文檔。松散耦合。一個OOPL與大量的DBMS組合在一起。緊密耦合。一個OOPL與某個專用的DBMS集成為一個系統(tǒng)。擴充關(guān)系型。擴充關(guān)系型DBMS,能容納“過程”之類的屬性。緊密耦合體系結(jié)構(gòu)在程序設(shè)計和數(shù)據(jù)操縱中使用了同一種語言,它更能顯式地表達面向?qū)ο蠓治龊兔嫦驅(qū)ο笤O(shè)計的語義。面向?qū)ο蟪绦蛟O(shè)計語言(OOPL,Object-Oriented
ProgrammingLanguages)是目前最為流行的一類高級語言,主要有Java、C++、VisualC++和Delphi等。OOPL以其內(nèi)在機制體現(xiàn)了OOP的核心思想,同時為OOP的實際應(yīng)用提供了有效的支持和規(guī)范化的約束。盡管使用傳統(tǒng)編程語言也可以體現(xiàn)一些OOP風(fēng)格,但傳統(tǒng)編程語言中缺少像繼承性這樣的OOPL所獨有的基本機制,所以O(shè)OPL更為規(guī)范、高效、易于重用和易于維護。純OOPL為OOP的發(fā)展起到了奠基作用,混合式OOPL則使得OOP為軟件產(chǎn)業(yè)所真正接受。在OOPL中廣泛使用了動態(tài)聯(lián)編、多態(tài)性、多重繼承等技術(shù),類庫和程序設(shè)計環(huán)境則是決定一個OOPL是否適用的兩個關(guān)鍵因素。OOPL的基本特征有七個,即:對象、類、繼承性、信息隱藏、強類型化、并發(fā)性、持久性。但是,目前還沒有哪一種語言能夠同時具備這些特征。流行的OOPL都可以歸入以下六類語言之一:基于對象的語言,支持對象?;陬惖恼Z言,對象屬于類。面向?qū)ο蟮恼Z言,類支持繼承性。面向?qū)ο蟮臄?shù)據(jù)抽象語言,類支持信息隱藏。面向?qū)ο蟮膹婎愋突Z言,類型可以在編譯時確定。支持并發(fā)性與持久性的面向?qū)ο蟮膹婎愋突Z言。常用的面向?qū)ο筌浖臏y試方法和技巧與過程軟件相同,或者可以從傳統(tǒng)的測試方法和技巧中演化而來,但實踐和研究表明,它們之間還是存在許多不同。面向?qū)ο蟮能浖y試要面對某些新的挑戰(zhàn)。同時,作為增量開發(fā)過程的一部分,設(shè)計良好的面向?qū)ο筌浖楦纳苽鹘y(tǒng)測試過程提供了機遇。在面向?qū)ο缶幊陶Z言中,繼承和多態(tài)的特征對測試者來說是一個新的技術(shù)難點。面向?qū)ο蠹夹g(shù)不僅給編程語言帶來了變化,而且給軟件開發(fā)的很多方面也帶來了變化。面向?qū)ο鬁y試對于面向?qū)ο蟮能浖y試,使用了增量開發(fā)過程,重新調(diào)整并使用新的符號來分析和設(shè)計,并充分利用編程語言的新特性,這些變化提高了軟件的可維護性、復(fù)用性和靈活性等等:面向?qū)ο蠹夹g(shù)中特有的封裝、繼承和多態(tài)機制,給面向?qū)ο鬁y試帶來了一些新的特點,增加了測試和調(diào)試的難度。在面向?qū)ο蟪绦蛑校瑢ο笫菍傩院筒僮鞯姆庋b體。對象彼此之間通過發(fā)送消息啟動相應(yīng)的操作,并且通過修改對象狀態(tài)達到轉(zhuǎn)換系統(tǒng)運行狀態(tài)的目的。對象并沒有明顯地規(guī)定用什么次序啟動它的操作才是合法的。因此在測試類的實現(xiàn)時,面對的不是一段順序的代碼,所以傳統(tǒng)的測試方法(?)就不完全適用了。傳統(tǒng)的編程中,復(fù)用無非是從已有的程序中復(fù)制一段代碼,放到當(dāng)前的程序中,或者調(diào)用標準的庫函數(shù)。而面向?qū)ο蟪绦蛑胁粌H要測試父類,對于繼承的子類也需要展開進行測試。隨著繼承層次的加深,雖然可復(fù)用的構(gòu)件越來越多,但是,測試的工作量和難度也隨之增加。面向?qū)ο蟮拈_發(fā)是漸進的迭代開發(fā),從分析設(shè)計到實現(xiàn)使用相同的語義結(jié)構(gòu),如類、屬性、操作、消息等。復(fù)審對面向?qū)ο蠓椒▉碚f顯得特別重要,面向?qū)ο蟮臏y試必須擴大到面向?qū)ο蠓治龊兔嫦驅(qū)ο笤O(shè)計階段。正式的技術(shù)復(fù)審可用于檢查分析和設(shè)計模型的正確性和一致性。為了保證分析和設(shè)計模型的正確性和—致性,分析人員和業(yè)務(wù)人員應(yīng)該對分析和設(shè)計模型中的主要內(nèi)容(類圖、交互圖、活動圖和接口描述、構(gòu)架描述、界面描述)進行仔細的討論,確定正確的分析和設(shè)計模型。為了保持模型之間的一致性,應(yīng)該檢查每個類以及類之間的連接,如果一個類在模型的某一部分有表示,而在模型的其他部分沒有正確的反映,則一致性是有問題的。檢查一致性可以從分析模型開始,采用深度優(yōu)先的策略,一直跟蹤到設(shè)計模型,配合正確性檢查,保持模型間的一致性。每次的開發(fā)迭代都要進行單元測試和集成測試,測試設(shè)計人員要規(guī)劃每一次迭代需要的測試工作。迭代的每一個構(gòu)造都需要做集成測試,迭代結(jié)束時進行系統(tǒng)測試。設(shè)計和實現(xiàn)測試采取的方法是創(chuàng)建測試規(guī)程和測試用例,測試規(guī)程說明如何執(zhí)行一個測試。有時可能還需要創(chuàng)建使測試自動化的測試構(gòu)件。按照測試規(guī)程執(zhí)行測試,系統(tǒng)地處理每個測試的結(jié)果,當(dāng)發(fā)現(xiàn)有缺陷的構(gòu)造時,要重新測試,甚至可能要送回給其他核心工作流,以修復(fù)嚴重的缺陷。出于開發(fā)工作的迭代性,一些在早期創(chuàng)建的測試用例也可以在后續(xù)用做回歸測試用例。在迭代中對回歸測試的需要逐步增長,這意味著后期迭代將包括大量的回歸測試。測試階段具體包括如下幾個活動:制定測試計劃根據(jù)用況模型、分析模型、設(shè)計模型、實現(xiàn)模型以及構(gòu)架描述和補充需求來制定測試計劃,目的是為了規(guī)劃一次迭代中的測試工作。包括描述測試策略、估計測試工作所需要的人力以及系統(tǒng)資源、制定測試工作的進度。在準備測試計劃時應(yīng)該考慮用況模型和補充性需求等制品,來輔助制定測試進度、預(yù)算測試的工作量。一般的測試設(shè)計準則是:所設(shè)計的測試用例和測試規(guī)程能以最小的代價來測試最重要的用況,并且對風(fēng)險性最大的需求進行測試。測試階段具體包括如下幾個活動:設(shè)計測試用例設(shè)計集成測試用例。集成測試用例用于驗證被組裝成構(gòu)造的構(gòu)件之間能夠正常交互。測試設(shè)計人員應(yīng)設(shè)計一組測試用例,以便有效地完成測試計劃中規(guī)定的測試目標。為此,測試設(shè)計人員應(yīng)盡可能尋找一組互不重疊的測試用例,以盡可能少的測試用例,發(fā)現(xiàn)盡可能多的問題。設(shè)計系統(tǒng)測試用例。系統(tǒng)測試用于測試系統(tǒng)功能整體上是否正確,在不同條件下的用況組合的運行是否有效。這些條件包括不同的硬件配置、不同程度的系統(tǒng)負載、不同數(shù)量的參與者,以及不同規(guī)模的數(shù)據(jù)庫。在設(shè)計系統(tǒng)測試用例時,還要考慮事件流和一些特殊需求。測試階段具體包括如下幾個活動:設(shè)計回歸測試用例為了驗證將迭代開發(fā)中產(chǎn)生的構(gòu)件集成在一起是否有缺陷,除了添加一些必要的測試用例進行接口的驗證外,充分利用前面已經(jīng)使用過的測試用例來驗證后續(xù)的構(gòu)造是非常有效的。設(shè)計回歸測試用例時,要注意靈活性,它要能夠適應(yīng)被測試軟件的變化。測試階段具體包括如下幾個活動:實現(xiàn)測試:構(gòu)件工程師根據(jù)測試用例、測試規(guī)程和被測軟件的實現(xiàn)模型設(shè)計并實現(xiàn)測試構(gòu)件,實現(xiàn)測試規(guī)程自動化。實現(xiàn)測試構(gòu)件有兩種方法:依賴于測試自動化工具。構(gòu)件工程師根據(jù)測試規(guī)程,在測試自動化工具環(huán)境中執(zhí)行測試規(guī)程所描述的動作,測試工具會自動記錄這些動作,構(gòu)件工程師整理這些記錄,并做適當(dāng)?shù)恼{(diào)整,生成一個測試構(gòu)件。這種構(gòu)件通常是以腳本語言實現(xiàn)的,例如,VisualBasic的測試腳由構(gòu)件工程師以測試規(guī)程為需求規(guī)格說明,進行分析和設(shè)計后,使用編程語言開發(fā)的測試構(gòu)件。開發(fā)測試構(gòu)件的工程師需要有更高超的編程技巧和責(zé)任心。測試階段具體包括如下幾個活動:實現(xiàn)集成測試:由集成測試人員根據(jù)測試用例、測試規(guī)程、測試構(gòu)件和實現(xiàn)模型對一次迭代內(nèi)創(chuàng)建的每個構(gòu)造執(zhí)行集成測試,并且將集成測試的結(jié)果返回給測試設(shè)計人員和相關(guān)的工作流負責(zé)人員,集成測試的工作步驟如下:對每一個測試用例執(zhí)行測試規(guī)程(手工或自動),實現(xiàn)與構(gòu)造相關(guān)的集成測試。將測試結(jié)果和預(yù)期結(jié)果相比較,研究二者的偏離原因。把缺陷報告給相關(guān)工作流的負責(zé)人員,對構(gòu)件的缺陷進修改。把缺陷報臺給測試設(shè)計人員,對測試結(jié)果和缺陷類型進行統(tǒng)計分析,評估整個測試的結(jié)果。執(zhí)行系統(tǒng)測試測試階段具體包括如下幾個活動:執(zhí)行系統(tǒng)測試:集成測試表明系統(tǒng)滿足了當(dāng)前迭代中所確定的集成質(zhì)量目標后,開始進行系統(tǒng)測試。根據(jù)測試用例、測試規(guī)程、測試構(gòu)件和實現(xiàn)模型對迭代開發(fā)的結(jié)果進行系統(tǒng)測試,并且將測試中發(fā)現(xiàn)的問題反饋給相關(guān)人員。評估測試:這是由測試設(shè)計人員根據(jù)測試計劃、測試用例、測試規(guī)程、測試構(gòu)件和測試執(zhí)行者反饋的測試缺陷對一次迭代內(nèi)的測試工作做出的評估。測試設(shè)計人員準備了一些度量標準,用來確定軟件的質(zhì)量水平,并確定還需要進一步做多少測試工作。測試設(shè)計人員尤其看重兩條度量標準:
測試完全性。測試設(shè)計人員分析測試用例
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 園區(qū)文員試用期工作總結(jié)范文(8篇)
- 向廠長提出調(diào)換工作崗位的申請書(5篇)
- 冬季藝術(shù)節(jié)開幕詞范文(6篇)
- 水電站優(yōu)化調(diào)度-洞察分析
- 虛擬現(xiàn)實酒店預(yù)訂平臺市場競爭力分析-洞察分析
- 危險化學(xué)品安全監(jiān)控-洞察分析
- 育兒APP用戶體驗優(yōu)化-洞察分析
- 員工叉車安全責(zé)任承諾書(7篇)
- 醫(yī)療隱私泄露預(yù)警-洞察分析
- 溫室物聯(lián)網(wǎng)技術(shù)-洞察分析
- 成人住院患者跌倒評估與預(yù)防(團體標準)解讀
- 髕骨骨折手術(shù)后注意休息和飲食
- 2024年全新學(xué)校物業(yè)管理服務(wù)方案
- 《規(guī)則意識班會》課件
- 刑事辯護與犯罪辯解高級辯護技巧與戰(zhàn)略
- 2021年全國普通高等學(xué)校招生統(tǒng)一考試語文試卷 全國甲卷(含解析)
- 員工離職登記表(工作交接表)
- 教務(wù)處期末考試的工作總結(jié)
- 李玫瑾心理撫養(yǎng)兒童人格形成及培養(yǎng)
- 2023-2024學(xué)年山西省太原市小店區(qū)數(shù)學(xué)六上期末質(zhì)量檢測試題含答案
- 《眼鏡學(xué)》考試復(fù)習(xí)重點題庫(含答案)
評論
0/150
提交評論