根据ISO/IEC 9126国际标准的定义,软件的质量包括以下六个方面:
l
l
l
l
l
l
以ISO 9126质量模型作为基础,我们可以构造质量度量模型,用于评估软件的每个方面。例如,按以下方法构造的质量模型可以度量程序的可维护性(maintainability)。首先,该模型从上到下分为3层:质量因素(factors)、分类标准(criteria)和度量规则(metrics)。其中质量因素对应ISO 9126质量模型的质量特性,分类标准对应ISO 9126质量模型的子特性,度量规则用于规范软件的各种行为属性。其次,按以下方式定义各参数及计算公式。
l
度量规则使用了代码行数、注释频度等参数度量软件的各种行为属性,具体参数定义如表2-4所示。
表2-4度量规则参数表
简称 | 名称 | 最小值 | 最大值 |
PARA | Number of function parameters | 0 | 5 |
PATH | Number of paths | 1 | 80 |
LEVL | Number of levels | 0 | 4 |
DRCT_CALLS | Number of direct calls | 0 | 7 |
RETU | Number of RETURN statements | 0 | 1 |
NBCALLING | Number of callers | 0 | 5 |
GOTO | Number of GOTO statements | 0 | 0 |
VOCF | Vocabulary frequency | 1 | 4 |
LVAR | Number of local variables | 0 | 5 |
COMF | Comments frenquency | 0.2 | ∞ |
AVGS | Average size of statements | 1 | 9 |
STMT | Number of statements | 1 | 50 |
VG | Cyclomatic number(VG) | 1 | 10 |
IND_CALLS | Number of relative call graph call-paths | 1 | 30 |
TESTBTY | Relative call graph System testability | 0 | 1 |
HYER_CPX | Relative call graph Hierarchical complexity | 1 | 5 |
LEVELS | Number of relative call graph levels | 1 | 12 |
STRU_CPX | Relative call graph Structural complexity | 0 | 3 |
DDP | DC coverage rate | 0 | 100 |
IB | SC coverage rate | 0 | 100 |
PPP | Procedure-to-Procedure Path coverage rate | 0 | 100 |
l
软件的可维护性采用以下四个分类标准来评估:
①可分析性(ANALYZABILITY)
②可修改性(CHANGEABILITY)
③稳定性(STABILITY)
④ 可测性(TESTABILITY)
每个分类标准由一系列度量规则组成,各个规则分配一个权重,由规则的取值与权重值计算出每个分类标准的取值。各分类标准组成如表2-5所示。
表2-5分类标准组
分类标准 | 度量规则 | 权重 |
Fuction_TESTABILITY | PARA | 1 |
PATH | 1 | |
LEVEL | 1 | |
DRCT_CALLS | 1 | |
Fuction_STABILITY | PARA | 1 |
DRCT_CALLS | 1 | |
RETU | 1 | |
NBCALLING | 1 | |
Fuction_CHANGEABILITY | GOTO | 1 |
VOCF | 1 | |
LVAR | 1 | |
PARA | 1 | |
Fuction_ANALYZABILITY | COMF | 1 |
AVGS | 1 | |
STMT | 1 | |
VG | 1 | |
relativeCall_ANALYZABILITY | LEVELS | 1 |
STRU-CPX | 1 | |
relativeCall_STABILITY | HIER_CPX | 1 |
IND_CALLS | 1 | |
relativeCall_TESTABILITY | IND_CALLS | 1 |
TESTBTY | 1 |
各分类标准的结果按以下标准区分等级,如表2-6至表2-12所示。
function_TESTABILITY=DRCT_CALLS+LEVL+PATH+PARA
表2-6 functionTESTABILITY的等级划分
等级描述 | 上限 | 下限 | 等级描述 | 上限 | 下限 |
EXCELLENT | 4 | 4 | FAIR | 2 | 2 |
GOOD | 3 | 3 | POOR | 0 | 1 |
function_STABILITY=NBCALLING+RETU+DRCT_CALLS+PAPA
表2-7function_STABILITY 等级划分
等级描述 | 上限 | 下限 | 等级描述 | 上限 | 下限 |
EXCELLENT | 4 | 4 | FAIR | 2 | 2 |
GOOD | 3 | 3 | POOR | 0 | 1 |
function_CHANGEABILITY=PARA+LVER+VOCF+GOTO
表2-8funtion_CHANGEABILITY的等级划分
等级描述 | 上限 | 下限 | 等级描述 | 上限 | 下限 |
EXCELLENT | 4 | 4 | FAIR | 2 | 2 |
GOOD | 3 | 3 | POOR | 0 | 1 |
funtion_ANALYZABILITY=VG+STMT+AVGS+COMF
表2-9function_ANALYXABILITY的划分
上限 | 下限 | 等级描述 | 上限 | 下限 | |
EXCELLENT | 4 | 4 | FAIR | 2 | 2 |
GOOD | 3 | 3 | POOR | 0 | 1 |
relativeCall_ANALYZABILITY=STRU_CPX+LEVELS
表2-10 relativeCall_ANALYZABILITY的等级划分
等级描述 | 上限 | 下限 |
EXCELLENT | 2 | 2 |
GOOD | 1 | 1 |
POOR | 0 | 0 |
relativeCall_STABILITY=CALL_PATHS+HIER_CPX
表2-11 relativeCall_STABILITY的等级划分
等级描述 | 上限 | 下限 |
EXCELLENT | 2 | 2 |
GOOD | 1 | 1 |
POOR | 0 | 0 |
relativeCall_TESTABILITY=TESTBTY+CALL_PATHS
表2-12 relativeCall TESTABILITY的等级划分
等级描述 | 上限 | 下限 |
EXCELLENT | 2 | 2 |
GOOD | 1 | 1 |
POOR | 0 | 0 |
这样,依据这些标准和最终测试结果,可将代码的质量分成四个等级。
①优秀(EXCELLENT):符合本模型框架中的所有规则。
②良好(GOOD):未大量偏离模型框架中的规则。
③一般(FAIR):违背了模型框架中的大量规则。
④较差(POOR):无法保障正常的软件可维护性。
其中前三者被认为是可以接受的,最后一个等级则是不可接受的。
l
质量因素的取值与分类标准的计算方式相似:依据各分类标准取值组合权重方法来计算,如表2-13所示。
表1-13质量因素权重计算表
质量因素 | 分类标准 | 权重 |
Function_MAINTAINABILITY | Fuction_TESTABILITY | 1 |
Fuction_STABILITY | 1 | |
Fuction_CHANGEABILITY | 1 | |
Fuction_ANALYZABILITY | 1 | |
relativeCall_MAINTAINABILITY | relativeCall_ANALYZABILITY | 1 |
relativeCall_STABILITY | 1 | |
relativeCall_TESTABILITY | 1 |
同样,依据质量因素取值,也将其分成四个等级:优秀(EXCELLENT)、良好(GOOD)、一般(FAIR)和较差(POOR),其中前三者被认为是可以接受的,最后一个等级则是不可接受的。
如表2-14和表2-15所示为function_MAINTAINABILITY和relative Call_MINTAINABILITY的等级划分。
function_MAINTAINABILITY=function_ANALYZABILITY
+function_CHANGEABILITY
+function_STABILITY
+function_TESTABILITY
表1-14 function_MAITAINABILITY的等级划分
等级描述 | 上限 | 下限 | 等级描述 | 上限 | 下限 |
EXCELLENT | 12 | 12 | FAIR | 4 | 7 |
GOOD | 8 | 11 | POOR | 0 | 3 |
relativeCall_MAINTAINABILITY=relativeCall_ANALYZABILITY
表1-15relativeCall_MAINTAINABILITY的等级划分
等级描述 | 上限 | 下限 | 等级描述 | 上限 | 下限 |
EXCELLENT | 6 | 6 | FAIR | 1 | 3 |
GOOD | 4 | 5 | POOR | 0 | 0 |