復雜性代表事件或事物的狀態(tài),它們具有多個相互關聯的鏈接和高度復雜的結構。在軟件編程中,隨著軟件設計的實現,元素的數量以及它們之間的相互聯系逐漸變得龐大,一下子變得難以理解。
如果不使用復雜性指標和度量,軟件設計復雜性很難評估。讓我們看看三個重要的軟件復雜性度量。
1977年,Maurice Howard Halstead 先生引入了度量軟件復雜性的指標。Halstead 的度量取決于程序的實際實現及其度量,這些度量是直接從源代碼的運算符和操作數以靜態(tài)方式計算的。它允許評估 C/C++/Java 源代碼的測試時間、詞匯、大小、難度、錯誤和工作量。
根據 Halstead 的說法,“計算機程序是一種算法的實現,該算法被認為是可以歸類為運算符或操作數的令牌集合”。Halstead 度量將程序視為運算符及其相關操作數的序列。
他定義了各種指標來檢查模塊的復雜性。
參數 | 意義 |
---|---|
n1 | 獨特的營辦商數目 |
n2 | N獨特的操作數數 |
N1 | 運營商的總發(fā)生數 |
N2 | 操作數的總發(fā)生數 |
當我們在指標查看器中選擇源文件以查看其復雜性細節(jié),以下結果是指標報告:
指標 | 意義 | 數學表示 |
---|---|---|
n | 詞匯表 | n1 + n2 |
N | 大小 | N1 + N2 |
V | 成交量 | 長* LOG2詞匯 |
D | 難度 | (n1/2) * (N1/n2) |
E | 努力 | 難度*體積 |
B | 錯誤 | 成交量 / 3000 |
T | 測試時間 | 時間=努力/ S,S = 18秒. |
每個程序包含要執(zhí)行的語句,以執(zhí)行某些任務和其他決定需要執(zhí)行哪些語句的決策語句。這些決策結構改變了程序的流程。
如果比較兩個相同大小的程序,由于程序的控制跳轉頻繁,決策語句較多的程序會更加復雜。
McCabe 在 1976 年提出了圈復雜度度量來量化給定軟件的復雜度。它是基于程序決策結構的圖驅動模型,例如 if-else、do-while、repeat-util、switch-case 和 goto 語句。
制作流程控制圖的過程:
為了計算程序模塊的圈復雜度,我們使用公式:
V(G) = e – n + 2
Where
e is total number of edges
n is total number of nodes
上述模塊的圈復雜度為:
e = 10
n = 8
Cyclomatic Complexity = 10 - 8 + 2
= 4
根據 P. Jorgensen, 一個模塊的圈復雜度不應超過10.
它被廣泛用于衡量軟件的大小。功能點專注于系統提供的功能。系統的特性和功能用于衡量軟件的復雜性。
功能點依賴于五個參數,分別命名為外部輸入、外部輸出、邏輯內部等我呢間、外部接口文件和外部查詢。為了考慮軟件的復雜性,每個參數都被進一步分類為簡單、平均或復雜。
讓我們來看看功能點的參數:
來自外部的系統的每個獨特輸入都被視為外部輸入。測量輸入的唯一性,因為沒有兩個輸入應該具有相同的格式。這些輸入可以是數據或控制參數。
系統提供的所有輸出類型竇計入此類別。如果輸出格式和處理是唯一的,則輸出被認為是唯一的。
每個軟件系統都維護內部文件,以維護其功能信息并正常運行。這些文件保存系統的邏輯數據。該邏輯數據可能包含功能數據和控制數據。
軟件系統可能需要與某些外部軟件共享其文件,或者可能需要將文件傳遞給處理或作為參數傳遞給某些函數。所有這些文件都算作外部接口文件。
查詢是輸入和輸出的結合,用戶發(fā)送一些要查詢的數據作為輸入,系統將查詢的輸出處理后響應用戶。查詢的復雜性不僅僅是外部輸入和外部輸出。如果查詢的輸入和輸出在格式和數據方面是唯一的,則稱該查詢是唯一的。
系統中的這些參數中的每一個都根據它們的類別和復雜性被賦予權重。下表列出了每個參數的權重:
參數 | 簡單 | 平均 | 復雜 |
---|---|---|---|
輸入 | 3 | 4 | 6 |
輸出 | 4 | 5 | 7 |
查詢 | 3 | 4 | 6 |
文件 | 7 | 10 | 15 |
接口 | 5 | 7 | 10 |
上表產生原始功能點。這些功能點根據環(huán)境復雜度進行調整,系統使用十四種不同的特征來描述:
然后將這些特征因素評級為 0 到 5,如下所述:
然后將所有評級相加為 N。N 的值范圍從 0 到 70(14鐘特性 x 5 種評級)。它用于計算復雜性調整因子(CAF),使用以下公式:
CAF = 0.65 + 0.01N
然后,
交付功能點 (FP)= CAF x Raw FP
然后可以將此 FP 用于各種指標,例如:
更多建議: