可维护性度量是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这里的代码行意味着完全扩展的代码行,包括拷贝书籍,包括和评论。
(完)