面向?qū)ο蟮能浖y試課件_第1頁
面向?qū)ο蟮能浖y試課件_第2頁
面向?qū)ο蟮能浖y試課件_第3頁
面向?qū)ο蟮能浖y試課件_第4頁
面向?qū)ο蟮能浖y試課件_第5頁
已閱讀5頁,還剩119頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

§5.7面向?qū)ο蟮能浖y試OO的系統(tǒng)與使用功能模型開發(fā)的系統(tǒng)之間的差別:對象作為一個單獨的組件一般要比一個功能模塊大由對象到子系統(tǒng)的集成通常是松散耦合的,系統(tǒng)中沒有一個明顯的“頂層”如果對象被復用,測試者就無法進入組件內(nèi)部分析其代碼測試策略和測試戰(zhàn)術(shù)的改變白盒測試方法需要擴展到更大粒度的對象上集成測試采用黑盒測試§5.7面向?qū)ο蟮能浖y試OO的系統(tǒng)與使用功能模型開發(fā)的1面向?qū)ο笙到y(tǒng)的測試可分為四個層次測試與對象關(guān)聯(lián)的單個操作測試單個對象類測試對象集群測試面向?qū)ο笙到y(tǒng)面向?qū)ο笙到y(tǒng)的測試可分為四個層次測試與對象關(guān)聯(lián)的單個操作2

5.7.1對象類的測試用白盒的覆蓋測試方法保證所有程序中的語句至少執(zhí)行一遍,所有的程序路徑都要執(zhí)行到。對象的完全覆蓋測試應(yīng)包括:對象中所有操作被單獨隔離測試對象所有屬性的設(shè)置和訪問的測試對象的所有可能狀態(tài)的測試。所有能引起狀態(tài)改變的事件都要模擬到。相當于傳統(tǒng)的單元測試,單元概念的變化—封裝的類或?qū)ο笞鳛樽钚〉目蓽y試單位5.7.1對象類的測試用白盒的覆蓋測試方法保證所有程序3測試單個類的方法(1)隨機測試例:銀行系統(tǒng)的account(帳戶)類有下列操作:open(打開)setup(建立)deposit(存款)withdraw(取款)balance(余額)summarize(清單)creditLimit(透支限額)close(關(guān)閉)系統(tǒng)對操作的限制:必須在應(yīng)用其它操作之前先打開帳戶,在完成了全部操作之后才能關(guān)閉帳戶;……在限制下還是存在操作的許多排列測試單個類的方法(1)隨機測試例:銀行系統(tǒng)的account(4一個account類實例的最小行為歷史包括下列操作:open.setup.deposit.withdraw.close

account類的最小測試序列大量的其它行為可能在下面序列中發(fā)生:open.setup.deposit.[deposit|withdraw|balance|summarize|creditLimit]n.withdraw.close

一系列不同的操作序列可以隨機地產(chǎn)生,例如:測試用例r1:open.setup.deposit.deposit.balance.

summarize.creditLimit.withdraw.close

測試用例r2:open.setup.deposit.withdraw.deposit.balance.creditLimit.withdraw.close這些和其它的隨機順序測試被進行,以測試不同的類實例的生存歷史.一個account類實例的最小行為歷史包括下列操作:測試用例5測試單個類的方法(2)劃分測試(partitiontesting)

與測試傳統(tǒng)軟件時采用的等價類劃分方法類似.

劃分類別的方法:基于狀態(tài)的劃分基于屬性的劃分基于功能的劃分測試單個類的方法(2)劃分測試(partitiontest6基于狀態(tài)的劃分根據(jù)類操作改變類狀態(tài)的能力來劃分類操作.例:銀行系統(tǒng)的account(帳戶)類

狀態(tài)操作包括:deposit(存款)withdraw(取款)

非狀態(tài)操作包括:balance(余額)summarize(清單)creditLimit(透支限額)測試用例p1(測試改變狀態(tài)的操作):

open.setup.deposit.deposit..withdraw.close

測試用例p2(測試不改變狀態(tài)的操作,在最小測試序列中的操作除外):open.setup.deposit.summarize.creditLimit.withdraw.close基于狀態(tài)的劃分根據(jù)類操作改變類狀態(tài)的能力來劃分類操作.例7基于屬性的劃分根據(jù)類操作使用的屬性來劃分類操作.例:account類可根據(jù)balance屬性來把操作定義劃分為三個類別:

使用balance的操作修改balance的操作不使用也不修改balance的操作

為上述每個類別設(shè)計測試序列基于屬性的劃分根據(jù)類操作使用的屬性來劃分類操作.例:ac8基于功能的劃分根據(jù)類操作所完成的功能來劃分類操作.例:account類中的操作按功能可劃分為四個類別:

初始化操作(open,setup)計算操作(deposit,withdraw)查詢操作(balance,summarize,creditLimit)終止操作(close)

為上述每個類別設(shè)計測試序列基于功能的劃分根據(jù)類操作所完成的功能來劃分類操作.例:a9

setupacctaccount類的狀態(tài)轉(zhuǎn)換圖emptyacctdeadacctsetupAaccentbalancecreditacctInfoclosedeposit(initial)depositwithdrawworkingacctopenwithdrawal(final)nonworkingacct測試單個類的方法(3)基于狀態(tài)的測試setupaccount類的狀態(tài)轉(zhuǎn)換圖empty10測試單個類的方法(4)基于故障的測試(fault_basedtesting)與測試傳統(tǒng)軟件時采用的錯誤推測法類似.測試單個類的方法與測試傳統(tǒng)軟件時采用的錯誤推測法類似.11

5.7.2

對象的集成測試

OO軟件沒有層次的控制結(jié)構(gòu),傳統(tǒng)的自頂向下和自底向上的集成策略沒有意義.OO軟件的兩種集成策略:基于使用的測試(用例或基于場景的測試)

基于線程的測試(thread-basedtesting)

集成響應(yīng)系統(tǒng)的一個輸入或事件所需的一組類,每個線程被個體地集成和測試,通過回歸測試保證沒有副作用產(chǎn)生;對象交互測試

5.7.2對象的集成測試OO軟件沒有層次12

ATMBank銀行系統(tǒng)的類協(xié)作圖ATMUserInterfaceAccountCashierverifyAcctverifyPINverifyPolicywithdrawReqdepositReqacctInfoReqcardInsertedpassworddepositwithdrawaccentStatusterminatevalidPINvalidAcctcreditLimitaccentTypebalancewithdrawdepositcloseValidationInfoverifyStatusdepositStatusdispenseCaseprintAccentStatreadCardInfogetCaseAmntopenAcctinitialDepositauthorizeCarddeuthorizecloseAcctATMBank銀行系統(tǒng)的類協(xié)作圖ATMAccoun13

OO集成測試方法(1)多個類測試Kirani,S.andW.T.Tsai,在“SpecificationandVerificationofObject-OrientedPrograms”中建議了下面的步驟序列以生成多個類隨機測試用例:1.對每個客戶類,使用類操作列表來生成一系列隨機測試序列,這些操作發(fā)送消息給服務(wù)器類;2.對生成的每個消息,確定在服務(wù)器對象中的協(xié)作者類和對應(yīng)的操作;3.對服務(wù)器對象中的每個操作(已經(jīng)被來自客戶對象的消息調(diào)用),確定傳遞的消息;4.對每個消息,確定下一層被調(diào)用的操作,并把這些操作結(jié)合進測試序列中.OO集成測試方法(1)多個類測試14

ATMBank銀行系統(tǒng)的類協(xié)作圖ATMUserInterfaceAccountCashierverifyAcctverifyPINverifyPolicywithdrawReqdepositReqacctInfoReqvalidPINvalidAcctcreditLimitaccentTypebalancewithdrawdepositcloseopenAcctinitialDepositauthorizeCarddeuthorizecloseAcctValidationInfoverifyStatusdepositStatusdispenseCaseprintAccentStatreadCardInfogetCaseAmntcardInsertedpassworddepositwithdrawaccentStatusterminateATMBank銀行系統(tǒng)的類協(xié)作圖ATMAccoun15銀行系統(tǒng)中Bank類和ATM類的操作序列:verifyAcct?verifyPIN?[[verifyPolicy?withdrawReq]|depositReq|acctInfoReq]n對Bank類的隨機測試用例可能是:測試用例r3:verifyAcct?verifyPIN?depositReq為了考慮測試中涉及的協(xié)作者,需要考慮與測試用例r3中每個操作相關(guān)聯(lián)的消息:Bank必須和ValidationInfo協(xié)作以執(zhí)行depositReq、verifyAcct和verifyPINBank還必須和Account協(xié)作以執(zhí)行deposit因此,測試這些協(xié)作的新的測試用例是:測試用例r4:verifyAcctBank?[validAcctValidationInfo]?

verifyPINBank

?[validPINValidationInfo]

?

depositReq

?[depositAccount]銀行系統(tǒng)中Bank類和ATM類的操作序列:verifyAcc16

OO集成測試方法(2)從動態(tài)模型導出測試用例

設(shè)計的測試用例應(yīng)達到完全的狀態(tài)覆蓋,即操作序列應(yīng)導致account類的變遷穿越所有允許的狀態(tài):測試用例s1:open?setupAccent?deposit(initial)?withdraw(final)?close(最小測試序列)

向最小序列中加入附加的測試序列,例如:測試用例s2:open?setupAccent?deposit(initial)?deposit?balance?credit?withdraw(final)?close測試用例s3:open?setupAccent?deposit(initial)?deposit?withdraw?accntInfo?withdraw(final)?close……導出更多的測試用例以保證該類的所有行為都被適當?shù)販y試OO集成測試方法(2)從動態(tài)模型導出測試用例向最小序列中加17

5.7.3

OO系統(tǒng)的確認測試在確認和系統(tǒng)測試層次,類連接的細節(jié)消失.和傳統(tǒng)的確認測試一樣,OO軟件的確認關(guān)注用戶可見的動作和用戶可識別的系統(tǒng)輸出.為輔助確認測試的導出,應(yīng)利用分析模型中的用例圖提供的場景來提高交互需求中發(fā)現(xiàn)錯誤的可能性5.7.3OO系統(tǒng)的確認測試在確認和系統(tǒng)測試層次,類連接18§5.8自動測試和測試工具自動化和工具的好處速度效率準確度和精確度堅持不懈§5.8自動測試和測試工具自動化和工具的好處195.8.1測試工具靜態(tài)分析工具動態(tài)測試工具測試數(shù)據(jù)自動生成工具集成化測試環(huán)境非侵入式工具侵入式工具5.8.1測試工具靜態(tài)分析工具20測試工作臺(下游CASE工具)源代碼被測試的程序測試數(shù)據(jù)規(guī)約預測器測試管理器測試預估模擬器文件比較器報告生成器動態(tài)分析器測試結(jié)果測試結(jié)果報告執(zhí)行報告測試數(shù)據(jù)生成器測試工作臺(下游CASE工具)源代碼被測試測試數(shù)據(jù)規(guī)約預測器21查看器和監(jiān)視器1#計算機軟件正在測試2#計算機軟件正在測試3#計算機查看測試工具通信線路監(jiān)聽線路通信分析器可以查看兩個系統(tǒng)之間傳輸?shù)脑紨?shù)據(jù)(非侵入)(輸入測試用例)(確認產(chǎn)生的通信數(shù)據(jù))(檢查相應(yīng)結(jié)果)查看器和監(jiān)視器1#計算機2#計算機3#計算機通信線路監(jiān)聽線路22驅(qū)動程序普通系統(tǒng)配置測試驅(qū)動配置(在此計算機上編寫簡單的程序自動產(chǎn)生相應(yīng)的擊鍵和鼠標移動來測試軟件)鍵盤電纜鼠標電纜一臺計算機可以作為驅(qū)動程序測試工具取代被測試系統(tǒng)的鍵盤和鼠標從外部計算機發(fā)送擊鍵鼠標的移動信息,被測試軟件不被侵入,如果測試軟件時在同一系統(tǒng)中執(zhí)行驅(qū)動程序,它就會侵入系統(tǒng),這種測試情況可能無法接受驅(qū)動程序普通系統(tǒng)配置測試驅(qū)動配置鍵盤鼠標一臺計算機可以作為23管道和仿真器普通系統(tǒng)配置測試存根配置一臺計算機可以充當管道,代替打印機,能夠?qū)y試輸出進行更有效的分析運行管道軟件來代替打印機,對打印數(shù)據(jù)進行閱讀和解釋管道和仿真器普通系統(tǒng)配置測試存根配置一臺計算機可以充當管道,24其它工具類型:施壓工具和增負工具干擾發(fā)生器和噪聲發(fā)生器分析工具其它工具類型:施壓工具和增負工具干擾發(fā)生器和噪聲發(fā)生器分25測試工具產(chǎn)品實例JUnit:Java單元測試工具CppUnit:C++單元測試工具Dunit:Delphi的終極測試工具測試工具產(chǎn)品實例JUnit:Java單元測試工具265.8.2測試測試自動化

另一類軟件測試工具,可以自動執(zhí)行測試用例、查找軟件缺陷、分析并記錄測試結(jié)果。5.8.2測試測試自動化另一類軟件測試工具,可以27隨機測試:猴子測試員只要不停電,偶爾能夠得到香蕉,猴子就會永遠測試下去一個想法:

“如果讓一百萬只猴子在一百萬只鍵盤上敲一百萬年,它們最終就可能寫出莎士比亞話劇等巨著”.隨機測試:猴子測試員只要不停電,偶爾能夠得到香蕉,猴子就會永28猴子的進步笨猴子:一點也不懂測試軟件,只是隨機地單擊或按鍵,直至發(fā)生兩件事情之一:完成循環(huán)或系統(tǒng)崩潰.不太笨的猴子:

具有崩潰辨認能力,能夠重新啟動系統(tǒng)開始測試聰明猴子:能夠從它的笨兄弟那里獲得隨機測試的結(jié)果,增加了對環(huán)境的認知能力,有目的地敲鍵盤,不僅限于查找崩潰缺陷,同時查看數(shù)據(jù),檢查操作結(jié)果,找出與預期結(jié)果的差別猴子的進步笨猴子:一點也不懂測試軟件,只是隨機地單擊或按鍵29自動化測試工具實例美國國際軟件自動化(ISA)公司的PanoramaforC/C++,j、Java和VB產(chǎn)品,自動化功能包括:軟件結(jié)構(gòu)分析與邏輯框圖的自動化軟件靜態(tài)分析數(shù)據(jù)分析復雜性分析與分析結(jié)果列表的自動化軟件質(zhì)量分析動態(tài)性能分析軟件代碼分支或條件覆蓋率分析軟件測試用例有效性分析與測試用例最小集的自動選取軟件界面手工操作過程的自動記錄與自動再執(zhí)行(Playback)自動化測試工具實例美國國際軟件自動化(ISA)公司30§5.9測試中的可靠性分析

開發(fā)過程中,利用測試的統(tǒng)計數(shù)據(jù)來估算軟件的可靠性,以控制軟件的質(zhì)量。推測錯誤的產(chǎn)生頻度推測殘留在程序中的錯誤數(shù)評價測試的精確度和覆蓋率§5.9測試中的可靠性分析開發(fā)過程中,利用測試的統(tǒng)31推測錯誤的產(chǎn)生頻度(推測錯誤產(chǎn)生的時間間隔)1K(ET/IT-Ec(t)/IT)方法:估算平均故障時間(MTTF估算公式)MTTF=K:

經(jīng)驗常數(shù)ET:

程序中原有的殘留錯誤數(shù)IT:

程序長度t:測試時間

Ec(t):在0-t期間內(nèi)發(fā)現(xiàn)的錯誤總數(shù)λ1=當故障率為獨立于時間的常量λ:推測錯誤的產(chǎn)生頻度(推測錯誤產(chǎn)生的時間間隔)1K(ET/IT32推測殘留在程序中的錯誤數(shù)錯誤植入模型Mills將播種模型用于程序中殘留錯誤的估算,稱錯誤植入模型播種模型:

N:程序中原有殘留的錯誤數(shù)Nt:新植入的錯誤數(shù)n:測試發(fā)現(xiàn)的原有錯誤數(shù)nt:測試發(fā)現(xiàn)的植入錯誤數(shù)NNnnt≈tNNnnt=t推測殘留在程序中的錯誤數(shù)錯誤植入模型NNnnt≈tNNn33Hyman對錯誤植入模型的改進ET:程序中原有的殘留錯誤數(shù)E1:1號測試員在某一時間內(nèi)發(fā)現(xiàn)的錯誤數(shù)E2:2號測試員在同一時間內(nèi)發(fā)現(xiàn)的錯誤數(shù)E0:兩位測試員共同發(fā)現(xiàn)的錯誤數(shù)EEE1≈0=2ETE1E2/E0ETHyman對錯誤植入模型的改進ET:程序中原有的殘留錯誤數(shù)34第六章軟件進化遺留系統(tǒng)軟件變更策略軟件維護體系結(jié)構(gòu)進化軟件再工程配置管理第六章軟件進化遺留系統(tǒng)35§6.1遺留系統(tǒng)更換遺留系統(tǒng)是有風險的業(yè)務(wù)策略,因為:遺留系統(tǒng)幾乎沒有完整的描述業(yè)務(wù)過程與遺留系統(tǒng)的操作方式緊密相關(guān)重要的業(yè)務(wù)規(guī)則隱藏在軟件內(nèi)部開發(fā)新軟件有風險繼續(xù)使用遺留系統(tǒng),進行變更費用更高,因為:系統(tǒng)是由不同團對實現(xiàn)的,程序設(shè)計風格不一致系統(tǒng)使用過時的語言編寫系統(tǒng)文檔不充分、過時經(jīng)多年維護,系統(tǒng)結(jié)構(gòu)已破壞系統(tǒng)進行過優(yōu)化,不可讀系統(tǒng)數(shù)據(jù)過時、不完整§6.1遺留系統(tǒng)更換遺留系統(tǒng)是有風險的業(yè)務(wù)策略,因為:繼續(xù)36遺留系統(tǒng)評估對遺留系統(tǒng)做現(xiàn)實的評估,做出適當?shù)木駬瘢簭氐讙仐壪到y(tǒng)繼續(xù)維護系統(tǒng)采用某種方式轉(zhuǎn)換系統(tǒng)以改善其可維護性以一個新的系統(tǒng)代替該系統(tǒng)遺留系統(tǒng)評估對遺留系統(tǒng)做現(xiàn)實的評估,做出適當?shù)木駬瘢?7§6.2軟件維護

四類維護活動:改正性維護適應(yīng)性維護擴充與完善性維護預防性維護§6.2軟件維護四類維護活動:38各種維護所占比例:其它維護5%適應(yīng)性維護25%改正性維護20%擴充與完善性維護50%改正性維護占全部維護量的比率已從80年代初的20%大幅度下降,90年代初一些公司的產(chǎn)品差錯率已接近于零各種維護所占比例:其它維護適應(yīng)性改正性擴充與完改正性維護占396.2.1軟件維護的特點MP+Ke=(c-d)M

:維護工作總工作量P:生產(chǎn)性工作量K

:

經(jīng)驗常數(shù)c:復雜度d:對該軟件熟悉程度的度量維護的成本6.2.1軟件維護的特點MP+Ke=(c-d)M:維護40維護中的典型問題(1)難以跟蹤軟件版本的進化過程,軟件的變化未在文檔中反映出來.(2)難以跟蹤軟件的創(chuàng)建過程.(3)難以讀懂他人程序.(4)無文檔或不全.(5)軟件人員流動性大.(6)設(shè)計時未考慮修改需要,修改困難.(7)維護工作無吸引力,缺乏成就感.維護中的典型問題(1)難以跟蹤軟件版本的進化過程,416.2.2軟件的維護任務(wù)修改負責人維護申請系統(tǒng)監(jiān)督員配置管理員維護機構(gòu)維護人員維護管理員6.2.2軟件的維護任務(wù)修改維護申請系統(tǒng)監(jiān)督員配置管理員維42保存維護記錄維護過程中作應(yīng)記錄的數(shù)據(jù)程序標識源程序語句數(shù)目機器代碼指令條數(shù)..............以收集的數(shù)據(jù)為基礎(chǔ)構(gòu)造維護數(shù)據(jù)庫,供維護評價使用.保存維護記錄維護過程中作應(yīng)記錄的數(shù)據(jù)436.2.3軟件維護的實施修改源程序的三個步驟分析和理解程序修改程序重新驗證程序6.2.3軟件維護的實施修改源程序的三個步驟44修改程序的副作用修改代碼的副作用修改數(shù)據(jù)的副作用修改文檔的副作用修改程序的副作用修改代碼的副作用45重新驗證程序靜態(tài)確認計算機確認維護后的驗收重新驗證程序靜態(tài)確認46從維護角度所需的測試種類:(1)對修改事務(wù)的測試(2)對修改程序的測試(3)操作過程的測試(4)應(yīng)用系統(tǒng)運行過程的測試(5)使用過程的測試(6)系統(tǒng)各部分間接口的測試(7)與系統(tǒng)軟件接口的測試(8)安全性測試(9)后備/恢復過程測試……從維護角度所需的測試種類:(1)對修改事務(wù)的測試476.2.4軟件可維護性軟件可維護性的定義:軟件可維護性是指糾正軟件系統(tǒng)出現(xiàn)的錯誤和缺陷,以及為滿足新的要求進行修改、擴充或壓縮的容易程度。衡量軟件質(zhì)量的幾個主要質(zhì)量特性:可維護性可使用性可靠性6.2.4軟件可維護性軟件可維護性的定義:48可維護性的度量各類維護中的側(cè)重點改正性維護適應(yīng)性維護完善性維護可理解性可測試性可修改性可靠性可移植性可使用性效率度量程序可維護性的7個特性可維護性的度量各類維護中的側(cè)重點改正性維護適應(yīng)性496.2.5提高可維護性的方法

建立明確的軟件質(zhì)量目標和優(yōu)先級使用提高軟件質(zhì)量的技術(shù)和工具進行明確的質(zhì)量保證審查選擇可維護的程序設(shè)計語言改進程序的文檔開發(fā)軟件時考慮到維護6.2.5提高可維護性的方法建立明確的軟件質(zhì)量目標和優(yōu)先506.2.4預防性維護開發(fā)和維護者不應(yīng)等待用戶的維護申請,可先選擇以下類型程序作為預防性維護對象:預計若干年內(nèi)將繼續(xù)使用的程序當今正成功使用的程序最近的將來要進行大修改和完善的程序6.2.4預防性維護開發(fā)和維護者不應(yīng)等待用戶的維51§6.3軟件再工程(SoftwareReengineering)6.3.1什么是軟件再工程

軟件再工程是一類軟件工程活動,是一個工程過程,它將逆向工程、重構(gòu)和正向工程組合起來,將現(xiàn)存系統(tǒng)重新構(gòu)造為新的形式。

軟件再工程比其它系統(tǒng)進化方法具有的絕對優(yōu)勢減少軟件演化風險降低成本§6.3軟件再工程(SoftwareReengineeri52

軟件再工程過程模型代碼重構(gòu)數(shù)據(jù)重構(gòu)正向工程庫存目錄分析文檔重構(gòu)逆向工程軟件再工程過程模型代碼重構(gòu)數(shù)據(jù)重構(gòu)正向工程53再工程過程示意圖

需求新需求設(shè)計設(shè)計代碼代碼正向工程反向工程(重構(gòu))(重構(gòu))(重構(gòu))再工程過程示意圖需求新需求設(shè)計設(shè)計代碼代碼正反(重構(gòu))(重構(gòu)54再工程方法

增長的成本自動源代碼轉(zhuǎn)換自動結(jié)構(gòu)重構(gòu)輔之以手工改變結(jié)構(gòu)重構(gòu)加上體系結(jié)構(gòu)改變自動的程序結(jié)構(gòu)重構(gòu)程序和數(shù)據(jù)結(jié)構(gòu)重構(gòu)再工程方法增長的成本自動源代自動結(jié)構(gòu)重構(gòu)結(jié)構(gòu)重構(gòu)加上自動的程55程序轉(zhuǎn)換過程

識別源代碼的差異將要再工程的系統(tǒng)設(shè)計轉(zhuǎn)換器指令自動轉(zhuǎn)換代碼經(jīng)過再工程的系統(tǒng)手動轉(zhuǎn)換代碼將要再工程的系統(tǒng)程序轉(zhuǎn)換過程識別源代將要再工程設(shè)計轉(zhuǎn)換自動轉(zhuǎn)換代碼經(jīng)過再工程56逆向工程(反向工程reverseengineering)設(shè)計的恢復過程非結(jié)構(gòu)化、無文檔的源代碼或目標代碼軟件的文檔從現(xiàn)有軟件恢復設(shè)計信息(有用的維護信息)逆向工程(反向工程reverseengineering)57

逆向工程過程

將要再工程的系統(tǒng)自動分析手工加注釋系統(tǒng)信息庫文檔生成數(shù)據(jù)結(jié)構(gòu)圖程序結(jié)構(gòu)圖可追溯矩陣逆向工程過程將要再工程自動分析手工加注釋系統(tǒng)文檔生成數(shù)據(jù)程58逆向工程恢復信息的級別:(1)實現(xiàn)級:程序的抽象語法樹、符號表等信息(2)結(jié)構(gòu)級:反映程序分量之間相互依賴關(guān)系的信息,如調(diào)用圖、結(jié)構(gòu)圖等.(3)功能級:反映程序段功能和段間關(guān)系的信息(4)領(lǐng)域級:反映程序分量與應(yīng)用領(lǐng)域概念間對應(yīng)關(guān)系的信息抽象級別低高信息的抽象級別越高,它與代碼距離越遠,通過逆向工程恢復的難度越大,自動工具支持的可能性變小逆向工程恢復信息的級別:(1)實現(xiàn)級:程序的抽象語法抽低高信59逆向工程源程序目標代碼反匯編、反編譯程序分析技術(shù):程序結(jié)構(gòu)分析工具程序功能分析工具

源程序概要設(shè)計詳細設(shè)計概要設(shè)計需求分析逆向工程源程序目標代碼反匯編、反編譯源程序概要設(shè)計概要設(shè)計需60

數(shù)據(jù)重構(gòu)(數(shù)據(jù)再工程)修改遺留系統(tǒng)的程序時必須同時修改數(shù)據(jù)數(shù)據(jù)退化程序內(nèi)固有的限制體系結(jié)構(gòu)進化

數(shù)據(jù)再工程的方法方法描述數(shù)據(jù)清理分析對數(shù)據(jù)記錄和值以改善其質(zhì)量,通常不需變更程序數(shù)據(jù)擴展數(shù)據(jù)和相關(guān)程序被再工程數(shù)據(jù)遷移數(shù)據(jù)被轉(zhuǎn)移到一個先進的數(shù)據(jù)庫管理系統(tǒng)之上數(shù)據(jù)重構(gòu)(數(shù)據(jù)再工程)修改遺留系統(tǒng)的程序時必須同時修改數(shù)據(jù)61

數(shù)據(jù)再工程過程

將要再工程的程序數(shù)據(jù)分析實體名修改直接量替換對數(shù)據(jù)定義重新安排文檔生成修改過的數(shù)據(jù)數(shù)據(jù)重新格式化默認值轉(zhuǎn)換驗證規(guī)則修改變更匯總表數(shù)據(jù)分析階段1階段2階段3數(shù)據(jù)再工程過程將要再工程的程序數(shù)據(jù)分析實體名修改文檔生成修62§5.7面向?qū)ο蟮能浖y試OO的系統(tǒng)與使用功能模型開發(fā)的系統(tǒng)之間的差別:對象作為一個單獨的組件一般要比一個功能模塊大由對象到子系統(tǒng)的集成通常是松散耦合的,系統(tǒng)中沒有一個明顯的“頂層”如果對象被復用,測試者就無法進入組件內(nèi)部分析其代碼測試策略和測試戰(zhàn)術(shù)的改變白盒測試方法需要擴展到更大粒度的對象上集成測試采用黑盒測試§5.7面向?qū)ο蟮能浖y試OO的系統(tǒng)與使用功能模型開發(fā)的63面向?qū)ο笙到y(tǒng)的測試可分為四個層次測試與對象關(guān)聯(lián)的單個操作測試單個對象類測試對象集群測試面向?qū)ο笙到y(tǒng)面向?qū)ο笙到y(tǒng)的測試可分為四個層次測試與對象關(guān)聯(lián)的單個操作64

5.7.1對象類的測試用白盒的覆蓋測試方法保證所有程序中的語句至少執(zhí)行一遍,所有的程序路徑都要執(zhí)行到。對象的完全覆蓋測試應(yīng)包括:對象中所有操作被單獨隔離測試對象所有屬性的設(shè)置和訪問的測試對象的所有可能狀態(tài)的測試。所有能引起狀態(tài)改變的事件都要模擬到。相當于傳統(tǒng)的單元測試,單元概念的變化—封裝的類或?qū)ο笞鳛樽钚〉目蓽y試單位5.7.1對象類的測試用白盒的覆蓋測試方法保證所有程序65測試單個類的方法(1)隨機測試例:銀行系統(tǒng)的account(帳戶)類有下列操作:open(打開)setup(建立)deposit(存款)withdraw(取款)balance(余額)summarize(清單)creditLimit(透支限額)close(關(guān)閉)系統(tǒng)對操作的限制:必須在應(yīng)用其它操作之前先打開帳戶,在完成了全部操作之后才能關(guān)閉帳戶;……在限制下還是存在操作的許多排列測試單個類的方法(1)隨機測試例:銀行系統(tǒng)的account(66一個account類實例的最小行為歷史包括下列操作:open.setup.deposit.withdraw.close

account類的最小測試序列大量的其它行為可能在下面序列中發(fā)生:open.setup.deposit.[deposit|withdraw|balance|summarize|creditLimit]n.withdraw.close

一系列不同的操作序列可以隨機地產(chǎn)生,例如:測試用例r1:open.setup.deposit.deposit.balance.

summarize.creditLimit.withdraw.close

測試用例r2:open.setup.deposit.withdraw.deposit.balance.creditLimit.withdraw.close這些和其它的隨機順序測試被進行,以測試不同的類實例的生存歷史.一個account類實例的最小行為歷史包括下列操作:測試用例67測試單個類的方法(2)劃分測試(partitiontesting)

與測試傳統(tǒng)軟件時采用的等價類劃分方法類似.

劃分類別的方法:基于狀態(tài)的劃分基于屬性的劃分基于功能的劃分測試單個類的方法(2)劃分測試(partitiontest68基于狀態(tài)的劃分根據(jù)類操作改變類狀態(tài)的能力來劃分類操作.例:銀行系統(tǒng)的account(帳戶)類

狀態(tài)操作包括:deposit(存款)withdraw(取款)

非狀態(tài)操作包括:balance(余額)summarize(清單)creditLimit(透支限額)測試用例p1(測試改變狀態(tài)的操作):

open.setup.deposit.deposit..withdraw.close

測試用例p2(測試不改變狀態(tài)的操作,在最小測試序列中的操作除外):open.setup.deposit.summarize.creditLimit.withdraw.close基于狀態(tài)的劃分根據(jù)類操作改變類狀態(tài)的能力來劃分類操作.例69基于屬性的劃分根據(jù)類操作使用的屬性來劃分類操作.例:account類可根據(jù)balance屬性來把操作定義劃分為三個類別:

使用balance的操作修改balance的操作不使用也不修改balance的操作

為上述每個類別設(shè)計測試序列基于屬性的劃分根據(jù)類操作使用的屬性來劃分類操作.例:ac70基于功能的劃分根據(jù)類操作所完成的功能來劃分類操作.例:account類中的操作按功能可劃分為四個類別:

初始化操作(open,setup)計算操作(deposit,withdraw)查詢操作(balance,summarize,creditLimit)終止操作(close)

為上述每個類別設(shè)計測試序列基于功能的劃分根據(jù)類操作所完成的功能來劃分類操作.例:a71

setupacctaccount類的狀態(tài)轉(zhuǎn)換圖emptyacctdeadacctsetupAaccentbalancecreditacctInfoclosedeposit(initial)depositwithdrawworkingacctopenwithdrawal(final)nonworkingacct測試單個類的方法(3)基于狀態(tài)的測試setupaccount類的狀態(tài)轉(zhuǎn)換圖empty72測試單個類的方法(4)基于故障的測試(fault_basedtesting)與測試傳統(tǒng)軟件時采用的錯誤推測法類似.測試單個類的方法與測試傳統(tǒng)軟件時采用的錯誤推測法類似.73

5.7.2

對象的集成測試

OO軟件沒有層次的控制結(jié)構(gòu),傳統(tǒng)的自頂向下和自底向上的集成策略沒有意義.OO軟件的兩種集成策略:基于使用的測試(用例或基于場景的測試)

基于線程的測試(thread-basedtesting)

集成響應(yīng)系統(tǒng)的一個輸入或事件所需的一組類,每個線程被個體地集成和測試,通過回歸測試保證沒有副作用產(chǎn)生;對象交互測試

5.7.2對象的集成測試OO軟件沒有層次74

ATMBank銀行系統(tǒng)的類協(xié)作圖ATMUserInterfaceAccountCashierverifyAcctverifyPINverifyPolicywithdrawReqdepositReqacctInfoReqcardInsertedpassworddepositwithdrawaccentStatusterminatevalidPINvalidAcctcreditLimitaccentTypebalancewithdrawdepositcloseValidationInfoverifyStatusdepositStatusdispenseCaseprintAccentStatreadCardInfogetCaseAmntopenAcctinitialDepositauthorizeCarddeuthorizecloseAcctATMBank銀行系統(tǒng)的類協(xié)作圖ATMAccoun75

OO集成測試方法(1)多個類測試Kirani,S.andW.T.Tsai,在“SpecificationandVerificationofObject-OrientedPrograms”中建議了下面的步驟序列以生成多個類隨機測試用例:1.對每個客戶類,使用類操作列表來生成一系列隨機測試序列,這些操作發(fā)送消息給服務(wù)器類;2.對生成的每個消息,確定在服務(wù)器對象中的協(xié)作者類和對應(yīng)的操作;3.對服務(wù)器對象中的每個操作(已經(jīng)被來自客戶對象的消息調(diào)用),確定傳遞的消息;4.對每個消息,確定下一層被調(diào)用的操作,并把這些操作結(jié)合進測試序列中.OO集成測試方法(1)多個類測試76

ATMBank銀行系統(tǒng)的類協(xié)作圖ATMUserInterfaceAccountCashierverifyAcctverifyPINverifyPolicywithdrawReqdepositReqacctInfoReqvalidPINvalidAcctcreditLimitaccentTypebalancewithdrawdepositcloseopenAcctinitialDepositauthorizeCarddeuthorizecloseAcctValidationInfoverifyStatusdepositStatusdispenseCaseprintAccentStatreadCardInfogetCaseAmntcardInsertedpassworddepositwithdrawaccentStatusterminateATMBank銀行系統(tǒng)的類協(xié)作圖ATMAccoun77銀行系統(tǒng)中Bank類和ATM類的操作序列:verifyAcct?verifyPIN?[[verifyPolicy?withdrawReq]|depositReq|acctInfoReq]n對Bank類的隨機測試用例可能是:測試用例r3:verifyAcct?verifyPIN?depositReq為了考慮測試中涉及的協(xié)作者,需要考慮與測試用例r3中每個操作相關(guān)聯(lián)的消息:Bank必須和ValidationInfo協(xié)作以執(zhí)行depositReq、verifyAcct和verifyPINBank還必須和Account協(xié)作以執(zhí)行deposit因此,測試這些協(xié)作的新的測試用例是:測試用例r4:verifyAcctBank?[validAcctValidationInfo]?

verifyPINBank

?[validPINValidationInfo]

?

depositReq

?[depositAccount]銀行系統(tǒng)中Bank類和ATM類的操作序列:verifyAcc78

OO集成測試方法(2)從動態(tài)模型導出測試用例

設(shè)計的測試用例應(yīng)達到完全的狀態(tài)覆蓋,即操作序列應(yīng)導致account類的變遷穿越所有允許的狀態(tài):測試用例s1:open?setupAccent?deposit(initial)?withdraw(final)?close(最小測試序列)

向最小序列中加入附加的測試序列,例如:測試用例s2:open?setupAccent?deposit(initial)?deposit?balance?credit?withdraw(final)?close測試用例s3:open?setupAccent?deposit(initial)?deposit?withdraw?accntInfo?withdraw(final)?close……導出更多的測試用例以保證該類的所有行為都被適當?shù)販y試OO集成測試方法(2)從動態(tài)模型導出測試用例向最小序列中加79

5.7.3

OO系統(tǒng)的確認測試在確認和系統(tǒng)測試層次,類連接的細節(jié)消失.和傳統(tǒng)的確認測試一樣,OO軟件的確認關(guān)注用戶可見的動作和用戶可識別的系統(tǒng)輸出.為輔助確認測試的導出,應(yīng)利用分析模型中的用例圖提供的場景來提高交互需求中發(fā)現(xiàn)錯誤的可能性5.7.3OO系統(tǒng)的確認測試在確認和系統(tǒng)測試層次,類連接80§5.8自動測試和測試工具自動化和工具的好處速度效率準確度和精確度堅持不懈§5.8自動測試和測試工具自動化和工具的好處815.8.1測試工具靜態(tài)分析工具動態(tài)測試工具測試數(shù)據(jù)自動生成工具集成化測試環(huán)境非侵入式工具侵入式工具5.8.1測試工具靜態(tài)分析工具82測試工作臺(下游CASE工具)源代碼被測試的程序測試數(shù)據(jù)規(guī)約預測器測試管理器測試預估模擬器文件比較器報告生成器動態(tài)分析器測試結(jié)果測試結(jié)果報告執(zhí)行報告測試數(shù)據(jù)生成器測試工作臺(下游CASE工具)源代碼被測試測試數(shù)據(jù)規(guī)約預測器83查看器和監(jiān)視器1#計算機軟件正在測試2#計算機軟件正在測試3#計算機查看測試工具通信線路監(jiān)聽線路通信分析器可以查看兩個系統(tǒng)之間傳輸?shù)脑紨?shù)據(jù)(非侵入)(輸入測試用例)(確認產(chǎn)生的通信數(shù)據(jù))(檢查相應(yīng)結(jié)果)查看器和監(jiān)視器1#計算機2#計算機3#計算機通信線路監(jiān)聽線路84驅(qū)動程序普通系統(tǒng)配置測試驅(qū)動配置(在此計算機上編寫簡單的程序自動產(chǎn)生相應(yīng)的擊鍵和鼠標移動來測試軟件)鍵盤電纜鼠標電纜一臺計算機可以作為驅(qū)動程序測試工具取代被測試系統(tǒng)的鍵盤和鼠標從外部計算機發(fā)送擊鍵鼠標的移動信息,被測試軟件不被侵入,如果測試軟件時在同一系統(tǒng)中執(zhí)行驅(qū)動程序,它就會侵入系統(tǒng),這種測試情況可能無法接受驅(qū)動程序普通系統(tǒng)配置測試驅(qū)動配置鍵盤鼠標一臺計算機可以作為85管道和仿真器普通系統(tǒng)配置測試存根配置一臺計算機可以充當管道,代替打印機,能夠?qū)y試輸出進行更有效的分析運行管道軟件來代替打印機,對打印數(shù)據(jù)進行閱讀和解釋管道和仿真器普通系統(tǒng)配置測試存根配置一臺計算機可以充當管道,86其它工具類型:施壓工具和增負工具干擾發(fā)生器和噪聲發(fā)生器分析工具其它工具類型:施壓工具和增負工具干擾發(fā)生器和噪聲發(fā)生器分87測試工具產(chǎn)品實例JUnit:Java單元測試工具CppUnit:C++單元測試工具Dunit:Delphi的終極測試工具測試工具產(chǎn)品實例JUnit:Java單元測試工具885.8.2測試測試自動化

另一類軟件測試工具,可以自動執(zhí)行測試用例、查找軟件缺陷、分析并記錄測試結(jié)果。5.8.2測試測試自動化另一類軟件測試工具,可以89隨機測試:猴子測試員只要不停電,偶爾能夠得到香蕉,猴子就會永遠測試下去一個想法:

“如果讓一百萬只猴子在一百萬只鍵盤上敲一百萬年,它們最終就可能寫出莎士比亞話劇等巨著”.隨機測試:猴子測試員只要不停電,偶爾能夠得到香蕉,猴子就會永90猴子的進步笨猴子:一點也不懂測試軟件,只是隨機地單擊或按鍵,直至發(fā)生兩件事情之一:完成循環(huán)或系統(tǒng)崩潰.不太笨的猴子:

具有崩潰辨認能力,能夠重新啟動系統(tǒng)開始測試聰明猴子:能夠從它的笨兄弟那里獲得隨機測試的結(jié)果,增加了對環(huán)境的認知能力,有目的地敲鍵盤,不僅限于查找崩潰缺陷,同時查看數(shù)據(jù),檢查操作結(jié)果,找出與預期結(jié)果的差別猴子的進步笨猴子:一點也不懂測試軟件,只是隨機地單擊或按鍵91自動化測試工具實例美國國際軟件自動化(ISA)公司的PanoramaforC/C++,j、Java和VB產(chǎn)品,自動化功能包括:軟件結(jié)構(gòu)分析與邏輯框圖的自動化軟件靜態(tài)分析數(shù)據(jù)分析復雜性分析與分析結(jié)果列表的自動化軟件質(zhì)量分析動態(tài)性能分析軟件代碼分支或條件覆蓋率分析軟件測試用例有效性分析與測試用例最小集的自動選取軟件界面手工操作過程的自動記錄與自動再執(zhí)行(Playback)自動化測試工具實例美國國際軟件自動化(ISA)公司92§5.9測試中的可靠性分析

開發(fā)過程中,利用測試的統(tǒng)計數(shù)據(jù)來估算軟件的可靠性,以控制軟件的質(zhì)量。推測錯誤的產(chǎn)生頻度推測殘留在程序中的錯誤數(shù)評價測試的精確度和覆蓋率§5.9測試中的可靠性分析開發(fā)過程中,利用測試的統(tǒng)93推測錯誤的產(chǎn)生頻度(推測錯誤產(chǎn)生的時間間隔)1K(ET/IT-Ec(t)/IT)方法:估算平均故障時間(MTTF估算公式)MTTF=K:

經(jīng)驗常數(shù)ET:

程序中原有的殘留錯誤數(shù)IT:

程序長度t:測試時間

Ec(t):在0-t期間內(nèi)發(fā)現(xiàn)的錯誤總數(shù)λ1=當故障率為獨立于時間的常量λ:推測錯誤的產(chǎn)生頻度(推測錯誤產(chǎn)生的時間間隔)1K(ET/IT94推測殘留在程序中的錯誤數(shù)錯誤植入模型Mills將播種模型用于程序中殘留錯誤的估算,稱錯誤植入模型播種模型:

N:程序中原有殘留的錯誤數(shù)Nt:新植入的錯誤數(shù)n:測試發(fā)現(xiàn)的原有錯誤數(shù)nt:測試發(fā)現(xiàn)的植入錯誤數(shù)NNnnt≈tNNnnt=t推測殘留在程序中的錯誤數(shù)錯誤植入模型NNnnt≈tNNn95Hyman對錯誤植入模型的改進ET:程序中原有的殘留錯誤數(shù)E1:1號測試員在某一時間內(nèi)發(fā)現(xiàn)的錯誤數(shù)E2:2號測試員在同一時間內(nèi)發(fā)現(xiàn)的錯誤數(shù)E0:兩位測試員共同發(fā)現(xiàn)的錯誤數(shù)EEE1≈0=2ETE1E2/E0ETHyman對錯誤植入模型的改進ET:程序中原有的殘留錯誤數(shù)96第六章軟件進化遺留系統(tǒng)軟件變更策略軟件維護體系結(jié)構(gòu)進化軟件再工程配置管理第六章軟件進化遺留系統(tǒng)97§6.1遺留系統(tǒng)更換遺留系統(tǒng)是有風險的業(yè)務(wù)策略,因為:遺留系統(tǒng)幾乎沒有完整的描述業(yè)務(wù)過程與遺留系統(tǒng)的操作方式緊密相關(guān)重要的業(yè)務(wù)規(guī)則隱藏在軟件內(nèi)部開發(fā)新軟件有風險繼續(xù)使用遺留系統(tǒng),進行變更費用更高,因為:系統(tǒng)是由不同團對實現(xiàn)的,程序設(shè)計風格不一致系統(tǒng)使用過時的語言編寫系統(tǒng)文檔不充分、過時經(jīng)多年維護,系統(tǒng)結(jié)構(gòu)已破壞系統(tǒng)進行過優(yōu)化,不可讀系統(tǒng)數(shù)據(jù)過時、不完整§6.1遺留系統(tǒng)更換遺留系統(tǒng)是有風險的業(yè)務(wù)策略,因為:繼續(xù)98遺留系統(tǒng)評估對遺留系統(tǒng)做現(xiàn)實的評估,做出適當?shù)木駬瘢簭氐讙仐壪到y(tǒng)繼續(xù)維護系統(tǒng)采用某種方式轉(zhuǎn)換系統(tǒng)以改善其可維護性以一個新的系統(tǒng)代替該系統(tǒng)遺留系統(tǒng)評估對遺留系統(tǒng)做現(xiàn)實的評估,做出適當?shù)木駬瘢?9§6.2軟件維護

四類維護活動:改正性維護適應(yīng)性維護擴充與完善性維護預防性維護§6.2軟件維護四類維護活動:100各種維護所占比例:其它維護5%適應(yīng)性維護25%改正性維護20%擴充與完善性維護50%改正性維護占全部維護量的比率已從80年代初的20%大幅度下降,90年代初一些公司的產(chǎn)品差錯率已接近于零各種維護所占比例:其它維護適應(yīng)性改正性擴充與完改正性維護占1016.2.1軟件維護的特點MP+Ke=(c-d)M

:維護工作總工作量P:生產(chǎn)性工作量K

:

經(jīng)驗常數(shù)c:復雜度d:對該軟件熟悉程度的度量維護的成本6.2.1軟件維護的特點MP+Ke=(c-d)M:維護102維護中的典型問題(1)難以跟蹤軟件版本的進化過程,軟件的變化未在文檔中反映出來.(2)難以跟蹤軟件的創(chuàng)建過程.(3)難以讀懂他人程序.(4)無文檔或不全.(5)軟件人員流動性大.(6)設(shè)計時未考慮修改需要,修改困難.(7)維護工作無吸引力,缺乏成就感.維護中的典型問題(1)難以跟蹤軟件版本的進化過程,1036.2.2軟件的維護任務(wù)修改負責人維護申請系統(tǒng)監(jiān)督員配置管理員維護機構(gòu)維護人員維護管理員6.2.2軟件的維護任務(wù)修改維護申請系統(tǒng)監(jiān)督員配置管理員維104保存維護記錄維護過程中作應(yīng)記錄的數(shù)據(jù)程序標識源程序語句數(shù)目機器代碼指令條數(shù)..............以收集的數(shù)據(jù)為基礎(chǔ)構(gòu)造維護數(shù)據(jù)庫,供維護評價使用.保存維護記錄維護過程中作應(yīng)記錄的數(shù)據(jù)1056.2.3軟件維護的實施修改源程序的三個步驟分析和理解程序修改程序重新驗證程序6.2.3軟件維護的實施修改源程序的三個步驟106修改程序的副作用修改代碼的副作用修改數(shù)據(jù)的副作用修改文檔的副作用修改程序的副作用修改代碼的副作用107重新驗證程序靜態(tài)確認計算機確認維護后的驗收重新

溫馨提示

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

評論

0/150

提交評論