面向對象實現(xiàn)及測試第九章_第1頁
面向對象實現(xiàn)及測試第九章_第2頁
面向對象實現(xiàn)及測試第九章_第3頁
面向對象實現(xiàn)及測試第九章_第4頁
面向對象實現(xiàn)及測試第九章_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

面向對象實現(xiàn)及測試第九章第1頁,共48頁,2023年,2月20日,星期四面向對象的實現(xiàn)主要包括兩項工作:(1)寫面向對象程序;(2)測試并調(diào)試面向對象程序面向對象程序的質量基本上由面向對象設計的質量決定,但程序設計語言的特點和設計風格也將影響程序的可靠性、可重用性和可維護性軟件測試是保證軟件可靠性的主要措施第2頁,共48頁,2023年,2月20日,星期四§9.1程序設計語言9.1.1面向對象語言的優(yōu)點(1)一致的表示方法(2)可重用性(3)可維護性第3頁,共48頁,2023年,2月20日,星期四9.1.2面向對象語言的技術特點(1)支持類與對象概念的機制(2)實現(xiàn)整體----部分結構的機制(3)實現(xiàn)一般----特殊結構的機制(4)實現(xiàn)屬性和服務的機制(5)類型檢查(6)類庫(7)效率(8)持久保存對象(9)參數(shù)化類(10)開發(fā)環(huán)境第4頁,共48頁,2023年,2月20日,星期四9.1.3選擇面向對象語言(1)將來是否占主導地位(2)可重用性(3)類庫和開發(fā)環(huán)境(4)其他因素第5頁,共48頁,2023年,2月20日,星期四§9.2程序設計風格9.2.1提高可重用性(1)提高方法的內(nèi)聚(2)減小方法的規(guī)模(3)保持方法的一致性(4)把策略與實現(xiàn)分開(5)全面覆蓋(6)盡量不使用全局信息(7)利用繼承機制

調(diào)用子過程分解因子使用委托把代碼封裝在類中第6頁,共48頁,2023年,2月20日,星期四9.2.1提高可擴充性(1)封裝實現(xiàn)策略(2)不要用一個方法遍歷多條關聯(lián)鏈(3)避免使用多分支結構(4)精心確定公有方法第7頁,共48頁,2023年,2月20日,星期四9.2.1提高健壯性(1)預防用戶的操作錯誤(2)檢查參數(shù)的合法性(3)不要預先確定限制條件(4)先測試后優(yōu)化第8頁,共48頁,2023年,2月20日,星期四組裝(Composition)組裝關系是一個實現(xiàn)級關系,它對應于應用級的聚合關系。它也叫做component(部件)或叫做ispartof(是…的一部分)。組裝與消息兩者都是類間的關系,在這種關系中,一個類的實例將是另一個類的實現(xiàn)的一部分??梢岳眉却骖悂砩尚骂惖?頁,共48頁,2023年,2月20日,星期四考慮Dictionary類的實現(xiàn)。在Dictionary中存儲item的一種數(shù)據(jù)表示是使用散列表(HashTable)。進行Dictionary類的低層設計時,要指明在Dictionary類和HashTable類之間的一個ispartof關系。在實現(xiàn)時,應當在Dictionary類的定義中聲明這個HashTable的實例。第10頁,共48頁,2023年,2月20日,星期四繼承(Inheritance)繼承允許在既存類的基礎上定義新的類。一個新類B繼承了既存類A,則B包括了A定義的某些行為,以及它自定義的某些附加行為。有多少種面向對象程序設計語言,就有多少種不同的繼承實現(xiàn)方式。第11頁,共48頁,2023年,2月20日,星期四繼承圖第12頁,共48頁,2023年,2月20日,星期四①針對實現(xiàn)的繼承兩個類之間“針對實現(xiàn)”的繼承關系的建立指的是使用既存類的內(nèi)部表示來做為新類的內(nèi)部表示的一部分。我們不推薦這種繼承方式??紤]使用繼承來實現(xiàn)一個Circle類,為了定義一個圓,需要定義一個點和一個值,做為圓的圓心和半徑。因此,Point類可支持Circle類的一部分實現(xiàn)。把Point當做派生類。第13頁,共48頁,2023年,2月20日,星期四如果Circle類直接使用Point的數(shù)據(jù)成員x和y,將失去抽象。而且失去做為一個點的圓心的標識。針對實現(xiàn)的繼承一般在原型開發(fā)中使用。第14頁,共48頁,2023年,2月20日,星期四②針對特殊化的繼承這種繼承的使用適合于大多數(shù)面向對象程序設計語言所提供的關系,是針對一般化-特殊化關系的。這種繼承使用isa關系。類B的一個實例是(isa)類A的一個實例。在使用中,繼承將使得既存類的界面成為新類的界面。這表明新類具有它的基類的所有行為。第15頁,共48頁,2023年,2月20日,星期四為了定義Dictionary類,應當首先查找既存的抽象,看Dictionary類會是哪個既存抽象的特殊情況。Dictionary應是一個有序表,但具有它自己特有的操作,如使用關鍵碼進行搜索等。既存的OrderedList類可以提供Dictionary類的某些行為,但不是全部。還要確認,在OrderedList中是否有的行為在Dictionary中是不需要的。如果有,可能需要重新組織層次或者開發(fā)某些附加的抽象。第16頁,共48頁,2023年,2月20日,星期四iskindof

(是一種…)繼承這種繼承允許有選擇地包含既存類的屬性,從而建立新的定義。一個鳥類可能有一個關于飛行的屬性。一個鴕鳥派生類在模型化時可能就不選擇這個屬性,因為鴕鳥不會飛。鴕鳥是一種(iskindof)鳥,但具有的屬性與鳥不完全相同。iskindof繼承是不嚴格繼承。第17頁,共48頁,2023年,2月20日,星期四類的實現(xiàn)一種方案是先開發(fā)一個比較小的比較簡單的類,做為開發(fā)比較大的比較復雜的類的基礎。即從簡單到復雜的開發(fā)方案。在這種方案中,類的開發(fā)是分層的。一個類建立在一些既存的類的基礎上,而這些既存的類又是建立在其它既存的類的基礎上。通過諸如“isa”或“ispartof”之類的關系,利用既存代碼就能著手建立新的類。第18頁,共48頁,2023年,2月20日,星期四§9.3面向對象的測試策略第19頁,共48頁,2023年,2月20日,星期四測試計算機軟件的經(jīng)典策略是從“小型測試”開始,逐步過渡到“大型測試”測試順序:單元測試->集成測試->確定測試->系統(tǒng)測試第20頁,共48頁,2023年,2月20日,星期四單元測試(類測試)

在面向對象環(huán)境下,最小的可測試的單元是封裝了的類或對象,而不是程序模塊。面向對象軟件的類測試等價于傳統(tǒng)軟件開發(fā)方法中的單元測試。但它是由類中封裝的操作和和類的狀態(tài)行為驅動的。完全孤立地測試類的各個操作是不行的。第21頁,共48頁,2023年,2月20日,星期四考慮一個類的層次。在基類中我們定義了一個操作X。每一個派生類都使用操作X,它是在各個類所定義的私有屬性和操作的環(huán)境中使用的。因使用操作X的環(huán)境變化太大,所以必須在每一個派生類的環(huán)境下都測試操作X。在面向對象開發(fā)環(huán)境下,把操作完全孤立起來進行測試,其收效是很小的。第22頁,共48頁,2023年,2月20日,星期四集成測試因為面向對象軟件沒有一個層次的控制結構,所以傳統(tǒng)的自頂向下和自底向上的組裝策略意義不大。每次將一個操作組裝到類中(像傳統(tǒng)的增殖式組裝那樣)常常行不通,因為在構成類的各個部件之間存在各種直接的和非直接的交互。對于面向對象系統(tǒng)的集成測試,存在兩種不同的測試策略。第23頁,共48頁,2023年,2月20日,星期四基于線程測試(Thread-basedTest)

它把為響應某一系統(tǒng)輸入或事件所需的一組類組裝在一起。每一條線索將分別測試和組裝。基于使用的測試(Use-basedTest)

它著眼于系統(tǒng)結構,首先測試獨立類,這些類只使用很少的服務器類。再測試那些使用了獨立類的相關類。一系列測試各層相關類的活動繼續(xù)下去,直到整個系統(tǒng)構造完成。第24頁,共48頁,2023年,2月20日,星期四確認測試在進行確認測試和系統(tǒng)測試時,不關心類之間連接的細節(jié)。著眼于用戶的要求和用戶能夠認可的系統(tǒng)輸出。為了幫助確認測試的執(zhí)行,測試者需要回到分析模型,根據(jù)那里提供的事件序列(腳本)進行測試??梢岳煤诤袦y試的方法來驅動確認測試。第25頁,共48頁,2023年,2月20日,星期四測試方法學檢測軟件中的故障并確定軟件是否執(zhí)行了預定要開發(fā)的功能。測試過程包括了一組測試用例的開發(fā),每一個測試用例要求能檢驗應用的一個特定的元素。還需要分析用各個測試用例執(zhí)行測試的結果來收集有關軟件的信息。第26頁,共48頁,2023年,2月20日,星期四按不同層次進行測試測試類中各個操作,主要測試類,這種測試是某些單元測試與組裝測試的組合假定測試一個軟件與測試一個類一樣。這個測試者常常就是一個特定類的開發(fā)者。第27頁,共48頁,2023年,2月20日,星期四9.4.1類測試的種類隨機測試劃分測試基于故障的測試9.4設計測試用例第28頁,共48頁,2023年,2月20日,星期四隨機測試例:銀行應用系統(tǒng)中,account(帳戶)類的操作有:open,setup,deposit,withdraw,balance,summarize,creditLimit和close

限制:在所有操作中最先執(zhí)行open

在所有操作中最后執(zhí)行close第29頁,共48頁,2023年,2月20日,星期四則:一個account類的最小測試序列包括如下操作:

open.setup.deposit.withdraw.close

但該序列中可能有許多其它行為:

open.setup.deposit.[deposit|withdraw|balance|summarize|creditLimit].withdraw.close從上述序列中可以隨機地產(chǎn)生一系列不同的操作序列:

#r1:open.setup.deposit.deposit.balance.summarize.withdraw.close#r2:open.setup.deposit.withdraw.deposit.balance.creditLimit.withdraw.close第30頁,共48頁,2023年,2月20日,星期四劃分測試(等價劃分)基于狀態(tài)的劃分根據(jù)類操作改變狀態(tài)的能力來劃分類操作。對account類來說,狀態(tài)操作包括deposit和withdraw,非狀態(tài)操作有balance,summarize和creditLimit#r1:open.setup.deposit.deposit.withdraw.withdraw.close#r2:open.setup.deposit.summarize.creditLimit.withdraw.close第31頁,共48頁,2023年,2月20日,星期四基于屬性的劃分根據(jù)類操作使用的屬性來劃分類操作。對account類來說,操作分成三個類別:

使用balance的操作

修改balance的操作

不使用也不修改balance的操作第32頁,共48頁,2023年,2月20日,星期四基于功能的劃分根據(jù)類操作所完成的功能來劃分類操作。對account類來說:

初始化操作(open,setup)

計算操作(deposit,withdraw)

查詢操作balance,summarize,creditLimit)

終止操作(close)第33頁,共48頁,2023年,2月20日,星期四基于故障的測試與傳統(tǒng)的方法類似,也是首先推測軟件中可能錯誤,然后設計出最可能發(fā)現(xiàn)這些錯誤的測試用例。例:測試SQRT(計算平方根)操作把語句if(x>=0)calculate_square_root();

誤寫成if(x>0)calculate_square_root();第34頁,共48頁,2023年,2月20日,星期四9.4.2集成測試

測試一個新類時,需要先測試在定義中所涉及的類,再考慮這些類的組裝。關系“isa”“ispartof”和“refersto”建立了測試幾個類時的次序之間的關聯(lián)。一旦基本類測試完成,使用這些類的那些類可以接著測試,然后按層次繼續(xù)測試下去。第35頁,共48頁,2023年,2月20日,星期四多類測試--對每個客戶類,使用類操作符列表來生成一系列隨機測試序列,這些操作符向服務器類實例發(fā)送消息。--對所產(chǎn)生的每個消息,確定協(xié)作類和在服務器對象中的對應操作符--對服務器中的每個操作符(已經(jīng)被來自客戶對象的消息調(diào)用),確定傳遞的消息--對每個消息,確定下一層被調(diào)用的操作符,并把這些操作符結合進測試序列中第36頁,共48頁,2023年,2月20日,星期四例:銀行系統(tǒng)協(xié)作圖第37頁,共48頁,2023年,2月20日,星期四對于操作序列:

Bank類對ATM的操作序列:verifyAcct.verifyPIN.[[verifyPolicy.withdrawReq]|depositReq|acctInfoREQ]對Bank類的測試用例可能是:#r3verifyAcct.verifyPIN.depositReq為考慮協(xié)作者,上述序列中需要考慮與測試用例#r3中的每個操作相關的消息第38頁,共48頁,2023年,2月20日,星期四

Bank需與ValidationInfo協(xié)作以執(zhí)行verifyAcct和VerifyPIN,Bank還必須與Account協(xié)作以執(zhí)行depositReq,因此上述協(xié)作的新測試用例是:#r4:verifyAcctBank.[validAcctValidationInfo].verfyPINBank.[validPINvalidationInfo].depositReq.[depositaccount]第39頁,共48頁,2023年,2月20日,星期四從動態(tài)模型導出測試用例例:第40頁,共48頁,2023年,2月20日,星期四

設計出的測試用例應該覆蓋所有狀態(tài),即操作序列應該使得account類實例遍歷所有允許的狀態(tài)轉換:#s1:open.setupAccnt.deposit(initial).withdraw(final).close向該序列中加入附加的測試序列,可得到其他測試用例:#s2:open.setupAccnt.deposit(initial).deposit.balance.credit.withdraw(final).close#s3:open.setupAccnt.deposit(initial).deposit.withdraw.accntInfo.withdraw(final).close第41頁,共48頁,2023年,2月20日,星期四習題:以下觀念正確嗎?我們擁有一套講述如何開發(fā)軟件的書籍,書中充滿了標準與示例,可以幫助我們解決軟件開發(fā)中遇到的任何問題我們擁有最好的開發(fā)工具、最好的計算機,一定能做出優(yōu)秀的軟件。如果我們落后于計劃,可以增加更多的程序員來解決。既然需求分析很困難,不管三七二十一先把軟件做了再說,反正軟件是靈活的,隨時可以修改。第42頁,共48頁,2023年,2月20日,星期四習題:以下觀念正確嗎?如果軟件運行較慢,是換一臺更快的計算機還是設計一種更快的算法?有最好的軟件工程方法,最好的編程語言嗎?編程時是否應該多使用技巧?軟件中的錯誤是否可以按嚴重程度分等級?第43頁,共48頁,2023年,2月20日,星期四判斷下列關于程序設計風格和軟件測試的敘述。(1)用黑盒法測試時,測試用例是根據(jù)程序內(nèi)部邏輯設計的(2)盡量用公共過程或子程序代替重復的代碼段。(3)測試是為了驗證軟件已正確實現(xiàn)用戶的要求。(4)有n個判定語句的連鎖分支結構有2n條路徑。(5)盡量采用復合的條件測試,避免嵌套的分支結構。(6)GOTO類型的語句概念簡單,使用方便,在某些情況下,保留GOTO類型的語句反能使寫出的程序更加簡潔。(7)發(fā)現(xiàn)錯誤多的程序模塊,殘留在模塊中的錯誤越少。(8)程序效率的提高主要應通過選擇高效的算法來實現(xiàn)。第44頁,共48頁,2023年,2月20日,星期四軟件測試的目的是(A)。為了提高測試的效率,應該(B)。使用白盒測試方法時,確定測試數(shù)據(jù)應根據(jù)(C)和指定的覆蓋標準。與設計測試數(shù)據(jù)無關的文檔是(D)。

A.①評價軟件的質量

②發(fā)現(xiàn)軟件的錯誤

③找出軟件中的所有錯誤

④證明軟件是正確的

B.①隨機地選取測試數(shù)據(jù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論