軟件工程-第15章_第1頁
軟件工程-第15章_第2頁
軟件工程-第15章_第3頁
軟件工程-第15章_第4頁
軟件工程-第15章_第5頁
已閱讀5頁,還剩33頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

1、軟件工程軟件工程第15章面向對象系統的技術度量vOO度量是OO技術不可分割的一部分,在O0軟件開發中具有重要的作用。利用度量能定量理解系統的體系結構和詳細設計,利用度量的反饋信息以構造質量更好的系統;提供OO項目開發成本估算和進度預計的良好基礎;有助于確定各種軟件開發策略的作用和效果。v與其他方法相比較,OO量度的使用和發展要晚得多。與傳統軟件一樣,OO量度的主要目的是:更好地理解產品的質量,評價過程的效率,改進項目級別完成工作的質量。OO度量的幾個準則v根據面向對象度量的特點,在滿足一般度量理論的基礎上,構造面向對象程序所適用的度量還應該遵循以下幾個準則:(1)度量需要反映某一個面向對象的特

2、征(繼承、封裝、多態)。(2)對于面向對象程序每一個方面的特征,要從單個類和整個面向對象系統兩個角度進行度量;(3)單一的度量可能不能全面描述某一個面的特征,必須用一組度量從多個方面來反映;15.1 OO度量的識別特征 任何產品的技術量度都取決于產品的特性。OO軟件與使用傳統方法開發的軟件的度量方法截然不同,Berard定義了OO軟件的5個特征:15.1.1 局部化局部化v局部化指信息被集中在一個程序內的方式。v傳統方法中:數據與過程分離、功能分解,實現了功能局部化。傳統軟件工程使用數據驅動功能,其度量著重放在模塊內部結構或復雜性(如模塊規模、內聚性、環復雜度等)或模塊間相互連接的方式(如模塊

3、耦合)上。v在OO系統中,類是OO系統的基本單位,對象封裝數據和過程,所以局部化是基于對象的,因此,要把類(對象)作為一個完整實體進行度量。而且,操作和類之間的關聯不一定是“一對一”的,所以,類合作的度量必須能適應“一對多”或“多對多”的關聯。15.1.2 封裝封裝v封裝是指一組項的包裝。v傳統軟件中的記錄、數組只有數據沒有過程,是低層次的封裝;子程序(如過程、函數、子例程、段等)只有過程沒有數據,是中層的封裝。其度量的重點在代碼行的計數和環復雜度。v在OO系統中,封裝包含了類的職責(包括類的屬性和操作)以及特定的類屬性值定義的類的狀態。其度量的重點不是單一的模塊,而是包含數據和過程的包,是在

4、較高抽象層次上的度量。15.1.3 信息隱蔽信息隱蔽v信息隱蔽是指隱藏了程序構建的操作細節,只將訪問該構件所必需的信息提供給那些訪問該構件的其它構件。vOO方法和傳統方法是一致的。15.1.4 繼承繼承v繼承是指一個對象的屬性和操作能夠傳遞給其它對象的機制。繼承發生在類層次的所有層面上。v通常,傳統軟件不支持這種特性。繼承是OO系統的一個重要的關鍵特性,因此,很多OO系統的度量以此為重點,包括子女的數量(類的直接子類的數量)、父輩數(直接上層的數量)、類的嵌套層次(在一個繼承層次中類的深度)等等。15.1.5 抽象抽象v抽象是使設計者只關心程序構件的主要細節(數據和過程)、而不考慮低層細節的一

5、種機制。v抽象是一種相對概念,在OO和傳統開發方法中都被采用,處于抽象的較高層次時,可以忽略更多的細節,只提供一個關于概念或項的更一般的視圖;處于抽象的較低層次時,可以引入更多的細節,即提供一個關于概念或項的更詳細的視圖。v在OO系統中,類從許多不同的細節層次上并以許多不同方式(如作為一個操作列表、一個狀態序列、或是一系列協作)來觀察,因此,OO度量可以用一個類度量的項作為抽象的表示,如每個應用類實例化的數量、每個應用類被參數化的數量,以及類被參數化的數量與未被參數化的數量的比例等。15.2 分析、設計模型的度量v對設計的客觀觀察應該有量化的成分從而導向OO度量。在現實中,OO系統的技術度量不

6、僅應用于設計模型,也可應用于分析模型。vWhitmire描述了9個關于OO設計的可測度特征:大小(size)復雜性耦合性充足度完備性內聚性原始性易變性15.3 OO項目的度量v項目管理人員的任務是計劃、協調、跟蹤和控制軟件項目的進行。其中第一個活動就是計劃,而早期的計劃任務之一是估算。項目管理者在計劃過程中面臨的主要問題之一就是如何對軟件的實現規模進行估算。vLorenz和Kidd提出了用于OO項目的度量:場景腳本的數量關鍵類的數量支持類的數量每個關鍵類的平均支持類數量子系統的數量15.4 面向類的度量v經過近年來的研究,人們已經根據面向對象系統的特點提出了一系列面向對象度量,有的得到了廣泛的

7、認可和應用。這些度量分別從面向對象系統本身和系統中單個類的角度進行度量其中較有名的有C&K度量集和Mood度量集。15.4.1 CK度量套件度量套件vCK度量套件(度量集)是一組針對類的度量,主要由Chidamber和Kemerer根據度量理論和有經驗的面向對象軟件開發人員的建議提出,他們建議使用6種基于設計的度量,度量面向對象系統中的單個類,從不同方面給出了評價類的準則。v類的加權方法數(WMC):類的加權方法數反映了類的復雜性一般來說,類的方法數越多類越復雜。由于類中不同方法的復雜程度不一致,所以不能用單純的方法數相加來衡量類的復雜程度,而需要把每個方法賦予一個權值。對于一個有m個

8、類的系統而言,其WMC是m個類的類加權方法的平均值,即 其中WMCj為第j個類的加權方法。方法數和其復雜度可以預測開發和維護該類所需的時間和人力;.由于類繼承了父類的所有方法,父類的方法數越多,對類的潛在影響越大;.那些擁有眾多方法的類更可能適合特定領域的應用,從而限制了其重用。mWMCWMCmjj1例:下圖是ATM系統的部分類視圖,對該系統進行類的加權方法計算(假定方法的復雜度都為1)。類名類名方法方法Transaction2TransferAccount3Withdraw1Inquiry1WMC=7/4=1.75方法/類v繼承樹的深度(DIT):DIT指從結點到根的最大長度,即對象所屬類在

9、繼承樹中的深度,從繼承的角度反映了類的復雜性。DIT越大,復雜性也越大。DIT度量被定義為“從結點到樹根的最大長度”,類的繼承樹深度可以直接從繼承樹中得到,樹根的深度為零。一般來說,DIT越大,它從父輩類中繼承下來的屬性和方法就越多,類的復雜性就越大。隨著DIT的增大,低層次的類可能會繼承很多方法,其行為的預測變得困難;但是當DIT值很大時,又意味著很多方法被復用。那些擁有眾多方法的類更可能適合特定領域的應用,從而限制了其重用。v子女的數量(NOC):類的直接子類個數(NOC):在類層次中,直接從屬于某類的子類稱為該類的子女。類的直接子類個數反映了該類的重用程度。NOC越大,類的重用性越好。對

10、系統的影響就越大。類的直接子類個數可以從繼承樹中得到。隨著NOC的增大,針對每個子女的測試數量也增加了。v對象類之間的耦合(CBO) :如果一個類作用于其他類,比如一個類的方法或實例被另一個類的方法使用了,就稱為耦合。CBO指的是類之間合作的數量,是與一個類相耦合的他類的個數。CBO反映了類和其它類之間的耦合程度。類之間的耦合不利于系統的模塊化設計,類的耦合度越大,獨立性越小,越容易受系統中其它部分的影響,越不易于重用。當CBO增大時,不僅降低了可重用性,而且使其修改和修改后的測試變得復雜。所以,每個類的CBO值應當保持合理。這與在傳統軟件中減少耦合的一般原則是一致的。例:下圖是ATM系統的部

11、分類視圖,對該系統進行類的耦合的計算。類類耦合類耦合類CBOATMBankServer,BankAccount,Transaction3BanServerATM,BankAccount,Transaction3BankAccountATM,BankServer,Transaction3TransactionATM,BankServer,BankAccount,Log4LogTransaction1v對類的響應(RFC) :方法可能調用類外的方法,加入對他們的度量,是增加了對類間潛在通信的度量。 類的響應集合從另一個方面度量類的復雜度,它是所有可能被該類調用的方法的集合,執行它可以響應接收到的類

12、對象的消息。RFC定義為響應集中方法的數量。當RFC增大時,測試序列增大,測試工作量也增加了,類的總的設計復雜度也隨之增大。例:下圖是ATM系統的部分類視圖,對該系統進行類的響應的計算。類類響應集合響應集合RCFATMATM, cardInsert, inquiryReq, Inquiry, inquiry, doTransaction6InquiryInquiry, inquiry, doTransaction, MessageFrom, display, BankAccount, inquiry7MessageFormMessageForm, display2BankAccountBank

13、Account, changePassword, inquiry3v方法中內聚性的缺乏(LCOM) :類的內聚性表明了類中所有元素相互聯系的程度,內聚性的高低表明對類所進行的封裝是否合理。設計合理的類中的元素之間的關系應該比較緊密,因此內聚性要求較大。一個類中的每個方法可能會訪問一個或多個屬性,LCOM是訪問一個或多個相同屬性的方法的數量。如果沒有方法訪問相同的屬性,則LCOM=0。如果一個類中總共有10個方法,其中6個方法共用一個或多個屬性,則LCOM=6。如果LCOM的值比較大,說明該類中的某些方法通過屬性與其它方法耦合,缺乏內聚的程度大,類中的元素關聯程度較低,對類進行的封裝可能具有不合

14、理之處,增加了設計的復雜性,通常把它分為兩個或多個獨立的類。我們總是希望LCOM值比較低,這與傳統軟件中的高內聚、低耦合是一致的。15.4.2 LK度量套件度量套件vLK度量組是由Lorenz和Kidd提出的,他們把基于類的度量分為4種類型:規模、繼承、內部特性和外部特性。v類的規模CS在類中被封裝的操作(繼承和私有實例的操作)的總量。在類中被封裝的屬性(繼承和私有實例的屬性)的總量。CK套件中的WMC實際上也是類的規模的度量。與WMC相類似,如果CS的值比較高,說明一個類有很多功能,這就會減少類的可復用性,并使實現和測試復雜化。v由子類覆蓋的操作數量NOO有的子類,為了自身需要,用自己的特定

15、版本代替從父類繼承的操作,這稱為覆蓋。NOO的值越大,說明子類覆蓋的操作越多。較高的NOO可以提高類的復用性,并減少實現和測試的復雜性;但是如果NOO過大,則違反了超類所蘊含的抽象,削弱了類的層次結構,使得測試和修改的難度增大。v由子類增加的操作數量NOA子類是通過加入私有操作或屬性實現實例化。當NOA的值增大時,則子類漂離超類所隱含的抽象。當類層次的深度增大時,在低層的類的NOA的值將下降。v特例化指標SI特例化指標為OO系統中的每一個子類提供了特例化等級的粗略指示,可以通過增加或刪除操作或覆蓋實現。SI=NOOlevel/Mtotal,其中,level表示類在類層次中的層數,Mtotal表

16、示類方法的總數。SI的值越大,類層次中包含了不遵從超類抽象的類的可能性也就越高。15.4.3 MOOD度量套件度量套件vMOOD度量套件是由Harrison、Counsell和Nithi提出的,是OO設計特征的一組量化指標,它從整個面向對象系統的角度對系統的面向對象特征進行評估。vMOOD度量方法從封裝、繼承、耦合、多態性四個方面提出了6個度量元。每一個度量的計算都是以商的形式給出,分子是系統中特定機制的實際使用次數,分母是同樣的機制最大可能的使用次數。因此,每一個度量的值都介于【0,1 。v方法繼承因子(MIF):MIF表明系統類結構中對方法(操作)和屬性使用繼承的程度,它是所有類中繼承的方

17、法的總數,系統中所有類的所有可獲得的方法(類中定義的方法加上繼承的方法)總數的比值。其中TC為體系結構中類的總數,Ci為體系結構中的一個類,Ma(Ci)=Md(Ci)+Mi(Ci),Ma(Ci)為與Ci相關聯的被引用的方法的數量,Md(Ci)為類Ci中聲明的方法的數量,Mi(Ci)為類Ci中繼承(沒有被覆蓋)的方法的數量。由MIF的計算方法以看出,方法繼承因子是一個0到1之間的值,它的值越大,表明系統中的方法繼承的程度越高。TCiaTCiiCMCMMIF11)()(v屬性繼承因子(AIF):AIF與MIF的定義類似。MIF和AIF提供了方法和屬性繼承對OO軟件影響的量化指標。v耦合因子(CF)

18、:CF表明系統中所有類間的耦合程度,它是系統中實際發生的耦合數目和可能發生的耦合的最大數目的比值。其中函數is_client=1,當且僅當客戶類Cc和服務器類Cs間存在關聯,且CcCs;否則is_client=0。耦合因子CF是對OO設計元素之間關聯的指標,一般情況下,認為在兩個類之間有任何形式的消息傳遞,它們就存在耦合關系。系統中可能發生的耦合的數目最大時的情況就是每個類和其它類都有耦合關系。CF的值在0到1之間,值越大,表明耦合的發生越頻繁。TCTCccclientisCFjiTCjTCi211),(_例:下圖是ATM系統的部分類視圖,對該系統進行耦合因子CF的計算。序號序號類類is_cl

19、ientis_client類1 1ATMBankServer、BankAccount、Transaction2 2BankServerBankAccount3 3BankAccount無4 4TransactionBankServer、BankAccount、Log5 5Log無CF=7/(52-5)7/20v多態因子(PF):多態性是一個值(屬性、方法)具有多于一種類型的能力,使它可以被運用到不同類型的多個語境中。重載就是多態的一種常見的形式,它允許一個函數名被多次使用,每次都帶有不同類型的參數。系統在運行時,根據類的類型確定調用那段代碼。相對于其它語言,具有多態特征的語言具有很多優勢,如靈

20、活性強、抽象性好、支持一定程度的代碼共享和行為共享。PF表明系統中所有類的方法使用多態機制的程度,它是系統中實際發生的多態數目和可能發生的多態情況的最大數目的比值。其中,Mn(Ci)為新方法的數量,Mo(Ci)為覆蓋的方法的數量,DC(Ci)為某基類后代類數量的計數。可以看出,PF中考慮的多態,都是由于繼承引起的,它的值在0到1之間,值越大,表明多態的發生越頻繁。TCiiinTCiioCDCCMCMPF11)()()(例:用MOOD套件對下列java代碼進行MIF和PF的度量。public class Transaction private String transactionDate;pri

21、vate ATM atm;private BankAccount currentAccount;public BankServer m_BankServer;protected void Transaction(BankAccount bankaccount, ATM atm)public boolean doTransaction(BankAcount currentAccount) public class Inquiry extends Transaction public boolean doTransaction(BankAcount currentAccount)private b

22、oolean inquiry()public class Withdraw extends Transaction public boolean doTransaction(BankAcount currentAccount)private boolean withdrawal()MIF=2/(2+6)=1/4PF=2/(2*2+1*0+1*0)=1/2類類Mi(Ci)(類(類i中繼承的方法的數目)Md(Ci) (類(類i中聲明的方法的數目)Transaction無Transaction(), doTransaction()InquiryTransaction: Transaction ()d

23、oTransaction (), inquiry()WithdrawTransaction: Transaction ()doTransaction (), withdrawal()類類Mn(Ci)Mo(Ci)DC(Ci)TransactionTransaction(), doTransaction()無2Inquiryinquiry()doTransaction ()0Withdrawwithdrawal()doTransaction ()0對對CKCK度量和度量和MoodMood度量的評價度量的評價vCKCK度量和度量和MoodMood度量是現在被廣泛接受的度量,度量是現在被廣泛接受的度量

24、,它們分別從類的角度和面向對象系統的角度對它們分別從類的角度和面向對象系統的角度對程序的面向對象特征進行度量。程序的面向對象特征進行度量。v需要注意的是,度量值的大小并不能說明面向需要注意的是,度量值的大小并不能說明面向對象軟件質量的好環,因為不同的程序面對的對象軟件質量的好環,因為不同的程序面對的問題域不同,所對應的面向對象特征也不相同。問題域不同,所對應的面向對象特征也不相同。但是這些度量可以從面向對象特征的角度衡量但是這些度量可以從面向對象特征的角度衡量程序或程序中模塊的復雜度,從而為重點測試程序或程序中模塊的復雜度,從而為重點測試提供依據。提供依據。15.5 面向操作的度量v系統的連接性結構可能比個體模塊的內容更為重要,但是,通過檢查類操作的一般特征也可以幫助我們更好地度量系統。v根據Lorenz和Kidd的建議,有三種簡單的度量。平均操作規模OSavg(average Operation Size)v代碼行LOC可以作為操作規模的指標,但是LOC測量存在依賴于程序設計語言、不適用于非過程語言等問題,因此,在OO軟件中,操作傳送的消息的數量成為操作規模的另一個度量方法。v操作規模增大,表明操作所傳送的消息增多。OSavg值越大,說明操作越復雜,責任在類中沒有很好地分配。操作

溫馨提示

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

評論

0/150

提交評論