K.Magel从六个方面描述软件复杂性:
① 理解程序的难度;② 改错及维护程序的难度;③ 向他人解释程序的难度;④ 按指定方法修改程序的难度;⑤ 根据设计文档编写程序的工作量;⑥ 执行程序时需要资源的程度。
软件复杂性度量模型应遵循的基本原则:
(1)软件复杂性与程序大小的关系不是线性的;(2)控制结构复杂的程序较复杂;(3)
数据结构复杂的程序较复杂;(4)转向语句使用不当的程序较复杂;(5)循环结构比选择结构复杂,选择结构又比顺序结构复杂;(6)语句、数据、子程序和模块在程序中的次序对软件复杂性都有影响;(7)全程变量、非局部变量较多时程序较复杂;(8)参数按地址传递比按值传递更复杂;(9)函数副作用比显式参数传递更难以琢磨;(10)具有不同作用的变量共用一个名字时较难理解;(11)模块间或过程间联系密切的程序较复杂;(12)嵌套深度越深程序越复杂。
最典型的两种程序复杂性度量的方法中,McCabe环路复杂性度量就是针对基本原则(2)制定的度量模型;Halstead度量是针对程序中操作符和操作数的出现频度而制定的度量模型。