軟件工程導(dǎo)論class18面向?qū)ο髮?shí)現(xiàn).ppt_第1頁
軟件工程導(dǎo)論class18面向?qū)ο髮?shí)現(xiàn).ppt_第2頁
軟件工程導(dǎo)論class18面向?qū)ο髮?shí)現(xiàn).ppt_第3頁
軟件工程導(dǎo)論class18面向?qū)ο髮?shí)現(xiàn).ppt_第4頁
軟件工程導(dǎo)論class18面向?qū)ο髮?shí)現(xiàn).ppt_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、軟件工程導(dǎo)論第18課,第12章 面向?qū)ο髮?shí)現(xiàn),第12章 面向?qū)ο髮?shí)現(xiàn),2項主要工作: (1)把面向?qū)ο笤O(shè)計結(jié)果翻譯成用某種程序語言書寫的面向?qū)ο蟪绦颍?(2)測試并調(diào)試面向?qū)ο蟪绦?采用的語言的特點(diǎn)和程序設(shè)計風(fēng)格影響程序的可靠性、可重用性和維護(hù) 封裝、繼承、多態(tài)給測試帶來新特點(diǎn),要進(jìn)一步探索更有效的測試方法,12.1 程序設(shè)計語言,面向?qū)ο笤O(shè)計的結(jié)果可以用面向?qū)ο笳Z言,也可以用非面向?qū)ο笳Z言實(shí)現(xiàn)。 非面向?qū)ο笳Z言實(shí)現(xiàn)困難比較多。 語言選擇要考慮功能的強(qiáng)大,便于實(shí)現(xiàn)面向?qū)ο蟾拍?,可重用性和可維護(hù)性 好的語言會有以下優(yōu)點(diǎn):,12.1 程序設(shè)計語言,1 一致的表示方法 一致的表示方法應(yīng)該從問題域到O

2、OA,OOD,OOP始終穩(wěn)定不變。 有利于在軟件開發(fā)過程中始終使用統(tǒng)一的概念,有利于維護(hù)人理解軟件的各種配置。 2 可重用性 OOA,OOD,OOP的結(jié)果都可以重用。,12.1 程序設(shè)計語言,3 可維護(hù)性 實(shí)際情況是:維護(hù)人員最終面對的只有源程序本身,沒有文檔。 在選擇編程語言時,要選擇能最好地表達(dá)問題域語義的,便于維護(hù)人員理解程序和維護(hù) 最好選用面向?qū)ο笳Z言,12.1.2 面向?qū)ο笳Z言的技術(shù)特點(diǎn),面向?qū)ο笳Z言 20世紀(jì)50年代 LISP語言 動態(tài)聯(lián)編 20世紀(jì)60年代 SIMULA語言 類,繼承 20世紀(jì)70年代 Modula_2, Ada 抽象 20世紀(jì)80年代 Smalltalk, Ei

3、ffel 過程語言上增加面向?qū)ο髾C(jī)制 C+ 面向?qū)ο笳Z言的技術(shù)特點(diǎn)如下:,1 支持類與對象概念的機(jī)制,用戶動態(tài)創(chuàng)建對象,用指針引用動態(tài)創(chuàng)建的對象。 系統(tǒng)必須進(jìn)行動態(tài)內(nèi)存管理,分配和釋放內(nèi)存。不釋放會用盡內(nèi)存。 自動回收,有時系統(tǒng)回收不太好。 C+采用析構(gòu)函數(shù)的方式釋放內(nèi)存。,2 實(shí)現(xiàn)整體-部分(聚集)結(jié)構(gòu)的機(jī)制,2種方法實(shí)現(xiàn)整體-部分結(jié)構(gòu) 使用指針的方式,和獨(dú)立的關(guān)聯(lián)方式 3 實(shí)現(xiàn)一般特殊結(jié)構(gòu)的機(jī)制(泛化) 實(shí)現(xiàn)繼承機(jī)制,解決名字沖突的機(jī)制。 名字沖突就是重名問題, 盡是避免名字沖突,4 實(shí)現(xiàn)屬性和服務(wù)的機(jī)制,實(shí)現(xiàn)屬性的機(jī)制考慮問題:支持實(shí)例連接的機(jī)制,屬性的可見性控制,對屬性值的約束。 服務(wù)

4、考慮的因素:支持消息連接的機(jī)制,控制服務(wù)可見性的機(jī)制,動態(tài)聯(lián)編。 動態(tài)聯(lián)編:系統(tǒng)在運(yùn)行過程中,當(dāng)需要執(zhí)行一個特定服務(wù)的時候,選擇實(shí)現(xiàn)該服務(wù)的適當(dāng)算法。虛函數(shù)是動態(tài)聯(lián)編。,5 類型檢查,弱類型:僅要求每個變量或?qū)傩噪`屬于一個對象 強(qiáng)類型:語法規(guī)定每個變量或?qū)傩员仨殰?zhǔn)確地隸屬于某個特定的類 Smalltalk是無類型語言,C+是強(qiáng)類型 強(qiáng)類型的優(yōu)點(diǎn):有利于在編譯時發(fā)現(xiàn)錯誤; 增加了優(yōu)化的可能性。,6 類庫,大多數(shù)面向?qū)ο笳Z言都提供實(shí)用的類庫。 編譯系統(tǒng)提供類庫。 類庫增加重用性 類庫中包含通用的數(shù)據(jù)結(jié)構(gòu)類,把這些類稱為包容類 關(guān)聯(lián)類,接口類,用戶界面類,7 效率,面向?qū)ο蟮某绦蛐什⒉坏汀?類庫中

5、的算法和數(shù)據(jù)結(jié)構(gòu)更先進(jìn),代碼更精巧。 類的動態(tài)聯(lián)編查找方法經(jīng)過優(yōu)化,速度快。 8 持久保存對象 保存數(shù)據(jù)的方法,保存數(shù)據(jù)用于傳遞數(shù)據(jù),恢復(fù)數(shù)據(jù)。 人工進(jìn)行數(shù)據(jù)保存,保存數(shù)據(jù)的類,9 參數(shù)化類,一些軟件元素,功能相同,處理對象不同。 參數(shù)化類就是使用一個或多個類型去參數(shù)化一個類的機(jī)制。 程序員先定義一個參數(shù)化的類模板,然后把數(shù)據(jù)類型作為參數(shù)傳遞進(jìn)去,從而把這個模板應(yīng)用在不同的應(yīng)用程序中。 Effel語言中有參數(shù)化類,C+提供了類模板。,10開發(fā)環(huán)境,開發(fā)環(huán)境包括的基本軟件工具: 編輯程序,編譯程序,解釋程序、瀏覽工具、調(diào)試器。 編譯程序代碼效率比解釋程序高 編譯先翻譯成中間語言程序,再翻譯成目標(biāo)

6、代碼 傳統(tǒng)的系統(tǒng)構(gòu)造工具(例如UNIX的make)落后了。 例:C+的Visual Studio,12.1.3 選擇面向?qū)ο笳Z言,開發(fā)人員選擇面向?qū)ο笳Z言時考慮的因素: 1 將來能否占主導(dǎo)地位 2 可重用性 3 類庫和開發(fā)環(huán)境 考慮類庫中具有哪些有價值的類, 開發(fā)環(huán)境具有方便的編輯工具和瀏覽工具 4 其他因素 培訓(xùn)、技術(shù)支持,開發(fā)工具、開發(fā)平臺、 發(fā)行平臺、對機(jī)器性能和內(nèi)存的要求,集成已有軟件的容易程度。,12.2 程序設(shè)計風(fēng)格,良好的程序設(shè)計風(fēng)格有利于維護(hù)、擴(kuò)充,重用。 為適應(yīng)面向?qū)ο蠓椒ㄋ赜械母拍疃仨氉裱囊恍┬聹?zhǔn)則。 可重用性,可擴(kuò)展性,12.2.1 提高可重用性,在編碼階段主要是代

7、碼重用 2種代碼重用: 內(nèi)部重用即本項目內(nèi)的代碼重用 外部重用即新項目重用舊項目的代碼 內(nèi)部重用:找出相似部分,用繼承共享它們 外部重用:要精心設(shè)計 下面是實(shí)現(xiàn)重用的準(zhǔn)則:,1 提高方法的內(nèi)聚,一個方法應(yīng)該只完成單個功能,如果一個方法涉及多個功能,要進(jìn)行分解。 2 減小方法的規(guī)模 如果某個方法過大,應(yīng)該把它分解成幾個小方法。 3 保持方法的一致性 功能相似的方法有一致的名字、參數(shù)特征、返回值類型、使用條件、出錯條件等。,4 把策略與實(shí)現(xiàn)分開,兩種方法 做出決策,提供變元,并且管理全局資源的方法稱為策略方法。 完成具體操作的方法稱為實(shí)現(xiàn)方法。 策略方法檢查系統(tǒng)運(yùn)行狀態(tài),處理出錯情況。 實(shí)現(xiàn)方法完

8、成特定處理、實(shí)現(xiàn)算法 為提高可重用性,不要把策略和實(shí)現(xiàn)放在同一個方法中,算法的核心部分放在實(shí)現(xiàn)方法中。在策略方法中提取出具體參數(shù),調(diào)用實(shí)現(xiàn)方法。,5 全面覆蓋,針對輸入條件的各種組合,對所有能出現(xiàn)的組合寫出方法。 一個方法要能處理正常值,并能處理空值、極限值、界外值等異常情況。 6 盡量不使用全局變量 盡量降低方法與外界耦合的程度,不使用全局變量是降低耦合的一項主要措施。,7 利用繼承機(jī)制,繼承是實(shí)現(xiàn)共享和提高重用程度的主要途徑 (1)調(diào)用子過程。把公共的代碼分離出來,構(gòu)成一個被其他方法調(diào)用的公共方法,在基類中定義這個公共方法,供派生類調(diào)用。 (2)分解因子。從不同類的相似方法中分解出不同的因

9、子(即不同的代碼),把余下的代碼作為公用方法的公共代碼。在抽象基類中定義公用方法,與多態(tài)性結(jié)合,讓派生類繼承公用方法。,(3) 使用委托,當(dāng)邏輯上不存在一般-特殊關(guān)系時,為重用已有的代碼,可以利用委托機(jī)制。(把一類對象作為另一類對象的屬性,從而在兩類對象間建立組合關(guān)系) (4)把代碼封裝在類中。把可以重用的代碼封裝在類中。,12.2.2 提高可擴(kuò)充性,下面是有利于提高可擴(kuò)充性的準(zhǔn)則: 1 封裝實(shí)現(xiàn)策略 把類的實(shí)現(xiàn)策略(包括描述屬性的數(shù)據(jù)結(jié)構(gòu),修改屬性的算法等)封裝起來,對外只提供公有接口。 2 不要用一個方法遍歷多條關(guān)聯(lián)鏈 不要使程序過分復(fù)雜、不易理解、不易修改擴(kuò)充。,3 避免使用多分支語句,

10、不要用DO_CASE語句根據(jù)對象類型選擇行為。要利用多態(tài)性機(jī)制,根據(jù)對象當(dāng)前的類型,自動決定應(yīng)有的行為。 精心確定公有方法 修改公有方法的代價比較高,為提高可修改性,降低維護(hù)成本,必須精心設(shè)計和定義公有方法。私有方法只在類內(nèi)使用,利用私有方法實(shí)現(xiàn)公有方法。,12.2.3 提高健壯性,健壯性就是硬件故障、輸入的數(shù)據(jù)無效或操作錯誤等意外環(huán)境下,系統(tǒng)能做出適當(dāng)響應(yīng)的程度。 健壯性不可忽略。 健壯性是不何忽略的質(zhì)量指標(biāo)。 為提高健壯性的幾條準(zhǔn)則,1 預(yù)防用戶的操作錯誤,軟件系統(tǒng)必須具有處理用戶操作錯誤的能力。當(dāng)用戶輸入錯誤時,給出錯誤提示。 2 檢查參數(shù)的合法性 對公有方法,尤其要檢查參數(shù)的合法性 3

11、 不要預(yù)先確定限制條件 不預(yù)先設(shè)定數(shù)據(jù)結(jié)構(gòu)的最大容量需求。最好用動態(tài)內(nèi)存分配。,4 先測試后優(yōu)化,應(yīng)該在為提高效率而進(jìn)行優(yōu)化前,先測試程序的性能。 仔細(xì)研究,哪些部分需要重點(diǎn)測試。 經(jīng)過測試,合理地確定為提高性能應(yīng)該著重優(yōu)化的關(guān)鍵部分。,12.3 測試策略,小型測試-大型測試 單元測試-集成測試-確認(rèn)測試-系統(tǒng)測試 測試面向?qū)ο筌浖r,不能再孤立地測試單個操作。,12.3.1 面向?qū)ο蟮膯卧獪y試,最小的測試單元是封裝起來的類和對象。 一個類可以包含一組不同的操作,一個特定的操作可以存在于一組不同的類中。 測試面向?qū)ο筌浖r,不能再孤立地測試單個操作,而應(yīng)該把操作作為類的一部分來測試。 例子:超

12、類中定義的一個操作,多個子類調(diào)用,測試時,要全部測試這些子類,12.3.2 面向?qū)ο蟮募蓽y試,自項向下、自底向上、漸增式的集成方法不能用 面向?qū)ο筌浖募蓽y試主要有下述2種: (1)基于線程的測試(thread based testing). 把響應(yīng)系統(tǒng)的一個輸入或一個事件所需要的那些類集成起來,分別集成并測試每個線程,同時應(yīng)用回歸測試以保證沒有產(chǎn)生副作用。,12.3.2 面向?qū)ο蟮募蓽y試,獨(dú)立類:不使用服務(wù)器類的那些類 (2)基于使用的測試(use based testing). 首選測試獨(dú)立類,把獨(dú)立類都測試完后,再測試使用獨(dú)立類的下一個層次的類(稱為依賴類)。對依賴類一層一層的測試

13、下去,直至把整個軟件系統(tǒng)構(gòu)造完為止。 注意測試不同類之間的協(xié)作錯誤,采用集群測試的方法。,12.3.3 面向?qū)ο蟮拇_認(rèn)測試,確認(rèn)測試:保證軟件確實(shí)滿足用戶需求而進(jìn)行的測試。驗證系統(tǒng)功能和性能的有效性。 面向?qū)ο蟮拇_認(rèn)測試檢查用戶的輸入和輸出。為了導(dǎo)出測試用例,須認(rèn)真研究動態(tài)模型和描述系統(tǒng)行為的腳本,以確定最可能發(fā)現(xiàn)用戶交互需求錯誤的場景。 可用黑盒測試方法設(shè)計測試用例。,12.4 設(shè)計測試用例,面向?qū)ο筌浖臏y試用例的設(shè)計方法,還處于研究、發(fā)展階段。 關(guān)注重點(diǎn):設(shè)計適當(dāng)?shù)牟僮餍蛄幸詸z查類的狀態(tài)。 12.4.1 測試類的方法 面向?qū)ο筌浖男⌒蜏y試著重測試單個類和類中封裝的方法。 測試方法:隨機(jī)

14、測試、劃分測試、基于故障的測試。,1 隨機(jī)測試,將完成行為的各種操作,隨機(jī)地產(chǎn)生它們的操作序列,以該操作序列測試系統(tǒng)。 例子:銀行應(yīng)用系統(tǒng)的帳戶類有下列操作: Open, setup, deposit, withdraw, balance, summarize, creditLimit, close. 限制是:第1個操作是open, 最后一個是close 隨機(jī)產(chǎn)生的測試用例: 1:open setup deposit deposit balance summarize withdraw close 2: open setup deposit withdraw deposit balance c

15、reditLimit withdraw close,2 劃分測試,目的:減少測試類時需要的測試用例的數(shù)量 先分為輸入,輸出類 劃分類別的方法 (1) 基于狀態(tài)的劃分 根據(jù)類操作改變類狀態(tài)的能力來劃分類操作 例子: P1: open setup deposit deposit withdraw withdraw close P2: open setup deposit summarize creditLimit withdraw close,(1) 基于狀態(tài)的劃分 根據(jù)類操作改變類狀態(tài)的能力來劃分類操作 例子: 狀態(tài)操作:deposit, withdraw 非狀態(tài)操作: balance, sum

16、marize, creditLimit 改變狀態(tài)測試P1: open setup deposit deposit withdraw withdraw close 不改變狀態(tài)測試P2: open setup deposit summarize creditLimit withdraw close,(2)基于屬性的劃分,根據(jù)類操作使用的屬性來劃分操作 例子:基于balance定義劃分 使用balance操作 修改balance操作 與balance無關(guān)的操作 (3)基于功能的劃分 根據(jù)類操作完成的功能來劃分操作 例子:初始化(open, setup),計算(deposit, withdraw) 查

17、詢(balance, summarize,creditLimit), 終止(close),3 基于故障的測試,首選推測軟件中可能有的錯誤,然后設(shè)計出最可能發(fā)現(xiàn)這些錯誤的測試用例。 推測錯誤:仔細(xì)研究分析模型和設(shè)計模型,12.4.2 集成測試方法,對類間協(xié)作進(jìn)行測試 和測試單個類相似,可以使用隨機(jī)測試、劃分測試、基于情景的測試、行為測試 1 多類測試 生成多個類的隨機(jī)測試用例的步驟: (1)對每個客戶類,使用類操作符列表來生成一系列隨機(jī)測試序列。這些操作符向服務(wù)器類實(shí)例發(fā)送消息。,(2)對所生成的每個消息,確定協(xié)作類和在服務(wù)器對象中的對應(yīng)操作。 (3)對服務(wù)器對象中的每個操作符,確定傳遞的消息。

18、 (4)對每個消息,確定下一層被調(diào)用的操作符,并把這些操作符結(jié)合進(jìn)測試序列中。,測試用例: R3:verifyAcct verifyPIN depositRep 為找到測試涉及的協(xié)作者,考慮每個操作相關(guān)聯(lián)的消息。 Bank & ValidationInfo 執(zhí)行verifyAcct, verifyPIN Bank & Account 執(zhí)行depositReq 協(xié)作的新測試用例是: R4: verifyAcctbank validAcctvalidation verifyPINbank validPINvalidation depositReq depositaccount,2 從動態(tài)模型導(dǎo)出測試用例,使用類的狀態(tài)圖導(dǎo)出測試類的動態(tài)行為

溫馨提示

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

最新文檔

評論

0/150

提交評論