本質複雜度

本質複雜度（Essential complexity）是指由於一問題的本質不適合簡單的求解方式，所有可行的求解方式都很複雜的情形。本質複雜度和附属复杂度（Accidental complexity）不同，後者的複雜度和問題本質無關，和選用求解的工具或方法有關。

本質複雜度至少在1980年代中期已被使用，圖靈獎得主佛瑞德·布魯克斯當時已開始使用本質複雜度及其反義詞附属复杂度。他也在1995年時在《人月神話》中的沒有銀彈一段中提出他的新論點Brooks, IEEE ComputerBrooks, Mythical Man-Month, Silver Bullet Refired
。

循環複雜度
若本質複雜度和循環複雜度並用時，本質複雜度有不同的含意。此時的本質複雜度是指一程式持續的將有良好結構的流桯控制指令改為單一敘述後，最後得到的循環複雜度。像if-then-else及while loop等控制結構都視為良好結構，因此不會增加本質複雜度。未限制使用的goto、break及continue指令會增加本質複雜度。

例如，以下的C語言程式片段的本質複雜度為1，因為內層的if指令及for迴圈都可以簡化為單一敘述。
   for(i=0;i<3;i++) {
      if(a[i] == 0) b[i] += 2;
   }

以下的C語言程式片段的本質複雜度為4，其控制流圖無法再簡化，其內容是要找到z陣列中第一個全部為0的列，若找到了，設定i為列編號，若找不到了，設定i為-1

       for(i=0;i<m;i++) {
           for(j=0;j<n;j++) {
               if(z[i][j] != 0) goto non_zero;
           }
           goto found;
   non_zero:
       }
       i = -1;
   found:

相關條目
決策到決策路徑
附属复杂度
奧卡姆剃刀
没有银弹

參考資料

Category:軟體專案管理
Category:軟體度量