經過測試的OO軟件,是否滿足要求呢?如何用這些結果來判斷OO軟件的質量呢?實際上OO軟件的度量就是讓軟件開發——
度量(measurement)與量度(metrics)是任何工程學科的關鍵部分,它們有何區別呢?度量是對開發過程進行檢測,以提高開發過程的質量和勞動生產率;量度則是度量的結果,作為評價質量和勞動生產率的基礎。與其他方法相比較,OO量度的使用和發展要晚得多。與傳統軟件一樣,OO量度的主要目的是:更好地理解產品的質量,評價過程的效率,改進項目層完成工作的質量。
一、OO度量的特性
任何產品的技術量度都取決于產品的特性。OO軟件與使用傳統方法開發的軟件的度量方法截然不同,OO軟件目前常用的五個特殊量度的特性包括以下幾個:
1.局域性
局域性(Localization)是指信息被集中在一個程序內的方式。
(1)傳統方法:數據與過程分離,功能分解和功能信息局域化。其典型的實現形式為過程模塊,工作時用數據驅動功能。
此時的量度放在功能內部結構和復雜性上(如模塊規模、聚合度、環路復雜性等)或放在該功能與其他功能(模塊)的耦合方式上。
(2)OO方法:局域性基于對象,因為類是OO系統的基本單元,對象封裝數據和過程,因此應把類(對象)作為一個完整實體來量度。
另外,操作(功能)和類之間的關聯是一對一的。因此,在考慮類合作中的量度時,必須能適應一對多和多對一的關聯。
2.封裝性
封裝(Encapsulation)是指一個項集合的包裝。
(1)傳統方法:記錄、數組,只有數據沒有過程,為低層次的封裝;過程、函數、子例程和段,則只有過程沒有數據,為中層次的封裝。其量度的重點分別在代碼行的數據和環路的復雜性。
(2)OO方法:OO系統封裝擁有類的職責(操作),包括類的屬性、操作和特定的類屬性值定義的類(對象)的狀態。其量度和重點不是單一的模塊,而是包含數據(屬性)和過程(操作)的包。
3.信息隱藏
信息隱藏(Information hiding)是指隱藏(刪除)了程序構件操作的細節,只將訪問該構件所必要的信息提供給訪問該構件的其他構件。
在這一點上,OO方法和傳統方法基本一致。因此,OO系統應支持信息隱藏,除提供隱藏等級說明的量度外,還應提供OO設計質量指標。
4.繼承性
繼承性(Inheritance)是指一個對象的屬性和操作能夠傳遞給其他對象的機制。繼承性的發生貫穿于一個類的所有層次。
一般來說,傳統軟件不支持這種特性。而對OO系統來說,繼承性是一個關鍵性的特性。因此,很多OO系統的量度都以此為重點,如子的數量(類的直接實例數量),父的數量(直接上一代數量),以及類的嵌套層次(在一個繼承層次中,類的深度)。
5.抽象
抽象(Abstraction)使設計者只關心一個程序構件的主要細節(數據和過程兩者),而不考慮底層的細節。
抽象也是一種相對概念,抽象在OO和傳統開發方法中都被采用,如處于抽象的較高層次時,我們可忽略更多的細節,只提供一個關于概念或項的一般看法;當處于抽象的較低層次時,可以引入更多的細節,即提供一個關于概念或項的更詳細的看法。
在OO中,由于類是一個抽象,它可以從許多不同的細節層次和用許多不同的方式(如作為一個操作的列表、一個狀態的序列、一組合作)來觀察。
OO量度可用一個類度量的項來表示抽象,如每個應用類的實例化的數量、每個應用類被參數化的數量,以及類被參數化與未被參數化的比例等。
二、面向類的量度
類是OO系統的基本單元。一個單一類、類的層次和類的合作的度量和量度,對一個必須評價設計質量的軟件工程是十分重要的。
1. CK量度組
CK量度組由Chidamber和Kemerer提出,他們建議使用6種基于類設計的量度,通稱為CK量度組。
(1) 每個類的加權方法WMC (weighed Methods per Class)
WMC=∑Ci (i=1~n)
其中,Ci為一個類的各個方法(或操作或服務)的復雜性,相當于傳統方法中的環路復雜性,Ci可相加。方法的數量和它們的復雜性是用來實現和測試一個類工作量總量的指示器。方法的數量越大,繼承樹(所有子類都繼承父類的方法)就越復雜。對一個給定的類,隨著方法的數量增大,其應用很可能變得越來越專門化,由此將限制其可能的重用。所以,WMC的值應當合理。
(2) 繼承樹的深度DIT (Depth of the Inheritance Tree)
這種量度被定義為從結點到樹根的最大長度。
DIT的值越大,復雜性就越高。因為隨著DIT的增大,層次的類可能會繼承許多方法。當試圖預測一個類行為時,困難不僅會增大,而且會增加設計的復雜性。當然DIT較大時,則表示有許多方法被重用,這是其好的一方面。
(3) 子的數量NOC (Number of children)
子類在類的層次內,子類可以最直接地從屬于一類。隨著子類數量的增大,重用也增加了。但父類抽象的表示可能減少,即一些子類可能不是父類真正的成員,同時,測試數量(用來檢查每個子類在操作前后的要求)也將增加。
(4) 對象類間的耦合CBO
CBO(Coupling Between Object Classes)是指一個類合作(即相關)的數量。當CBO增大時,不僅降低了可重用性,而且使其修改和修改后的測試變得復雜。所以,每個類的CBO值應當保持合理。這與在傳統軟件中減少耦合的一般原則是一致的。
(5) 對一個類的響應RFC (Response for a Class)
一個類的響應設置是一組方法,它可能被執行,用來響應接收到的類對象的消息,RFC被定義為響應設置方法的數量。
RFC增加,測試序列增加,測試工作量也將增加。由此可以得出,當RFC增大時,類的設計復雜性也將增大。
(6) 方法中聚合的不足LCOM (Lack of Cohesion in Methods)
一個類內的每種方法訪問一個或多個屬性(也稱實例變量)。LCOM是訪問一個或多個相同屬性方法的數量。
如果LCOM很大,則說明方法可以通過屬性與其他方法耦合,這就增加了類設計的復雜性。通常,對LCOM值很大的類,可以把它分為兩個或多個單獨的類,這樣每個類能的設計更方便。
這里講的耦合和聚合與傳統軟件中所講的是一樣的。我們希望高聚合和低耦合,即保持低的LCOM。但在某些情況下,LCOM值很大也是合理的。
2. LK量度組
LK量度組是由Lorenz和Kidd提出的,他們把基于類的量度分為四種類型:規模、繼承、內部(特性)和外部(特性)。
對OO類,基于規模的量度,主要集中在單一類的屬性和操作的數量,以及作為整個OO系統的平均值;基于繼承的量度,關注的是貫穿于類層次的操作被重用的方式;類的內部特性的量度是考察聚合和代碼問題;而外部特性的量度則是檢查耦合和重用問題。
三、面向操作的量度
根據Lorenz和Kidd的建議,有三種基本量度:
(1) 平均操作規模OSavg (Average Operation Size)
雖然代碼行數可以成為操作規模的指示器,但代碼行數的度量與傳統軟件一樣有許多問題。因此,在OO軟件中,由操作所傳送的消息數量提供了一個對操作規模度量可選的方法。操作規模增大,表示操作所傳送的消息數量增加,數量越大,說明越復雜。
(2) 操作復雜性OC (Operation Complexity)
一個操作的復雜性可以用傳統軟件所使用的任何復雜性量度進行計算。因為操作限于特定的職責,所以設計人員應使OC盡可能的小。
(3) 每個操作參數的平均數NPavg (Average Number per Operation)
操作參數的數量越大,對象間的合作就越復雜。所以,NPavg 一般應盡可能的小。
四、OO系統的量度
根據Binder建議,按對封裝性和繼承性的影響提出了幾種類型的量度。
1. 封裝性
(1) 方法(操作與服務)中聚合的不足LCOM LCOM的值越高,表示更多的狀態必須進行測試,才能保證方法不產生副作用。
(2) 公共與私有的百分比PAP (Percent Public and Protected) 公共屬性從其他類繼承,所以這些類是可見的。私有屬性是專屬的,為一特定子類所擁有。這種量度說明類的公共屬性的百分比,PAP的值高就可能增加類間的副作用。
(3) 數據成員的公共訪問PAD (Public Access to Data Member) 這種量度說明可訪問其他類屬性的類的數量,即一種封裝的破壞。PAD的值高可能導致類間的副作用。所以,測試的設計必須保證每一種這樣的副作用能夠被發現。
2. 繼承性
(1) 根類的數量NOR (Number of Root Classes) 這種量度是在設計模型中,描述性質各不相同的類層次數量的計算方法。對每一個根類及其子類的層次必須開發相應的測試序列。隨著NOR的增大,測試工作量也相應增加。
(2) 扇入FIN (Fan In) 當扇入用于OO情況時,扇入是一種多重繼承的指標。FIN大于1 ,說明一個類不只從屬一個根類,而是繼承更多的根類的屬性和操作。
(3) 子的數量NOC (Number of Children)和繼承樹的深度DIT (Depth of the Inheritance Tree) 正如在OO測試中討論的,超類的方法(操作、服務)將不得不為每個子類進行重新測試。
五、OO項目的量度
項目管理人員的任務就是計劃、協調、跟蹤和控制一個軟件項目的進行。其中主要問題就是對軟件的實現規模進行估算。因為規模與工作量和開發時間成正比。
(1) 腳本的數量NSS (Number of Scenario Scripts) 腳本的數量或使用用例與滿足需求所要求的類的數量、每個類的狀態的數量,以及方法(操作)、屬性和合作的數量成正比。所以,NSS是程序規模的重要指標。
(2) 關鍵類的數量NKC (Number of Key Classes) 關鍵類一般都集中在問題的事務域上,而且它通過重用來實現的可能性很小。因此,NKC的值高表明實際的開發工作還處于初期階段。Lorenz和Kidd認為,在一般的OO系統中,關鍵類應在20%~40%,而其他類支持底層結構(GUI、通信、數據庫等)。
(3) 子系統的數量NSUB (Number of Subsystems) 子系統的數量能對資源分配、進度安排(特別強調采用平行開發)及整個集成的工作量提供更好的了解。
NSS、NKC和NSUB的量度還可以用來收集與過去OO項目及其整個項目和單個過程活動(如OOA、OOD、OOP和OOT)相關的工作的花費。這些數據也可以與前面討論過的設計量度一起用來計算生產率量度,如每個開發人員開發類的平均值等?傊,這些量度可以用于估算當前項目的工作量、開發時間、使用人員和其他信息。
文章來源于領測軟件測試網 http://www.kjueaiud.com/
版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
技術支持和業務聯系:info@testage.com.cn 電話:010-51297073
老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月