软件度量用于对产品及开发产品的过程进行度量。
软件产品、软件过程、资源都具有外部属性和内部属性。
- 外部属性(指面向管理者和用户的属性,体现了软件产品/软件过程与相关资源和环境的关系)
- 内部属性(指软件产品或软件过程本身的属性,如可靠性、可维护性等,只能用间接测量的方法度量)
(一)软件度量分类
软件度量有两种分类方法,第一种分类是将软件度量分为面向规模的度量、面向功能的度量和面向人的度量;第二种分类是将软件度量分为生产率度量、质量度量和技术度量。
- 面向规模的度量用于收集与软件规模相关的软件工程输出信息和质量信息。
- 面向功能的度量集中在程序的“功能性”和“实用性”。
- 面向人的度量收集有关人们开发软件所用方式的信息和人员理解有关工具的方法和效率的信息。
- 软件生产率度量主要关注于软件工程活动的制品。
- 软件质量度量可指明软件满足明确的和隐含的用户需求的程度。
- 技术度量主要集中在软件产品的某些特征上,而不是软件开发的全过程。
1.面向规模的度量
面向规模的度量通过对质量和生产率的测量进行规范得到的,这些量都是根据开发过的软件的规模得到的。
软件规模通常用程序的代码行(LOC
)或千行代码(KLOC
)来衡量。
计算出软件项目的代码行后,可方便地度量其他的软件属性,如软件开发的生产率、每行代码的平均开发成本、文档数量(页数)与代码量的比例关系、每千行代码中包含的软件错误数等。
对于同一软件、采用不同程序语言编写的程序,还有一些因良好的设计而导致代码量小的软件来说,这种度量不够客观。
2.面向功能的度量
面向功能的度量以功能测量数据作为规范化值。应用最广泛的面向功能的度量是功能点。功能点是根据软件信息域的特性及复杂度来计算的。
信息域的值用下列方式定义:
- 外部输入数(
EI
) - 外部输出数(
EO
) - 外部查询数(
EQ
) - 内部逻辑文件数(
ILF
) - 外部接口文件数(
EIF
)
(二)软件复杂性度量
软件复杂性是指理解和处理软件的难易程度。
软件复杂性度量的参数:
- 规模(总共的指令数或源程序行数)
- 难度(通常由程序中出现的操作数的数目所决定的量来表示)
- 结构(用与程序结构有关的度量来表示)
- 智能度(算法的难易程度)
1.程序复杂性度量原则
程序复杂性度量模型应遵循以下基本原则:
- 程序复杂性与程序大小的关系不是线性的
- 控制结构复杂的程序较复杂
- 数据结构复杂的程序较复杂
- 转向语句使用不当的程序较复杂
- 循环结构比选择结构复杂,选择结构又比顺序结构复杂
- 语句、数据、子程序和模块在程序中的次序对复杂性有影响
- 全局变量、非局部变量较多时程序较复杂
- 函数的隐式副作用相对于显示参数传递而言更加难以理解
- 具有不同作用的变量公用一个名字时较难理解
- 模块间、过程间联系密切的程序较复杂
- 嵌套程序越深、程序越复杂
2.McCabe度量法
McCabe
度量法又称为环路度量,它认为程序的复杂性在很大程度上取决于控制的复杂性。
该方法以图论为工具,先画出程序图,然后用该图的环路数作为程序复杂性的度量值。
把程序流程图中每个处理符号都退化成一个结点,原来连接不同处理符号的流线变成连接不同点的有向弧。在图的入口点到出口点加一条用虚线表示的有向边,使图成为强连通图。然后利用公式计算环路复杂性。
当环路复杂度的度量值超过10
时,要充分测试这个模块变得特别困难。