1 目的
本規范為實施《青鳥軟件生產線技術的引進、開發、應用和示范工程》而規定以構件復用為目的的構件屬性的定義方法。
2 適用范圍
本規范適用于計算機軟件構件的評價、收集、整理、分類和構件在可復用構件庫的登錄、查找、修改與撤消。
3 術語
3.1 構件 ( Component)
廣義定義:構件是計算機軟件構件的簡稱,是在軟件生命周期各階段可以被復用的軟件實體,它可以是設計、代碼或軟件開發過程的其它產品。如可組裝的軟件、程序模板、程序的原代碼或目標模塊和軟件需求說明、規格說明、程序說明、數據說明、測試說明和測試案例等軟件成分?!皬陀谩敝冈谕幌到y的其它地方或另一個系統中使用已有的軟件構件 [1] 。
狹義定義:軟件構件是具有公開接口和確定意義的可被組裝的軟件制品。它可以不加修改或者基本不加修改地作為一個部件和其它構件一起組裝成更大的軟件或軟件成分 [2] 。
3.2 構架 ( Framework)
構架是計算機軟件構架的簡稱,是可以復用的、需要再擴展才能實現的“半完成”的軟件 [3] 。構架提供應用域的可擴展的模板 [4] ,它具有完整的結構、基本元件和明確說明接口的組裝其它構件或程序的擴展點 [5] 。構架也是一種構件,可以被組裝。本規范用構件的狹義定義區分構件與構架。不加區分時“構件”術語的廣義定義包含了它的狹義定義。
擴展點是構架中允許被替換、被修改的功能或程序體位置的明確標識。
3.3 構件的連接關系
一個構件直接與其它構件的繼承、關聯、訪問、存取、引用或通信關系。構件的連接關系有繼承關系、聚合關系、聯合關系和數據流關系。構件的連接關系簡稱“連接關系”。
3.3.1 繼承關系
繼承關系是面向對象的構件的“一般和特殊”關系。通過繼承,一個類可以共享另一個類(單一繼承)或多個類(多重繼承)的結構、屬性和方法 [6] 。
3.3.2 聚合關系
聚合關系是構件的“整體和部分”關系。通過聚合,被聚合的構件作為成員組裝到聚合構件中,聚合構件應該有方法建立聚合構件和所有被聚合構件的動態的或邏輯的整體一致性 [7] 。聚合構件和被聚合構件可以是面向對象方法的實例或結構化方法的函數。結構化方法的模塊結構用聚合關系表達;文檔構件的組合和引用也用聚合關系表達。
3.3.3 聯合關系
聯合關系表達構件之間的聯系?!奥撓怠笨梢允且粋€構件對別的構件(單向)或者是相互(雙向)的關聯、訪問、存取、引用和通信,聚合關系是一種“強”聯合關系 [8] 。為區分聚合關系與聯合關系,本規范約束聯合關系僅表達( 1)數據結構的關聯(如E-R關系);(2)對象的指向關系(一個對象作為另一個構件的方法或函數的參數被引用);(3)文檔構件參考資料的指針(參考符)。
3.3.4 數據流關系 [9]
數據流關系是基于對象數據流圖的一種聯合關系,表達對象之間的功能信息關聯。同時支持結構化方法和面向對象方法的系統分析與設計。數據流關系用聯合關系中的對象的指向關系實現。
3.4 構件的包含關系
如果構件 A被組裝到構件B中,并且A或者A的成員可以被構件B所使用,則稱構件B包含構件A。本規范定義,構架和構件可以互相包含;面向對象方法的構件和結構化方法的構件也可以互相包含??蓮陀脴嫾斓慕Y構服從本定義。
3.5 構件屬性
3.5.1 說明屬性
綜合說明構件的名字、來源、版權信息、版本歷史和構件的應用領域、構件類型、開發工具、開發方式、運行環境、主要功能和 可 復用的程度,以及構件查詢的關鍵字。
3.5.2 使用屬性
說明構件的應用領域、表達形式、服務類型、開發方式、開發工具、運行環境、可復 用程度 、被使用的次數、被修改的次數,以及技術、經濟或法律的約束條件。
3.5.3 內容屬性
內容屬性包括構件體和構件的連接關系。 構件體即構件 本身的內容(程序或文檔),不包括該構件所復用的其它構件;構件的連接關系說明該構件復用其它構件的連接關系類型(繼承、聚合、聯合、數據流),不包括構件體內部的“類”或函數間的關系。
3.5.4 結構屬性
定量說明構件的結構特征。它包含構件的服務數、內聚、耦合、結構層數、繼承、聚合、函數調用等因子。它支持面向對象方法、結構化方法或二者混合方法開發的構件的結構描述。
3.5.5 評價屬性
本規范推薦應用 Albrecht復雜度、COCOMO 2.0復雜度和DeMarco復雜度從構件的功能組成角度評估構件的復雜度,用McCabe復雜度和Dhama內聚度從構件內部的程序結構角度評估構件的復雜度。構件的復雜度評估,對于評價構件的質量和預測構件開發、復用、測試、維護的工作量和難度有重要意義。
3.5.5.1 功能復雜性 [10]
功能復雜性是從構件的規格說明與設計通過構件的功能性來度量構件復雜度的因子。功能復雜性是針對 4GL的出現以至不能用簡單的代碼行 作出 前述評估而提出的。有三種典型的評估模型可以用于結構化方法、面向對象方法或者混合方法開發的構件功能復雜性評估:
Albrecht復雜度 [11] ,是基于應用(軟件或系統)所含的功能和技術要求計算“功能點”的軟件復雜性度量。它給出外部輸入、外部輸出、交互輸入、外部文件和內部文件五類三個尺度(簡單、平均、復雜)共15個因子計算“非可變功能點復雜性”(UFC,Unadjusted Function point Complexity),又給出14個技術因子計算“技術復雜因素”(TCF, Technical Complexity Factor),“功能點”(FP, Function Point)等于UFC和TCF的乘積,是復雜度評估的基準。
COCOMO 2.0復雜度 [12] ,是組合進“對象點”(OP, Object Point)、“功能點”和“源代碼行”(LOC, source Line Of Code)度量覆蓋軟件生命周期的復雜度度量模型。Boehm推薦應用“對象點”于應用組合(Application Composition)階段或原型工程,應用“功能點”和“源代碼行”于應用開發(Application Development)階段?!皩ο簏c”OP的計算統計應用中所含的屏幕數、報告數(Reports)和3GL構件數,每一種都帶有“簡單”、“中等”、“困難”三級復雜性權重。引入“復用率”R%,新開發的“對象點”NOP = OP×(100-R) / 100。如果應用“對象點”和“功能點”于同一系統復雜性的早期評估,“對象點”的計算量大約是“功能點”計算量的47% [10] 。
DeMarco復雜度 [13] ,是基于結構化分析與設計的復雜性度量。它區分應用系統為“功能強”的系統或“數據強”的系統?!肮δ軓姟钡南到y復雜度是基于數據流圖(DFD)依據功能類型加權計算系統所含有的功能對象數和功能對象內的輸入/輸出數據項數;“數據強”的系統復雜度是基于實體關系圖(ERD)依據數據實體的關系數加權計算系統所含有的數據實體數。DeMarco建議用數據對象間的數據連接數與功能對象數的比值區分“功能強”的系統(小于0.7)或“數據強”的系統(大于1.5),或是“中性”的系統(0.8和1.4之間)。
3.5.5.2 結構復雜性
結構復雜性是通過構件內部的程序結構對構件的結構復雜度進行度量的因子。 McCabe復雜度 [14] 是典型的適用于結構化方法、面向對象方法或者混合方法開發的構件結構復雜性的評估模型。
McCabe復雜度映射一個程序成為一個圖,程序的“基本結構復雜度”為判定節點數加1?;诖?,McCabe定義了層次化引用構件的程序的結構復雜度:(1)順序執行構件的程序結構復雜度等于順序系列中所有構件的結構復雜度之和減去構件數再加1;(2)嵌套調用構件的程序結構復雜度等于程序的“基本結構復雜度”加上所有被調構件的結構復雜度之和再減去被調構件數。McCabe復雜度是NATO推薦的構件結構復雜性度量模型。對于繼承復用,本規范規定 不計入被繼承 構件的復雜度,但被繼承構件在被度量構件內部參與運算的方法作為被度量構件的組成成分被度量。
3.5.5.3 Dhama內聚度 [22]
Dhama內聚度根據方法或函數的接口參數、全局變量、“扇入”、“扇出”等評估方法或函數的內聚度。Dhama定義內聚度M c 為M c = K/(d i + 2c i + d o + 2c o + g d + 2g c + w + r)。這里,數據耦合和控制耦合參數d i 是輸入參數 數 、c i 輸入控制參數 數 、d o 是輸出參數 數 、c o 是輸出控制參數 數 ,全局耦合參數g d 是全局變量數、g c 是全局控制變量數,環境耦合參數w 是被調用的函數 數 、r是調用的函數 數 。常數K=1??刂祁悈?引起引起 條件轉移,加權2。
4 屬性描述語言
屬性描述采用巴科斯范式( BNF,Backus Normal Form)描述,本規范使用的描述符號意義如下:
:: = 定義符,意為“定義為”。
+ 連選符 ,符號兩邊的內容必須選?。墒÷?,省略時自然連接的內容必須選?。?。
| 選擇符,符號兩邊的內容選擇其中一個。
[ ] 任選符,符號內用分隔符分隔的內容可選一個、多個或者不選。
… 重復符,符號前任選符包含的內容可以重復一個或多個,或者不重復。
< > 待定義符,符號內的內容需要再定義。
“” 復用定義符,符號內的定義被繼承。
原文轉自:http://www.anti-gravitydesign.com