第九章軟件工程面向?qū)ο髮?shí)現(xiàn)_第1頁
第九章軟件工程面向?qū)ο髮?shí)現(xiàn)_第2頁
第九章軟件工程面向?qū)ο髮?shí)現(xiàn)_第3頁
第九章軟件工程面向?qū)ο髮?shí)現(xiàn)_第4頁
第九章軟件工程面向?qū)ο髮?shí)現(xiàn)_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第9章面向?qū)ο髮?shí)現(xiàn)兩項(xiàng)工作:◆

將面向?qū)ο蟮脑O(shè)計(jì)結(jié)果翻譯成用某種程序設(shè)計(jì)語言編寫的面向

對(duì)象程序;◆

測(cè)試并調(diào)試面向?qū)ο蟮某绦?。質(zhì)量:面向?qū)ο蟪绦虻馁|(zhì)量←面向?qū)ο笤O(shè)計(jì)的質(zhì)量。程序設(shè)計(jì)語言的特點(diǎn)和程序設(shè)計(jì)風(fēng)格,對(duì)程序的可靠性、可重用性和可維護(hù)性也會(huì)產(chǎn)生較大影響。測(cè)試:同樣是保證軟件可靠性的主要措施;目標(biāo)同樣也是用盡可能低的測(cè)試成本和盡可能少的測(cè)試方案(用例),發(fā)現(xiàn)盡可能多的錯(cuò)誤。但,封裝、繼承和多態(tài)等機(jī)制,帶來一些新特點(diǎn),增加了測(cè)試和調(diào)試的難度。需通過實(shí)踐,探索適合的、更好的測(cè)試方法。一、程序設(shè)計(jì)語言1、面向?qū)ο笳Z言的優(yōu)點(diǎn)(略)2、面向?qū)ο笳Z言的技術(shù)特點(diǎn)(略)3、面向?qū)ο笳Z言的選擇考慮的因素:①將來是否占主導(dǎo)地位經(jīng)濟(jì)因素,而非技術(shù)因素。②可重用性目的&優(yōu)點(diǎn):提高軟件生產(chǎn)率。優(yōu)先選用:完整、準(zhǔn)確表達(dá)問題域語義的面向?qū)ο笳Z言。③類庫和開發(fā)環(huán)境

語言、開發(fā)環(huán)境和類庫三因素的綜合,共同決定了可重用性??紤]類庫時(shí),不僅應(yīng)考慮語言是否提供了類庫,還應(yīng)考慮類庫中提供了哪些有價(jià)值的類。隨著類庫的日益成熟和豐富,需要開發(fā)人員自己編寫的代碼將越來越少。為便于積累可重用的類和重用已有的類,在開發(fā)環(huán)境中,除提供基本軟件工具外,還應(yīng)提供使用方便的類庫編輯工具和瀏覽工具。(類庫瀏覽工具應(yīng)具有較強(qiáng)的聯(lián)想功能)④其他因素●

對(duì)用戶學(xué)習(xí)面向?qū)ο蠹夹g(shù)所能提供的培訓(xùn)服務(wù);●

在使用這個(gè)面向?qū)ο笳Z言期間能提供的技術(shù)支持;●

能提供給開發(fā)人員使用的開發(fā)工具、開發(fā)平臺(tái)、發(fā)行平臺(tái),對(duì)機(jī)器性能和內(nèi)存的需求,集成已有軟件的容易程度等。二、程序設(shè)計(jì)風(fēng)格

實(shí)踐證明,良好的程序設(shè)計(jì)風(fēng)格對(duì)保證程序質(zhì)量非常重要,特別是對(duì)面向?qū)ο蟮膶?shí)現(xiàn)而言更為重要,不僅能明顯減少系統(tǒng)維護(hù)或擴(kuò)充的開銷,而且有助于在新系統(tǒng)中重用已有的程序代碼。良好的面向?qū)ο蟪绦蛟O(shè)計(jì)風(fēng)格,既包括傳統(tǒng)的程序設(shè)計(jì)風(fēng)格準(zhǔn)則,也包括為適應(yīng)面向?qū)ο蠓椒ㄋ赜械母拍睿ㄈ缋^承性)而必須遵循的一些新準(zhǔn)則。1、提高可重用性是面向?qū)ο蠓椒ǖ囊粋€(gè)主要目標(biāo)。軟件重用有多個(gè)層次,在編碼階段主要考慮“代碼重用”。兩種代碼重用方式:◆本項(xiàng)目?jī)?nèi)的代碼重用(內(nèi)部重用)針對(duì)設(shè)計(jì)中相同或相似部分,利用繼承機(jī)制實(shí)現(xiàn)共享?!粜马?xiàng)目重用舊項(xiàng)目的代碼(外部重用)著眼長(zhǎng)遠(yuǎn),反復(fù)考慮、精心設(shè)計(jì)。

主要準(zhǔn)則:①提高方法的內(nèi)聚一個(gè)方法(服務(wù))應(yīng)只完成單個(gè)功能,若某個(gè)方法涉及兩個(gè)或多個(gè)不相關(guān)的功能,則應(yīng)將其分解為幾個(gè)更小的方法。②減小方法的規(guī)模若某個(gè)方法規(guī)模過大(代碼長(zhǎng)度超過一頁紙),即應(yīng)將其分解為幾個(gè)更小的方法。③保持方法的一致性一般而言,功能相似的方法應(yīng)有一致的名字、參數(shù)特征(包括參數(shù)個(gè)數(shù)、類型、次序)、返回值類型、使用條件及出錯(cuò)條件等?!?/p>

策略方法

負(fù)責(zé)做出決策,提供變?cè)?,并且管理全局資源。不直接完成計(jì)算或?qū)崿F(xiàn)復(fù)雜的算法,只檢查系統(tǒng)運(yùn)行狀態(tài)、處理出錯(cuò)情況。緊密依賴于具體應(yīng)用,這類方法比較容易編寫,也比較容易理解?!?/p>

實(shí)現(xiàn)方法

負(fù)責(zé)完成具體的操作,但并不做出是否執(zhí)行這個(gè)操作的決定,也不知道為何執(zhí)行這個(gè)操作。若在執(zhí)行過程中發(fā)現(xiàn)錯(cuò)誤,僅返回執(zhí)行狀態(tài)。由于實(shí)現(xiàn)方法是自含式算法,相對(duì)獨(dú)立于具體應(yīng)用,因此在其他應(yīng)用系統(tǒng)中也可能重用它們。為提高可重用性,在編程時(shí)不應(yīng)將策略和實(shí)現(xiàn)放在同一個(gè)方法中,而應(yīng)將算法的核心部分放在一個(gè)單獨(dú)的具體實(shí)現(xiàn)方法中。為此需要從策略方法中提取具體參數(shù),作為調(diào)用實(shí)現(xiàn)方法的變?cè)"軐⒉呗耘c實(shí)現(xiàn)分開

就功能實(shí)現(xiàn)的過程而言,有兩種不同類型的方法:⑤全面覆蓋若輸入條件的各種組合都可能出現(xiàn)時(shí),應(yīng)針對(duì)所有組合寫出方法,而不能僅針對(duì)當(dāng)前用到的組合情況寫方法。如:在當(dāng)前應(yīng)用中需要寫一個(gè)方法,以獲取表格中第一個(gè)元素,則至少還應(yīng)該為獲取表中最后一個(gè)元素再寫一個(gè)方法。此外,一個(gè)方法不應(yīng)只處理正常值,對(duì)空值、極限值及界外值等異常情況也應(yīng)能做出有效響應(yīng)。(容錯(cuò))⑥盡量不使用全局信息盡量降低方法與外界的耦合程度,是降低耦合度的主要措施。⑦利用繼承機(jī)制是實(shí)現(xiàn)共享和提高重用程度的主要途徑。◆調(diào)用子過程將公共代碼分離出來(最簡(jiǎn)單做法),構(gòu)成一個(gè)被其他方法調(diào)用的公用方法,并在基類中定義這個(gè)公用方法,供派生類中的方法調(diào)用。

分解因子有時(shí)是提高“相似類”代碼可重用性的一個(gè)有效途徑。從不同類的相似方法中分解出不同的“因子”(即不同的代碼),余下的代碼作為公用方法中的公共代碼。將分解出的因子作為名字相同而算法不同的方法,放在不同類中定義,并被這個(gè)公用方法調(diào)用。(基類)◆

使用委托繼承關(guān)系的存在意味著子類“即是”父類。因此,父類所有方法和屬性應(yīng)該都適用于子類。但僅當(dāng)確實(shí)存在一般-特殊關(guān)系時(shí),使用繼承才是恰當(dāng)?shù)?。繼承機(jī)制使用不當(dāng)將造成程序難于理解、修改和擴(kuò)充。當(dāng)邏輯上不存在一般-特殊關(guān)系時(shí),為重用已有的代碼,可利用委托機(jī)制。

◆將代碼封裝在類中程序員往往希望重用以其他方法編寫的、解決同一類應(yīng)用問題的程序代碼。重用這類代碼的一個(gè)比較安全的途徑,是將被重用的代碼封裝在類中。如:開發(fā)一個(gè)數(shù)學(xué)分析應(yīng)用系統(tǒng)的過程中,已知有現(xiàn)成的實(shí)現(xiàn)矩陣變換的商用軟件包,程序員不想用C++重寫這個(gè)算法,于是定義一個(gè)矩陣類把這個(gè)商用軟件包的功能封裝在該類中。2、提高可擴(kuò)充性上述提高可重用性的準(zhǔn)則,也能提高程序的可擴(kuò)充性。此外,以下面向?qū)ο蟪绦蛟O(shè)計(jì)準(zhǔn)則也有助于提高可擴(kuò)充性。①封裝實(shí)現(xiàn)策略將類的實(shí)現(xiàn)策略(包括描述屬性的數(shù)據(jù)結(jié)構(gòu)、修改屬性的算法等)封裝起來,對(duì)外只提供公有的接口,否則將降低今后修改數(shù)據(jù)結(jié)構(gòu)或算法的自由度。②避免用一個(gè)方法遍歷多條關(guān)聯(lián)鏈一個(gè)方法應(yīng)只包含對(duì)象模型中的有限內(nèi)容。違反這個(gè)準(zhǔn)則將導(dǎo)致方法過分復(fù)雜,既不易理解,也不易修改擴(kuò)充。③避免使用多分支語句可利用“DO_CASE語句”測(cè)試對(duì)象的內(nèi)部狀態(tài),而不要用來根據(jù)對(duì)象類型選擇應(yīng)有的行為,否則在增添新類時(shí)將不得不修改原有的代碼。應(yīng)合理利用多態(tài)性機(jī)制,根據(jù)對(duì)象當(dāng)前類型,自動(dòng)決定應(yīng)有的行為。④精心確定公有方法公有方法是公開的接口,對(duì)這類方法的修改往往會(huì)涉及許多其他類,因而修改公有方法的代價(jià)通常都比較高。為提高可修改性,降低維護(hù)成本,須精心選擇和定義公有方法。私有方法是僅在類內(nèi)部使用的方法,通??衫盟接蟹椒▉韺?shí)現(xiàn)公有方法。刪除、增加或修改私有方法所涉及的面要窄得多,因而代價(jià)也較低。同樣,屬性和關(guān)聯(lián)也可分為公有和私有兩大類,公有屬性或關(guān)聯(lián)又可進(jìn)一步設(shè)置為具有只讀權(quán)限或只寫權(quán)限兩類。3、提高健壯性

編寫實(shí)現(xiàn)方法的代碼時(shí),既應(yīng)考慮效率,也應(yīng)考慮健壯性,通常需要在健壯性與效率之間做適當(dāng)?shù)恼壑?。作為軟件不可忽視的質(zhì)量指標(biāo)。提高健壯性應(yīng)遵守如下準(zhǔn)則:①預(yù)防用戶的操作錯(cuò)誤軟件系統(tǒng)必須具有處理用戶操作錯(cuò)誤的能力。當(dāng)用戶在輸入數(shù)據(jù)時(shí)發(fā)生錯(cuò)誤,不應(yīng)該引起程序運(yùn)行中斷,更不應(yīng)該造成“死機(jī)”。任何接收用戶輸入數(shù)據(jù)的方法,對(duì)其接收到的數(shù)據(jù)必須進(jìn)行檢查,即使發(fā)現(xiàn)了非常嚴(yán)重的錯(cuò)誤,也應(yīng)給出恰當(dāng)?shù)奶崾拘畔?,并?zhǔn)備再次接收用戶的輸入。②檢查參數(shù)的合法性對(duì)公有方法,尤其應(yīng)該著重檢查其參數(shù)的合法性,因?yàn)橛脩粼谑褂霉蟹椒〞r(shí)可能違反參數(shù)的約束條件。③不要預(yù)先確定限制條件在設(shè)計(jì)階段,往往很難準(zhǔn)確地預(yù)測(cè)應(yīng)用系統(tǒng)中使用的數(shù)據(jù)結(jié)構(gòu)的最大容量需求。因此,不應(yīng)預(yù)先設(shè)定限制條件。若有必要和可能,應(yīng)使用動(dòng)態(tài)內(nèi)存分配機(jī)制,創(chuàng)建未預(yù)先設(shè)定限制條件的數(shù)據(jù)結(jié)構(gòu)。④先測(cè)試后優(yōu)化為在效率和健壯性之間做出合理的折衷,應(yīng)在為提高效率而進(jìn)行優(yōu)化之前,先測(cè)試程序的性能。實(shí)際上大部分程序代碼所消耗的運(yùn)行時(shí)間并不多。應(yīng)該仔細(xì)研究應(yīng)用程序的特點(diǎn),以確定哪些部分需要著重測(cè)試(如最壞情況出現(xiàn)的次數(shù)及處理時(shí)間,可能需要著重測(cè)試)。經(jīng)過測(cè)試,合理地確定為提高性能應(yīng)著重優(yōu)化的關(guān)鍵部分。若實(shí)現(xiàn)某個(gè)操作的算法有許多種,則應(yīng)綜合考慮內(nèi)存需求、速度及實(shí)現(xiàn)的簡(jiǎn)易程度等因素,經(jīng)合理折衷選定適當(dāng)?shù)乃惴āH?、測(cè)試策略經(jīng)典策略:從“小型測(cè)試”逐步過渡到“大型測(cè)試”。

即:?jiǎn)卧獪y(cè)試→集成測(cè)試→確認(rèn)測(cè)試→系統(tǒng)測(cè)試傳統(tǒng):?jiǎn)卧獪y(cè)試集中測(cè)試最小的可編譯的程序單元(過程模塊),單元測(cè)試完成后進(jìn)行集成,并應(yīng)進(jìn)行一系列回歸測(cè)試,以發(fā)現(xiàn)模塊接口錯(cuò)誤和新單元加入到程序中所帶來的副作用。最后,將系統(tǒng)作為一個(gè)整體來測(cè)試,以發(fā)現(xiàn)軟件需求中的錯(cuò)誤。面向?qū)ο螅号c上述策略基本相同,但也有許多新特點(diǎn)。1、面向?qū)ο蟮膯卧獪y(cè)試---“單元”的概念發(fā)生變化!

“封裝”產(chǎn)生類和對(duì)象的定義,即類和類的實(shí)例(對(duì)象)包裝了屬性(數(shù)據(jù))和處理這些數(shù)據(jù)的操作(方法\服務(wù))。因此,最小的可測(cè)試單元是“封裝起來的類和對(duì)象”。一個(gè)類可以包含一組不同的操作,而一個(gè)特定的操作也可能存在于一組不同的類中。所以,面向?qū)ο蠓椒ㄖ?,單元測(cè)試的含義發(fā)生了很大變化。◆

不能再孤立測(cè)試多個(gè)操作◆應(yīng)將操作作為類的一部分來測(cè)試如:考慮一個(gè)類層次,操作x在父類中定義并被一組子類繼承,每個(gè)子類都使用操作x,但x調(diào)用子類中定義的操作并處理子類的私有屬性。由于在不同子類中使用操作x的環(huán)境會(huì)有細(xì)微不同,因此有必要在每個(gè)子類的語境中測(cè)試操作x。

這就意味著,當(dāng)測(cè)試面向?qū)ο筌浖r(shí),傳統(tǒng)的單元測(cè)試方法是無效的,不能再孤立地測(cè)試操作x。兩個(gè)原則:2、面向?qū)ο蟮募蓽y(cè)試◆

傳統(tǒng)的自頂向下和自底向上的集成策略失去意義

---

面向?qū)ο蟮能浖胁淮嬖趯哟蔚目刂平Y(jié)構(gòu)?!?/p>

傳統(tǒng)的漸增式集成方法成為不可能

---

構(gòu)成類的成分彼此之間存在直接或間接的交互,一次集成一個(gè)操作到類中通常是不可能的。面向?qū)ο筌浖蓽y(cè)試的兩種不同策略:①基于線程的測(cè)試(thread-basedtesting)

線程---程序(進(jìn)程)中某個(gè)單一順序的控制流,是程序執(zhí)行流的最小單元。該策略將響應(yīng)系統(tǒng)的一個(gè)輸入或一個(gè)事件所需要的一組類集成起來,分別集成并測(cè)試每個(gè)線程,同時(shí)用回歸測(cè)試保證沒有產(chǎn)生副作用。②基于使用的測(cè)試(use-basedtesting)首先測(cè)試幾乎不使用服務(wù)器類的那些類(獨(dú)立類),將獨(dú)立類都測(cè)試完之后,再測(cè)試使用獨(dú)立類的下一個(gè)層次的類(依賴類)。對(duì)依賴類的測(cè)試一個(gè)層次一個(gè)層次地持續(xù)進(jìn)行,直至將整個(gè)軟件系統(tǒng)構(gòu)造完為止。集群測(cè)試(clustertesting)是面向?qū)ο筌浖蓽y(cè)試的一個(gè)步驟。在這個(gè)測(cè)試步驟中,用精心設(shè)計(jì)的測(cè)試用例檢查一群相互協(xié)作的類(分析對(duì)象模

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論