根据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 |