同步複雜度

同步複雜度Synchronization complexity)是一種並行性軟體的量化屬性。同步複雜度分析程式碼,量測程式因為同步結構而產生額外的複雜度。同步複雜度在本質上可視為循環複雜度在多工軟體或多線性軟體上的延伸。

基本介紹

  • 中文名:同步複雜度
  • 外文名:Synchronization complexity
簡介,循環複雜度,套用,限制軟體複雜度,模組內聚性的評估,推測軟體缺陷個數,相關條目,

簡介

同步複雜度Synchronization complexity)是一種並行性軟體的量化屬性。同步複雜度分析程式碼,量測程式因為同步結構而產生額外的複雜度。同步複雜度在本質上可視為循環複雜度在多工軟體或多線性軟體上的延伸。

循環複雜度

循環複雜度Cyclomatic complexity)也稱為條件複雜度圈複雜度,是一種軟體度量,是由老托馬斯·J·麥凱布在1976年提出,用來表示程式的複雜度,其符號為VG或是M。循環複雜度由程式的原始碼中量測線性獨立路徑的個數。此概念有些類似的量測文字複雜度的Flesch-Kincaid可讀性測試,不過方法不完全相同。
循環複雜度是由程式的控制流圖來計算:有向圖的節點對應程式中個別的代碼,而若一個程式運行後會立刻運行另一代碼,會有邊連結二代碼對應的節點。圈複雜度可套用在程式的子程式模組方法類別
麥凱布首先提出一種稱為“基礎路徑測試”(Basis Path Testing)的軟體測試方式,是測試程式中的每一線性獨立路徑,此情形的測試用例個數即為程式的循環複雜度。
“循環複雜度”的名稱有時會讓人誤解,因為此複雜度不只計算程式中的循環(循環)個數。循環複雜度是指程式的控制流圖中,若將結束點到啟始點再增加一個邊時,控制流圖中的圈(幾個邊形成封閉路徑)的個數。

套用

限制軟體複雜度

麥凱布提出循環複雜度時,其原始目的之一就是希望在軟體開發過程中就限制其複雜度。他建議程式設計者需計算其開發模組的複雜度,若一模組的循環複雜度超過10,需再分割為更小的模組。NIST(國家標準技術研究所)的結構化測試方法論已此作法略作調整,在一些特定情形下,模組循環複雜度上限放寬到15會比較合適。此方法論也承認有些特殊情形下,模組的複雜度需要超過上述的上限,其建議為“模組的循環複雜度需在上限範圍以內,否則需提供書面數據,說明為何此模組循環複雜度有必要超過上限。”

模組內聚性的評估

可以預期一個複雜度較高模組的內聚性會比較低,至少不會到功能內聚性的程度。一個有高複雜度及低內聚性的模組中會有許多的決策點,這類的模組多半運行超過一個明確定義的任務,因此內聚性較低。一個2005年的研究發現複雜度的度量和由專家評估的模組內聚性有高度負相關,反而針對內聚性設計的度量和專家評估結果之間的相關性還比較不明顯。

推測軟體缺陷個數

許多研究指出一模組及方法的循環複雜度和其中的缺陷個數有相關性,許多這類研究發現循環複雜度和缺陷個數有高度的正相關:循環複雜度最高的模組及方法,其中的缺陷個數也最多。
不過,有些研究是在控制模組大小相近的情形下進行分析(例如比較二個原始碼行數相近,但循環複雜度不同模組的缺陷個數),許多這類的研究發現循環複雜度和缺陷個數沒有明顯相關,不過仍有一些研究認為在此情形下二者仍有相關性。有些此領域的研究者認為那些研究結果循環複雜度和缺陷個數沒有明顯相關的研究,其研究方法的有效性可能有問題。
萊斯·哈頓認為利用循環複雜度來預測缺陷個數,和利用原始碼行數來預測缺陷個數的結果大致相近。

相關條目

相關詞條

熱門詞條

聯絡我們