可维护性度量是CISQ给出的4个通过静态代码可以度量的指标之一。
本文件描述了CISQ自动化系统中包含的20个弱点漏洞。可维修性的质量特性测量。这些描述已经简化。根据已发布的OMG®规范中的描述,该规范使用了来自其他公司的形式。OMG元模型,用于指定机器可处理XMI中表示的弱点符号。下表给出了每个弱点及其唯一的cisq标识符描述性名称,并对作为建议的缺陷
进行更全面的描述补救。
可维护性弱点
软件包含的弱点使软件难以理解的程度的度量。或改变,导致维修时间和成本过多,缺陷注入率更高。
CISQ标识符 |
描述 |
陈述 |
ASCMM-MNT-1 |
跳转到switch语句之外 |
移除控制流转移到switch语句之外(例如,使用go to、continue、break 语句) |
ASCMM-MNT-2 |
继承于过多的类 |
移除一个类继承于过多的父类(默认的继承于类的阈值为1) |
ASCMM-MNT-3 |
硬编码 |
移除一个固定文字用于初始化一个变量、字段、成员等(除了简单的整型和和静态常量、字段、成员等) |
ASCMM-MNT-4 |
过度耦合 |
移除扇出值过大的函数、方法、过程,存储过程、子例程等。也就是说,引用太多应用程序中的其他对象。(默认扇出数阈值为5) |
ASCMM-MNT-5 |
修改循环条件值 |
移除循环体内修改局部变量、字段、成员等影响循循环执行的语句 |
ASCMM-MNT-6 |
过量注释掉的代码 |
移除函数、方法、过程、存储过程、子例程等包含太多注释的代码(默认注释掉指令的最大阈值为2%)。 |
ASCMM-MNT-7 |
圆形依赖关系 |
移除一个模块又引用到自身的模块(例如,这种模式在java中意味着循环引用包) |
ASCMM-MNT-8 |
过大的文件 |
移除一个有太多代码行的文件(默认阈值是1000行) |
ASCMM-MNT-9 |
过多或过少的水平层 |
移除应用架构层包括太多和太少的水平层(不包括垂直使用层),阈值是4-8之间。 |
ASCMM-MNT-10 |
层跨越组件 |
移除定义在一个应用架构层下的两个架构层中的部分函数、方法、过程、存储过程、子程序等 |
ASCMM-MNT-11 |
过大的圈复杂度 |
移除圈复杂度过大的功能、方法、过程、存储过程、子例程等。(默认最大圈复杂度阈值是20) |
ASCMM-MNT-12 |
跨层调用 |
移除高水平层直接调用不在应用架构层定义,又不与上层相邻的调用低水平层的功能,函数、方法、过程,存储过程、子程序等(这不包括可从任何水平层) |
ASCMM-MNT-13 |
过多的参数 |
移除函数、方法、过程,存储过程、子例程等中已签名的过多参数(默认阈值为7) |
ASCMM-MNT-14 |
过多数据操作的控制元素 |
移除有过多SQL或文件操作的功能、方法、过程、存储过程、子例程等。(默认阈值为7) |
ASCMM-MNT-15 |
公有的数据元素 |
移除公有的变量、字段、成员等 |
ASCMM-MNT-16 |
交叉元数据存取 |
移除从类的方法存取一个字段,或从其它类成员存取一个字段 |
ASCMM-MNT-17 |
过多的继承层次 |
移除过大的类的继承层次(默认阈值是7) |
ASCMM-MNT-18 |
过多的子类 |
移除具有过大子类数的子类(默认阈值是7) |
ASCMM-MNT-19 |
元素冗余 |
移除功能、方法、过程、存储过程、子例程等中的拷贝-粘贴的代码 |
ASCMM-MNT-20 |
死代码 |
一个功能或方法中没有被应用中的任何其它代码所引用。(应用定义了代码调用功能或方法所能搜索的范围) |
A4.1软件工程学院(SEI)可维护性指数
代码模块(如程序)集合的可维护性通过以下公式计算:
171-5.2(ln(avev))-0.23(aveV(g’)-16.2(ln(aveLOC))+50(sin(sqrt(2.4(perCM)))
其中aveV是平均Halstead volume,aveV(g’)是平均圈复杂度,aveLOC是代码行数,perCM是模块中注释的百分比。
每一个平均值都是模块计数上各个度量的比率。perCM是一个RatioMeasure模块总行数上注释的行数。
每个生成的度量都被重新调整为相同的度量单位,命名为维护性索引点。
aveV重新校准50–5.2(ln(aveV)
aveV(g’)重新校准50–0.23(aveV(g’)
aveLOC重新校准21–ln(aveLOC)
perCM重新校准50(sin(sqrt(2.4(percmCM)))
然后,SEI索引是上述四个模块的一个集合度量,作为聚合器添加。
除非另有说明,否则将使用知识发现元模型(KDM)对引用的软件工件进行建模。
一行代码是任何不是注释或空行的程序文本行,不管语句的数量如何。或语句的片段。这具体包括包含程序头、声明和可执行和不可执行语句2这里的代码行意味着完全扩展的代码行,包括拷贝书籍,包括和评论。
(完)