版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
§5.7面向?qū)ο蟮能浖y(cè)試OO的系統(tǒng)與使用功能模型開發(fā)的系統(tǒng)之間的差別:對(duì)象作為一個(gè)單獨(dú)的組件一般要比一個(gè)功能模塊大由對(duì)象到子系統(tǒng)的集成通常是松散耦合的,系統(tǒng)中沒有一個(gè)明顯的“頂層”如果對(duì)象被復(fù)用,測(cè)試者就無法進(jìn)入組件內(nèi)部分析其代碼測(cè)試策略和測(cè)試戰(zhàn)術(shù)的改變白盒測(cè)試方法需要擴(kuò)展到更大粒度的對(duì)象上集成測(cè)試采用黑盒測(cè)試§5.7面向?qū)ο蟮能浖y(cè)試OO的系統(tǒng)與使用功能模型開發(fā)的1面向?qū)ο笙到y(tǒng)的測(cè)試可分為四個(gè)層次測(cè)試與對(duì)象關(guān)聯(lián)的單個(gè)操作測(cè)試單個(gè)對(duì)象類測(cè)試對(duì)象集群測(cè)試面向?qū)ο笙到y(tǒng)面向?qū)ο笙到y(tǒng)的測(cè)試可分為四個(gè)層次測(cè)試與對(duì)象關(guān)聯(lián)的單個(gè)操作2
5.7.1對(duì)象類的測(cè)試用白盒的覆蓋測(cè)試方法保證所有程序中的語(yǔ)句至少執(zhí)行一遍,所有的程序路徑都要執(zhí)行到。對(duì)象的完全覆蓋測(cè)試應(yīng)包括:對(duì)象中所有操作被單獨(dú)隔離測(cè)試對(duì)象所有屬性的設(shè)置和訪問的測(cè)試對(duì)象的所有可能狀態(tài)的測(cè)試。所有能引起狀態(tài)改變的事件都要模擬到。相當(dāng)于傳統(tǒng)的單元測(cè)試,單元概念的變化—封裝的類或?qū)ο笞鳛樽钚〉目蓽y(cè)試單位5.7.1對(duì)象類的測(cè)試用白盒的覆蓋測(cè)試方法保證所有程序3測(cè)試單個(gè)類的方法(1)隨機(jī)測(cè)試?yán)?銀行系統(tǒng)的account(帳戶)類有下列操作:open(打開)setup(建立)deposit(存款)withdraw(取款)balance(余額)summarize(清單)creditLimit(透支限額)close(關(guān)閉)系統(tǒng)對(duì)操作的限制:必須在應(yīng)用其它操作之前先打開帳戶,在完成了全部操作之后才能關(guān)閉帳戶;……在限制下還是存在操作的許多排列測(cè)試單個(gè)類的方法(1)隨機(jī)測(cè)試?yán)?銀行系統(tǒng)的account(4一個(gè)account類實(shí)例的最小行為歷史包括下列操作:open.setup.deposit.withdraw.close
account類的最小測(cè)試序列大量的其它行為可能在下面序列中發(fā)生:open.setup.deposit.[deposit|withdraw|balance|summarize|creditLimit]n.withdraw.close
一系列不同的操作序列可以隨機(jī)地產(chǎn)生,例如:測(cè)試用例r1:open.setup.deposit.deposit.balance.
summarize.creditLimit.withdraw.close
測(cè)試用例r2:open.setup.deposit.withdraw.deposit.balance.creditLimit.withdraw.close這些和其它的隨機(jī)順序測(cè)試被進(jìn)行,以測(cè)試不同的類實(shí)例的生存歷史.一個(gè)account類實(shí)例的最小行為歷史包括下列操作:測(cè)試用例5測(cè)試單個(gè)類的方法(2)劃分測(cè)試(partitiontesting)
與測(cè)試傳統(tǒng)軟件時(shí)采用的等價(jià)類劃分方法類似.
劃分類別的方法:基于狀態(tài)的劃分基于屬性的劃分基于功能的劃分測(cè)試單個(gè)類的方法(2)劃分測(cè)試(partitiontest6基于狀態(tài)的劃分根據(jù)類操作改變類狀態(tài)的能力來劃分類操作.例:銀行系統(tǒng)的account(帳戶)類
狀態(tài)操作包括:deposit(存款)withdraw(取款)
非狀態(tài)操作包括:balance(余額)summarize(清單)creditLimit(透支限額)測(cè)試用例p1(測(cè)試改變狀態(tài)的操作):
open.setup.deposit.deposit..withdraw.close
測(cè)試用例p2(測(cè)試不改變狀態(tài)的操作,在最小測(cè)試序列中的操作除外):open.setup.deposit.summarize.creditLimit.withdraw.close基于狀態(tài)的劃分根據(jù)類操作改變類狀態(tài)的能力來劃分類操作.例7基于屬性的劃分根據(jù)類操作使用的屬性來劃分類操作.例:account類可根據(jù)balance屬性來把操作定義劃分為三個(gè)類別:
使用balance的操作修改balance的操作不使用也不修改balance的操作
為上述每個(gè)類別設(shè)計(jì)測(cè)試序列基于屬性的劃分根據(jù)類操作使用的屬性來劃分類操作.例:ac8基于功能的劃分根據(jù)類操作所完成的功能來劃分類操作.例:account類中的操作按功能可劃分為四個(gè)類別:
初始化操作(open,setup)計(jì)算操作(deposit,withdraw)查詢操作(balance,summarize,creditLimit)終止操作(close)
為上述每個(gè)類別設(shè)計(jì)測(cè)試序列基于功能的劃分根據(jù)類操作所完成的功能來劃分類操作.例:a9
setupacctaccount類的狀態(tài)轉(zhuǎn)換圖emptyacctdeadacctsetupAaccentbalancecreditacctInfoclosedeposit(initial)depositwithdrawworkingacctopenwithdrawal(final)nonworkingacct測(cè)試單個(gè)類的方法(3)基于狀態(tài)的測(cè)試setupaccount類的狀態(tài)轉(zhuǎn)換圖empty10測(cè)試單個(gè)類的方法(4)基于故障的測(cè)試(fault_basedtesting)與測(cè)試傳統(tǒng)軟件時(shí)采用的錯(cuò)誤推測(cè)法類似.測(cè)試單個(gè)類的方法與測(cè)試傳統(tǒng)軟件時(shí)采用的錯(cuò)誤推測(cè)法類似.11
5.7.2
對(duì)象的集成測(cè)試
OO軟件沒有層次的控制結(jié)構(gòu),傳統(tǒng)的自頂向下和自底向上的集成策略沒有意義.OO軟件的兩種集成策略:基于使用的測(cè)試(用例或基于場(chǎng)景的測(cè)試)
基于線程的測(cè)試(thread-basedtesting)
集成響應(yīng)系統(tǒng)的一個(gè)輸入或事件所需的一組類,每個(gè)線程被個(gè)體地集成和測(cè)試,通過回歸測(cè)試保證沒有副作用產(chǎn)生;對(duì)象交互測(cè)試
5.7.2對(duì)象的集成測(cè)試OO軟件沒有層次12
ATMBank銀行系統(tǒng)的類協(xié)作圖ATMUserInterfaceAccountCashierverifyAcctverifyPINverifyPolicywithdrawReqdepositReqacctInfoReqcardInsertedpassworddepositwithdrawaccentStatusterminatevalidPINvalidAcctcreditLimitaccentTypebalancewithdrawdepositcloseValidationInfoverifyStatusdepositStatusdispenseCaseprintAccentStatreadCardInfogetCaseAmntopenAcctinitialDepositauthorizeCarddeuthorizecloseAcctATMBank銀行系統(tǒng)的類協(xié)作圖ATMAccoun13
OO集成測(cè)試方法(1)多個(gè)類測(cè)試Kirani,S.andW.T.Tsai,在“SpecificationandVerificationofObject-OrientedPrograms”中建議了下面的步驟序列以生成多個(gè)類隨機(jī)測(cè)試用例:1.對(duì)每個(gè)客戶類,使用類操作列表來生成一系列隨機(jī)測(cè)試序列,這些操作發(fā)送消息給服務(wù)器類;2.對(duì)生成的每個(gè)消息,確定在服務(wù)器對(duì)象中的協(xié)作者類和對(duì)應(yīng)的操作;3.對(duì)服務(wù)器對(duì)象中的每個(gè)操作(已經(jīng)被來自客戶對(duì)象的消息調(diào)用),確定傳遞的消息;4.對(duì)每個(gè)消息,確定下一層被調(diào)用的操作,并把這些操作結(jié)合進(jìn)測(cè)試序列中.OO集成測(cè)試方法(1)多個(gè)類測(cè)試14
ATMBank銀行系統(tǒng)的類協(xié)作圖ATMUserInterfaceAccountCashierverifyAcctverifyPINverifyPolicywithdrawReqdepositReqacctInfoReqvalidPINvalidAcctcreditLimitaccentTypebalancewithdrawdepositcloseopenAcctinitialDepositauthorizeCarddeuthorizecloseAcctValidationInfoverifyStatusdepositStatusdispenseCaseprintAccentStatreadCardInfogetCaseAmntcardInsertedpassworddepositwithdrawaccentStatusterminateATMBank銀行系統(tǒng)的類協(xié)作圖ATMAccoun15銀行系統(tǒng)中Bank類和ATM類的操作序列:verifyAcct?verifyPIN?[[verifyPolicy?withdrawReq]|depositReq|acctInfoReq]n對(duì)Bank類的隨機(jī)測(cè)試用例可能是:測(cè)試用例r3:verifyAcct?verifyPIN?depositReq為了考慮測(cè)試中涉及的協(xié)作者,需要考慮與測(cè)試用例r3中每個(gè)操作相關(guān)聯(lián)的消息:Bank必須和ValidationInfo協(xié)作以執(zhí)行depositReq、verifyAcct和verifyPINBank還必須和Account協(xié)作以執(zhí)行deposit因此,測(cè)試這些協(xié)作的新的測(cè)試用例是:測(cè)試用例r4:verifyAcctBank?[validAcctValidationInfo]?
verifyPINBank
?[validPINValidationInfo]
?
depositReq
?[depositAccount]銀行系統(tǒng)中Bank類和ATM類的操作序列:verifyAcc16
OO集成測(cè)試方法(2)從動(dòng)態(tài)模型導(dǎo)出測(cè)試用例
設(shè)計(jì)的測(cè)試用例應(yīng)達(dá)到完全的狀態(tài)覆蓋,即操作序列應(yīng)導(dǎo)致account類的變遷穿越所有允許的狀態(tài):測(cè)試用例s1:open?setupAccent?deposit(initial)?withdraw(final)?close(最小測(cè)試序列)
向最小序列中加入附加的測(cè)試序列,例如:測(cè)試用例s2:open?setupAccent?deposit(initial)?deposit?balance?credit?withdraw(final)?close測(cè)試用例s3:open?setupAccent?deposit(initial)?deposit?withdraw?accntInfo?withdraw(final)?close……導(dǎo)出更多的測(cè)試用例以保證該類的所有行為都被適當(dāng)?shù)販y(cè)試OO集成測(cè)試方法(2)從動(dòng)態(tài)模型導(dǎo)出測(cè)試用例向最小序列中加17
5.7.3
OO系統(tǒng)的確認(rèn)測(cè)試在確認(rèn)和系統(tǒng)測(cè)試層次,類連接的細(xì)節(jié)消失.和傳統(tǒng)的確認(rèn)測(cè)試一樣,OO軟件的確認(rèn)關(guān)注用戶可見的動(dòng)作和用戶可識(shí)別的系統(tǒng)輸出.為輔助確認(rèn)測(cè)試的導(dǎo)出,應(yīng)利用分析模型中的用例圖提供的場(chǎng)景來提高交互需求中發(fā)現(xiàn)錯(cuò)誤的可能性5.7.3OO系統(tǒng)的確認(rèn)測(cè)試在確認(rèn)和系統(tǒng)測(cè)試層次,類連接18§5.8自動(dòng)測(cè)試和測(cè)試工具自動(dòng)化和工具的好處速度效率準(zhǔn)確度和精確度堅(jiān)持不懈§5.8自動(dòng)測(cè)試和測(cè)試工具自動(dòng)化和工具的好處195.8.1測(cè)試工具靜態(tài)分析工具動(dòng)態(tài)測(cè)試工具測(cè)試數(shù)據(jù)自動(dòng)生成工具集成化測(cè)試環(huán)境非侵入式工具侵入式工具5.8.1測(cè)試工具靜態(tài)分析工具20測(cè)試工作臺(tái)(下游CASE工具)源代碼被測(cè)試的程序測(cè)試數(shù)據(jù)規(guī)約預(yù)測(cè)器測(cè)試管理器測(cè)試預(yù)估模擬器文件比較器報(bào)告生成器動(dòng)態(tài)分析器測(cè)試結(jié)果測(cè)試結(jié)果報(bào)告執(zhí)行報(bào)告測(cè)試數(shù)據(jù)生成器測(cè)試工作臺(tái)(下游CASE工具)源代碼被測(cè)試測(cè)試數(shù)據(jù)規(guī)約預(yù)測(cè)器21查看器和監(jiān)視器1#計(jì)算機(jī)軟件正在測(cè)試2#計(jì)算機(jī)軟件正在測(cè)試3#計(jì)算機(jī)查看測(cè)試工具通信線路監(jiān)聽線路通信分析器可以查看兩個(gè)系統(tǒng)之間傳輸?shù)脑紨?shù)據(jù)(非侵入)(輸入測(cè)試用例)(確認(rèn)產(chǎn)生的通信數(shù)據(jù))(檢查相應(yīng)結(jié)果)查看器和監(jiān)視器1#計(jì)算機(jī)2#計(jì)算機(jī)3#計(jì)算機(jī)通信線路監(jiān)聽線路22驅(qū)動(dòng)程序普通系統(tǒng)配置測(cè)試驅(qū)動(dòng)配置(在此計(jì)算機(jī)上編寫簡(jiǎn)單的程序自動(dòng)產(chǎn)生相應(yīng)的擊鍵和鼠標(biāo)移動(dòng)來測(cè)試軟件)鍵盤電纜鼠標(biāo)電纜一臺(tái)計(jì)算機(jī)可以作為驅(qū)動(dòng)程序測(cè)試工具取代被測(cè)試系統(tǒng)的鍵盤和鼠標(biāo)從外部計(jì)算機(jī)發(fā)送擊鍵鼠標(biāo)的移動(dòng)信息,被測(cè)試軟件不被侵入,如果測(cè)試軟件時(shí)在同一系統(tǒng)中執(zhí)行驅(qū)動(dòng)程序,它就會(huì)侵入系統(tǒng),這種測(cè)試情況可能無法接受驅(qū)動(dòng)程序普通系統(tǒng)配置測(cè)試驅(qū)動(dòng)配置鍵盤鼠標(biāo)一臺(tái)計(jì)算機(jī)可以作為23管道和仿真器普通系統(tǒng)配置測(cè)試存根配置一臺(tái)計(jì)算機(jī)可以充當(dāng)管道,代替打印機(jī),能夠?qū)y(cè)試輸出進(jìn)行更有效的分析運(yùn)行管道軟件來代替打印機(jī),對(duì)打印數(shù)據(jù)進(jìn)行閱讀和解釋管道和仿真器普通系統(tǒng)配置測(cè)試存根配置一臺(tái)計(jì)算機(jī)可以充當(dāng)管道,24其它工具類型:施壓工具和增負(fù)工具干擾發(fā)生器和噪聲發(fā)生器分析工具其它工具類型:施壓工具和增負(fù)工具干擾發(fā)生器和噪聲發(fā)生器分25測(cè)試工具產(chǎn)品實(shí)例JUnit:Java單元測(cè)試工具CppUnit:C++單元測(cè)試工具Dunit:Delphi的終極測(cè)試工具測(cè)試工具產(chǎn)品實(shí)例JUnit:Java單元測(cè)試工具265.8.2測(cè)試測(cè)試自動(dòng)化
另一類軟件測(cè)試工具,可以自動(dòng)執(zhí)行測(cè)試用例、查找軟件缺陷、分析并記錄測(cè)試結(jié)果。5.8.2測(cè)試測(cè)試自動(dòng)化另一類軟件測(cè)試工具,可以27隨機(jī)測(cè)試:猴子測(cè)試員只要不停電,偶爾能夠得到香蕉,猴子就會(huì)永遠(yuǎn)測(cè)試下去一個(gè)想法:
“如果讓一百萬只猴子在一百萬只鍵盤上敲一百萬年,它們最終就可能寫出莎士比亞話劇等巨著”.隨機(jī)測(cè)試:猴子測(cè)試員只要不停電,偶爾能夠得到香蕉,猴子就會(huì)永28猴子的進(jìn)步笨猴子:一點(diǎn)也不懂測(cè)試軟件,只是隨機(jī)地單擊或按鍵,直至發(fā)生兩件事情之一:完成循環(huán)或系統(tǒng)崩潰.不太笨的猴子:
具有崩潰辨認(rèn)能力,能夠重新啟動(dòng)系統(tǒng)開始測(cè)試聰明猴子:能夠從它的笨兄弟那里獲得隨機(jī)測(cè)試的結(jié)果,增加了對(duì)環(huán)境的認(rèn)知能力,有目的地敲鍵盤,不僅限于查找崩潰缺陷,同時(shí)查看數(shù)據(jù),檢查操作結(jié)果,找出與預(yù)期結(jié)果的差別猴子的進(jìn)步笨猴子:一點(diǎn)也不懂測(cè)試軟件,只是隨機(jī)地單擊或按鍵29自動(dòng)化測(cè)試工具實(shí)例美國(guó)國(guó)際軟件自動(dòng)化(ISA)公司的PanoramaforC/C++,j、Java和VB產(chǎn)品,自動(dòng)化功能包括:軟件結(jié)構(gòu)分析與邏輯框圖的自動(dòng)化軟件靜態(tài)分析數(shù)據(jù)分析復(fù)雜性分析與分析結(jié)果列表的自動(dòng)化軟件質(zhì)量分析動(dòng)態(tài)性能分析軟件代碼分支或條件覆蓋率分析軟件測(cè)試用例有效性分析與測(cè)試用例最小集的自動(dòng)選取軟件界面手工操作過程的自動(dòng)記錄與自動(dòng)再執(zhí)行(Playback)自動(dòng)化測(cè)試工具實(shí)例美國(guó)國(guó)際軟件自動(dòng)化(ISA)公司30§5.9測(cè)試中的可靠性分析
開發(fā)過程中,利用測(cè)試的統(tǒng)計(jì)數(shù)據(jù)來估算軟件的可靠性,以控制軟件的質(zhì)量。推測(cè)錯(cuò)誤的產(chǎn)生頻度推測(cè)殘留在程序中的錯(cuò)誤數(shù)評(píng)價(jià)測(cè)試的精確度和覆蓋率§5.9測(cè)試中的可靠性分析開發(fā)過程中,利用測(cè)試的統(tǒng)31推測(cè)錯(cuò)誤的產(chǎn)生頻度(推測(cè)錯(cuò)誤產(chǎn)生的時(shí)間間隔)1K(ET/IT-Ec(t)/IT)方法:估算平均故障時(shí)間(MTTF估算公式)MTTF=K:
經(jīng)驗(yàn)常數(shù)ET:
程序中原有的殘留錯(cuò)誤數(shù)IT:
程序長(zhǎng)度t:測(cè)試時(shí)間
Ec(t):在0-t期間內(nèi)發(fā)現(xiàn)的錯(cuò)誤總數(shù)λ1=當(dāng)故障率為獨(dú)立于時(shí)間的常量λ:推測(cè)錯(cuò)誤的產(chǎn)生頻度(推測(cè)錯(cuò)誤產(chǎn)生的時(shí)間間隔)1K(ET/IT32推測(cè)殘留在程序中的錯(cuò)誤數(shù)錯(cuò)誤植入模型Mills將播種模型用于程序中殘留錯(cuò)誤的估算,稱錯(cuò)誤植入模型播種模型:
N:程序中原有殘留的錯(cuò)誤數(shù)Nt:新植入的錯(cuò)誤數(shù)n:測(cè)試發(fā)現(xiàn)的原有錯(cuò)誤數(shù)nt:測(cè)試發(fā)現(xiàn)的植入錯(cuò)誤數(shù)NNnnt≈tNNnnt=t推測(cè)殘留在程序中的錯(cuò)誤數(shù)錯(cuò)誤植入模型NNnnt≈tNNn33Hyman對(duì)錯(cuò)誤植入模型的改進(jìn)ET:程序中原有的殘留錯(cuò)誤數(shù)E1:1號(hào)測(cè)試員在某一時(shí)間內(nèi)發(fā)現(xiàn)的錯(cuò)誤數(shù)E2:2號(hào)測(cè)試員在同一時(shí)間內(nèi)發(fā)現(xiàn)的錯(cuò)誤數(shù)E0:兩位測(cè)試員共同發(fā)現(xiàn)的錯(cuò)誤數(shù)EEE1≈0=2ETE1E2/E0ETHyman對(duì)錯(cuò)誤植入模型的改進(jìn)ET:程序中原有的殘留錯(cuò)誤數(shù)34第六章軟件進(jìn)化遺留系統(tǒng)軟件變更策略軟件維護(hù)體系結(jié)構(gòu)進(jìn)化軟件再工程配置管理第六章軟件進(jìn)化遺留系統(tǒng)35§6.1遺留系統(tǒng)更換遺留系統(tǒng)是有風(fēng)險(xiǎn)的業(yè)務(wù)策略,因?yàn)椋哼z留系統(tǒng)幾乎沒有完整的描述業(yè)務(wù)過程與遺留系統(tǒng)的操作方式緊密相關(guān)重要的業(yè)務(wù)規(guī)則隱藏在軟件內(nèi)部開發(fā)新軟件有風(fēng)險(xiǎn)繼續(xù)使用遺留系統(tǒng),進(jìn)行變更費(fèi)用更高,因?yàn)椋合到y(tǒng)是由不同團(tuán)對(duì)實(shí)現(xiàn)的,程序設(shè)計(jì)風(fēng)格不一致系統(tǒng)使用過時(shí)的語(yǔ)言編寫系統(tǒng)文檔不充分、過時(shí)經(jīng)多年維護(hù),系統(tǒng)結(jié)構(gòu)已破壞系統(tǒng)進(jìn)行過優(yōu)化,不可讀系統(tǒng)數(shù)據(jù)過時(shí)、不完整§6.1遺留系統(tǒng)更換遺留系統(tǒng)是有風(fēng)險(xiǎn)的業(yè)務(wù)策略,因?yàn)椋豪^續(xù)36遺留系統(tǒng)評(píng)估對(duì)遺留系統(tǒng)做現(xiàn)實(shí)的評(píng)估,做出適當(dāng)?shù)木駬瘢簭氐讙仐壪到y(tǒng)繼續(xù)維護(hù)系統(tǒng)采用某種方式轉(zhuǎn)換系統(tǒng)以改善其可維護(hù)性以一個(gè)新的系統(tǒng)代替該系統(tǒng)遺留系統(tǒng)評(píng)估對(duì)遺留系統(tǒng)做現(xiàn)實(shí)的評(píng)估,做出適當(dāng)?shù)木駬瘢?7§6.2軟件維護(hù)
四類維護(hù)活動(dòng):改正性維護(hù)適應(yīng)性維護(hù)擴(kuò)充與完善性維護(hù)預(yù)防性維護(hù)§6.2軟件維護(hù)四類維護(hù)活動(dòng):38各種維護(hù)所占比例:其它維護(hù)5%適應(yīng)性維護(hù)25%改正性維護(hù)20%擴(kuò)充與完善性維護(hù)50%改正性維護(hù)占全部維護(hù)量的比率已從80年代初的20%大幅度下降,90年代初一些公司的產(chǎn)品差錯(cuò)率已接近于零各種維護(hù)所占比例:其它維護(hù)適應(yīng)性改正性擴(kuò)充與完改正性維護(hù)占396.2.1軟件維護(hù)的特點(diǎn)MP+Ke=(c-d)M
:維護(hù)工作總工作量P:生產(chǎn)性工作量K
:
經(jīng)驗(yàn)常數(shù)c:復(fù)雜度d:對(duì)該軟件熟悉程度的度量維護(hù)的成本6.2.1軟件維護(hù)的特點(diǎn)MP+Ke=(c-d)M:維護(hù)40維護(hù)中的典型問題(1)難以跟蹤軟件版本的進(jìn)化過程,軟件的變化未在文檔中反映出來.(2)難以跟蹤軟件的創(chuàng)建過程.(3)難以讀懂他人程序.(4)無文檔或不全.(5)軟件人員流動(dòng)性大.(6)設(shè)計(jì)時(shí)未考慮修改需要,修改困難.(7)維護(hù)工作無吸引力,缺乏成就感.維護(hù)中的典型問題(1)難以跟蹤軟件版本的進(jìn)化過程,416.2.2軟件的維護(hù)任務(wù)修改負(fù)責(zé)人維護(hù)申請(qǐng)系統(tǒng)監(jiān)督員配置管理員維護(hù)機(jī)構(gòu)維護(hù)人員維護(hù)管理員6.2.2軟件的維護(hù)任務(wù)修改維護(hù)申請(qǐng)系統(tǒng)監(jiān)督員配置管理員維42保存維護(hù)記錄維護(hù)過程中作應(yīng)記錄的數(shù)據(jù)程序標(biāo)識(shí)源程序語(yǔ)句數(shù)目機(jī)器代碼指令條數(shù)..............以收集的數(shù)據(jù)為基礎(chǔ)構(gòu)造維護(hù)數(shù)據(jù)庫(kù),供維護(hù)評(píng)價(jià)使用.保存維護(hù)記錄維護(hù)過程中作應(yīng)記錄的數(shù)據(jù)436.2.3軟件維護(hù)的實(shí)施修改源程序的三個(gè)步驟分析和理解程序修改程序重新驗(yàn)證程序6.2.3軟件維護(hù)的實(shí)施修改源程序的三個(gè)步驟44修改程序的副作用修改代碼的副作用修改數(shù)據(jù)的副作用修改文檔的副作用修改程序的副作用修改代碼的副作用45重新驗(yàn)證程序靜態(tài)確認(rèn)計(jì)算機(jī)確認(rèn)維護(hù)后的驗(yàn)收重新驗(yàn)證程序靜態(tài)確認(rèn)46從維護(hù)角度所需的測(cè)試種類:(1)對(duì)修改事務(wù)的測(cè)試(2)對(duì)修改程序的測(cè)試(3)操作過程的測(cè)試(4)應(yīng)用系統(tǒng)運(yùn)行過程的測(cè)試(5)使用過程的測(cè)試(6)系統(tǒng)各部分間接口的測(cè)試(7)與系統(tǒng)軟件接口的測(cè)試(8)安全性測(cè)試(9)后備/恢復(fù)過程測(cè)試……從維護(hù)角度所需的測(cè)試種類:(1)對(duì)修改事務(wù)的測(cè)試476.2.4軟件可維護(hù)性軟件可維護(hù)性的定義:軟件可維護(hù)性是指糾正軟件系統(tǒng)出現(xiàn)的錯(cuò)誤和缺陷,以及為滿足新的要求進(jìn)行修改、擴(kuò)充或壓縮的容易程度。衡量軟件質(zhì)量的幾個(gè)主要質(zhì)量特性:可維護(hù)性可使用性可靠性6.2.4軟件可維護(hù)性軟件可維護(hù)性的定義:48可維護(hù)性的度量各類維護(hù)中的側(cè)重點(diǎn)改正性維護(hù)適應(yīng)性維護(hù)完善性維護(hù)可理解性可測(cè)試性可修改性可靠性可移植性可使用性效率度量程序可維護(hù)性的7個(gè)特性可維護(hù)性的度量各類維護(hù)中的側(cè)重點(diǎn)改正性維護(hù)適應(yīng)性496.2.5提高可維護(hù)性的方法
建立明確的軟件質(zhì)量目標(biāo)和優(yōu)先級(jí)使用提高軟件質(zhì)量的技術(shù)和工具進(jìn)行明確的質(zhì)量保證審查選擇可維護(hù)的程序設(shè)計(jì)語(yǔ)言改進(jìn)程序的文檔開發(fā)軟件時(shí)考慮到維護(hù)6.2.5提高可維護(hù)性的方法建立明確的軟件質(zhì)量目標(biāo)和優(yōu)先506.2.4預(yù)防性維護(hù)開發(fā)和維護(hù)者不應(yīng)等待用戶的維護(hù)申請(qǐng),可先選擇以下類型程序作為預(yù)防性維護(hù)對(duì)象:預(yù)計(jì)若干年內(nèi)將繼續(xù)使用的程序當(dāng)今正成功使用的程序最近的將來要進(jìn)行大修改和完善的程序6.2.4預(yù)防性維護(hù)開發(fā)和維護(hù)者不應(yīng)等待用戶的維51§6.3軟件再工程(SoftwareReengineering)6.3.1什么是軟件再工程
軟件再工程是一類軟件工程活動(dòng),是一個(gè)工程過程,它將逆向工程、重構(gòu)和正向工程組合起來,將現(xiàn)存系統(tǒng)重新構(gòu)造為新的形式。
軟件再工程比其它系統(tǒng)進(jìn)化方法具有的絕對(duì)優(yōu)勢(shì)減少軟件演化風(fēng)險(xiǎn)降低成本§6.3軟件再工程(SoftwareReengineeri52
軟件再工程過程模型代碼重構(gòu)數(shù)據(jù)重構(gòu)正向工程庫(kù)存目錄分析文檔重構(gòu)逆向工程軟件再工程過程模型代碼重構(gòu)數(shù)據(jù)重構(gòu)正向工程53再工程過程示意圖
需求新需求設(shè)計(jì)設(shè)計(jì)代碼代碼正向工程反向工程(重構(gòu))(重構(gòu))(重構(gòu))再工程過程示意圖需求新需求設(shè)計(jì)設(shè)計(jì)代碼代碼正反(重構(gòu))(重構(gòu)54再工程方法
增長(zhǎng)的成本自動(dòng)源代碼轉(zhuǎn)換自動(dòng)結(jié)構(gòu)重構(gòu)輔之以手工改變結(jié)構(gòu)重構(gòu)加上體系結(jié)構(gòu)改變自動(dòng)的程序結(jié)構(gòu)重構(gòu)程序和數(shù)據(jù)結(jié)構(gòu)重構(gòu)再工程方法增長(zhǎng)的成本自動(dòng)源代自動(dòng)結(jié)構(gòu)重構(gòu)結(jié)構(gòu)重構(gòu)加上自動(dòng)的程55程序轉(zhuǎn)換過程
識(shí)別源代碼的差異將要再工程的系統(tǒng)設(shè)計(jì)轉(zhuǎn)換器指令自動(dòng)轉(zhuǎn)換代碼經(jīng)過再工程的系統(tǒng)手動(dòng)轉(zhuǎn)換代碼將要再工程的系統(tǒng)程序轉(zhuǎn)換過程識(shí)別源代將要再工程設(shè)計(jì)轉(zhuǎn)換自動(dòng)轉(zhuǎn)換代碼經(jīng)過再工程56逆向工程(反向工程reverseengineering)設(shè)計(jì)的恢復(fù)過程非結(jié)構(gòu)化、無文檔的源代碼或目標(biāo)代碼軟件的文檔從現(xiàn)有軟件恢復(fù)設(shè)計(jì)信息(有用的維護(hù)信息)逆向工程(反向工程reverseengineering)57
逆向工程過程
將要再工程的系統(tǒng)自動(dòng)分析手工加注釋系統(tǒng)信息庫(kù)文檔生成數(shù)據(jù)結(jié)構(gòu)圖程序結(jié)構(gòu)圖可追溯矩陣逆向工程過程將要再工程自動(dòng)分析手工加注釋系統(tǒng)文檔生成數(shù)據(jù)程58逆向工程恢復(fù)信息的級(jí)別:(1)實(shí)現(xiàn)級(jí):程序的抽象語(yǔ)法樹、符號(hào)表等信息(2)結(jié)構(gòu)級(jí):反映程序分量之間相互依賴關(guān)系的信息,如調(diào)用圖、結(jié)構(gòu)圖等.(3)功能級(jí):反映程序段功能和段間關(guān)系的信息(4)領(lǐng)域級(jí):反映程序分量與應(yīng)用領(lǐng)域概念間對(duì)應(yīng)關(guān)系的信息抽象級(jí)別低高信息的抽象級(jí)別越高,它與代碼距離越遠(yuǎn),通過逆向工程恢復(fù)的難度越大,自動(dòng)工具支持的可能性變小逆向工程恢復(fù)信息的級(jí)別:(1)實(shí)現(xiàn)級(jí):程序的抽象語(yǔ)法抽低高信59逆向工程源程序目標(biāo)代碼反匯編、反編譯程序分析技術(shù):程序結(jié)構(gòu)分析工具程序功能分析工具
源程序概要設(shè)計(jì)詳細(xì)設(shè)計(jì)概要設(shè)計(jì)需求分析逆向工程源程序目標(biāo)代碼反匯編、反編譯源程序概要設(shè)計(jì)概要設(shè)計(jì)需60
數(shù)據(jù)重構(gòu)(數(shù)據(jù)再工程)修改遺留系統(tǒng)的程序時(shí)必須同時(shí)修改數(shù)據(jù)數(shù)據(jù)退化程序內(nèi)固有的限制體系結(jié)構(gòu)進(jìn)化
數(shù)據(jù)再工程的方法方法描述數(shù)據(jù)清理分析對(duì)數(shù)據(jù)記錄和值以改善其質(zhì)量,通常不需變更程序數(shù)據(jù)擴(kuò)展數(shù)據(jù)和相關(guān)程序被再工程數(shù)據(jù)遷移數(shù)據(jù)被轉(zhuǎn)移到一個(gè)先進(jìn)的數(shù)據(jù)庫(kù)管理系統(tǒng)之上數(shù)據(jù)重構(gòu)(數(shù)據(jù)再工程)修改遺留系統(tǒng)的程序時(shí)必須同時(shí)修改數(shù)據(jù)61
數(shù)據(jù)再工程過程
將要再工程的程序數(shù)據(jù)分析實(shí)體名修改直接量替換對(duì)數(shù)據(jù)定義重新安排文檔生成修改過的數(shù)據(jù)數(shù)據(jù)重新格式化默認(rèn)值轉(zhuǎn)換驗(yàn)證規(guī)則修改變更匯總表數(shù)據(jù)分析階段1階段2階段3數(shù)據(jù)再工程過程將要再工程的程序數(shù)據(jù)分析實(shí)體名修改文檔生成修62§5.7面向?qū)ο蟮能浖y(cè)試OO的系統(tǒng)與使用功能模型開發(fā)的系統(tǒng)之間的差別:對(duì)象作為一個(gè)單獨(dú)的組件一般要比一個(gè)功能模塊大由對(duì)象到子系統(tǒng)的集成通常是松散耦合的,系統(tǒng)中沒有一個(gè)明顯的“頂層”如果對(duì)象被復(fù)用,測(cè)試者就無法進(jìn)入組件內(nèi)部分析其代碼測(cè)試策略和測(cè)試戰(zhàn)術(shù)的改變白盒測(cè)試方法需要擴(kuò)展到更大粒度的對(duì)象上集成測(cè)試采用黑盒測(cè)試§5.7面向?qū)ο蟮能浖y(cè)試OO的系統(tǒng)與使用功能模型開發(fā)的63面向?qū)ο笙到y(tǒng)的測(cè)試可分為四個(gè)層次測(cè)試與對(duì)象關(guān)聯(lián)的單個(gè)操作測(cè)試單個(gè)對(duì)象類測(cè)試對(duì)象集群測(cè)試面向?qū)ο笙到y(tǒng)面向?qū)ο笙到y(tǒng)的測(cè)試可分為四個(gè)層次測(cè)試與對(duì)象關(guān)聯(lián)的單個(gè)操作64
5.7.1對(duì)象類的測(cè)試用白盒的覆蓋測(cè)試方法保證所有程序中的語(yǔ)句至少執(zhí)行一遍,所有的程序路徑都要執(zhí)行到。對(duì)象的完全覆蓋測(cè)試應(yīng)包括:對(duì)象中所有操作被單獨(dú)隔離測(cè)試對(duì)象所有屬性的設(shè)置和訪問的測(cè)試對(duì)象的所有可能狀態(tài)的測(cè)試。所有能引起狀態(tài)改變的事件都要模擬到。相當(dāng)于傳統(tǒng)的單元測(cè)試,單元概念的變化—封裝的類或?qū)ο笞鳛樽钚〉目蓽y(cè)試單位5.7.1對(duì)象類的測(cè)試用白盒的覆蓋測(cè)試方法保證所有程序65測(cè)試單個(gè)類的方法(1)隨機(jī)測(cè)試?yán)?銀行系統(tǒng)的account(帳戶)類有下列操作:open(打開)setup(建立)deposit(存款)withdraw(取款)balance(余額)summarize(清單)creditLimit(透支限額)close(關(guān)閉)系統(tǒng)對(duì)操作的限制:必須在應(yīng)用其它操作之前先打開帳戶,在完成了全部操作之后才能關(guān)閉帳戶;……在限制下還是存在操作的許多排列測(cè)試單個(gè)類的方法(1)隨機(jī)測(cè)試?yán)?銀行系統(tǒng)的account(66一個(gè)account類實(shí)例的最小行為歷史包括下列操作:open.setup.deposit.withdraw.close
account類的最小測(cè)試序列大量的其它行為可能在下面序列中發(fā)生:open.setup.deposit.[deposit|withdraw|balance|summarize|creditLimit]n.withdraw.close
一系列不同的操作序列可以隨機(jī)地產(chǎn)生,例如:測(cè)試用例r1:open.setup.deposit.deposit.balance.
summarize.creditLimit.withdraw.close
測(cè)試用例r2:open.setup.deposit.withdraw.deposit.balance.creditLimit.withdraw.close這些和其它的隨機(jī)順序測(cè)試被進(jìn)行,以測(cè)試不同的類實(shí)例的生存歷史.一個(gè)account類實(shí)例的最小行為歷史包括下列操作:測(cè)試用例67測(cè)試單個(gè)類的方法(2)劃分測(cè)試(partitiontesting)
與測(cè)試傳統(tǒng)軟件時(shí)采用的等價(jià)類劃分方法類似.
劃分類別的方法:基于狀態(tài)的劃分基于屬性的劃分基于功能的劃分測(cè)試單個(gè)類的方法(2)劃分測(cè)試(partitiontest68基于狀態(tài)的劃分根據(jù)類操作改變類狀態(tài)的能力來劃分類操作.例:銀行系統(tǒng)的account(帳戶)類
狀態(tài)操作包括:deposit(存款)withdraw(取款)
非狀態(tài)操作包括:balance(余額)summarize(清單)creditLimit(透支限額)測(cè)試用例p1(測(cè)試改變狀態(tài)的操作):
open.setup.deposit.deposit..withdraw.close
測(cè)試用例p2(測(cè)試不改變狀態(tài)的操作,在最小測(cè)試序列中的操作除外):open.setup.deposit.summarize.creditLimit.withdraw.close基于狀態(tài)的劃分根據(jù)類操作改變類狀態(tài)的能力來劃分類操作.例69基于屬性的劃分根據(jù)類操作使用的屬性來劃分類操作.例:account類可根據(jù)balance屬性來把操作定義劃分為三個(gè)類別:
使用balance的操作修改balance的操作不使用也不修改balance的操作
為上述每個(gè)類別設(shè)計(jì)測(cè)試序列基于屬性的劃分根據(jù)類操作使用的屬性來劃分類操作.例:ac70基于功能的劃分根據(jù)類操作所完成的功能來劃分類操作.例:account類中的操作按功能可劃分為四個(gè)類別:
初始化操作(open,setup)計(jì)算操作(deposit,withdraw)查詢操作(balance,summarize,creditLimit)終止操作(close)
為上述每個(gè)類別設(shè)計(jì)測(cè)試序列基于功能的劃分根據(jù)類操作所完成的功能來劃分類操作.例:a71
setupacctaccount類的狀態(tài)轉(zhuǎn)換圖emptyacctdeadacctsetupAaccentbalancecreditacctInfoclosedeposit(initial)depositwithdrawworkingacctopenwithdrawal(final)nonworkingacct測(cè)試單個(gè)類的方法(3)基于狀態(tài)的測(cè)試setupaccount類的狀態(tài)轉(zhuǎn)換圖empty72測(cè)試單個(gè)類的方法(4)基于故障的測(cè)試(fault_basedtesting)與測(cè)試傳統(tǒng)軟件時(shí)采用的錯(cuò)誤推測(cè)法類似.測(cè)試單個(gè)類的方法與測(cè)試傳統(tǒng)軟件時(shí)采用的錯(cuò)誤推測(cè)法類似.73
5.7.2
對(duì)象的集成測(cè)試
OO軟件沒有層次的控制結(jié)構(gòu),傳統(tǒng)的自頂向下和自底向上的集成策略沒有意義.OO軟件的兩種集成策略:基于使用的測(cè)試(用例或基于場(chǎng)景的測(cè)試)
基于線程的測(cè)試(thread-basedtesting)
集成響應(yīng)系統(tǒng)的一個(gè)輸入或事件所需的一組類,每個(gè)線程被個(gè)體地集成和測(cè)試,通過回歸測(cè)試保證沒有副作用產(chǎn)生;對(duì)象交互測(cè)試
5.7.2對(duì)象的集成測(cè)試OO軟件沒有層次74
ATMBank銀行系統(tǒng)的類協(xié)作圖ATMUserInterfaceAccountCashierverifyAcctverifyPINverifyPolicywithdrawReqdepositReqacctInfoReqcardInsertedpassworddepositwithdrawaccentStatusterminatevalidPINvalidAcctcreditLimitaccentTypebalancewithdrawdepositcloseValidationInfoverifyStatusdepositStatusdispenseCaseprintAccentStatreadCardInfogetCaseAmntopenAcctinitialDepositauthorizeCarddeuthorizecloseAcctATMBank銀行系統(tǒng)的類協(xié)作圖ATMAccoun75
OO集成測(cè)試方法(1)多個(gè)類測(cè)試Kirani,S.andW.T.Tsai,在“SpecificationandVerificationofObject-OrientedPrograms”中建議了下面的步驟序列以生成多個(gè)類隨機(jī)測(cè)試用例:1.對(duì)每個(gè)客戶類,使用類操作列表來生成一系列隨機(jī)測(cè)試序列,這些操作發(fā)送消息給服務(wù)器類;2.對(duì)生成的每個(gè)消息,確定在服務(wù)器對(duì)象中的協(xié)作者類和對(duì)應(yīng)的操作;3.對(duì)服務(wù)器對(duì)象中的每個(gè)操作(已經(jīng)被來自客戶對(duì)象的消息調(diào)用),確定傳遞的消息;4.對(duì)每個(gè)消息,確定下一層被調(diào)用的操作,并把這些操作結(jié)合進(jìn)測(cè)試序列中.OO集成測(cè)試方法(1)多個(gè)類測(cè)試76
ATMBank銀行系統(tǒng)的類協(xié)作圖ATMUserInterfaceAccountCashierverifyAcctverifyPINverifyPolicywithdrawReqdepositReqacctInfoReqvalidPINvalidAcctcreditLimitaccentTypebalancewithdrawdepositcloseopenAcctinitialDepositauthorizeCarddeuthorizecloseAcctValidationInfoverifyStatusdepositStatusdispenseCaseprintAccentStatreadCardInfogetCaseAmntcardInsertedpassworddepositwithdrawaccentStatusterminateATMBank銀行系統(tǒng)的類協(xié)作圖ATMAccoun77銀行系統(tǒng)中Bank類和ATM類的操作序列:verifyAcct?verifyPIN?[[verifyPolicy?withdrawReq]|depositReq|acctInfoReq]n對(duì)Bank類的隨機(jī)測(cè)試用例可能是:測(cè)試用例r3:verifyAcct?verifyPIN?depositReq為了考慮測(cè)試中涉及的協(xié)作者,需要考慮與測(cè)試用例r3中每個(gè)操作相關(guān)聯(lián)的消息:Bank必須和ValidationInfo協(xié)作以執(zhí)行depositReq、verifyAcct和verifyPINBank還必須和Account協(xié)作以執(zhí)行deposit因此,測(cè)試這些協(xié)作的新的測(cè)試用例是:測(cè)試用例r4:verifyAcctBank?[validAcctValidationInfo]?
verifyPINBank
?[validPINValidationInfo]
?
depositReq
?[depositAccount]銀行系統(tǒng)中Bank類和ATM類的操作序列:verifyAcc78
OO集成測(cè)試方法(2)從動(dòng)態(tài)模型導(dǎo)出測(cè)試用例
設(shè)計(jì)的測(cè)試用例應(yīng)達(dá)到完全的狀態(tài)覆蓋,即操作序列應(yīng)導(dǎo)致account類的變遷穿越所有允許的狀態(tài):測(cè)試用例s1:open?setupAccent?deposit(initial)?withdraw(final)?close(最小測(cè)試序列)
向最小序列中加入附加的測(cè)試序列,例如:測(cè)試用例s2:open?setupAccent?deposit(initial)?deposit?balance?credit?withdraw(final)?close測(cè)試用例s3:open?setupAccent?deposit(initial)?deposit?withdraw?accntInfo?withdraw(final)?close……導(dǎo)出更多的測(cè)試用例以保證該類的所有行為都被適當(dāng)?shù)販y(cè)試OO集成測(cè)試方法(2)從動(dòng)態(tài)模型導(dǎo)出測(cè)試用例向最小序列中加79
5.7.3
OO系統(tǒng)的確認(rèn)測(cè)試在確認(rèn)和系統(tǒng)測(cè)試層次,類連接的細(xì)節(jié)消失.和傳統(tǒng)的確認(rèn)測(cè)試一樣,OO軟件的確認(rèn)關(guān)注用戶可見的動(dòng)作和用戶可識(shí)別的系統(tǒng)輸出.為輔助確認(rèn)測(cè)試的導(dǎo)出,應(yīng)利用分析模型中的用例圖提供的場(chǎng)景來提高交互需求中發(fā)現(xiàn)錯(cuò)誤的可能性5.7.3OO系統(tǒng)的確認(rèn)測(cè)試在確認(rèn)和系統(tǒng)測(cè)試層次,類連接80§5.8自動(dòng)測(cè)試和測(cè)試工具自動(dòng)化和工具的好處速度效率準(zhǔn)確度和精確度堅(jiān)持不懈§5.8自動(dòng)測(cè)試和測(cè)試工具自動(dòng)化和工具的好處815.8.1測(cè)試工具靜態(tài)分析工具動(dòng)態(tài)測(cè)試工具測(cè)試數(shù)據(jù)自動(dòng)生成工具集成化測(cè)試環(huán)境非侵入式工具侵入式工具5.8.1測(cè)試工具靜態(tài)分析工具82測(cè)試工作臺(tái)(下游CASE工具)源代碼被測(cè)試的程序測(cè)試數(shù)據(jù)規(guī)約預(yù)測(cè)器測(cè)試管理器測(cè)試預(yù)估模擬器文件比較器報(bào)告生成器動(dòng)態(tài)分析器測(cè)試結(jié)果測(cè)試結(jié)果報(bào)告執(zhí)行報(bào)告測(cè)試數(shù)據(jù)生成器測(cè)試工作臺(tái)(下游CASE工具)源代碼被測(cè)試測(cè)試數(shù)據(jù)規(guī)約預(yù)測(cè)器83查看器和監(jiān)視器1#計(jì)算機(jī)軟件正在測(cè)試2#計(jì)算機(jī)軟件正在測(cè)試3#計(jì)算機(jī)查看測(cè)試工具通信線路監(jiān)聽線路通信分析器可以查看兩個(gè)系統(tǒng)之間傳輸?shù)脑紨?shù)據(jù)(非侵入)(輸入測(cè)試用例)(確認(rèn)產(chǎn)生的通信數(shù)據(jù))(檢查相應(yīng)結(jié)果)查看器和監(jiān)視器1#計(jì)算機(jī)2#計(jì)算機(jī)3#計(jì)算機(jī)通信線路監(jiān)聽線路84驅(qū)動(dòng)程序普通系統(tǒng)配置測(cè)試驅(qū)動(dòng)配置(在此計(jì)算機(jī)上編寫簡(jiǎn)單的程序自動(dòng)產(chǎn)生相應(yīng)的擊鍵和鼠標(biāo)移動(dòng)來測(cè)試軟件)鍵盤電纜鼠標(biāo)電纜一臺(tái)計(jì)算機(jī)可以作為驅(qū)動(dòng)程序測(cè)試工具取代被測(cè)試系統(tǒng)的鍵盤和鼠標(biāo)從外部計(jì)算機(jī)發(fā)送擊鍵鼠標(biāo)的移動(dòng)信息,被測(cè)試軟件不被侵入,如果測(cè)試軟件時(shí)在同一系統(tǒng)中執(zhí)行驅(qū)動(dòng)程序,它就會(huì)侵入系統(tǒng),這種測(cè)試情況可能無法接受驅(qū)動(dòng)程序普通系統(tǒng)配置測(cè)試驅(qū)動(dòng)配置鍵盤鼠標(biāo)一臺(tái)計(jì)算機(jī)可以作為85管道和仿真器普通系統(tǒng)配置測(cè)試存根配置一臺(tái)計(jì)算機(jī)可以充當(dāng)管道,代替打印機(jī),能夠?qū)y(cè)試輸出進(jìn)行更有效的分析運(yùn)行管道軟件來代替打印機(jī),對(duì)打印數(shù)據(jù)進(jìn)行閱讀和解釋管道和仿真器普通系統(tǒng)配置測(cè)試存根配置一臺(tái)計(jì)算機(jī)可以充當(dāng)管道,86其它工具類型:施壓工具和增負(fù)工具干擾發(fā)生器和噪聲發(fā)生器分析工具其它工具類型:施壓工具和增負(fù)工具干擾發(fā)生器和噪聲發(fā)生器分87測(cè)試工具產(chǎn)品實(shí)例JUnit:Java單元測(cè)試工具CppUnit:C++單元測(cè)試工具Dunit:Delphi的終極測(cè)試工具測(cè)試工具產(chǎn)品實(shí)例JUnit:Java單元測(cè)試工具885.8.2測(cè)試測(cè)試自動(dòng)化
另一類軟件測(cè)試工具,可以自動(dòng)執(zhí)行測(cè)試用例、查找軟件缺陷、分析并記錄測(cè)試結(jié)果。5.8.2測(cè)試測(cè)試自動(dòng)化另一類軟件測(cè)試工具,可以89隨機(jī)測(cè)試:猴子測(cè)試員只要不停電,偶爾能夠得到香蕉,猴子就會(huì)永遠(yuǎn)測(cè)試下去一個(gè)想法:
“如果讓一百萬只猴子在一百萬只鍵盤上敲一百萬年,它們最終就可能寫出莎士比亞話劇等巨著”.隨機(jī)測(cè)試:猴子測(cè)試員只要不停電,偶爾能夠得到香蕉,猴子就會(huì)永90猴子的進(jìn)步笨猴子:一點(diǎn)也不懂測(cè)試軟件,只是隨機(jī)地單擊或按鍵,直至發(fā)生兩件事情之一:完成循環(huán)或系統(tǒng)崩潰.不太笨的猴子:
具有崩潰辨認(rèn)能力,能夠重新啟動(dòng)系統(tǒng)開始測(cè)試聰明猴子:能夠從它的笨兄弟那里獲得隨機(jī)測(cè)試的結(jié)果,增加了對(duì)環(huán)境的認(rèn)知能力,有目的地敲鍵盤,不僅限于查找崩潰缺陷,同時(shí)查看數(shù)據(jù),檢查操作結(jié)果,找出與預(yù)期結(jié)果的差別猴子的進(jìn)步笨猴子:一點(diǎn)也不懂測(cè)試軟件,只是隨機(jī)地單擊或按鍵91自動(dòng)化測(cè)試工具實(shí)例美國(guó)國(guó)際軟件自動(dòng)化(ISA)公司的PanoramaforC/C++,j、Java和VB產(chǎn)品,自動(dòng)化功能包括:軟件結(jié)構(gòu)分析與邏輯框圖的自動(dòng)化軟件靜態(tài)分析數(shù)據(jù)分析復(fù)雜性分析與分析結(jié)果列表的自動(dòng)化軟件質(zhì)量分析動(dòng)態(tài)性能分析軟件代碼分支或條件覆蓋率分析軟件測(cè)試用例有效性分析與測(cè)試用例最小集的自動(dòng)選取軟件界面手工操作過程的自動(dòng)記錄與自動(dòng)再執(zhí)行(Playback)自動(dòng)化測(cè)試工具實(shí)例美國(guó)國(guó)際軟件自動(dòng)化(ISA)公司92§5.9測(cè)試中的可靠性分析
開發(fā)過程中,利用測(cè)試的統(tǒng)計(jì)數(shù)據(jù)來估算軟件的可靠性,以控制軟件的質(zhì)量。推測(cè)錯(cuò)誤的產(chǎn)生頻度推測(cè)殘留在程序中的錯(cuò)誤數(shù)評(píng)價(jià)測(cè)試的精確度和覆蓋率§5.9測(cè)試中的可靠性分析開發(fā)過程中,利用測(cè)試的統(tǒng)93推測(cè)錯(cuò)誤的產(chǎn)生頻度(推測(cè)錯(cuò)誤產(chǎn)生的時(shí)間間隔)1K(ET/IT-Ec(t)/IT)方法:估算平均故障時(shí)間(MTTF估算公式)MTTF=K:
經(jīng)驗(yàn)常數(shù)ET:
程序中原有的殘留錯(cuò)誤數(shù)IT:
程序長(zhǎng)度t:測(cè)試時(shí)間
Ec(t):在0-t期間內(nèi)發(fā)現(xiàn)的錯(cuò)誤總數(shù)λ1=當(dāng)故障率為獨(dú)立于時(shí)間的常量λ:推測(cè)錯(cuò)誤的產(chǎn)生頻度(推測(cè)錯(cuò)誤產(chǎn)生的時(shí)間間隔)1K(ET/IT94推測(cè)殘留在程序中的錯(cuò)誤數(shù)錯(cuò)誤植入模型Mills將播種模型用于程序中殘留錯(cuò)誤的估算,稱錯(cuò)誤植入模型播種模型:
N:程序中原有殘留的錯(cuò)誤數(shù)Nt:新植入的錯(cuò)誤數(shù)n:測(cè)試發(fā)現(xiàn)的原有錯(cuò)誤數(shù)nt:測(cè)試發(fā)現(xiàn)的植入錯(cuò)誤數(shù)NNnnt≈tNNnnt=t推測(cè)殘留在程序中的錯(cuò)誤數(shù)錯(cuò)誤植入模型NNnnt≈tNNn95Hyman對(duì)錯(cuò)誤植入模型的改進(jìn)ET:程序中原有的殘留錯(cuò)誤數(shù)E1:1號(hào)測(cè)試員在某一時(shí)間內(nèi)發(fā)現(xiàn)的錯(cuò)誤數(shù)E2:2號(hào)測(cè)試員在同一時(shí)間內(nèi)發(fā)現(xiàn)的錯(cuò)誤數(shù)E0:兩位測(cè)試員共同發(fā)現(xiàn)的錯(cuò)誤數(shù)EEE1≈0=2ETE1E2/E0ETHyman對(duì)錯(cuò)誤植入模型的改進(jìn)ET:程序中原有的殘留錯(cuò)誤數(shù)96第六章軟件進(jìn)化遺留系統(tǒng)軟件變更策略軟件維護(hù)體系結(jié)構(gòu)進(jìn)化軟件再工程配置管理第六章軟件進(jìn)化遺留系統(tǒng)97§6.1遺留系統(tǒng)更換遺留系統(tǒng)是有風(fēng)險(xiǎn)的業(yè)務(wù)策略,因?yàn)椋哼z留系統(tǒng)幾乎沒有完整的描述業(yè)務(wù)過程與遺留系統(tǒng)的操作方式緊密相關(guān)重要的業(yè)務(wù)規(guī)則隱藏在軟件內(nèi)部開發(fā)新軟件有風(fēng)險(xiǎn)繼續(xù)使用遺留系統(tǒng),進(jìn)行變更費(fèi)用更高,因?yàn)椋合到y(tǒng)是由不同團(tuán)對(duì)實(shí)現(xiàn)的,程序設(shè)計(jì)風(fēng)格不一致系統(tǒng)使用過時(shí)的語(yǔ)言編寫系統(tǒng)文檔不充分、過時(shí)經(jīng)多年維護(hù),系統(tǒng)結(jié)構(gòu)已破壞系統(tǒng)進(jìn)行過優(yōu)化,不可讀系統(tǒng)數(shù)據(jù)過時(shí)、不完整§6.1遺留系統(tǒng)更換遺留系統(tǒng)是有風(fēng)險(xiǎn)的業(yè)務(wù)策略,因?yàn)椋豪^續(xù)98遺留系統(tǒng)評(píng)估對(duì)遺留系統(tǒng)做現(xiàn)實(shí)的評(píng)估,做出適當(dāng)?shù)木駬瘢簭氐讙仐壪到y(tǒng)繼續(xù)維護(hù)系統(tǒng)采用某種方式轉(zhuǎn)換系統(tǒng)以改善其可維護(hù)性以一個(gè)新的系統(tǒng)代替該系統(tǒng)遺留系統(tǒng)評(píng)估對(duì)遺留系統(tǒng)做現(xiàn)實(shí)的評(píng)估,做出適當(dāng)?shù)木駬瘢?9§6.2軟件維護(hù)
四類維護(hù)活動(dòng):改正性維護(hù)適應(yīng)性維護(hù)擴(kuò)充與完善性維護(hù)預(yù)防性維護(hù)§6.2軟件維護(hù)四類維護(hù)活動(dòng):100各種維護(hù)所占比例:其它維護(hù)5%適應(yīng)性維護(hù)25%改正性維護(hù)20%擴(kuò)充與完善性維護(hù)50%改正性維護(hù)占全部維護(hù)量的比率已從80年代初的20%大幅度下降,90年代初一些公司的產(chǎn)品差錯(cuò)率已接近于零各種維護(hù)所占比例:其它維護(hù)適應(yīng)性改正性擴(kuò)充與完改正性維護(hù)占1016.2.1軟件維護(hù)的特點(diǎn)MP+Ke=(c-d)M
:維護(hù)工作總工作量P:生產(chǎn)性工作量K
:
經(jīng)驗(yàn)常數(shù)c:復(fù)雜度d:對(duì)該軟件熟悉程度的度量維護(hù)的成本6.2.1軟件維護(hù)的特點(diǎn)MP+Ke=(c-d)M:維護(hù)102維護(hù)中的典型問題(1)難以跟蹤軟件版本的進(jìn)化過程,軟件的變化未在文檔中反映出來.(2)難以跟蹤軟件的創(chuàng)建過程.(3)難以讀懂他人程序.(4)無文檔或不全.(5)軟件人員流動(dòng)性大.(6)設(shè)計(jì)時(shí)未考慮修改需要,修改困難.(7)維護(hù)工作無吸引力,缺乏成就感.維護(hù)中的典型問題(1)難以跟蹤軟件版本的進(jìn)化過程,1036.2.2軟件的維護(hù)任務(wù)修改負(fù)責(zé)人維護(hù)申請(qǐng)系統(tǒng)監(jiān)督員配置管理員維護(hù)機(jī)構(gòu)維護(hù)人員維護(hù)管理員6.2.2軟件的維護(hù)任務(wù)修改維護(hù)申請(qǐng)系統(tǒng)監(jiān)督員配置管理員維104保存維護(hù)記錄維護(hù)過程中作應(yīng)記錄的數(shù)據(jù)程序標(biāo)識(shí)源程序語(yǔ)句數(shù)目機(jī)器代碼指令條數(shù)..............以收集的數(shù)據(jù)為基礎(chǔ)構(gòu)造維護(hù)數(shù)據(jù)庫(kù),供維護(hù)評(píng)價(jià)使用.保存維護(hù)記錄維護(hù)過程中作應(yīng)記錄的數(shù)據(jù)1056.2.3軟件維護(hù)的實(shí)施修改源程序的三個(gè)步驟分析和理解程序修改程序重新驗(yàn)證程序6.2.3軟件維護(hù)的實(shí)施修改源程序的三個(gè)步驟106修改程序的副作用修改代碼的副作用修改數(shù)據(jù)的副作用修改文檔的副作用修改程序的副作用修改代碼的副作用107重新驗(yàn)證程序靜態(tài)確認(rèn)計(jì)算機(jī)確認(rèn)維護(hù)后的驗(yàn)收重新
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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é)議
- 2025的協(xié)作出版合同樣本參考
- 品牌授權(quán)協(xié)議范例
- 影劇院硅藻泥施工合同
- 藥店外墻涂料施工協(xié)議
- 2025房產(chǎn)購(gòu)買合同樣本
- 土石方工程設(shè)計(jì)合同
- 離婚時(shí)如何處理房屋協(xié)議
- 屋頂花園綠化景觀設(shè)計(jì)與施工合同
- 農(nóng)村房屋建筑施工協(xié)議范本
- 2023年湖南體育職業(yè)學(xué)院高職單招(語(yǔ)文)試題庫(kù)含答案解析
- GB/T 39314-2020鋁合金石膏型鑄造通用技術(shù)導(dǎo)則
- GB/T 17252-1998聲學(xué)100kHz以下超聲壓電換能器的特性和測(cè)量
- 裝飾裝修施工質(zhì)量檢查評(píng)分表
- 非開挖施工技術(shù)講稿課件
- 單絨毛膜雙羊膜囊雙胎2022優(yōu)秀課件
- 《思想道德與法治》 課件 第四章 明確價(jià)值要求 踐行價(jià)值準(zhǔn)則
- 北師大版八年級(jí)上數(shù)學(xué)競(jìng)賽試卷
- 幼兒園講座:課程游戲化、生活化建設(shè)的背景與目的課件
- 地理信息系統(tǒng)(GIS)公開課(課堂)課件
- 基本公共衛(wèi)生服務(wù)項(xiàng)目工作存在問題整改情況匯報(bào)【六篇】
評(píng)論
0/150
提交評(píng)論