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度量中包含的弱点检测到的总次数为转化为百万分之一机会的弱点,以确定可靠性度量的西格玛水平。进而对代码质量进行评估。作为软件健康的质量度量之一。
(完)