軟件工程 設(shè)計的復雜性

2021-10-27 14:36 更新

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

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

Halstead's 的復雜性度量

1977年,Maurice Howard Halstead 先生引入了度量軟件復雜性的指標。Halstead 的度量取決于程序的實際實現(xiàn)及其度量,這些度量是直接從源代碼的運算符和操作數(shù)以靜態(tài)方式計算的。它允許評估 C/C++/Java 源代碼的測試時間、詞匯、大小、難度、錯誤和工作量。

根據(jù) Halstead 的說法,“計算機程序是一種算法的實現(xiàn),該算法被認為是可以歸類為運算符或操作數(shù)的令牌集合”。Halstead 度量將程序視為運算符及其相關(guān)操作數(shù)的序列。

他定義了各種指標來檢查模塊的復雜性。

參數(shù) 意義
n1 獨特的營辦商數(shù)目
n2 N獨特的操作數(shù)數(shù)
N1 運營商的總發(fā)生數(shù)
N2 操作數(shù)的總發(fā)生數(shù)

當我們在指標查看器中選擇源文件以查看其復雜性細節(jié),以下結(jié)果是指標報告:

指標 意義 數(shù)學表示
n 詞匯表 n1 + n2
N 大小 N1 + N2
V 成交量 長* LOG2詞匯
D 難度 (n1/2) * (N1/n2)
E 努力 難度*體積
B 錯誤 成交量 / 3000
T 測試時間 時間=努力/ S,S = 18秒.

圈復雜度度量

每個程序包含要執(zhí)行的語句,以執(zhí)行某些任務和其他決定需要執(zhí)行哪些語句的決策語句。這些決策結(jié)構(gòu)改變了程序的流程。

如果比較兩個相同大小的程序,由于程序的控制跳轉(zhuǎn)頻繁,決策語句較多的程序會更加復雜。

McCabe 在 1976 年提出了圈復雜度度量來量化給定軟件的復雜度。它是基于程序決策結(jié)構(gòu)的圖驅(qū)動模型,例如 if-else、do-while、repeat-util、switch-case 和 goto 語句。

制作流程控制圖的過程:

  • 將程序分成較小的塊,由決策結(jié)構(gòu)分割。
  • 創(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

根據(jù) P. Jorgensen, 一個模塊的圈復雜度不應超過10.

功能點

它被廣泛用于衡量軟件的大小。功能點專注于系統(tǒng)提供的功能。系統(tǒng)的特性和功能用于衡量軟件的復雜性。

功能點依賴于五個參數(shù),分別命名為外部輸入、外部輸出、邏輯內(nèi)部等我呢間、外部接口文件和外部查詢。為了考慮軟件的復雜性,每個參數(shù)都被進一步分類為簡單、平均或復雜。

讓我們來看看功能點的參數(shù):

外部輸入

來自外部的系統(tǒng)的每個獨特輸入都被視為外部輸入。測量輸入的唯一性,因為沒有兩個輸入應該具有相同的格式。這些輸入可以是數(shù)據(jù)或控制參數(shù)。

  • 簡單?- 如果輸入計數(shù)較低并且影響較少的內(nèi)部文件
  • 復雜?- 如果輸入計數(shù)較高并且影響較多的內(nèi)部文件
  • 平均?- 介于簡單和復雜之間

外部輸出

系統(tǒng)提供的所有輸出類型竇計入此類別。如果輸出格式和處理是唯一的,則輸出被認為是唯一的。

  • 簡單?- 如果輸出計數(shù)低
  • 復雜?- 如果輸出計數(shù)高
  • 平均?- 介于簡單和復雜之間

邏輯內(nèi)部文件

每個軟件系統(tǒng)都維護內(nèi)部文件,以維護其功能信息并正常運行。這些文件保存系統(tǒng)的邏輯數(shù)據(jù)。該邏輯數(shù)據(jù)可能包含功能數(shù)據(jù)和控制數(shù)據(jù)。

  • 簡單?- 如果記錄類型的數(shù)量很少
  • 復雜?- 如果記錄類型的數(shù)量很多
  • 平均?- 介于簡單和復雜之間

外部接口文件

軟件系統(tǒng)可能需要與某些外部軟件共享其文件,或者可能需要將文件傳遞給處理或作為參數(shù)傳遞給某些函數(shù)。所有這些文件都算作外部接口文件。

  • 簡單?- 如果共享文件的記錄類型數(shù)量很低
  • 復雜?- 如果共享文件的記錄類型數(shù)量很高
  • 平均?- 介于簡單和復雜之間

外部查詢

查詢是輸入和輸出的結(jié)合,用戶發(fā)送一些要查詢的數(shù)據(jù)作為輸入,系統(tǒng)將查詢的輸出處理后響應用戶。查詢的復雜性不僅僅是外部輸入和外部輸出。如果查詢的輸入和輸出在格式和數(shù)據(jù)方面是唯一的,則稱該查詢是唯一的。

  • 簡單?- 如果查詢需要低處理并昌盛少量輸出數(shù)據(jù)
  • 復雜?- 如果查詢需要高處理并產(chǎn)生大量輸出數(shù)據(jù)
  • 平均?- 介于簡單和復雜之間

系統(tǒng)中的這些參數(shù)中的每一個都根據(jù)它們的類別和復雜性被賦予權(quán)重。下表列出了每個參數(shù)的權(quán)重:

參數(shù) 簡單 平均 復雜
輸入 3 4 6
輸出 4 5 7
查詢 3 4 6
文件 7 10 15
接口 5 7 10

上表產(chǎn)生原始功能點。這些功能點根據(jù)環(huán)境復雜度進行調(diào)整,系統(tǒng)使用十四種不同的特征來描述:

  • 數(shù)據(jù)通信
  • 分布式處理
  • 績效目標
  • 操作配置負載
  • 成交率
  • 在線數(shù)據(jù)錄入
  • 終端用戶效率
  • 在線更新
  • 復雜處理邏輯
  • 可重用性
  • 安裝方便
  • 操作簡便
  • 多個網(wǎng)站
  • 渴望促進變化

然后將這些特征因素評級為 0 到 5,如下所述:

  • 無影響
  • 非主要的
  • 緩和的
  • 平均數(shù)
  • 重要的
  • 必要的

然后將所有評級相加為 N。N 的值范圍從 0 到 70(14鐘特性 x 5 種評級)。它用于計算復雜性調(diào)整因子(CAF),使用以下公式:

CAF = 0.65 + 0.01N

然后,

交付功能點 (FP)= CAF x Raw FP

然后可以將此 FP 用于各種指標,例如:

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號