近年來,面向對象技術已經作為一種有優勢的軟件工程方法出現。和其他許多新技術一樣,面向對象方法的出現使得軟件開發人員和他們的經理們必須重新考慮估計他們開發項目的方法。傳統的軟件度量技術即使進行改善也無法滿足度量生產力和預測工作的需要。源代碼行和功能點方法都是程序需要將數據和過程分解開的時代特有產物。這和面向對象范疇有沖突。傳統的設計技術將數據和過程分離而面向對象技術將他們聯合在一起。如果要提供準確的工作預測或生產力跟蹤,面對對象度量方法必須有多個尺度(度量維)。計算交付給客戶的軟件具有功能數非常重要,但對象間交流的信息和通過繼承的重用對規模度量也非常重要。
本文論述了預測性對象點(Predictive Object Points POPs),一種包含前面提到的面對對象3個尺度的度量方法。不像傳統的度量方法基于結構分析的數據和過程模型,POPs是基于對象和他們的特征。POPs綜合了文獻中幾種流行的度量方法,建立一種適合預測工作量和跟蹤生產力的方法。POPs方法的核心是每類加權方法數(Weighted Methods per Class WMC)。這種方法測量每個頂層類(或者說,每個在用戶的視野中清楚的對象)并且根據類的行為(方法)類型不同進行加權。一旦得到WMC的值,POPs方法將把它和有關按類分對象組的信息和對象類之間的關系進行聯合計算。接下來本文將論述POPs方法形成過程和有關工作研究結果,并且介紹一個預測性對象點方法應用的例證。通過對一個公用領域的面向對象項目的使用,能指導讀者認識計算預測性對象點的機理。
傳統的度量有什么錯誤
傳統的度量方法在一些度量過程中還占有一席之地。一些年來,軟件開發人員和軟件估計人員使用源代碼行(SLOC)或者功能點方法估計要建設的面向對象軟件項目的工作量,這不是因為他們選用的方法是最好的,但卻可能是最適合的,常常在組織面向對象過程不夠成熟時他們比較適合。相反地,當組織越來越善于設計和開發面向對象軟件時,這些傳統的方法變得越來越沒有用了,因為每個開發人員的代碼行變得和其他人員的不是很相似。變化的原因很明顯,他們已經停止了思考每一行代碼是怎樣和另一行代碼相匹配,停止了結構化分析,走向面向對象方法的道路。首先我們不妨想想傳統的程序方法和它是怎么發展的。最初,軟件開發人員被迫將的軟件方案完全分解,因為最早的程序語言需要辛苦地一步一步描寫要實現的每一個方案的動作。隨著編程的發展,越來越多的一步步描寫變成了一個簡單的編譯命令。但是還需要分解功能業務。 結構化分析需要開發人員按過程連續地思考和編程,編寫每一行代碼,每一個函數和每個子系統,每一個產品,都是一種單一連續思維。在這種對源代碼和函數單一的思想下,很容易想到像代碼行和功能點這樣度量方法。但面向對象技術要求人們完全轉變思想。一個方案不再根據需要實現它的步驟進行分解。它寧愿分解成一個個包含在方案的動作者,當然分解出來的動作者必須對方案有作用。方案空間分解為動作者和動作者的行為。既然動作者和他們的行為受他們內部之間相互作用或者環境的影響,所以每一行代碼的想法需要考慮許多可能的作用在動作者上的路徑;谶B續程序開發模型的度量方法將會錯過這種相互作用所導致的復雜性。
相關研究
面向對象度量的研究,無論如何不是一塊未曾開墾的處女地。Chidamber 等曾提出一套面向對象度量,其中包括一些度量規模的方法,他們都是很好地根據度量理論創立的[4]。Lorenz發布了一張11個“構思度量”的表,其中有些能很好適用于規模度量[16]。其他一些學者在收集軟件開發工作不同的度量尺度時做出了貢獻。Henderson-Sellers收集形成了一個這些方法的全部名單[2]。由于以前每種方法都是致力于面向對象軟件的規模的一個度量尺度,這些方法沒有一個能單獨用作一個很好的規模預測器。Whitmire提出了3-D功能點[19],這是一種擴展的功能點方法,度量軟件項目的數據、控制和功能。然而3-D功能點采用的是傳統的功能點思想處理遇到的問題,他可以度量所有3個尺度,但只能完成在類的水平。這就使得3-D功能點能作為一個完整的軟件生產力分析的方法,但不可能用作工作量預測。
表1列出了一些比較流行的適合于面向對象軟件度量方法和他們可以度量系統特征方面。
度量方法
適用的度量方面
用例/情節腳本數(Number of use cases/scenario scripts)
規模
每類加權方法(Weighted Methods per Class (WMC))
規模,復雜性
每類方法(Methods per Class)
規模
子類數(Number of Children (NOC))
規模,復雜性
繼承樹深度(Depth in Inheritance Tree (DIT))
規模,復雜性
方法大。∕ethod Size(LOC))
規模
3-D 功能點(3-D Function Points)
規模,復雜性
對象間的耦合(Coupling Between Objects (CBO))
耦合
每類實例化變量數(Number of Instance Variables per class)
復雜性
獨立消息發送數(Number of unique messages sent)
耦合/復雜性
超類數(Number of classes inherited(derived classes))
復雜性
派生類數(Number of classes inherited from (base classes))
復雜性
重用率(Reuse Ration)
品質,復雜性
表1 一些流行的面向對象度量方法
面向對象軟件的度量尺度結構
傳統度量方法應用于面向對象解決方案時的問題是只度量軟件的一個尺度,即功能。沒有度量對象與對象間通信的復雜性和通過繼承的重用數量,傳統功能性度量忽略了軟件規模至關重要的這兩個方面。功能(對象的行為)是你預測工作量時一個重要的信息,但只是考慮這個方面,在設計得比較好的面向對象方案中會明顯證明是錯誤的。在功能之外,還有基于系統對象間通信數量的復雜水平。這種復雜性充分影響項目規模。對象間的通信增加,就需要更多的詳細設計和對象測試,他們就是在增加更多的系統服務。面向對象規模的第三個尺度是通過繼承的重用。部分優秀的面向對象分析員潛心識別對象(動作著),將行為足夠相似的分成一個相同的類或一個相同的類族。 類是通過行為和屬性進行描述,實例化就有了具體的對象。一組有許多相似行為的對象常常設計為基類(或者父類),基類包含可以供派生類(或者子類)繼承的一般方法,子類也可以添加新的方法和通過重載父類方法實現父類定義的方法中沒有提供的功能。 繼承是面向對象軟件系統一個強有力的特征,在某些軟件項目,它有可能大大減少項目工作量。
度量所有的三維
已經確定傳統的度量方法缺少準確估計軟件規模的三維中的兩維,下一步的就是確定一種能合并所有三維的度量方法或者度量方法集合。預測性對象點,本文的主題,綜合了最近文獻中出現的幾種度量面向對象的軟件的方法。他們是所有關于軟件系統面向對象分析和設計的度量方法。這些方法度量項目面向的最重要方面~開發的類,類的方法和類的方法對系統其他部分的作用。他們也聯合度量擬定類結構的廣度和深度。包含在POPs計算的度量方法有:
頂層類數(Number of Top Level Classes TLC )
每類的加權平均方法數(Average Number of Weighted Methods per Class WMC)
平均繼承樹深度(Average Depth of Inheritance Tree DIT )
平均每基類的子類數(Average Number of Children per Base Class NOC)
共2頁: 1 [2] 下一頁 |