CISQ把可靠性度量作为通过软件属性元素可以度量的指标之一。主要是通过CWE缺陷中的29个来进行度量。

可靠性弱点描述

本文件介绍了CISQ自动化质量特性可靠性措施中包含的29个缺陷的描述。这些描述已经简化,从他们的描述到出版OMG的规范,这些规范使用其他OMG META模型的形式来规范机器处理XMI中的代表性缺陷。

下表给出了每个缺陷及其唯一的CISQ标识符、简短的描述性名称以及作为补救建议的缺陷的更完整描述。

可靠性弱点

衡量软件中包含导致中断、意外的弱点的程、非预期行为、不稳定、数据损坏、长时间恢复或其他相关问题。

CISQ标识符

描述

陈述

ASCRM_CWE-120

缓冲区溢出

移除当第一个缓冲区内容移动到第二个缓冲区时,而分配的大小不兼容问题

ASCRM_CWE-252-data

未检查从数据处理操作返回的参数

移除函数、方法、过程、存储过程、子例程等执行CRUD SQL语句但未对返回代码值进行任何检查的实例

ASCRM_CWE-252-resource

未检查从资源处理操作返回的参数

移除函数、方法、过程、存储过程、子例程等读、写、或者管理外部资源,未对返回代码值进行任何检查的实例

ASCRM_CWE-396

宽泛的捕获异常类型

移除函数、方法、过程、存储过程、子例程等包含异常的catch的实例,该异常的类型是过度宽泛异常类型列表的一部分

ASCRM_CWE-397

引发异常类型过于宽泛

移除函数、方法、过程、存储过程、子例程等引发异常的实例,该异常的类型是过度宽泛异常类型列表的一部分

ASCRM_CWE-456

未初始化的数据元素

移除声明的变量、字段、成员等的实例,由于其在使用之前未进行初始化。

ASCRM_CWE-674

递归

移除一个控制元素初始为一个包含自身路径的实例

ASCRM_CWE-704

不兼容的数据类型转换

移除声明的变量、字段、成员等的实例,用与第一个数据类型更新第二个不兼容的数据类型

ASCRM_CWE-772

未释放的资源

移除分配平台资源(消息、锁、文件、流、目录等)并分配给整个应用程序使用,但从未释放的唯一资源句柄

ASCRM_CWE-788

缓冲区结束点内存存取

移除对缓冲区的“读”或“写”访问中将值用作索引的实例;但是在缓冲区访问之前,没有执行任何操作对缓冲区最大值进行检查

ASCRM_RLB-1

空例外块

移除函数、方法、过程、存储过程、子例程等不包含任何指令的异常处理块(如catch和finally块)

ASCRM_ RLB -2

错过了系列化控制块

移除可序列化字段、成员等没有序列化操作的实例。注:*对于具有类和接口的技术,

这意味着可序列化字段来自一个类,该类实现了一个可序列化接口,但没有将序列化方法作为方法列表的一部分

*元素的可序列化属性是技术依赖性,例如,可序列化能力来自于.NET中的可序列化属性和Java中的JavaIO.SerialI接口。

ASCRM_RLB-3

系列化数据元素包含非系列化项

移除由不可序列化的数据元素组成字段、成员、等

*对于具有类和接口的技术,这是表示可序列化字段来自可序列化但拥有不可序列化的领域

*元素的可序列化性质是技术

依赖;例如,可序列化函数来自.NET和Java中JavaIO.SerialI化接口的继承

ASCRM_RLB-4

没有适当比较控制的持久数据

移除没有专门的操作处理比较操作的持久变量、字段、成员等。注:

•对于具有类的技术,这意味着来自在不实现时的持久字段保持不变。所需比较列表中的方法操作示例(Java示例是由'hashcode()'、'equals()'方法)

ASCRM_RLB-5

不正确的运行时资源管理

移除应用程序在应用程序服务器上运行但使用低级资源管理API(I/O、套接字、类加载器等)的实例,而不是应用程序提供的资源管理API

ASCRM_RLB-6

数据指针的复制函数不正确

移除变量、字段、成员等包含指针但没有专用复制操作或复制构造函数的实例

ASCRM_RLB-7

自我毁灭

移除一个类可以自毁的实例(C++中自毁的一个例子是“delete this”)

ASCRM_RLB-8

可变参数

移除函数、方法、过程、存储过程、子例程等参数数量可变的实例,这要归功于签名变量参数

ASCRM_RLB-9

浮点型数值数据的不适当相等比较

移除变量、字段、成员等的浮点值,使用正则比较运算符来比较相等性(Java中的一个例子是使用‘==’或‘!=’

ASCRM_RLB-10

绕过数据访问例程

移除一个函数、方法,执行过程、存储过程、子例程等专用数据访问之外的数据访问组件,从而规避数据访问。笔记:

•专用数据访问组件可以是客户端或服务器端,这意味着数据可以使用非SQL开发语言存取组件

•如果没有专用的数据访问组件,每一个数据存取是一次违规

ASCRM_RLB-11

在多线程环境中的非final static data

移除在多线程环境中运行的一个函数、方法,过程、存储过程、子例程等拥有非最终静态变量、字段、成员等。

ASCRM_RLB-12

单类的不正确锁

移除在没有激活任何先前锁机制的情况下实例化单例类的实例

ASCRM_RLB-13

循环依赖关系

删除一个实例,其中一个模块具有循环回引用的引用,例如Java中包之间循环的存在性。

ASCRM_RLB-14

引用子类的父类

移除父类通过其方法和字段直接或间接引用其某个子类的实例。

ASCRM_RLB-15

类的虚方法缺少析构函数

移除类包含虚方法但类不声明任何虚析构函数的实例

ASCRM_RLB-16

父类缺少虚拟析构函数

移除可写入自定义析构函数的语言的父级没有虚拟析构函数的实例

ASCRM_RLB-17

子类缺少虚拟析构函数

移除用于自定义语言的可以编写析构函数,子类没有

它自己的虚拟析构函数,而其父类具有虚拟析构函数

ASCRM_RLB-18

硬编码网络资源信息

移除变量、字段、成员等的实例。用硬编码的网络资源初始化身份信息

ASCRM_RLB-19

同步调用缺少超时

移除同步调用已启动但超时参数未设置或设置为无限时间的实例

 

通过对源代码进行静态检测,可以检测出上述29个缺陷和漏洞,则根据针对CISQ度量中包含的弱点检测到的总次数为转化为百万分之一机会的弱点,以确定可靠性度量的西格玛水平。进而对代码质量进行评估。作为软件健康的质量度量之一。

 

(完)