軟件工程 設計的復雜性

2021-10-27 14:36 更新

復雜性代表事件或事物的狀態(tài),它們具有多個相互關聯的鏈接和高度復雜的結構。在軟件編程中,隨著軟件設計的實現,元素的數量以及它們之間的相互聯系逐漸變得龐大,一下子變得難以理解。

如果不使用復雜性指標和度量,軟件設計復雜性很難評估。讓我們看看三個重要的軟件復雜性度量。

Halstead's 的復雜性度量

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 語句。

制作流程控制圖的過程:

  • 將程序分成較小的塊,由決策結構分割。
  • 創(chuàng)建代表每個節(jié)點的節(jié)點。
  • 連接節(jié)點,如下所示:
    • 如果可以控制從塊 i 分支到塊 J
      畫一條弧
    • 從出口節(jié)點到入口節(jié)點
      畫一條弧.

為了計算程序模塊的圈復雜度,我們使用公式:

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 用于各種指標,例如:

  • 成本 Cost?= $ / FP
  • 質量?Quality = Errors / FP
  • 生產力?Productivity = FP / person-month
以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號