网站公告:
凯发国际官网永久网址【363050.COM】
363050.com全国服务热线:
凯发娱乐K8 kaifayule
凯发国际官网 - 真人娱乐、老虎机、APP下载首选平台软件缺陷模式
添加时间:2025-11-17 17:54:38

  凯发国际,凯发国际登录,凯发国际官网,凯发国际娱乐,凯发国际注册,凯发娱乐K8,尊龙凯时

凯发国际官网 - 真人娱乐、老虎机、APP下载首选平台软件缺陷模式

  软件缺陷模式指对软件中重复出现的问题及其解决方案的规律性描述,其概念最早由Christopher Alexander在建筑领域提出,后应用于软件领域以识别程序错误或异常缺陷。该模式需满足存在性、有限性及可检测性条件,通过

  在航天嵌入式软件领域建立的SSDP缺陷模式集包含123项基础缺陷模式和170项子模式,采用10元组模型定义属性,数据来源于型号软件问题及第三方测试,并通过静态分析工具SpecChecker实现缺陷自动检测。常用检测工具包括PolySpace Verifier、Findbugs、

  软件缺陷模式是对发生的不断重复的或类似的软件缺陷中发现和抽象出的规律描述。

  (1)国标GB/T11457-89“软件工程术语”是等同采用IEEE STD729-1983制定的,IEEE软件工程术语中对软件缺陷(software defect)的定义为:1)从产品内部看,软件缺陷是软件产品开发或维护过程中所存在的错误、偏差等各种问题;2)从外部看,软件缺陷是系统所需要实现的某种功能的失效或违背。

  (2)SW-CMM是这样定义软件缺陷的:”系统或系统成分中的能造成它们无法实现其被要求的功能的缺点。如果在执行过程中遇到缺陷,它可能导致系统的失效”。

  (3)在IEEE的软件可信性度量的标准词汇(IEEE982.1-2005 Standard Dictionary of Measures of the SoftwareAspects of Dependability)中对软件缺陷的定义为:一个通用术语,涉及软件故障原因和失效影响。

  (4)国内软件可靠性工程领域广泛使用的定义为:软件缺陷是存在于软件中的、不期望的或不可接受的偏差,其结果是当软件运行于某一特定条件时将出现软件故障(即软件缺陷被激活),软件缺陷以一种静态的形式存在于软件的内部,是软件开发过程中人为错误的结果。软件缺陷的例子有:数组下标不对、循环变量初值设置有误、异常处理方法有误等。

  模式这一概念最早出现在城市建筑领域,ChristopherAlexander的一本关于建筑的书中明确给出了模式的概念,他说:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心,这样你就能一次又一次地使用该方案而不必做重复劳动”,他使用模式这一概念来解决建筑中的一些问题。随后,模式在构造复杂系统时的重要性逐渐在其他领域中得到认可。模式是针对复杂系统中重复出现的问题而提出来的。有经验的专家在解决问题时,通常先考虑以前解决过的相似问题,并重用其解法的精华来解决问题,这个不断被引用的解法就是通常说的模式。

  (3) 至少存在一种算法,能够利用缺陷模式匹配算法检测出所定义的软件缺陷。

  词法分析是对源程序进行词法分析,将其转化成单词流,然后与已定义的模式进行匹配,若匹配成功,则认为是缺陷,其原理和实现比较简单。词法分析只能检测出固定的软件缺陷,检测出的数量很有限,而且不能保证漏报率和误报率。

  类型推导是指利用机器自动推导的程序推导出程序中变量与函数的类型。主要的思想是将程序中的数据划分为不同的集合,每个集合按照一定规则,若将每个固定的集合作为一种类型,就能利用类型理论中的算法对其进行推导,其目的是保证每个推导操作都是针对合适的对象类型进行的,从而保证操作的有效性。类型推导主要适用和控制流无关的分析,能够处理大规模程序,且具有良好的扩展性,但是它不能很好的解决与控制流相关的分析。

  模型检测是由 Clarke、Emerson、Savakis、Quenelle 在 1981 年提出的,主要的思想是对软件系统构造状态机或者构造相应的抽象模型,然后在对构造后的系统进行遍历,验证系统的某种性质,是一种验证有限状态并发系统的方法。该方法能够对程序中的复杂语义进行检测,从而能够准确而高效的定位出程序中的缺陷。模型检测在很多方面得到了很好的应用,但是在软件测试中,由于软件自身具有高度的复杂性,所以该方法只能对程序某个特性构造抽象模型进行检测。

  定理证明是程序验证技术中常用的技术,是一种基于语义程序的验证技术。主要的思想是将验证求解的方法转化为数学上的定理证明,然后判断程序的抽象公式是否满足某个特定的属性。由于定理证明在处理有理数域和整数域上的运算极其的复杂,且在定理判断的过程中需要人工添加很多注释条件,不能自动的或半自动的判定缺陷程序缺陷,因而不能够得到广泛的运用。

  符号执行是一种白盒测试方法,其主要的思想是用抽象符号来表示程序中变量的值,进而模拟程序的执行,通过将程序的所有执行路径抽象成符号表达式,然后对每个特定的路径输入抽象符号,通过约束求解输出每个符号,最后判断程序的行为是否错误。按照模拟程序的所有执行路径,求得跟踪变量所有可能的值,进而发现程序中的逻辑错误。但是随着程序规模的扩大,执行路径的数目很多,不能跟踪所有路径下变量可能的值,因此不能对所有路径进行分析。

  抽象解释理论是由sot 和 P.Cousot 提出的一种算法,该算法通过选取逼近程序不动点语义来对程序进行分析。求解程序最小不动点一般是不可判定的,程序的输入和输出不可判定性使得无法求解程序的最小不动点。因此需要寻找到一个合适的抽象函数,作用于特定的抽象域,对某个特定的属性进行考察。虽然抽象区间域没有具体域准确,但是它减少了计算的规模和难度,增加了计算的可能性。如果找到抽象域上的最小不动点,就可以将映射后的具体域作为函数的最小不动点。

  基于规则的检查是指不同的应用程序中,可能存在不同的编码规则,我们可以首先利用规则处理器来处理具体的规则,然后将其转化为程序的内部表示,最后将其用于程序的静态分析。基于规则检查的优点是对不同的系统进行分析时,可以利用相对应的规则进行检查,然后定为出程序中的软件缺陷。但是由于规则数量有限,只能分析少量特定类型的软件缺陷,不能检测大部分的缺陷。

  PolySpace Verifier是由 PolySpace 公司开发,用于检测运行时软件缺陷。该软件是利用颜色进行缺陷级别的分类,橙色代表程序中可能存在缺陷,红色代表软件缺陷,灰色代表无法执行的代码,绿色代表程序中没有软件缺陷。它能够检测,空指针引用、未初始化局部变量、数组越界、缓冲区溢出等软件缺陷。

  Splint是开源的静态软件缺陷检测工具,用于检测用标准C实现的软件缺陷。通过在源代码中添加关于函数、参数和类型的格式化注释,实现了未使用的声明、类型不一致、使用未定义变量、内存泄露、不可达代码、函数返回值、无限循环、危险的别名等软件缺陷。

  Klocwork K8是由 Klocwork 公司开发的,支持 C/C++,JAVA,它能检测缓冲区溢出、内存泄露、安全漏洞等软件缺陷。

  Findbugs是一个基于 java 语言的静态分析工具,它主要检查类或者 JAR 文件。其主要思想是利用字节码与软件缺陷模式对比来寻找矛盾点,从而发现程序中的软件缺陷。它提供了自定义检测器功能,利用 Byte Code Engineering Library实现基于 visitor 模式字节码的扫描,并且通过加载 xml 文件的方式进行管理。

  Coverity Prevent是由 Coverity 公司研发的,支持 C/C++,java 语言的静态缺陷检测工具。它能够检测多种软件缺陷,如空指针引用、释放后指针引用、多次释放指针引用、未初始化变量、缓冲区溢出、整形溢出,安全编码等软件缺陷。

  PMD是一款采用 BSD 协议发布的 Java 程序代码检查工具,其核心是 javacc解析器。该工具可以做到检查 Java 代码中是否含有未使用的变量、是否含有空的抓取块、是否含有不必要的对象、复杂表达式、复杂代码等软件缺陷。而且其易于扩展,利用 xpath 或者 java 语言编写新的缺陷检测器。

  CodeSonar是由 Gramma Tech 公司开发的 C/C++代码静态缺陷检测工具,可以检测出导致系统崩溃、内存冲突的各种严重的错误,包括空指针引用、缓冲区溢出等软件缺陷。它还可以分析全部的程序,考虑不同文件中不同函数之间的调用关系,可以检测出传统测试方法很难发现的错误。

  Inspector是由 Reasoning 公司开发的 C/C++代码静态缺陷检测工具。它能够检测出不可达代码、内存释放异常等软件缺陷。能很好的检测出八类软件缺陷,但该工具漏报率和误报率比较高。

  SafePro是由北京航空航天大学研发的 C/C++等语言的静态软件测试工具。通过对程序的静态分析,能够提供程序数据流,控制流,程序语句覆盖测试、分支测试等方面的信息,使得用户可以快捷有效的理解程序结构,发现程序中的软件缺陷,提高软件质量。该系统是个高度扩展的系统,用户可以变形 xml 或者java 语言对其进行扩展。

  PG_Relief是由富士通公司和南京大学合作开发的 C/C++静态软件缺陷检测系统和度量统计系统,通过对程序进行静态分析,查找程序中可能存在的缺陷,最后统计程序的复杂度和规模。

  Object Broser是由 System Integrator Corporation 公司和北京科技大学合作开发的 java 语言静态缺陷检测工具。通过对 java 程序进行分析,检测程序中的可能缺陷,并对部分缺陷自动改进,减少软件缺陷概率,并统计程序的复杂度和规模。

  Cppcheck 是一种开源的 C/C++代码缺陷静态检查工具。不同于 C/C++编译器及其它分析工具,Cppcheck 只检查编译器检查不出来的 bug,不检查语法错误。它能检测出自动变量检查、数组边界检查、class 类检查、过期的函数,废弃函数检查、异常内存使用,释放检查、内存泄露检查、操作系统资源释放检查、异常STL 函数使用检查、代码格式错误以及性能因素检查等软件缺陷。