
內部產品屬性
內部產品屬性以僅依賴於產品本身的方式描述軟體產品。衡量內部產品屬性的主要原因是,它有助於在開發過程中監控和控制產品。
測量內部產品屬性
主要的內部產品屬性包括**大小**和**結構**。大小可以在無需執行的情況下靜態測量。產品的大小告訴我們建立它所需的工作量。同樣,產品的結構在設計產品的維護方面也起著重要作用。
測量大小
軟體大小可以用三個屬性來描述:
**長度** - 它是產品的物理大小。
**功能** - 它描述了產品提供給使用者的函式。
**複雜度** - 複雜度有不同型別,例如:
**問題複雜度** - 衡量底層問題的複雜度。
**演算法複雜度** - 衡量用於解決問題的演算法的複雜度。
**結構複雜度** - 衡量用於實現演算法的軟體的結構。
**認知複雜度** - 衡量理解軟體所需的工作量。
這三個屬性的測量可以描述如下:
長度
有三個開發產品的尺寸測量對預測預測所需的工作量很有用。它們是規格說明、設計和程式碼。
規格說明和設計
這些文件通常結合文字、圖形和特殊的數學圖表和符號。規格說明測量可用於預測設計的長度,而設計長度又是程式碼長度的預測指標。
文件中的圖表具有統一的語法,例如帶標籤的有向圖、資料流圖或 Z 模式。由於規格說明和設計文件由文字和圖表組成,因此其長度可以用表示文字長度和圖表長度的一對數字來衡量。
對於這些測量,需要為不同型別的圖表和符號定義原子物件。
資料流圖的原子物件是過程、外部實體、資料儲存和資料流。代數規格說明的原子實體是排序、函式、操作和公理。Z 模式的原子實體是規範中出現的各種行。
程式碼
程式碼可以透過多種方式生成,例如過程語言、面向物件和視覺化程式設計。最常用的傳統原始碼程式長度度量是程式碼行數 (LOC)。
總長度,
LOC = NCLOC + CLOC
即,
LOC = 未註釋程式碼行數 + 已註釋程式碼行數
除了程式碼行數之外,Maurice Halstead 提出的其他替代方案,例如大小和複雜度,也可以用於測量長度。
Halstead 的軟體科學試圖捕捉程式的不同屬性。他提出了三個內部程式屬性,例如長度、詞彙量和體積,它們反映了尺寸的不同檢視。
他首先將程式**P**定義為標記的集合,按運算子或運算元分類。這些標記的基本度量是:
**μ1** = 唯一運算子的數量
**μ2** = 唯一運算元的數量
**N1** = 運算子的總出現次數
**N2** = 唯一運算子的數量
長度**P**可以定義為
$$N = N_{1}+ N_{2}$$
**P**的詞彙量為
$$\mu =\mu _{1}+\mu _{2}$$
程式的體積 = 編寫長度為**N**的程式所需的思維比較次數,為
$$V = N\times {log_{2}} \mu$$
體積為**V**的程式**P**的程式級別為:
$$L = \frac{V^\ast}{V}$$
其中,$V^\ast$ 是潛在體積,即**P**的最小尺寸實現的體積。
級別的倒數是難度 -
$$D = 1\diagup L$$
根據 Halstead 理論,我們可以計算估計值**L**為
$${L}' = 1\diagup D = \frac{2}{\mu_{1}} \times \frac{\mu_{2}}{N_{2}}$$
類似地,估計的程式長度為 $\mu_{1}\times log_{2}\mu_{1}+\mu_{2}\times log_{2}\mu_{2}$
生成**P**所需的工作量由下式給出:
$$E = V\diagup L = \frac{\mu_{1}N_{2}Nlog_{2}\mu}{2\mu_{2}}$$
其中度量單位**E**是理解**P**所需的初級心理辨別次數。
測量長度的其他替代方案為:
根據程式文字所需的計算機儲存位元組數。
根據程式文字中的字元數。
面向物件開發提出了新的測量長度的方法。Pfleeger 等人發現,物件和方法的數量計數比使用程式碼行數獲得更準確的生產力估計。
功能
產品中固有的功能量提供了產品大小的度量。有許多不同的方法來衡量軟體產品的功能。我們將在下一章中討論一種這樣的方法——阿爾布雷希特的功能點方法。