《軟件測試基礎(chǔ)教程》第八章面向?qū)ο蟮能浖y試_第1頁
《軟件測試基礎(chǔ)教程》第八章面向?qū)ο蟮能浖y試_第2頁
《軟件測試基礎(chǔ)教程》第八章面向?qū)ο蟮能浖y試_第3頁
《軟件測試基礎(chǔ)教程》第八章面向?qū)ο蟮能浖y試_第4頁
《軟件測試基礎(chǔ)教程》第八章面向?qū)ο蟮能浖y試_第5頁
已閱讀5頁,還剩130頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

軟件測試基礎(chǔ)教程第八章面向?qū)ο蟮能浖y試

本章概要:本章通過面向?qū)ο筌浖_發(fā)的特點引入了面向?qū)ο蟮能浖y試,通過傳統(tǒng)軟件測試和面向?qū)ο筌浖y試的比較,分析了面向?qū)ο筌浖y試是軟件測試行業(yè)發(fā)展的必然方向。進而又詳細描述了面向?qū)ο筌浖y試的方法和策略。最后較為詳細的闡述了類測試的概念和方法。第八章面向?qū)ο蟮能浖y試8.1面向?qū)ο筌浖y試的基本概念8.2面向?qū)ο鬁y試的內(nèi)容與范圍8.3面向?qū)ο筌浖y試技術(shù)與方法8.4面向?qū)ο筌浖y試用例設(shè)計8.5面向?qū)ο鬁y試基本步驟8.6面向?qū)ο鬁y試工具JUnit第八章面向?qū)ο蟮能浖y試8.1面向?qū)ο筌浖y試的基本概念

面向?qū)ο蠓椒ǎ∣bject-OrientedMethod)是一種把面向?qū)ο蟮乃枷霊?yīng)用于軟件開發(fā)過程中,指導(dǎo)開發(fā)活動的系統(tǒng)方法,是建立在“對象”概念基礎(chǔ)上的方法學(xué)。面向?qū)ο蠓椒ㄗ鳛橐环N新型的獨具優(yōu)越性的新方法正在逐漸代替被廣泛使用的面向過程開發(fā)方法,被看成是解決軟件危機的新興技術(shù)。面向?qū)ο蠹夹g(shù)產(chǎn)生更好的系統(tǒng)結(jié)構(gòu),更規(guī)范的編程風(fēng)格,極大的優(yōu)化了數(shù)據(jù)使用的安全性,提高了程序代碼的重用,一些人就此認(rèn)為面向?qū)ο蠹夹g(shù)開發(fā)出的程序無需進行測試。第八章面向?qū)ο蟮能浖y試8.1面向?qū)ο筌浖y試的基本概念8.1.1面向?qū)ο筌浖O(shè)計的基本概念8.1.2面向?qū)ο筌浖_發(fā)過程及其特點8.1.3向?qū)ο筌浖y試的基本概念第八章面向?qū)ο蟮能浖y試8.1.1面向?qū)ο筌浖O(shè)計的基本概念1.對象 對象是要研究的任何事物。從一本書到一家圖書館,單的整數(shù)到整數(shù)列龐大的數(shù)據(jù)庫、極其復(fù)雜的自動化工廠、航天飛機都可看作對象,它不僅能表示有形的實體,也能表示無形的(抽象的)規(guī)則、計劃或事件。對象由數(shù)據(jù)(描述事物的屬性)和作用于數(shù)據(jù)的操作(體現(xiàn)事物的行為)構(gòu)成一獨立整體。從程序設(shè)計者來看,對象是一個程序模塊,從用戶來看,對象為他們提供所希望的行為。在對內(nèi)的操作通常稱為方法。2.類 類是對象的模板。即類是對一組有相同數(shù)據(jù)和相同操作的對象的定義,一個類所包含的方法和數(shù)據(jù)描述一組對象的共同屬性和行為。類是在對象之上的抽象,對象則是類的具體化,是類的實例。類可有其子類,也可有其它類,形成類層次結(jié)構(gòu)。3.消息 消息是對象之間進行通信的一種規(guī)格說明。一般它由三部分組成:接收消息的對象、消息名及實際變元。第八章面向?qū)ο蟮能浖y試8.1.1面向?qū)ο筌浖O(shè)計的基本概念4.封裝性 封裝是一種信息隱蔽技術(shù),它體現(xiàn)于類的說明,是對象的重要特性。封裝使數(shù)據(jù)和加工該數(shù)據(jù)的方法(函數(shù))封裝為一個整體,以實現(xiàn)獨立性很強的模塊,使得用戶只能見到對象的外特性(對象能接受哪些消息,具有那些處理能力),而對象的內(nèi)特性(保存內(nèi)部狀態(tài)的私有數(shù)據(jù)和實現(xiàn)加工能力的算法)對用戶是隱蔽的。封裝的目的在于把對象的設(shè)計者和對象者的使用分開,使用者不必知曉行為實現(xiàn)的細節(jié),只須用設(shè)計者提供的消息來訪問該對象。5.繼承性 繼承性是子類自動共享父類之間數(shù)據(jù)和方法的機制。它由類的派生功能體現(xiàn)。一個類直接繼職其它類的全部描述,同時可修改和擴充。6.多態(tài)性 對象根據(jù)所接收的消息而做出動作。同一消息為不同的對象接受時可產(chǎn)生完全不同的行動,這種現(xiàn)象稱為多態(tài)性。利用多態(tài)性用戶可發(fā)送一個通用的信息,而將所有的實現(xiàn)細節(jié)都留給接受消息的對象自行決定,如是,同一消息即可調(diào)用不同的方法。例如:Print消息被發(fā)送給一圖或表時調(diào)用的打印方法與將同樣的Print消息發(fā)送給一正文文件而調(diào)用的打印方法會完全不同。多態(tài)性的實現(xiàn)受到繼承性的支持,利用類繼承的層次關(guān)系,把具有通用功能的協(xié)議存放在類層次中盡可能高的地方,而將實現(xiàn)這一功能的不同方法置于較低層次,這樣,在這些低層次上生成的對象就能給通用消息以不同的響應(yīng)。在OOPL中可通過在派生類中重定義基類函數(shù)(定義為重載函數(shù)或虛函數(shù))來實現(xiàn)多態(tài)性。第八章面向?qū)ο蟮能浖y試8.1.2面向?qū)ο筌浖_發(fā)過程及其特點

面向?qū)ο蟮拈_發(fā)方法的基本思想認(rèn)為,客觀世界是由各種各樣的對象組成的,每種對象都有各自的內(nèi)部狀態(tài)和運動規(guī)律,不同的對象之間的相互作用和聯(lián)系就構(gòu)成了各種不同的系統(tǒng)。故面向?qū)ο筌浖_發(fā)的工作過程為:

1.調(diào)查、分析系統(tǒng)需求,建立一個全面、合理、統(tǒng)一的模型。

2.在繁雜的問題域中抽象地識別出對象以及其行為、結(jié)構(gòu)、屬性、方法

3.對象設(shè)計——即對分析的結(jié)果作進一步地抽象、歸類、整理,并最終以范式的形式將它們確定下來。

4.程序?qū)崿F(xiàn)——即用面向?qū)ο蟮某绦蛟O(shè)計語言將上一步整理的范式直接映射(直接用程序語言來取代)為應(yīng)用程序軟件。第八章面向?qū)ο蟮能浖y試8.1.2面向?qū)ο筌浖_發(fā)過程及其特點

面向?qū)ο箝_發(fā)的特點是遵循以下三項原則:

1.抽象原則(abstraction)——指為了某一分析目的而集中精力研究對象的某一性質(zhì),它可以忽略其它與此目的無關(guān)的部分

2.封裝原則(encapsulation)即信息隱藏——指在確定系統(tǒng)的某一部分內(nèi)容時,應(yīng)考慮到其它部分的信息及聯(lián)系都在這一部分的內(nèi)部進行,外部各部分之間的信息聯(lián)系應(yīng)盡可能的少。

3.繼承原則(inheritance)——指能直接獲得已有的性質(zhì)和特征而不必重復(fù)定義它們。

第八章面向?qū)ο蟮能浖y試8.1.3向?qū)ο筌浖y試的基本概念 1.什么是面向?qū)ο蟮能浖y試 面向?qū)ο蟪绦虻慕Y(jié)構(gòu)不再是傳統(tǒng)的功能模塊結(jié)構(gòu),作為一個整體,原有集成測試所要求的逐步將開發(fā)的模塊搭建在一起進行測試的方法已成為不可能。而且,面向?qū)ο筌浖仐壛藗鹘y(tǒng)的開發(fā)模式,對每個開發(fā)階段都有不同以往的要求和結(jié)果,已經(jīng)不可能用功能細化的觀點來檢測面向?qū)ο蠓治龊驮O(shè)計的結(jié)果。因此,傳統(tǒng)的測試模型對面向?qū)ο筌浖呀?jīng)不再適用。針對面向?qū)ο筌浖拈_發(fā)特點,應(yīng)該有一種新的測試模型。第八章面向?qū)ο蟮能浖y試8.1.3向?qū)ο筌浖y試的基本概念 2.面向?qū)ο鬁y試與傳統(tǒng)測試的區(qū)別 傳統(tǒng)測試模式與面向?qū)ο蟮臏y試模式的最主要的區(qū)別在于,面向?qū)ο蟮臏y試更關(guān)注對象而不是完成輸入/輸出的單一功能,這樣的話測試可以在分析與設(shè)計階段就先行介入,便得測試更好的配合軟件生產(chǎn)過程并為之服務(wù)。與傳統(tǒng)測試模式相比,面向?qū)ο鬁y試的優(yōu)點在于:更早地定義出測試用例;早期介入可以降低成本;盡早的編寫系統(tǒng)測試用例以便于開發(fā)人員與測試人員對系統(tǒng)需求的理解保持一致;面向?qū)ο蟮臏y試模式更注重于軟件的實質(zhì)。具體有如下不同: (1)測試的對象不同:傳統(tǒng)軟件測試的對象是面向過程的軟件,一般用結(jié)構(gòu)化方法構(gòu) 建;面向?qū)ο鬁y試的對象是面向?qū)ο筌浖?,采用面向?qū)ο蟮母拍詈驮瓌t,用面向?qū)ο蟮姆椒?gòu)建。 (2)測試的基本單位不同:前者是模塊;面向?qū)ο鬁y試的基本單元是類和對象。 (3)測試的方法和策略不同:傳統(tǒng)軟件測試采用白盒測試,黑盒測試,路徑覆蓋等方 法;面向?qū)ο鬁y試不僅吸納了傳統(tǒng)測試方法,也采用各種類測試等方法,而且集成測試和系統(tǒng)測試的方法和策略也很不相同。第八章面向?qū)ο蟮能浖y試8.1.3向?qū)ο筌浖y試的基本概念 3.面向?qū)ο鬁y試模型(Object-OrientTestModel)

現(xiàn)代的軟件開發(fā)工程是將整個軟件開發(fā)過程明確的劃分為幾個階段,將復(fù)雜問題具體按階段加以解決。這樣,在軟件的整個開發(fā)過程中,可以對每一階段提出若干明確的監(jiān)控點,作為各階段目標(biāo)實現(xiàn)的檢驗標(biāo)準(zhǔn),從而提高開發(fā)過程的可見度和保證開發(fā)過程的正確性。實踐證明軟件的質(zhì)量不僅是體現(xiàn)在程序的正確性上,它和編碼以前所做的需求分析,軟件設(shè)計也密切相關(guān)。這時,對錯誤的糾正往往不能通過可能會誘發(fā)更多錯誤的簡單的修修補補,而必須追溯到軟件開發(fā)的最初階段。因此,為了保證軟件的質(zhì)量,應(yīng)該著眼于整個軟件生存期,特別是著眼于編碼以前的各開發(fā)階段的工作。于是,軟件測試的概念和實施范圍必須擴充,應(yīng)該包括在整個開發(fā)各階段的復(fù)查、評估和檢測。由此,廣義的軟件測試實際是由確認(rèn)、驗證、測試三個方面組成。第八章面向?qū)ο蟮能浖y試8.1.3向?qū)ο筌浖y試的基本概念

確認(rèn):是評估將要開發(fā)的軟件產(chǎn)品是否是正確無誤、可行和有價值的。比如,將要開發(fā)的軟件是否會滿足用戶提出的要求,是否能在將來的實際使用環(huán)境中正確穩(wěn)定的運行,是否存在隱患等。這里包含了對用戶需求滿足程度的評價。確認(rèn)意味著確保一個待開發(fā)軟件是正確無誤的,是對軟件開發(fā)構(gòu)想的檢測。 驗證:是檢測軟件開發(fā)的每個階段、每個步驟的結(jié)果是否正確無誤,是否與軟件開發(fā)各階段的要求或期望的結(jié)果相一致。驗證意味著確保軟件是會正確無誤的實現(xiàn)軟件的需求,開發(fā)過程是沿著正確的方向在進行。 測試:與狹隘的測試概念統(tǒng)一。通常是經(jīng)過單元測試、集成測試、系統(tǒng)測試三個環(huán)節(jié)。 在整個軟件生存期,確認(rèn)、驗證、測試分別有其側(cè)重的階段。確認(rèn)主要體現(xiàn)在計劃階段、需求分析階段、也會出現(xiàn)在測試階段;驗證主要體現(xiàn)在設(shè)計階段和編碼階段;測試主要體現(xiàn)在編碼階段和測試階段。事實上,確認(rèn)、驗證、測試是相輔相成的。確認(rèn)無疑會產(chǎn)生驗證和測試的標(biāo)準(zhǔn),而驗證和測試通常又會幫助完成一些確認(rèn),特別是在系統(tǒng)測試階段。第八章面向?qū)ο蟮能浖y試8.1.3向?qū)ο筌浖y試的基本概念

和傳統(tǒng)測試模型類似,面向?qū)ο筌浖臏y試遵循在軟件開發(fā)各過程中不間斷測試的思想,使開發(fā)階段的測試與編碼完成后的一系列測試融為一體。在開發(fā)的每一階段進行不同級別、不同類型的測試,從而形成一條完整的測試鏈。根據(jù)面向?qū)ο蟮拈_發(fā)模型,結(jié)合傳統(tǒng)的測試步驟的劃分,形成了一種整個軟件開發(fā)過程中不斷進行測試的測試模型,使開發(fā)階段的測試與編碼完成后的單元測試、集成測試、系統(tǒng)測試成為一個整體。面向?qū)ο蟮拈_發(fā)模型突破了傳統(tǒng)的瀑布模型,將開發(fā)分為面向?qū)ο蠓治觯∣OA),面向?qū)ο笤O(shè)計(OOD),和面向?qū)ο缶幊蹋∣OP)三個階段。分析階段產(chǎn)生整個問題空間的抽象描述,在此基礎(chǔ)上,進一步歸納出適用于面向?qū)ο缶幊陶Z言的類和類結(jié)構(gòu),最后形成代碼。由于面向?qū)ο蟮奶攸c,采用這種開發(fā)模型能有效的將分析設(shè)計的文本或圖表代碼化,不斷適應(yīng)用戶需求的變動。針對這種開發(fā)模型,結(jié)合傳統(tǒng)的測試步驟的劃分,本文建議一種整個軟件開發(fā)過程中不斷測試的測試模型,使開發(fā)階段的測試與編碼完成后的單元測試、集成測試、系統(tǒng)測試成為一個整體。測試模型如下圖所示:第八章面向?qū)ο蟮能浖y試8.1.3向?qū)ο筌浖y試的基本概念

圖8-1面向?qū)ο鬁y試結(jié)構(gòu)圖0面向?qū)ο缶幊蘋OATest:面向?qū)ο蠓治龅臏y試OODTest:面向?qū)ο笤O(shè)計的測試OOPTest:面向?qū)ο缶幊痰臏y試OOUnitTest:面向?qū)ο髥卧獪y試OOIntegrateTest:面向?qū)ο蠹蓽y試OOSystemTest:面向?qū)ο笙到y(tǒng)測試第八章面向?qū)ο蟮能浖y試8.1.3向?qū)ο筌浖y試的基本概念

在面向?qū)ο筌浖y試中,OOA(面向?qū)ο蠓治觯┤娴貙栴}空間中實現(xiàn)的功能進行現(xiàn)實抽象化,將問題空間中的實例抽象為對象,用對象的結(jié)構(gòu)反映問題空間的復(fù)雜關(guān)系,用屬性和服務(wù)表示實例的特殊性和行為。OOA的結(jié)果是為后面階段類的選定和實現(xiàn)、類層次結(jié)構(gòu)的組織和實現(xiàn)提供平臺。其測試重點在于完整性和冗余性,包括對認(rèn)定對象的測試、對認(rèn)定結(jié)構(gòu)的測試、對認(rèn)定主題的測試、對定義的屬性和實例關(guān)聯(lián)的測試,對定義的服務(wù)和消息關(guān)聯(lián)的測試。OOD(面向?qū)ο笤O(shè)計)建立類結(jié)構(gòu)或進一步構(gòu)造類庫,實現(xiàn)分析結(jié)果對問題空間的抽象。OOD確定類和類結(jié)構(gòu)不僅能夠滿足當(dāng)前需求分析的要求,更主要的是通過重新組合或加以適當(dāng)?shù)难a充,方便實現(xiàn)功能的重用和擴增。包括測試認(rèn)定的類、測試類層次結(jié)構(gòu)(類的泛化繼承和關(guān)聯(lián))和測試類庫。OOP(面向?qū)ο髮嵤┦擒浖挠嬎銠C實現(xiàn),根據(jù)面向?qū)ο筌浖奶匦?,可以忽略類功能實現(xiàn)的細節(jié),將測試集中在類功能的實現(xiàn)和相應(yīng)的面向?qū)ο蟪绦蝻L(fēng)格即數(shù)據(jù)成員的封裝性測試和類的功能性測試上。如果程序是用C++等面向?qū)ο笳Z言實現(xiàn),主要就是對類成員函數(shù)的測試。第八章面向?qū)ο蟮能浖y試8.1.3向?qū)ο筌浖y試的基本概念

面向?qū)ο髥卧獪y試是進行面向?qū)ο蠹蓽y試的基礎(chǔ)。面向?qū)ο蠹蓽y試主要對系統(tǒng)內(nèi)部的相互服務(wù)進行測試,如成員函數(shù)間的相互作用,類間的消息傳遞等。面向?qū)ο蠹蓽y試不但要基于面向?qū)ο髥卧獪y試,更要參見OOD或OODTest結(jié)果。面向?qū)ο笙到y(tǒng)測試是基于面向?qū)ο蠹蓽y試的最后階段的測試,主要以用戶需求為測試標(biāo)準(zhǔn),需要借鑒OOA或OOATest結(jié)果。第八章面向?qū)ο蟮能浖y試8.2面向?qū)ο鬁y試的內(nèi)容與范圍

面向?qū)ο筌浖y試各階段的測試構(gòu)成一個相互作用的整體,但其測試的主體、方向和方法各有不同,本文接下來將從面向?qū)ο蠓治龅臏y試,面向?qū)ο笤O(shè)計的測試,面向?qū)ο缶幊痰臏y試,面向?qū)ο髥卧獪y試,面向?qū)ο蠹蓽y試,面向?qū)ο笙到y(tǒng)測試六個方面分別介紹對面向?qū)ο筌浖臏y試。第八章面向?qū)ο蟮能浖y試8.2面向?qū)ο鬁y試的內(nèi)容與范圍8.2.1面向?qū)ο蠓治龅臏y試(OOATest)8.2.2面向?qū)ο笤O(shè)計的測試(OODTest)

8.2.3面向?qū)ο缶幊痰臏y試(OOPTest)8.2.4面向?qū)ο蟮膯卧獪y試(OOUnitTest)8.2.5面向?qū)ο蟮募蓽y試(OOIntegrateTest)

8.2.6面向?qū)ο蟮南到y(tǒng)測試(OOSystemTest)8.2.7面向?qū)ο蟮钠渌麥y試

第八章面向?qū)ο蟮能浖y試8.2.1面向?qū)ο蠓治龅臏y試(OOATest)

傳統(tǒng)的面向過程分析是一個功能分解的過程,是把一個系統(tǒng)看成可以分解的功能的集合。這種傳統(tǒng)的功能分解分析法的著眼點在于一個系統(tǒng)需要什么樣的信息處理方法和過程,以過程的抽象來對待系統(tǒng)的需要。而面向?qū)ο蠓治觯∣OA)是"把E-R圖和語義網(wǎng)絡(luò)模型,即信息造型中的概念,與面向?qū)ο蟪绦蛟O(shè)計語言中的重要概念結(jié)合在一起而形成的分析方法",最后通常是得到問題空間的圖表的形式描述。

OOA直接映射問題空間,全面的將問題空間中實現(xiàn)功能的現(xiàn)實抽象化。將問題空間中的實例抽象為對象(不同于C++中的對象概念),用對象的結(jié)構(gòu)反映問題空間的復(fù)雜實例和復(fù)雜關(guān)系,用屬性和服務(wù)表示實例的特性和行為。對一個系統(tǒng)而言,與傳統(tǒng)分析方法產(chǎn)生的結(jié)果相反,行為是相對穩(wěn)定的,結(jié)構(gòu)是相對不穩(wěn)定的,這更充分反映了現(xiàn)實的特性。OOA的結(jié)果是為后面階段類的選定和實現(xiàn),類層次結(jié)構(gòu)的組織和實現(xiàn)提供平臺。因此,OOA對問題空間分析抽象的不完整,最終會影響軟件的功能實現(xiàn),導(dǎo)致軟件開發(fā)后期大量可避免的修補工作;而一些冗余的對象或結(jié)構(gòu)會影響類的選定、程序的整體結(jié)構(gòu)或增加程序員不必要的工作量。因此,本文對OOA的測試重點在其完整性和冗余性。第八章面向?qū)ο蟮能浖y試8.2.1面向?qū)ο蠓治龅臏y試(OOATest)

盡管OOA的測試是一個不可分割的系統(tǒng)過程,為敘述的方便,對OOA階段的測試劃分為以下五個方面:對確定類和對象的范圍的測試對確定結(jié)構(gòu)范圍的測試對確定主題范圍的測試對確定屬性和實例關(guān)聯(lián)的測試對確定服務(wù)和消息關(guān)聯(lián)的測試第八章面向?qū)ο蟮能浖y試8.2.1面向?qū)ο蠓治龅臏y試(OOATest)

1.對確定類和對象的范圍的測試 確定類與對象就是在實際問題的分析中高度地抽象和封裝能反映問題域和系統(tǒng)任務(wù)的特征的類和對象。對它的測試可以從如下方面考慮:

⑴抽象的對象是否全面,是否是現(xiàn)實問題空間中所有涉及到的實例都反映在認(rèn)定的抽象對象中。

⑵抽象出的對象是否具有多個屬性。只有一個屬性的對象通常應(yīng)看成其他對象的屬性,而不是抽象為獨立的對象。

⑶對抽象為同一對象的實例是否有共同的,區(qū)別于其他實例的共同屬性。

⑷對抽象為同一對象的實例是否提供或需要相同的服務(wù),如果服務(wù)隨著不同的實例而變化,認(rèn)定的對象就需要分解或利用繼承性來分類表示。

(5)抽象的對象的名稱應(yīng)該盡量準(zhǔn)確,適用。第八章面向?qū)ο蟮能浖y試8.2.1面向?qū)ο蠓治龅臏y試(OOATest)

如何在眾多調(diào)查資料中進行分析并確定類與對象呢?解決這一問題的方法一般包含如下幾個方面:

(1)基礎(chǔ)素材。系統(tǒng)調(diào)查的所有圖表、文件、說明以及分析人員的經(jīng)驗、學(xué)識都是OOA分析的基礎(chǔ)素材。

(2)潛在的對象。在對基礎(chǔ)素材的分析中,哪種內(nèi)容是潛在的,并且有可能被抽象地封裝成對象與類呢?一般說來下列因素都是潛在的對象:結(jié)構(gòu)、業(yè)務(wù)、系統(tǒng)、實體、應(yīng)記憶的事件等。

(3)確定對象。初步分析選定對象以后,就通過一個對象和其它對象之間關(guān)系的角度來進行檢驗,并最后確定它。

(4)圖形表示。用圖形化方法表示確定的對象和類。第八章面向?qū)ο蟮能浖y試8.2.1面向?qū)ο蠓治龅臏y試(OOATest)

2.對確定結(jié)構(gòu)范圍的測試 結(jié)構(gòu)表示問題空間的復(fù)雜程度。標(biāo)識結(jié)構(gòu)的目的是便于管理問題域模型。在OOA中,結(jié)構(gòu)是指泛化-特化結(jié)構(gòu)和整體-部分結(jié)構(gòu)兩部分的總和。 (1)確定泛化-特化結(jié)構(gòu)(分類結(jié)構(gòu)) 泛化-特化結(jié)構(gòu)有助于刻畫出問題空間的類成員層次。繼承的概念是泛化-特化結(jié)構(gòu)的一個重要組成部分。繼承提供了一個用于標(biāo)識和表示公共屬性與服務(wù)的顯式方法。在一個泛化-特化結(jié)構(gòu)內(nèi),繼承使共享屬性或共享服務(wù)、增加屬性或增加服務(wù)成為可能。 定義泛化-特化結(jié)構(gòu)時,要分析在問題空間和系統(tǒng)責(zé)任的范圍內(nèi),通用類是否表達了專用類的共性,專用類是否表示了個性。 圖8-2給出的是泛化-特化結(jié)構(gòu)。其中,“發(fā)表的文章”和“接受的文章”是特殊化類,“文章”是一般化類。特殊化類是一般化類的派生類,一般化類是特殊化類的基類。分類結(jié)構(gòu)具有繼承性,一般化類和對象的屬性和服務(wù)一旦被識別,即可在特殊化類和對象中使用。文章發(fā)表的文章接受的文章

第八章面向?qū)ο蟮能浖y試8.2.1面向?qū)ο蠓治龅臏y試(OOATest)

文章發(fā)表的文章接受的文章

圖8-2泛化-特化結(jié)構(gòu)圖第八章面向?qū)ο蟮能浖y試8.2.1面向?qū)ο蠓治龅臏y試(OOATest)

(2)確定整體-部分結(jié)構(gòu)(組裝結(jié)構(gòu)) 整體-部分結(jié)構(gòu)表示一個對象怎樣作為別的對象的一部分,和對象怎樣組成更大的對象,與我們在系統(tǒng)工程中劃分子系統(tǒng)結(jié)構(gòu)的思路基本一致。圖8-3說明報社是由采訪組、編輯室和印刷廠等幾個部門組成,同時也指出,一個報社只有一個編輯室,一個印刷廠,但可以有一至多個采訪組。第八章面向?qū)ο蟮能浖y試8.2.1面向?qū)ο蠓治龅臏y試(OOATest)

1報社

采訪組編輯室印刷廠

11

1,m1

圖8-3整體-部分結(jié)構(gòu)1分類結(jié)構(gòu)體現(xiàn)了問題空間中實例的一般與特殊的關(guān)系,組裝結(jié)構(gòu)體現(xiàn)了問題空間中實例整體與局部的關(guān)系。第八章面向?qū)ο蟮能浖y試8.2.1面向?qū)ο蠓治龅臏y試(OOATest)

(3)從如下方面對認(rèn)定的分類結(jié)構(gòu)的測試。 自上而下的派生關(guān)系:對于結(jié)構(gòu)中的一種對象,尤其是處于高層的對象,是否能 派生出下一層對象。 自底向上的抽象關(guān)系:對于結(jié)構(gòu)中的一種對象,尤其是處于同一底層的對象,是否 能抽象出在現(xiàn)實中有意義的更一般的上層對象。 (4)從如下方面對認(rèn)定的組裝結(jié)構(gòu)的測試。 整體(對象)和部件(對象)的組裝關(guān)系是否符合現(xiàn)實的關(guān)系。 整體(對象)的部件(對象)是否在考慮的問題空間中有實際應(yīng)用。 整體(對象)中是否遺漏了反映在問題空間中有用的部件(對象)。 部件(對象)是否能夠在問題空間中組裝新的有現(xiàn)實意義的整體(對象)。第八章面向?qū)ο蟮能浖y試8.2.1面向?qū)ο蠓治龅臏y試(OOATest)

3.對確定主題范圍的測試 在OOA中主題是一種指導(dǎo)研究和處理大型復(fù)雜模型的機制。它有助于分解系統(tǒng),區(qū)別結(jié)構(gòu),避免過多的信息量同時出現(xiàn)所帶來的麻煩。主題的確定可以幫助人們從一個更高的層次上來觀察和表達系統(tǒng)的總體模型。主題如同文章對各部分內(nèi)容的概要。對主題層的測試應(yīng)該考慮以下方面: (1)貫徹GeorgeMiller的"7+2"原則。即如果主題個數(shù)超過7個,就要求對有較密切屬性和服務(wù)的主題進行歸并。 (2)主題所反映的一組對象和結(jié)構(gòu)是否具有相同和相近的屬性和服務(wù)。 (3)認(rèn)定的主題是否是對象和結(jié)構(gòu)更高層的抽象,是否便于理解OOA結(jié)果的概貌(尤其是對非技術(shù)人員的OOA結(jié)果讀者)。 (4)主題間的消息聯(lián)系(抽象)是否代表了主題所反映的對象和結(jié)構(gòu)之間的所有關(guān)聯(lián)。 在測試中,首先應(yīng)該考慮:為每一個結(jié)構(gòu)相應(yīng)地增設(shè)一個主題;為每一個對象相應(yīng)地增設(shè)一個主題。如果主題的個數(shù)過多,則需進一步精煉主題。根據(jù)需要,可以把緊耦合的主題合在一起抽象一個更高層次的模型概念供讀者理解。然后,列出主題及主題層上各主題之間的消息連接。最后,對主題進行編號,在層次圖上列出主題以指導(dǎo)讀者從一個主題到另一個主題。每一層都組織成按主題劃分的圖。第八章面向?qū)ο蟮能浖y試8.2.1面向?qū)ο蠓治龅臏y試(OOATest)

4.對確定屬性和實例關(guān)聯(lián)的測試 在OOA中屬性被用來定義反映問題域的特點的任務(wù)。定義屬性是通過確認(rèn)信息和關(guān)系來完成的,它們和每個實例有關(guān)。對屬性和實例關(guān)聯(lián)的測試從如下方面考慮: (1)定義的屬性是否對相應(yīng)的對象和分類結(jié)構(gòu)的每個現(xiàn)實實例都適用。 (2)定義的屬性在現(xiàn)實世界是否與這種實例關(guān)系密切。 (3)定義的屬性在問題空間是否與這種實例關(guān)系密切。 (4)定義的屬性是否能夠不依賴于其他屬性被獨立理解。 (5)定義的屬性在分類結(jié)構(gòu)中的位置是否恰當(dāng),低層對象的共有屬性是否在上層對象屬性體現(xiàn)。 (6)在問題空間中每個對象的屬性是否定義完整。 (7)定義的實例關(guān)聯(lián)是否符合現(xiàn)實。 (8)在問題空間中實例關(guān)聯(lián)是否定義完整,特別需要注意一對多和多對多的實例關(guān)聯(lián)。 具體方法如下:第八章面向?qū)ο蟮能浖y試8.2.1面向?qū)ο蠓治龅臏y試(OOATest)

①確定屬性的范圍 首先要確定劃分給每一個對象的屬性,明確某個屬性究竟描述哪個對象,要保證最大穩(wěn)定性和模型的一致性,其次,確定屬性的層次,通用屬性應(yīng)放在結(jié)構(gòu)的高層,特殊屬性放在低層。如果一個屬性適用于大多數(shù)的特殊分類,可將其放在通用的地方,然后在不需要的地方把它覆蓋(即用“X”等記號指出不需要繼承該屬性),如果發(fā)現(xiàn)某個屬性的值有時有意義,有時卻不適用,則應(yīng)考慮分類結(jié)構(gòu),根據(jù)發(fā)現(xiàn)的屬性,還可以進一步修訂對象。②實例連接 實例連接是一個問題域的映射模型,該模型反映了某個對象對其它對象的需求。通過實例連接可以加強屬性對類與狀態(tài)的描述能力。 實例連接有一對一(1:1)、一對多(1:M)和多對多(M:M)三種,分別表示一個實例可對應(yīng)一個或多個實例,這種性質(zhì)叫多重性。例如,一個車主擁有一輛汽車,則車主到汽車的實例連接是1:1的;一個車主擁有多輛汽車,則是1:M的。 實例連接的表示方法非常簡單,只需在原類和對象的基礎(chǔ)上用直線相連接,并在直線的兩端用數(shù)字標(biāo)志出它們之間的上下限關(guān)系即可。例如在車輛和執(zhí)照事故管理系統(tǒng)中,可以將車輛擁有者和法律事件兩個類&對象實例連接如圖8-4形式。第八章面向?qū)ο蟮能浖y試8.2.1面向?qū)ο蠓治龅臏y試(OOATest)

1,mm,1ownerperson

telephone

legaleventregistrationdate

圖8-4車輛擁有者和法律事件的實例連接③詳細說明屬性和實例連接的約束用名字和描述說明屬性,屬性可分成四類;描述性的、定義性的、永遠可導(dǎo)出的和偶而可導(dǎo)出的。實例連接的約束是指多重性與參與性。第八章面向?qū)ο蟮能浖y試8.2.1面向?qū)ο蠓治龅臏y試(OOATest)

5.對確定服務(wù)和消息關(guān)聯(lián)的測試 對象收到消息后所能執(zhí)行的操作稱為它可提供的服務(wù)。它描述了系統(tǒng)需要執(zhí)行的處理和功能。定義服務(wù)的目的在于定義對象的行為和對象之間的通信(消息連接)。事實上,兩個對象之間可能存在著由于通信需要而形成的關(guān)系,即為消息連接。消息連接表示從一個對象發(fā)送消息到另一個對象,由那個對象完成某些處理。 確定服務(wù)的具體解決方法主要包括四個基本步驟:在分析中識別對象狀態(tài);識別所要求的服務(wù);識別消息連接和指定服務(wù)。 (1)識別對象狀態(tài) 在系統(tǒng)運行過程中,對象從被創(chuàng)建到釋放要經(jīng)歷多種不同的狀態(tài)。對象的狀態(tài)是由屬性的值來決定和表示的。一個對象狀態(tài)是屬性值的標(biāo)識符,它反映了對象行為的改變。 識別對象狀態(tài)的方法一般通過檢查每一個屬性的所有可能取值,確定系統(tǒng)的職責(zé)是否針對這些可能的值會有不同的行為;檢查在相同或類似的問題論域中以前的分析結(jié)果,看是否有可直接復(fù)用的對象狀態(tài);利用狀態(tài)遷移圖描述狀態(tài)及其變化。第八章面向?qū)ο蟮能浖y試8.2.1面向?qū)ο蠓治龅臏y試(OOATest)

(2)識別所要求的服務(wù) 必要的服務(wù)可分為兩大類:簡單的服務(wù)和復(fù)雜的服務(wù)。 簡單的服務(wù)是每一個類或?qū)ο蠖紤?yīng)具備這樣的服務(wù),在分析模型中,這些服務(wù)不必畫出,如建立和初始化一個新對象,釋放或刪除一個對象等。 復(fù)雜的服務(wù)分為兩種:計算服務(wù)和監(jiān)控服務(wù),必須在分析模型中顯式地給出,計算服務(wù)是利用對象的屬性值計算,以實現(xiàn)某種功能;監(jiān)控服務(wù)主要處理對外部系統(tǒng)的輸入/輸出,外部設(shè)備的控制和數(shù)據(jù)的存取。 為了標(biāo)識必要的服務(wù),需要注意檢查每一個對象的所有狀態(tài),確定此對象在不同的狀態(tài)值下要負(fù)責(zé)執(zhí)行哪些計算、要做哪些監(jiān)控,以便能夠弄清外部系統(tǒng)或設(shè)備的狀態(tài)將如何改變,對這些改變應(yīng)當(dāng)做什么響應(yīng);檢查在相同或類似的問題論域中以前的分析結(jié)果,看是否有可直接復(fù)用的服務(wù)。第八章面向?qū)ο蟮能浖y試8.2.1面向?qū)ο蠓治龅臏y試(OOATest)

(3)識別消息連接 消息連接是指從一個對象向另一個對象發(fā)送消息,并且使得某一處理功能,所需的處理是在發(fā)送對象的方法中指定的,并且在接收對象的方法中詳細定義了的。 識別消息連接的方法及策略是檢查在相同或類似的問題論域中以前分析的結(jié)果,看是否有可復(fù)用的消息連接。對于每一個對象,查詢該對象需要哪些對象的服務(wù),從該對象畫一箭頭到那個對象;查詢哪個對象需要該對象的服務(wù),從那個對象畫一箭頭到該對象;循消息連接找到下一個對象,重復(fù)以上步驟直至檢查完全部對象。當(dāng)一個對象將一個消息傳送給另一個對象時,另一個對象又可傳送一個消息給另一個對象,如此下去就可得到一條執(zhí)行線索。檢查所有的執(zhí)行線索,確定哪些是關(guān)鍵執(zhí)行線索,以檢查模型的完備性。 (4)定義服務(wù) 在確定了對象的狀態(tài)、所要執(zhí)行的內(nèi)容和消息后,具體如何執(zhí)行操作呢?OOA提供了模板式的方法描述方式。這是一種類似程序框圖的工具。它主要用定義方法和定義例示來實現(xiàn)。如圖8-5所示。第八章面向?qū)ο蟮能浖y試8.2.1面向?qū)ο蠓治龅臏y試(OOATest)

Specificationattribute條件

…(if,precondition,trigger,terminate)

externalinputexternaloutput正文塊

additionalconstraints(context)

notes

method(name&methodchart)循環(huán)

…(while,do,repeat,trrgger/terminate)traceabilitycodes

applicablestorecodes連接

timerequirements(connection)圖8-5定義方法和定義例示

圖8-5定義方法和定義例示

(b)

第八章面向?qū)ο蟮能浖y試8.2.1面向?qū)ο蠓治龅臏y試(OOATest)

對定義的服務(wù)和消息關(guān)聯(lián)的測試從如下方面進行:對象和結(jié)構(gòu)在問題空間的不同狀態(tài)是否定義了相應(yīng)的服務(wù)。對象或結(jié)構(gòu)所需要的服務(wù)是否都定義了相應(yīng)的消息關(guān)聯(lián)。定義的消息關(guān)聯(lián)所指引的服務(wù)提供是否正確。沿著消息關(guān)聯(lián)執(zhí)行的線程是否合理,是否符合現(xiàn)實過程。定義的服務(wù)是否重復(fù),是否定義了能夠得到的服務(wù)。第八章面向?qū)ο蟮能浖y試8.2.2面向?qū)ο笤O(shè)計的測試(OODTest)

面向?qū)ο笤O(shè)計(OOD)是以O(shè)OA為基礎(chǔ)歸納出的類為基礎(chǔ),建立類結(jié)構(gòu)甚至進一步構(gòu)造成類庫,實現(xiàn)了分析結(jié)果對問題空間的抽象。OOD歸納的類,可以是對象簡單的延續(xù),也可以是不同對象的相同或相似的服務(wù)。OOD確定類和類結(jié)構(gòu)不僅是滿足當(dāng)前需求分析的要求,更重要的是通過重新組合或加以適當(dāng)?shù)难a充或刪減,能方便實現(xiàn)功能的重用和擴增,以不斷適應(yīng)用戶的要求。OOD的基本目標(biāo)是改進設(shè)計、增進軟件生產(chǎn)效率、提高軟件質(zhì)量以及加強可維護性。如果模型的質(zhì)量很高對項目來說就很有價值,但是如果模型有錯誤,那么它對項目的危害就無可估量。 以下面向?qū)ο笤O(shè)計模型是由Coad和Yourdon提出的。該模型由四個部分和五個層次組成。如下圖8-6所示。第八章面向?qū)ο蟮能浖y試8.2.2面向?qū)ο笤O(shè)計的測試(OODTest)

數(shù)據(jù)管理部件主題層

結(jié)構(gòu)層

操作層

服務(wù)層人機交互部件數(shù)據(jù)管理部件任務(wù)管理部件類與對象層

圖8-6OOD系統(tǒng)模型其四個組成部分是問題空間部件(ProblemDomainComponent,簡稱PDC)、人機交互部件(HumanInteractionComponent,簡稱HIC)、任務(wù)管理部件(TaskManagementComponent,簡稱TMC)和數(shù)據(jù)管理部件(DataManagementComponent,簡稱DMC)。五個層次是主題層、類與對象層、結(jié)構(gòu)層、屬性層和服務(wù)層,這五個層次分別對應(yīng)Coad的面向?qū)ο蠓治龇椒ㄖ械拇_定對象、確定結(jié)構(gòu)、定義主題、定義屬性、確定服務(wù)等行動。第八章面向?qū)ο蟮能浖y試8.2.2面向?qū)ο笤O(shè)計的測試(OODTest)

所以,對OOD的測試,建議從如下方面考慮:確定測試的問題域。人機交互部分設(shè)計的測試對認(rèn)定的類的測試。對構(gòu)造的類層次結(jié)構(gòu)的測試。對類庫的支持的測試。對測試結(jié)果以及對模型的測試覆蓋率(基于某中標(biāo)準(zhǔn))進行評估。第八章面向?qū)ο蟮能浖y試8.2.2面向?qū)ο笤O(shè)計的測試(OODTest)

1.

確定測試的問題域 在面向?qū)ο笤O(shè)計中,面向?qū)ο蠓治觯∣OA)的結(jié)果恰好符合面向?qū)ο笤O(shè)計(OOD)的問題空間部分,因此,OOA的結(jié)果就是OOD部分模型中的一個完整部分。但是,為了解決一些特定設(shè)計所需要考慮的實際變化,可能要對OOA結(jié)果進行一些改進和增補。主要是根據(jù)需求的變化,對OOA產(chǎn)生模型中的某些類與對象、結(jié)構(gòu)、屬性、操作進行組合與分解。要考慮對時間與空間的折衷、內(nèi)存管理、開發(fā)人員的變更、以及類的調(diào)整等。另外,根據(jù)OOD的附加原則,增加必要的類、屬性和關(guān)系。 (1)復(fù)用設(shè)計 根據(jù)問題解決的需要,把從類庫或其他來源得到的既存類增加到問題解決方案中去。既存類可以是用面向?qū)ο蟪绦蛘Z言編寫出來的,也可以是用其他語言編寫出來的可用程序。要求標(biāo)明既存類中不需要的屬性和操作,把無用的部分維持到最小限度。并且增加從既存類到應(yīng)用類之間的泛化-特化的關(guān)系。進一步地,把應(yīng)用中因繼承既存類而成為多余的屬性和操作標(biāo)出。還要修改應(yīng)用類的結(jié)構(gòu)和連接,必要時把它們變成可復(fù)用的既存類。第八章面向?qū)ο蟮能浖y試8.2.2面向?qū)ο笤O(shè)計的測試(OODTest)

(2)把問題論域相關(guān)的類關(guān)聯(lián)起來 在設(shè)計時,從類庫中引進一個根類,做為包容類,把所有與問題論域有關(guān)的類關(guān)聯(lián)到一起,建立類的層次。把同一問題論域的一些類集合起來,存于類庫中。 (3)加入一般化類以建立類間協(xié)議 有時,某些特殊類要求一組類似的服務(wù)。在這種情況下,應(yīng)加入一個一般化的類,定義為所有這些特殊類共用的一組服務(wù)名,這些服務(wù)都是虛函數(shù)。在特殊類中定義其實現(xiàn)。 (4)調(diào)整繼承支持級別 在OOA階段建立的對象模型中可能包括有多繼承關(guān)系,但實現(xiàn)時使用的程序設(shè)計語言可能只有單繼承,甚至沒有繼承機制,這樣就需對分析的結(jié)果進行修改??赏ㄟ^對把特殊類的對象看做是一個一般類對象所扮演的角色,通過實例連接把多繼承的層次結(jié)構(gòu)轉(zhuǎn)換為單繼承的層次結(jié)構(gòu);把多繼承的層次結(jié)構(gòu)平鋪,成為單繼承的層次結(jié)構(gòu)等方法。第八章面向?qū)ο蟮能浖y試8.2.2面向?qū)ο笤O(shè)計的測試(OODTest)

(5)改進性能 提高執(zhí)行效率和速度是系統(tǒng)設(shè)計的主要指標(biāo)之一。有時,必須改變問題論域的結(jié)構(gòu)以提高效率。如果類之間經(jīng)常需要傳送大量消息,可合并相關(guān)的類以減少消息傳遞引起的速度損失。增加某些屬性到原來的類中,或增加低層的類,以保存暫時結(jié)果,避免每次都要重復(fù)計算造成速度損失。 (6)加入較低層的構(gòu)件 在做面向?qū)ο蠓治鰰r,分析員往往專注于較高層的類和對象,避免考慮太多低層的實現(xiàn)細節(jié)。但在做面向?qū)ο笤O(shè)計時,設(shè)計師在找出高層的類和對象時,必須考慮到底需要用到哪些較低層的類和對象。 針對上述問題域的定義,制定如下測試策略: 首先制訂檢查的范圍和深度。范圍將通過描述材料的實體或一系列詳細的用例來定義。對小的項目來說,范圍可以是整個模型。深度將通過指定需要測試的模型(MUT)的某種UML(統(tǒng)一建模語言)圖的集合層次中的級別來定義。 然后為每一個評價標(biāo)準(zhǔn)開發(fā)測試用例,標(biāo)準(zhǔn)在應(yīng)用時使用基本模型的內(nèi)容作為輸入。這種從用戶用例模型出發(fā)的方式對許多模型的測試用例來說是一個很好的出發(fā)點。第八章面向?qū)ο蟮能浖y試8.2.2面向?qū)ο笤O(shè)計的測試(OODTest)

2.人機交互部分的設(shè)計(HIC)的測試 通常在OOA階段給出了所需的屬性和操作,在設(shè)計階段必須根據(jù)需求把交互的細節(jié)加入到用戶界面的設(shè)計中,包括有效的人機交互所必需的實際顯式和輸入。人機交互部分的設(shè)計決策影響到人的感情和精神感受,測試HIC的策略由以下幾方面構(gòu)成:用戶分類;描述人及其任務(wù)的腳本;設(shè)計命令層;設(shè)計詳細的交互;繼續(xù)做原型;設(shè)計HIC類;根據(jù)圖形用戶界面(GUI)進行設(shè)計。 (1)用戶分類 進行用戶分類的目的是明確使用對象,針對不同的使用對象設(shè)計不同的用戶界面,以適合不同用戶的需要。分類的原則有: 按技能層次分類:外行/初學(xué)者/熟練者/專家; 按組織層次分類:行政人員/管理人員/專業(yè)技術(shù)人員/其他辦事員; 按職能分類:顧客/職員。 (2)描述人及其任務(wù)腳本 對以上定義的每一類人,描述其身份、目的、特征、關(guān)鍵的成功因素、熟練程度及任務(wù)劇本。第八章面向?qū)ο蟮能浖y試8.2.2面向?qū)ο笤O(shè)計的測試(OODTest)

例8-1描述分析員: 什么人:分析員 目的:要求一個工具來輔助分析工作(擺脫繁重的畫圖和檢查圖的工作)。 特點:年齡=42歲;教育水平=大學(xué);限制=不要微型打印。 成功的關(guān)鍵因素:工具應(yīng)當(dāng)使分析工作順利進行;工具不應(yīng)與分析工作沖突;工具應(yīng)能捕獲假設(shè)和思想,能適時做出折衷;應(yīng)能及時給出模型各個部分的文檔,這與給出需求同等重要。 熟練程度:專家。 任務(wù)腳本:主腳本-識別“核心的”類和對象;識別“核心”結(jié)構(gòu);在發(fā)現(xiàn)了新的屬性或操作時隨時都可以加進模型中去。檢驗?zāi)P停蛴∧P图捌淙课臋n。 (3)設(shè)計命令層 研究現(xiàn)行的人機交互活動的內(nèi)容和準(zhǔn)則,建立一個初始的命令層,再細化命令層:這時,要考慮:排列命令層次,把使用最頻繁的操作放在前面,按照用戶工作步驟排列;通過逐步分解,找到整體-部分模式,幫助在命令層中對操作進行分塊;根據(jù)人們短期記憶的“”或“每次記憶3塊/每塊3項”的特點,組織命令層中的服務(wù),寬度與深度不宜太大,減少操作步驟。第八章面向?qū)ο蟮能浖y試8.2.2面向?qū)ο笤O(shè)計的測試(OODTest)

(4)設(shè)計詳細的交互 用戶界面設(shè)計有若干原則,一般有:一致性,操作步驟少,不要“啞播放”:即每當(dāng)用戶等待系統(tǒng)完成一個活動時,要給出一些反饋信息,說明工作正在進展,以及進展的程度。:在操作出現(xiàn)錯誤時,要恢復(fù)或部分恢復(fù)原來的狀態(tài)。提供聯(lián)機的幫助信息。并具有趣味性,在外觀和感受上,盡量采用圖形界面,符合人類習(xí)慣,有一定吸引力。 (5)繼續(xù)做原型 做人機交互原型是HIC設(shè)計的基本工作,界面應(yīng)使人花最少的時間去掌握其使用技法,做幾個可候選的原型,讓人們一個一個地試用,要達到“臻于完善”,由衷地滿意。 (6)設(shè)計HIC類 設(shè)計HIC類,從組織窗口和部件地人機交互設(shè)計開始,窗口作基本類、部件作屬性或部分類。特殊窗口作特殊類。每個類包括窗口的菜單條、下拉菜單、彈出菜單的定義,每個類還定義了用來創(chuàng)造菜單、加亮選擇等所需的服務(wù)。第八章面向?qū)ο蟮能浖y試8.2.2面向?qū)ο笤O(shè)計的測試(OODTest)

(7)根據(jù)GUI(圖形用戶界面)進行設(shè)計 圖形用戶界面區(qū)分為字型、坐標(biāo)系統(tǒng)和事件。圖形用戶界面的字型是字體、字號、樣式和顏色的組合。坐標(biāo)系統(tǒng)主要因素有原點(基準(zhǔn)點)、顯式分辨率、顯示維數(shù)等。事件則是圖形用戶界面程序的核心,操作將對事件做出響應(yīng),這些事件可能是來自人的,也可能是來自其他操作的。事件的工作方式有兩種:直接方式和排隊方式。所謂直接方式,是指每個窗口中的項目有它自己的事件處理程序,一旦事件發(fā)生,則系統(tǒng)自動執(zhí)行相應(yīng)的事件處理程序。所謂排隊方式,是指當(dāng)事件發(fā)生時系統(tǒng)把它排到隊列中,每個事件可用一些子程序信息來激發(fā)。應(yīng)用可利用“nextevent”來得到一個事件并執(zhí)行它所需要的一切活動。第八章面向?qū)ο蟮能浖y試8.2.2面向?qū)ο笤O(shè)計的測試(OODTest)

3.對任務(wù)管理部分設(shè)計(TMC)的測試

在OOD中,任務(wù)是指系統(tǒng)為了達到某一設(shè)定目標(biāo)而進行的一連串的數(shù)據(jù)操作(或服務(wù)),若干任務(wù)的并發(fā)執(zhí)行叫做多任務(wù)。任務(wù)能簡化并發(fā)行為的設(shè)計和編碼,TMC的設(shè)計就是針對任務(wù)項,對一連串的數(shù)據(jù)操作進行定義和封裝,對于多任務(wù)要確定任務(wù)協(xié)調(diào)部分,以達到系統(tǒng)在運行中對各項任務(wù)進行合理組織與管理。第八章面向?qū)ο蟮能浖y試8.2.2面向?qū)ο笤O(shè)計的測試(OODTest)

(1)TMC設(shè)計策略①識別事件驅(qū)動任務(wù)。事件驅(qū)動任務(wù)是指睡眠任務(wù)(不占用CPU),當(dāng)某個事件發(fā)生時,任務(wù)被此事件觸發(fā),任務(wù)醒來做相應(yīng)處理,然后又回到睡眠狀態(tài)。②識別時鐘驅(qū)動任務(wù)。按特定的時間間隔去觸發(fā)任務(wù)進行處理,如某些設(shè)備需要周期性的數(shù)據(jù)采集和控制。③識別優(yōu)先任務(wù)和關(guān)鍵任務(wù)。把它們分離開來進行細致的設(shè)計和編碼,保證時間約束或安全性。④識別協(xié)調(diào)者。增加一個任務(wù)來協(xié)調(diào)諸任務(wù),這個任務(wù)可以封裝任務(wù)之間的協(xié)作。⑤審查每個任務(wù),使任務(wù)數(shù)盡可能少。⑥定義每個任務(wù):包括任務(wù)名、驅(qū)動方式、觸發(fā)該任務(wù)的事件、時間間隔、如何通信等。第八章面向?qū)ο蟮能浖y試8.2.2面向?qū)ο笤O(shè)計的測試(OODTest)

(2)設(shè)計步驟①對類和對象進行細化,建立系統(tǒng)的OOA/OOD工作表格。OOA/OOD工作表格包括:某系統(tǒng)可選定的對象的條目,對該對象在OOD部件中位置的說明和注釋等。②審查OOA/OOD工作表格,尋找可能被封裝在TMC中那些與特定平臺有關(guān)的部分以及任務(wù)協(xié)調(diào)部分、通信的從屬關(guān)系、消息、線程序列等。③構(gòu)建新的類。TM部件設(shè)計的首要任務(wù)就是構(gòu)建一些新的類,這些類建立的主要目的是處理并發(fā)執(zhí)行、中斷、調(diào)度以及特定平臺有關(guān)的一些問題。 任務(wù)管理部件一般在信息系統(tǒng)中使用較少,在控制系統(tǒng)中應(yīng)用較多。第八章面向?qū)ο蟮能浖y試8.2.2面向?qū)ο笤O(shè)計的測試(OODTest)

4.對數(shù)據(jù)管理部分設(shè)計(DMC)的測試 數(shù)據(jù)管理部分提供了在數(shù)據(jù)管理系統(tǒng)中存儲和檢索對象的基本結(jié)構(gòu),包括對永久性數(shù)據(jù)的訪問和管理。它分離了數(shù)據(jù)管理機構(gòu)所關(guān)心的事項,包括文件、關(guān)系型DBMS或面向?qū)ο驞BMS等。第八章面向?qū)ο蟮能浖y試8.2.2面向?qū)ο笤O(shè)計的測試(OODTest)

(1)數(shù)據(jù)管理方法 數(shù)據(jù)管理方法主要有3種:文件管理、關(guān)系數(shù)據(jù)庫管理和面向?qū)ο髱鞌?shù)據(jù)管理。

①文件管理:提供基本的文件處理能力。

②關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS):關(guān)系數(shù)據(jù)庫管理系統(tǒng)建立在關(guān)系理論的基礎(chǔ)上,它使用若干表格來管理數(shù)據(jù),使用特定操作,如select(提取某些行)、project(提取某些欄)、join(聯(lián)結(jié)不同表格中的行,再提取某些行)等,可對表格進行剪切和粘貼。通常根據(jù)規(guī)范化的要求,可對表格和它們的各欄重新組織,以減少數(shù)據(jù)冗余,保證修改一致性數(shù)據(jù)不致出錯。

③面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)(OODBMS):通常,面向?qū)ο蟮臄?shù)據(jù)庫管理系統(tǒng)以兩種方法實現(xiàn):一是擴充的RDBMS,二是擴充的面向?qū)ο蟪绦蛟O(shè)計語言(OOPL)。 擴充的RDBMS主要對RDBMS擴充了抽象數(shù)據(jù)類型和繼承性,再加上一些一般用途的操作來創(chuàng)建和操縱類與對象。擴充的OOPL對面向?qū)ο蟪绦蛟O(shè)計語言嵌入了在數(shù)據(jù)庫中長期管理存儲對象的語法和功能。這樣,可以統(tǒng)一管理程序中的數(shù)據(jù)結(jié)構(gòu)和存儲的數(shù)據(jù)結(jié)構(gòu),為用戶提供了一個統(tǒng)一視圖,無需在它們之間做數(shù)據(jù)轉(zhuǎn)換。第八章面向?qū)ο蟮能浖y試8.2.2面向?qū)ο笤O(shè)計的測試(OODTest)

(2)數(shù)據(jù)管理部分的設(shè)計 數(shù)據(jù)存儲管理部分的設(shè)計包括數(shù)據(jù)存放方法的設(shè)計和相應(yīng)操作的設(shè)計。

①數(shù)據(jù)存放設(shè)計 數(shù)據(jù)存放有三種形式:文件存放方式、關(guān)系數(shù)據(jù)庫存放方式和面向?qū)ο髷?shù)據(jù)庫存放方式,根據(jù)具體情況選用。

②設(shè)計相應(yīng)的操作 為每個需要存儲的對象及其類增加用于存儲管理的屬性和操作,在類及對象的定義中加以描述。通過定義,每個需要存儲的對象將知道如何“存儲我自己”。 為能充分發(fā)揮面向?qū)ο蟮睦^承共享特性,OOD的類層次結(jié)構(gòu),通?;贠OA中產(chǎn)生的分類結(jié)構(gòu)的原則來組織,著重體現(xiàn)父類和子類間一般性和特殊性。兩者概念上的差異。在當(dāng)前的問題空間,對類層次結(jié)構(gòu)的主要要求是能在解空間構(gòu)造實現(xiàn)全部功能的結(jié)構(gòu)框架。為此,測試如下方面:第八章面向?qū)ο蟮能浖y試8.2.2面向?qū)ο笤O(shè)計的測試(OODTest)

類層次結(jié)構(gòu)是否含蓋了所有定義的類;是否能體現(xiàn)OOA中所定義的實例關(guān)聯(lián);是否能實現(xiàn)OOA中所定義的消息關(guān)聯(lián);子類是否具有父類沒有的新特性;子類間的共同特性是否完全在父類中得以體現(xiàn)。第八章面向?qū)ο蟮能浖y試8.2.3面向?qū)ο缶幊痰臏y試(OOPTest)

典型的面向?qū)ο蟪绦蚓哂欣^承、封裝和多態(tài)的新特性,這使得傳統(tǒng)的測試策略必須有所改變。封裝是對數(shù)據(jù)的隱藏,外界只能通過被提供的操作來訪問或修改數(shù)據(jù),這樣降低了數(shù)據(jù)被任意修改和讀寫的可能性,降低了傳統(tǒng)程序中對數(shù)據(jù)非法操作的測試。繼承是面向?qū)ο蟪绦虻闹匾攸c,繼承使得代碼的重用率提高,同時也使錯誤傳播的概率提高。繼承使得傳統(tǒng)測試遇見了這樣一個難題:對繼承的代碼究竟應(yīng)該怎樣測試?(參見面向?qū)ο髥卧獪y試)。多態(tài)使得面向?qū)ο蟪绦驅(qū)ν獬尸F(xiàn)出強大的處理能力,但同時卻使得程序內(nèi)“同一”函數(shù)的行為復(fù)雜化,測試時不得不考慮不同類型具體執(zhí)行的代碼和產(chǎn)生的行為。 面向?qū)ο蟪绦蚴前压δ艿膶崿F(xiàn)分布在類中。能正確實現(xiàn)功能的類,通過消息傳遞來協(xié)同實現(xiàn)設(shè)計要求的功能。正是這種面向?qū)ο蟪绦蝻L(fēng)格,將出現(xiàn)的錯誤能精確的確定在某一具體的類。因此,在面向?qū)ο缶幊蹋∣OP)的測試中,忽略類功能實現(xiàn)的細則,將測試的目光集中在類功能的實現(xiàn)和相應(yīng)的面向?qū)ο蟪绦蝻L(fēng)格,主要體現(xiàn)為以下兩個方面(假設(shè)編程使用C++語言)。第八章面向?qū)ο蟮能浖y試8.2.3面向?qū)ο缶幊痰臏y試(OOPTest)

數(shù)據(jù)成員是否滿足數(shù)據(jù)封裝的要求 類是否實現(xiàn)了要求的功能

1.?dāng)?shù)據(jù)成員是否滿足數(shù)據(jù)封裝的要求

數(shù)據(jù)封裝是數(shù)據(jù)和數(shù)據(jù)有關(guān)的操作的集合。檢查數(shù)據(jù)成員是否滿足數(shù)據(jù)封裝的要求,基本原則是數(shù)據(jù)成員是否被外界(數(shù)據(jù)成員所屬的類或子類以外的調(diào)用)直接調(diào)用。更直觀的說,當(dāng)改變數(shù)據(jù)成員的結(jié)構(gòu)時,是否影響了類的對外接口,是否會導(dǎo)致相應(yīng)外界必須改動。值得注意的是有時強制的類型轉(zhuǎn)換會破壞數(shù)據(jù)的封裝特性。第八章面向?qū)ο蟮能浖y試8.2.3面向?qū)ο缶幊痰臏y試(OOPTest)例8-2:classHiden

{private:

inta=1;

char*p="hiden";}

classVisible

{public:

intb=2;

char*s="visible";}

…..

Hidenpp;

Visible*qq=(Visible*)&pp;

在上面的程序段中,pp的數(shù)據(jù)成員可以通過qq被隨意訪問,這就破壞了數(shù)據(jù)的封裝性。第八章面向?qū)ο蟮能浖y試8.2.3面向?qū)ο缶幊痰臏y試(OOPTest) 2.類是否實現(xiàn)了要求的功能

類所實現(xiàn)的功能,都是通過類的成員函數(shù)執(zhí)行。在測試類的功能實現(xiàn)時,應(yīng)該首先保證類成員函數(shù)的正確性。單獨的看待類的成員函數(shù),與面向過程程序中的函數(shù)或過程沒有本質(zhì)的區(qū)別,幾乎所有傳統(tǒng)的單元測試中所使用的方法,都可在面向?qū)ο蟮膯卧獪y試中使用。具體的測試方法在面向?qū)ο蟮膯卧獪y試中介紹。類函數(shù)成員的正確行為只是類能夠?qū)崿F(xiàn)要求的功能的基礎(chǔ),類成員函數(shù)間的作用和類之間的服務(wù)調(diào)用是單元測試無法確定的。因此,需要進行面向?qū)ο蟮募蓽y試。具體的測試方法在面向?qū)ο蟮募蓽y試中介紹。需要注意的是,測試類的功能,不能僅滿足于代碼能無錯運行或被測試類能提供的功能無錯,應(yīng)該以所做的OOD結(jié)果為依據(jù),檢測類提供的功能是否滿足設(shè)計的要求,是否有缺陷。必要時(如通過OOD結(jié)仍不清楚明確的地方)還應(yīng)該參照OOA的結(jié)果,以之為最終標(biāo)準(zhǔn)。第八章面向?qū)ο蟮能浖y試8.2.4面向?qū)ο蟮膯卧獪y試(OOUnitTest)

傳統(tǒng)的單元測試是針對程序的函數(shù)、過程或完成某一定功能的程序塊。面向?qū)ο蟮膯卧獪y試對象是軟件設(shè)計的最小單位——類。單元測試的依據(jù)是詳細設(shè)計,單元測試應(yīng)對類中所有重要的屬性和方法設(shè)計測試用例,以便發(fā)現(xiàn)類內(nèi)部的錯誤。單元測試多采用白盒測試技術(shù),系統(tǒng)內(nèi)多個類塊可以并行地進行測試。沿用單元測試的概念,實際測試類成員函數(shù)。一些傳統(tǒng)的測試方法在面向?qū)ο蟮膯卧獪y試中都可以使用。如等價類劃分法,因果圖法,邊值分析法,邏輯覆蓋法,路徑分析法等等。第八章面向?qū)ο蟮能浖y試8.2.4面向?qū)ο蟮膯卧獪y試(OOUnitTest)1.單元測試的內(nèi)容 面向?qū)ο蟮膯卧褪穷?,單元測試實際就是對類的測試。類測試的目的主要是確保一個類的代碼能夠完全滿足類的說明所描述的要求。對一個類進行測試以確保它只做規(guī)定的事情,對此給與關(guān)注的多少,取決于提供額外的行為的類相關(guān)聯(lián)的風(fēng)險。每個類都封裝了屬性(數(shù)據(jù))和管理這些數(shù)據(jù)的操作(也被稱做方法或服務(wù))。一個類可以包含許多不同的操作,一個特殊的操作可以出現(xiàn)在許多不同的類中,而不是個體的模塊。傳統(tǒng)的單元測試只能測試一個操作(功能),而在面向?qū)ο髥卧獪y試中,一個操作功能只能作為一個類的一部分,類中有多個操作(功能),就要進行多個操作的測試。另外,父類中定義的某個操作被多個子類繼承,不同子類中某個操作在使用時又有細微的不同,所以還必須對每個子類中某個操作進行測試。對類的測試強調(diào)對語句應(yīng)該有100%的執(zhí)行代碼覆蓋率。在運行了各種類的測試用例后,如果代碼的覆蓋率不完整,這可能意味著該類包含了額外的文檔支持的行為,需要增加更多的測試用例來進行測試。第八章面向?qū)ο蟮能浖y試8.2.4面向?qū)ο蟮膯卧獪y試(OOUnitTest)2.方法的測試 在測試類的功能實現(xiàn)時,應(yīng)該首先保證類成員函數(shù)的正確性。類函數(shù)成員的正確行為只是類能夠?qū)崿F(xiàn)要求的功能的基礎(chǔ),類成員函數(shù)間的作用和類之間的服務(wù)調(diào)用是單元測試無法確定的。因此,需要進行面向?qū)ο蟮募蓽y試。測試時主要考慮封裝在類中的一個方法對數(shù)據(jù)進行的操作,可以采用傳統(tǒng)的模塊測試方法,但方法是封裝在類中,并通過向所在對象發(fā)消息來執(zhí)行,它的執(zhí)行與狀態(tài)有關(guān),特別是在操作的多態(tài)性時,設(shè)計測試用例時要考慮設(shè)置對象的初態(tài),并且要設(shè)計一些函數(shù)來觀察隱蔽的狀態(tài)值。 類的行為是通過其內(nèi)部方法來表現(xiàn)的,方法可以看作傳統(tǒng)測試中的模塊。因此傳統(tǒng)針對模塊的設(shè)計測試案例的技術(shù),例如邏輯覆蓋、等價劃分、邊界值分析和錯誤推測等方法,仍然可以作為測試類中每個方法的主要技術(shù)。面向?qū)ο笾袨榱颂岣叻椒ǖ闹赜眯?每個方法所實現(xiàn)的功能應(yīng)盡量小,每個方法常常只由幾行代碼組成,控制比較簡單,因此測試用例的設(shè)計相對比較容易。在傳統(tǒng)的結(jié)構(gòu)化系統(tǒng)中需要設(shè)計一個能調(diào)用被測模塊的主程序來實現(xiàn)對模塊的測試,而在面向?qū)ο笙到y(tǒng)中方法的執(zhí)行是通過消息來驅(qū)動執(zhí)行的,要測試類中的方法,必須用一個驅(qū)動程序?qū)Ρ粶y方法發(fā)一條消息以驅(qū)動其執(zhí)行,如果被測模塊或方法中有調(diào)用其它的模塊或方法,則都需要設(shè)計一個模擬被調(diào)子程序功能的存根程序。驅(qū)動程序、存根程序及被測模塊或方法組成一個獨立的可執(zhí)行的單元。第八章面向?qū)ο蟮能浖y試8.2.4面向?qū)ο蟮膯卧獪y試(OOUnitTest)

方法測試中有兩個方面要加以注意。首先,方法執(zhí)行的結(jié)果并不一定返回調(diào)用者,有的可能是改變被測對象的狀態(tài)(類中所有屬性值)。狀態(tài)是外界不可見的,為了測試對象狀態(tài)的變化是否已經(jīng)被執(zhí)行,在驅(qū)動程序中還必須給對象發(fā)送一些額外的信息。其次,除了類中自己定義的方法,還可能存在從基類繼承來的方法,這些方法雖然在基類中已經(jīng)測試過,但派生類往往需要再次測試。 在面向?qū)ο筌浖?在保證單個方法功能正確的基礎(chǔ)上,還應(yīng)該測試方法之間的協(xié)作關(guān)系。操作被封裝在類中,對象彼此間通過發(fā)送消息啟動相應(yīng)的操作。但是,對象并沒有明顯地規(guī)定用什么次序啟動它的操作才是合法的。這時,對象就像一個有多個入口的模塊,因此,必須測試方法依不同次序組合的情況。但是為了提高方法的重用性,設(shè)計方法的一個準(zhǔn)則是提高方法的內(nèi)聚,即一個方法應(yīng)該只完成單個功能,因此一個類中方法數(shù)一般較多。當(dāng)類中方法數(shù)為n時,全部的次序組合數(shù)為2n。因此,測試完全的次序組合通常是不可能的,在設(shè)計測試用例時,同樣可以利用等價劃分、邊界值、錯誤推測等技術(shù)從各種可能啟動操作的次序組合中,選出最可能發(fā)現(xiàn)屬性和操作錯誤的若干種情況,著重進行測試。測試步驟與單個方法測試步驟類似。第八章面向?qū)ο蟮能浖y試8.2.4面向?qū)ο蟮膯卧獪y試(OOUnitTest)

同樣,對于繼承來的方法與新方法的協(xié)作,也要加以測試。因為隨著新方法的加入,增加了啟動操作次序的組合情況,某些啟動序列可能破壞對象的合法狀態(tài)。所以,對于繼承來的方法也需要仔細測試它們是否能夠完成所要完成的功能。 由上述可見,如果以方法為單元進行測試,那么面向?qū)ο蟮膯卧獪y試就相當(dāng)于歸結(jié)為了傳統(tǒng)的過程的單元測試了。以前的方法都可以使用。 需要考慮的是,運行測試用例時候,必須提供能夠?qū)嵗臉额悾约捌痱?qū)動器作用的“主程序”類,來提供和分析測試用例。第八章面向?qū)ο蟮能浖y試8.2.5面向?qū)ο蟮募蓽y試(OOIntegrateTest)

傳統(tǒng)的集成測試,是通過各種集成策略集成各功能模塊進行測試,一般可以在部分程序編譯完成的情況下進行。而對于面向?qū)ο蟪绦?,相互調(diào)用的功能是散布在程序的不同類中,類通過消息相互作用申請和提供服務(wù)。類的行為與它的狀態(tài)密切相關(guān),狀態(tài)不僅僅是體現(xiàn)在類數(shù)據(jù)成員的值,也許還包括其他類中的狀態(tài)信息。由此可見,類相互依賴極其緊密,根本無法在編譯不完全的程序上對類進行測試。所以,面向?qū)ο蟮募蓽y試通常需要在整個程序編譯完成后進行。此外,面向?qū)ο蟪绦蚓哂袆討B(tài)特性,程序的控制流往往無法確定,因此也只能對整個編譯后的程序做基于黑盒子的集成測試。 把一組相互有影響的類看作一個整體稱為類簇。類簇測試主要根據(jù)系統(tǒng)中相關(guān)類的層次關(guān)系,檢查類之間的相互作用的正確性,即檢查各相關(guān)類之間消息連接的合法性、子類的繼承性與父類的一致性、動態(tài)綁定執(zhí)行的正確性、類簇協(xié)同完成系統(tǒng)功能的正確性等等。其測試有兩種不同策略。第八章面向?qū)ο蟮能浖y試8.2.5面向?qū)ο蟮募蓽y試(OOIntegrateTest) 1.基于類間協(xié)作關(guān)系的橫向測試。 由系統(tǒng)的一個輸入事件作為激勵,對其觸發(fā)的一組類進行測試,執(zhí)行相應(yīng)的操作/消息處理路徑,最后終止于某一輸出事件。應(yīng)用回歸測試對已測試過的類集再重新執(zhí)行一次,以保證加入新類時不會產(chǎn)生意外的結(jié)果。

2.基于類間繼承關(guān)系的縱向測試。 首先通過測試獨立類(是系統(tǒng)中已經(jīng)測試正確的某類)來開始構(gòu)造系統(tǒng),在獨立類測試完成后,下一層繼承獨立類的類(稱為依賴類)被測試,這個依賴類層次的測試序列一直循環(huán)執(zhí)行到構(gòu)造完整個系統(tǒng)。第八章面向?qū)ο蟮能浖y試8.2.5面向?qū)ο蟮募蓽y試(OOIntegrateTest)

集成測試在面向?qū)ο笙到y(tǒng)中屬于應(yīng)用生命周期的一個階段,可在兩個層次上進行。第一層對一個新類進行測試,以及測試在定義中所涉及的那些類的集成。設(shè)計者通常用關(guān)系isa,ispart和refersto來描述類與類之間的依賴,并隱含了類測試的順序。首先測試基礎(chǔ)類,然后使用這些類的類接著測試,再按層次繼續(xù)測試,每一層次都使用了以前已定義和測試過的類作為部件塊。對于面向?qū)ο箢I(lǐng)域中集成測試的特別要求是:應(yīng)當(dāng)不需要特別地編寫代碼就可把在當(dāng)前的軟件開發(fā)中使用的元素集合起來。因此,其測試重點是各模塊之間的協(xié)調(diào)性,尤其是那些從沒有在一起的類之間的協(xié)調(diào)性。 集成測試的第二層是將各部分集合在一起組成整個系統(tǒng)進行測試。以C++語言編寫的應(yīng)用系統(tǒng)為例,通常在其主程序中創(chuàng)建一些高層類和全局類的實例,通過這些實例的相互通訊從而實現(xiàn)系統(tǒng)的功能。對于這種測試所選擇的測試用例應(yīng)當(dāng)瞄準(zhǔn)待開發(fā)軟件的目標(biāo)而設(shè)計,并且應(yīng)當(dāng)給出預(yù)期的結(jié)果,以確定軟件的開發(fā)是否與目標(biāo)相吻合。第八章面向?qū)ο蟮能浖y試8.2.5面向?qū)ο蟮募蓽y試(OOIntegrateTest)

面向?qū)ο蟮募蓽y試能夠檢測出相對獨立的單元測試無法檢測出的那些類相互作用時才會產(chǎn)生的錯誤。基于單元測試對成員函數(shù)行為正確性的保證,集成測試只關(guān)注于系統(tǒng)的結(jié)構(gòu)和內(nèi)部的相互作用。面向?qū)ο蟮募蓽y試可以分成兩步進行:先進行靜態(tài)測試,再進行動態(tài)測試。 靜態(tài)測試主要針對程序的結(jié)構(gòu)進行,檢測程序結(jié)構(gòu)是否符合設(shè)計要求?,F(xiàn)在流行的一些測試軟件都能提供一種稱為"可逆性工程"的功能,即通過原程序得到類關(guān)系圖和函數(shù)功能調(diào)用關(guān)系圖,例如InternationalSoftwareAutomation公司的Panorama-2forWindows95、Rational公司的RoseC++Analyzer等,將"可逆性工程"得到的結(jié)果與OOD的結(jié)果相比較,檢測程序結(jié)構(gòu)和實現(xiàn)上是否有缺陷。換句話說,通過這種方法檢測OOP是否達到了設(shè)計要求。 動態(tài)測試設(shè)計測試用例時,通常需要上述的功能調(diào)用結(jié)構(gòu)圖、類關(guān)系圖或者實體關(guān)系圖為參考,確定不需要被重復(fù)測試的部分,從而優(yōu)化測試用例,減少測試工作量,使得進行的測試能夠達到一定覆蓋標(biāo)準(zhǔn)。測試所要達到的覆蓋標(biāo)準(zhǔn)可以是:達到類所有的服務(wù)要求或服務(wù)提供的一定覆蓋率;依據(jù)類間傳遞的消息,達到對所有執(zhí)行線程的一定覆蓋率;達到類的所有狀態(tài)的一定覆蓋率等。同時也可以考慮使用現(xiàn)有的一些測試工具來得到程序代碼執(zhí)行的覆蓋率。第八章面向?qū)ο蟮能浖y試8.2.5面向?qū)ο蟮募蓽y試(OOIntegrateTest)

具體設(shè)計測試用例,可參考下列步驟: (1)先選定檢測的類,參考OOD分析結(jié)果,仔細出類的狀態(tài)和相應(yīng)的行為,類或成員函數(shù)間傳遞的消息,輸入或輸出的界定等。 (2)確定覆蓋標(biāo)準(zhǔn)。 (3)利用結(jié)構(gòu)關(guān)系圖確定待測類的所有關(guān)聯(lián)。 (4)根據(jù)程序中類的對象構(gòu)造測試用例,確認(rèn)使用什么輸入激發(fā)類的狀態(tài)、使用類的服務(wù)和期望產(chǎn)生什么行為等。 值得注意,設(shè)計測試用例時,不但要設(shè)計確認(rèn)類功能滿足的輸入,還應(yīng)該有意識的設(shè)計一些被禁止的例子,確認(rèn)類是否有不合法的行為產(chǎn)生,如發(fā)送與類狀態(tài)不相適應(yīng)的消息,要求不相適應(yīng)的服務(wù)等。根據(jù)具體情況,動態(tài)的集成測試,有時也可以通過系統(tǒng)測試完成。第八章面向?qū)ο蟮能浖y試8.2.6面向?qū)ο蟮南到y(tǒng)測試(OOSystemTest)

系統(tǒng)測試應(yīng)該盡量搭建與用戶實際使用環(huán)境相同的測試平臺,應(yīng)該保證被測系統(tǒng)的完整性,對臨時沒有的系統(tǒng)設(shè)備部件,也應(yīng)有相應(yīng)的模擬手段。系統(tǒng)測試時,應(yīng)該參考OOA分析的結(jié)果,對應(yīng)描述的對象、屬性和各種服務(wù),檢測軟件是否能夠完全"再現(xiàn)"問題空間。系統(tǒng)測試不僅是檢測軟件的整體行為表現(xiàn),從另一個側(cè)面看,也是對軟件開發(fā)設(shè)計的再確認(rèn)。 這里說的系統(tǒng)測試是對測試步驟的抽象描述。它體現(xiàn)的具體測試內(nèi)容包括:第八章面向?qū)ο蟮能浖y試8.2.6面向?qū)ο蟮南到y(tǒng)測試(OOSystemTest) 1.功能測試 測試是否滿足開發(fā)要求,是否能夠提供設(shè)計所描述的功能,是否用戶的需求都得到滿足。功能測試是系統(tǒng)測試最常用和必須的測試,通常還會以正式的軟件說明書為測試標(biāo)準(zhǔn)。

2.強度測試 測試系統(tǒng)的能力最高實際限度,即軟件在一些超負(fù)荷的情況,功能實現(xiàn)情況。如要求軟件某一行為的大量重復(fù)、輸入大量的數(shù)據(jù)或大數(shù)值數(shù)據(jù)、對數(shù)據(jù)庫大量復(fù)雜的查詢等。

3.性能測試 測試軟件的運行性能。這種測試常常與強度測試結(jié)合進行,需要事先對被測軟件提出性能指標(biāo),如傳輸連接的最長時限、傳輸?shù)腻e誤率、計算的精度、記錄的精度、響應(yīng)的時限和恢復(fù)時限等。

4.安全測試 驗證安裝在系統(tǒng)內(nèi)的保護機構(gòu)確實能夠?qū)ο到y(tǒng)進行保護,使之不受各種非常的干擾。安全測試時需要設(shè)計一些測試用例試圖突破系統(tǒng)的安全保密措施,檢驗系統(tǒng)是否有安全保密的漏洞。第八章面向?qū)ο蟮能浖y試8.2.6面向?qū)ο蟮南到y(tǒng)測試(OOSystemTest) 5.恢復(fù)測試 采用人工的干擾使軟件出錯,中斷使用,檢測系統(tǒng)的恢復(fù)能力,特別是通訊系統(tǒng)?;謴?fù)測試時,應(yīng)該參考性能測試的相關(guān)測試指標(biāo)。 可用性測試:測試用戶是否能夠滿意使用。具體體現(xiàn)為操作是否方便,用戶界面是否友好等。

6.安裝/卸載測試 測試用戶能否方便地安裝/卸載軟件。 系統(tǒng)測試需要對被測的軟件結(jié)合需求分析做仔細的測試分析,建立測試用例。

7.可用性測試:測試用戶是否能夠滿意使用。具體體現(xiàn)為操作是否方便,用戶界面是否友好等。

8.基于UML的系統(tǒng)測試第八章面向?qū)ο蟮能浖y試8.2.6面向?qū)ο蟮南到y(tǒng)測試(OOSystemTest)

考查系統(tǒng)的規(guī)格說明,用例圖,GUI狀態(tài)圖。分成下面四個層次: (1)構(gòu)建用例與系統(tǒng)功能的關(guān)聯(lián)矩陣,建立測試覆蓋的初步標(biāo)準(zhǔn),從對應(yīng)于擴展基本用例的真實用例中導(dǎo)出測試用例。 (2)通過所有真實用例開發(fā)測試用例。 (3)用過有限狀態(tài)機導(dǎo)出測試用例,有限狀態(tài)機有GUI外觀有限狀態(tài)機描述導(dǎo)出。 (4)通過基于狀態(tài)的事件表導(dǎo)出測試用例,這種工作必須對每個狀態(tài)重復(fù)進行。第八章面向?qū)ο蟮能浖y試8.2.6面向?qū)ο蟮南到y(tǒng)測試(OOSystemTest)9.基于狀態(tài)圖的系統(tǒng)測試 狀態(tài)圖是系統(tǒng)測試的很好的基礎(chǔ)。問題是,UML將狀態(tài)圖規(guī)定為類級的。合成多個類的狀態(tài)圖得到一個系統(tǒng)級的狀態(tài)圖是很難的。一種可行的方法是,將每個類級的狀態(tài)圖轉(zhuǎn)換成一組EDPN,然后合成EDPN。

第八章面向?qū)ο蟮能浖y試8.2.7面向?qū)ο蟮钠渌麥y試

在面向?qū)ο鬁y試中,除需要進行上面介紹的測試外,還應(yīng)該進行如下測試。

1.基于故障的測試

2.基于腳本的測試

3.面向?qū)ο箢惖碾S機測試

4.類層次的分割測試第八章面向?qū)ο蟮能浖y試8.3面向?qū)ο筌浖y試技術(shù)與方法

面向?qū)ο蠓椒ǖ氖褂萌找嫫占?隨之而來的面向?qū)ο筌浖馁|(zhì)量問題也越來越受到人們的重視。軟件測試是提高軟件質(zhì)量的重要途徑。但與面向?qū)ο筌浖拈_發(fā)技術(shù)相比,面向?qū)ο筌浖臏y試技術(shù)卻仍處于初級階段。第八章面向?qū)ο蟮能浖y試8.3面向?qū)ο筌浖y試技術(shù)與方法8.3.1分析和設(shè)計模型測試技術(shù)8.3.2類測試技術(shù)8.3.3類層次結(jié)構(gòu)測試技術(shù)8.3.4對象交互測試技術(shù)

第八章面向?qū)ο蟮能浖y試8.3.1分析和設(shè)計模型測試技術(shù)

面向?qū)ο筌浖_發(fā)的起始步驟是開發(fā)分析和設(shè)計模型。UML(統(tǒng)一建模語言)能在面向?qū)ο蠹夹g(shù)開發(fā)中廣泛應(yīng)用,也是因為構(gòu)建模型能幫助開發(fā)者理解正在解決的問題;構(gòu)建模型能幫助管理正在開發(fā)的系統(tǒng)的復(fù)雜性;分析和設(shè)計階段建構(gòu)的模型最后將對具體地實現(xiàn)起指導(dǎo)作用。如果模型的質(zhì)量很高對項目來說就很有價值;但是如果模型有錯誤,那么它對項目的危害就無可估量。 分析與設(shè)計模型的測試主要是對分析與設(shè)計模型進行測試,找出模型中的錯誤,其采用的方法是指導(dǎo)性審查(guidedinspection)。指導(dǎo)性審查技術(shù)通過使用明確的測試用例為查找工作成果中的缺陷提供了客觀的、系統(tǒng)的方法。是一種增強了的專為檢驗?zāi)P偷臋z測技巧,也可用來驗證模型是否能符合項目的需求。其基本步驟如下:第八章面向?qū)ο蟮能浖y試8.3.1分析和設(shè)計模型測試技術(shù)定義測試位置。使用特定的策略從測試位置選擇測試值。將測試值應(yīng)用到被測試的產(chǎn)品中。對測試結(jié)果以及對模型的測試覆蓋率(基于某中標(biāo)準(zhǔn))進行評估。第八章面

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論