基于缺陷模式的软件测试精编版_第1页
基于缺陷模式的软件测试精编版_第2页
基于缺陷模式的软件测试精编版_第3页
基于缺陷模式的软件测试精编版_第4页
基于缺陷模式的软件测试精编版_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第4章章 基于缺陷模式的软件测试基于缺陷模式的软件测试4.1 基于缺陷模式的软件测试概述基于缺陷模式的软件测试概述 4.2 基于缺陷模式的软件测试指标分析基于缺陷模式的软件测试指标分析 4.3 缺陷模式缺陷模式 4.4 基于缺陷模式的软件测试系统(基于缺陷模式的软件测试系统(DTS) 4.1 基于缺陷模式的软件测试概述基于缺陷模式的软件测试概述缺陷模式必须满足下列几个条件:缺陷模式必须满足下列几个条件: n该模式下的缺陷是符合实际的。该模式下的缺陷是符合实际的。n基于该模式的缺陷数目是可以容忍的。基于该模式的缺陷数目是可以容忍的。1.该模式下的缺陷是可以测试的。该模式下的缺陷是可以测试的。

2、采用该种方式实现测试,首先必须建立一种可以采用该种方式实现测试,首先必须建立一种可以使用的模型(模式),称为使用的模型(模式),称为缺陷模式缺陷模式。基于缺陷模式的软件测试概述基于缺陷模式的软件测试概述基于模式的软件测试技术具有的特点基于模式的软件测试技术具有的特点(5条条):n针对性强针对性强:如果说某种模式的缺陷是经常发生的,并且:如果说某种模式的缺陷是经常发生的,并且在被测软件中是存在的,则面向缺陷的测试可以检测出在被测软件中是存在的,则面向缺陷的测试可以检测出此类缺陷。此类缺陷。n基于缺陷模式的软件测试技术往往基于缺陷模式的软件测试技术往往能发现其他测试技术能发现其他测试技术难以发现的

3、故障难以发现的故障,如内存泄漏缺陷,空指针引用缺陷。,如内存泄漏缺陷,空指针引用缺陷。n工具工具自动化程度高自动化程度高以及以及测试效率高测试效率高。n缺陷定位准确:缺陷定位准确:对测试所发现的缺陷能够准确定位。对测试所发现的缺陷能够准确定位。1.易学、易使用:易学、易使用:对一般的对一般的IT专业专科以上的毕业生,该专业专科以上的毕业生,该测试方法一般经过数天的培训即可掌握其使用方法。测试方法一般经过数天的培训即可掌握其使用方法。 缺陷模式 经过传统软件测试后,残留在软件中的缺陷一般都是小概率、开发人员疏忽造成的。我们对8类软件故障的测试实践表明,经过严格的传统软件测试,残留在软件中的故障密

4、度为12个故障/10KLOC,而没有经过严格测试的软件,其故障密度一般在510个故障/10KLOC,而这些故障一旦发生,往往会导致系统崩溃。软件缺陷模式就是经过理论分析、实践总结归纳出来的,我们目前将其分为故障、漏洞、疑问和规则模式。这是基于缺陷模式测试的核心技术之一。缺陷模式的概念(1) 缺陷模式的定义缺陷模式的定义 缺陷模式是缺陷的语法或语义特征的抽象,具有一缺陷模式是缺陷的语法或语义特征的抽象,具有一定代表性或者会造成严重后果定代表性或者会造成严重后果 。(2) 缺陷模式中缺陷产生的原因缺陷模式中缺陷产生的原因 ? 疏忽:缺陷模式中的缺陷一般是由开发人员疏疏忽:缺陷模式中的缺陷一般是由开

5、发人员疏忽造成的。由于涉及可能多条路径、多个约束条件,忽造成的。由于涉及可能多条路径、多个约束条件,疏忽往往是不可避免的。这类缺陷往往都是和路径或疏忽往往是不可避免的。这类缺陷往往都是和路径或多个约束条件相关的。多个约束条件相关的。 ? 不理解:缺陷模式中的缺陷也可能是由于开发人不理解:缺陷模式中的缺陷也可能是由于开发人员对程序语言本身不理解造成的。如对某些规则不了员对程序语言本身不理解造成的。如对某些规则不了解、对某些语言现象不理解都可能会产生缺陷。解、对某些语言现象不理解都可能会产生缺陷。(3)缺陷模式中缺陷的特点:? 一般都是非功能性的缺陷一般都是非功能性的缺陷? 路径敏感的缺陷一般都是

6、有由疏忽造成的路径敏感的缺陷一般都是有由疏忽造成的? 路径不敏感的缺陷一般疏忽或不理解造成的路径不敏感的缺陷一般疏忽或不理解造成的? 在大量工程软件的测试结果统计中,模式中的缺陷是会存在在大量工程软件的测试结果统计中,模式中的缺陷是会存在于大多数的软件中,并且有一定发生概率。这个概率要大于于大多数的软件中,并且有一定发生概率。这个概率要大于人们容忍的范围人们容忍的范围。(4) 软件缺陷模式中的缺陷发生密度软件缺陷模式中的缺陷发生密度? 在以往的对在以往的对N个软件测试活动中,该类缺陷的总个个软件测试活动中,该类缺陷的总个数除以数除以N个软件的总行数个软件的总行数1000,称为该类缺陷,称为该类

7、缺陷的缺陷密度,用缺陷个数的缺陷密度,用缺陷个数/KLOC表示,表示,N越大,其越大,其缺陷密度统计的准确性就越高。缺陷密度统计的准确性就越高。(5) 缺陷模式的分类缺陷模式的分类按缺陷产生后的严重程度:按缺陷产生后的严重程度:故障模式、安全漏洞模式、疑问代码模式和规则模故障模式、安全漏洞模式、疑问代码模式和规则模式式(6) 缺陷模式分类缺陷模式分类按是否是路径敏感按是否是路径敏感? 是路径敏感:需要人工确认是路径敏感:需要人工确认? 路径不敏感:不需要人工确认路径不敏感:不需要人工确认作用及意义n软件缺陷模式与测试是软件测试领域中一种新型的软件测试技术n 主要面向软件的非功能性缺陷,可以检测

8、一般软件测试技术中难以检测的软件缺陷n 与面向过程的软件测试具有很好的互补性 基于缺陷模式的测试技术与已往的软件测试n有很大的不同,检测精度与效率比较高,测试成本低软件缺陷模式 缺陷发生机理:疏忽、二义性、不理解、遗漏 分类:故障、安全漏洞、疑问代码、规则 语法与语义定义:给出基于语言的缺陷定义 缺陷新模式研究:论文、工具、实践、推理 缺陷模式数据库:核心技术之一,不断增补 嵌入式软件缺陷模式研究:适合嵌入式特点4.1 基于缺陷模式的软件测试概述基于缺陷模式的软件测试概述 4.2 基于缺陷模式的软件测试指标分析基于缺陷模式的软件测试指标分析 4.3 缺陷模式缺陷模式 4.4 基于缺陷模式的软件

9、测试系统(基于缺陷模式的软件测试系统(DTS)第第4章章 基于缺陷模式的软件测试基于缺陷模式的软件测试4.2 基于缺陷模式的软件测试指标分析基于缺陷模式的软件测试指标分析 设设P是待测程序,将缺陷模式是待测程序,将缺陷模式M分成类:分成类: M=M1,M2,Mn, 每类分成种每类分成种: Mi=Mi1,Mi2,MiL, 从从P中计算出和中计算出和M相匹配的检查点的集合相匹配的检查点的集合: IP=IP1,IP2,IPm, 可以定义如下技术指标:可以定义如下技术指标: (1)漏报率)漏报率(ER) (2) 准确率准确率(CR) (3)误报率)误报率(DR) (4)缺陷检测率)缺陷检测率(DDR)

10、: (5)自动缺陷检测率)自动缺陷检测率(ADR): (6)计算复杂性)计算复杂性4.2 基于缺陷模式的软件测试指标分析基于缺陷模式的软件测试指标分析n漏报率漏报率(ER): 设设P是程序,是程序,M是缺陷模式,是缺陷模式,A是算法,是算法, IP(M,A,P)是)是IP总的数目,总的数目, 由于测试算法实现过程中的不同假设,会导致由于测试算法实现过程中的不同假设,会导致 IP(M,A,P)不同。)不同。 漏报率定义为:漏报率定义为:| ),(| ),(),(|PMIPPMIPPAMIPErrorRatio4.2 基于缺陷模式的软件测试指标分析基于缺陷模式的软件测试指标分析注意:注意: 理论上

11、,在给定理论上,在给定M和和P之后,之后, IP(M,P)是确定的,但在实际中很难是确定的,但在实际中很难得到得到IP(M,P)。假设不同的测试工具算法为:。假设不同的测试工具算法为: A1,A2,An ,则通则通常用常用 表示表示IP(M,P)。 对于每个对于每个IP通常需要人工去判断高通常需要人工去判断高IP是否真的是缺陷,根据是否真的是缺陷,根据程序的逻辑复杂性以及测试代价等因素,程序的逻辑复杂性以及测试代价等因素,IP经确认后分为经确认后分为3种情况:种情况: 表示表示IP确认为缺陷的数目确认为缺陷的数目: IPY(M,A,P) 表示表示IP确认为确认为非非缺陷的数目缺陷的数目: IP

12、N(M,A,P) 表示表示IP不能确定不能确定是否缺陷的数目是否缺陷的数目: IPU(M,A,P) 所以,可得:所以,可得: IPY(M,A,P)+ IPN(M,A,P) +IPU(M,A,P)= IP(M,A,P)n1ii)P,A,M(IPn准确率准确率(CR): n误报率误报率(DR): 4.2基于缺陷模式的软件测试指标分析基于缺陷模式的软件测试指标分析 ),(),(),(PAMIPPAMIPPAMIPioCorrectRatUY),(),(PAMIPPAMIPioDistortRatNn缺陷检测率缺陷检测率(DDR): n自动缺陷检测率自动缺陷检测率(ADR): 用用IPAY(P,A,M

13、)表示不需人工确认,工具)表示不需人工确认,工具可以自动缺陷的检测个数可以自动缺陷的检测个数。4.2基于缺陷模式的软件测试指标分析基于缺陷模式的软件测试指标分析 ),(),(PAMIPPAMIPctingRatioDefectDeteYn计算复杂性:计算复杂性: 在理论上,基于缺陷的软件测试技术在理论上,基于缺陷的软件测试技术可以可以100%的检的检测所定义的缺陷模式测所定义的缺陷模式, 但由于缺陷的检测可以模型化程序的遍历问题,对于但由于缺陷的检测可以模型化程序的遍历问题,对于大型程序,全部遍历虽然可以提高精度,但需要花费大量大型程序,全部遍历虽然可以提高精度,但需要花费大量的时间。的时间。

14、 因此,该技术有一个因此,该技术有一个 性价比性价比 的问题,在时间遍历过的问题,在时间遍历过程中,往往都有一定的限制,如在一个函数内、一个类内、程中,往往都有一定的限制,如在一个函数内、一个类内、一个文件内等。一个文件内等。4.2基于缺陷模式的软件测试指标分析基于缺陷模式的软件测试指标分析 基于缺陷模式的软件测试基于缺陷模式的软件测试n4.1 基于缺陷模式的软件测试概述基于缺陷模式的软件测试概述 n4.2 基于缺陷模式的软件测试指标分析基于缺陷模式的软件测试指标分析 n4.3 缺陷模式缺陷模式 n4.4 基于缺陷模式的软件测试系统(基于缺陷模式的软件测试系统(DTS)4.3 缺陷模式缺陷模式

15、 4.3.1 缺陷模式概述缺陷模式概述 4.3.2 故障模式故障模式 4.3.3 安全漏洞模式安全漏洞模式 4.4.4 缺陷模式缺陷模式 4.3.1 缺陷模式概述缺陷模式概述 缺陷模式缺陷模式是和语言本身相关的,不同的语言有着不同是和语言本身相关的,不同的语言有着不同的缺陷模式。的缺陷模式。 我们以我们以C+语言和语言和Java语言语言为背景来描述其缺陷模式。为背景来描述其缺陷模式。 将软件的缺陷模式分为四个层次:将软件的缺陷模式分为四个层次: 即故障模式即故障模式 漏洞模式漏洞模式 缺陷模式缺陷模式 规则模式规则模式软件缺陷模式的分类:按缺陷严重程度软件缺陷模式的分类:按缺陷严重程度1. 故

16、障模式故障模式: 此类缺陷是故障,一经产生,会导致系统出错。此类缺陷是故障,一经产生,会导致系统出错。主要有主要有:n存储器泄露模式存储器泄露模式n资源泄漏模式资源泄漏模式n指针使用错误模式指针使用错误模式n数组越界模式数组越界模式n非法计算模式非法计算模式n使用未初始化变量模式使用未初始化变量模式n死循环结构模式死循环结构模式n死锁模式死锁模式 4.3.1 缺陷模式概述缺陷模式概述4.3.1 缺陷模式概述缺陷模式概述2. 安全漏洞模式:安全漏洞模式: 此类缺陷会给系统留下安全隐患,为攻击该系统开了绿灯。此类缺陷会给系统留下安全隐患,为攻击该系统开了绿灯。主要有:主要有:n缓冲区溢出模式缓冲区

17、溢出模式n被感染的数据模式被感染的数据模式n竞争条件模式竞争条件模式n风险操作模式风险操作模式4.3.1 缺陷模式概述缺陷模式概述3. 缺陷模式:缺陷模式: 此类缺陷是不应该发生的,它未必会造成系统的错误,此类缺陷是不应该发生的,它未必会造成系统的错误,但可能会隐含某些故障,或者是由初级软件工程师不理解但可能会隐含某些故障,或者是由初级软件工程师不理解造成的。造成的。主要有:主要有:n性能缺陷模式:此类缺陷会降低系统的性能性能缺陷模式:此类缺陷会降低系统的性能n疑问代码模式:让人费解的代码疑问代码模式:让人费解的代码4.3.1 缺陷模式概述缺陷模式概述4.规则模式:规则模式: 软件开发总要遵循

18、一定的规则,某个团队也有一些软件开发总要遵循一定的规则,某个团队也有一些开发规则,违反这些规则也是不允许的。开发规则,违反这些规则也是不允许的。主要有:主要有:n代码规则代码规则n复杂性规则复杂性规则n控制流规则控制流规则n命名规则命名规则n可移植性规则可移植性规则n资源规则资源规则4. 缺陷模式缺陷模式4.3.1 缺陷模式概述缺陷模式概述 4.3.2 故障模式故障模式 4.3.3 安全漏洞模式安全漏洞模式 4.3.4 缺陷模式缺陷模式 4.3.2 故障模式故障模式 故障模式故障模式中给出的故障描述,是程序中可能中给出的故障描述,是程序中可能存在的故障,这些故障一旦被激活,就会使系统存在的故障

19、,这些故障一旦被激活,就会使系统发生错误。发生错误。 包括以下几种故障模式(包括以下几种故障模式(8种):种):n存储泄漏的故障模式存储泄漏的故障模式n数组越界故障的故障模式数组越界故障的故障模式n使用未初始化变量故障模式使用未初始化变量故障模式n空指针使用故障空指针使用故障n非法计算类故障非法计算类故障n死循环结构模式死循环结构模式n资源泄漏故障资源泄漏故障n并发故障模式并发故障模式4.3.2 故障模式故障模式n存储泄漏的故障模式(存储泄漏的故障模式(Memory Leak Fault MLF)内存泄漏故障:内存泄漏故障:设在程序的某处申请了大小为设在程序的某处申请了大小为M的空间,的空间,

20、凡在程序结束时凡在程序结束时M或者或者M的一部分没被释放、或者多次释的一部分没被释放、或者多次释放放M或或M的一部分都是内存泄漏故障。的一部分都是内存泄漏故障。MLF有三种形式:有三种形式: (1)遗漏故障:是指申请的内存没有被释放。)遗漏故障:是指申请的内存没有被释放。 (2)不匹配故障:是指申请函数和释放函数不匹配。)不匹配故障:是指申请函数和释放函数不匹配。 (3)不相等的释放错误:是指释放的空间和申请的空间大小不一样。)不相等的释放错误:是指释放的空间和申请的空间大小不一样。分析教材中的例子:例分析教材中的例子:例1-例例9(9种情况种情况)4.3.2 故障模式故障模式n数组越界故障的

21、故障模式(数组越界故障的故障模式(OBAF) 数组越界故障:数组越界故障:设某数组定义为设某数组定义为Arraymin max,若引,若引用用Arrayi且且imax都是数组越界故障。在都是数组越界故障。在C+中,中,若若i0或或i max是数组越界故障。是数组越界故障。4.3.2 故障模式故障模式数组越界故障的类型分析(数组越界故障的类型分析(3种故障类型):种故障类型):(1)对程序中任何出现)对程序中任何出现Arrayi的地方,都要判断的地方,都要判断i的范围,可能有三种情况:的范围,可能有三种情况:n若若i是在数组定义的范围内,则是正确的;是在数组定义的范围内,则是正确的;n若若i是在

22、数组定义的范围外,则是是在数组定义的范围外,则是OBAF;n若若i是不确定的,则是不确定的,则Arrayi是否是是否是OBAF则不确定的。则不确定的。 (分析教材例(分析教材例4-10和例和例4-11)(2)字符串拷贝过程中存在的数组越界故障)字符串拷贝过程中存在的数组越界故障 。 (分析教材例表(分析教材例表4-1)(3)在结构类型中,由于结构体中的成员变量是连续存放的,在数组的拷贝)在结构类型中,由于结构体中的成员变量是连续存放的,在数组的拷贝过程中,多余的数据会自动的存放在后面所定义的成员变量中,这种情过程中,多余的数据会自动的存放在后面所定义的成员变量中,这种情况数组并不产生越界错误。

23、况数组并不产生越界错误。 (分析教材例(分析教材例4-12)4.3.2 故障模式故障模式3使用未初始化变量故障模式使用未初始化变量故障模式(Uninitialized Variable Fault,UVF) 定义:定义: 使用未初始化变量故障:存在一个路径,在该路径上使用使用未初始化变量故障:存在一个路径,在该路径上使用前面没有被赋初值的变量是使用未初始化变量故障。前面没有被赋初值的变量是使用未初始化变量故障。 (分析教材例(分析教材例4-13、例、例4-14、例、例4-15 、例例4-16 、例、例4-17 )4.3.2 故障模式故障模式4空指针使用故障空指针使用故障(NULL Pointe

24、r Dereference Fault NPDF) 定义定义: 空指针使用故障:引用空指针或给空指针赋值的都是空空指针使用故障:引用空指针或给空指针赋值的都是空指针使用故障。指针使用故障。(分析教材例(分析教材例4-18、表、表4-2 )4.3.2 故障模式故障模式5非法计算类故障非法计算类故障(Illegal Computing Fault ILCF)定义定义: 非法计算类故障:是指计算机不允许的计算。非法计算类故障:是指计算机不允许的计算。 一旦非法计算类故障产生,系统将强行退出。一旦非法计算类故障产生,系统将强行退出。 例如:例如: 除数为除数为0故障。故障。 对数自变量为对数自变量为0

25、或负数故障。或负数故障。 根号内为负数的故障。根号内为负数的故障。4.3.2故障模式故障模式6死循环结构模式死循环结构模式(Dead Loop Fault DLF)定义:定义: 在控制流图中在控制流图中,对任何一个循环结构对任何一个循环结构,包括包括: FOR语句中的死循环结构;语句中的死循环结构; WHILE语句中的死循环结构;语句中的死循环结构; DO-WHILE语句中的死循环结构;语句中的死循环结构; GOTO语句中的死循环结构;语句中的死循环结构; 函数循环调用造成的死循环结构函数循环调用造成的死循环结构。 要分析控制循环的变量的开始条件、结束条件、步长变化,检查要分析控制循环的变量的

26、开始条件、结束条件、步长变化,检查该循环能否结束,若不能则会该循环能否结束,若不能则会形成死循环形成死循环。(分析教材例(分析教材例4-19、例、例4-20、例、例4-21 )4.3.2故障模式故障模式7资源泄漏故障资源泄漏故障(RLF)定义:定义: 资源泄漏故障:在资源泄漏故障:在Java程序中,当一个资源被打开后,如程序中,当一个资源被打开后,如果并不是在所有的可执行路径上都对其进行了显式的释放操果并不是在所有的可执行路径上都对其进行了显式的释放操作,则是一个资源泄漏故障。作,则是一个资源泄漏故障。资源泄漏一般分为资源泄漏一般分为4种情况:种情况: 简单泄漏:简单泄漏:资源被分配给本地变量

27、,在该变量的有效范围内没有释放资源;资源被分配给本地变量,在该变量的有效范围内没有释放资源; 异常泄漏异常泄漏:资源被分配给本地变量,在该变量的有效范围内也释放了资源,:资源被分配给本地变量,在该变量的有效范围内也释放了资源,但在释放资源前由于异常抛出,导致资源释放操作没有执行但在释放资源前由于异常抛出,导致资源释放操作没有执行 交叉函数泄漏:交叉函数泄漏:在一个方法内分配资源,该资源被传递到另外一个方法内,在一个方法内分配资源,该资源被传递到另外一个方法内,在另一个方法内没有正常释放资源;在另一个方法内没有正常释放资源; 静态情况静态情况:资源被分配给静态变量或其他非本地变量,该变量没有被正

28、常:资源被分配给静态变量或其他非本地变量,该变量没有被正常释放。释放。分析教材例分析教材例4-22、例、例4-23、例、例4-24、例、例4-254.3.2故障模式故障模式8. 并发故障模式并发故障模式 该模式主要是针对程序员对该模式主要是针对程序员对多线程的编码机制多线程的编码机制、各种、各种同同步方法步方法、Java存储器模式和存储器模式和java虚拟机的工作机制不清楚,虚拟机的工作机制不清楚,而且由于线程启动的任意性和不确定性使用户无法确定所编而且由于线程启动的任意性和不确定性使用户无法确定所编写的代码具体何时执行而导致对公共区域的错误使用。写的代码具体何时执行而导致对公共区域的错误使用

29、。 这类模式主要包括:这类模式主要包括:n 不正确的同步不正确的同步n 可能导致死锁可能导致死锁n多线程应用中方法调用时机或方式不正确多线程应用中方法调用时机或方式不正确n 同一变量的双重验证同一变量的双重验证n 相互初始化的类和临界区内调用阻塞函数等。相互初始化的类和临界区内调用阻塞函数等。分析教材例分析教材例4-22、例、例4-23、例、例4-24、例、例4-25(1)不正确的同步)不正确的同步定义:定义: 在在java程序中,由于对程序中,由于对synchronized关键字使用关键字使用不当将造成不正确的同步缺陷。不当将造成不正确的同步缺陷。 主要有:主要有: 不连续的同步;不连续的同

30、步; 对易变域的同步;对易变域的同步; set方法被同步了,但方法被同步了,但get方法却没有被同步;方法却没有被同步; 方法方法writeObject同步但其他方法均没有同步;同步但其他方法均没有同步; 方法方法readObject使用了使用了synchronized修饰;修饰; 静态域的不正确初始化;静态域的不正确初始化;分析教材例中对应类型的例题分析教材例中对应类型的例题(2)可能导致死锁)可能导致死锁定义:定义: 在在java中,对锁的不正确操作可能造成导致死锁的中,对锁的不正确操作可能造成导致死锁的缺陷缺陷。(3)多线程应用中方法调用时机或方式不正确)多线程应用中方法调用时机或方式不

31、正确定义:定义: 在在java中,一些同步方法的不正确调用将造成该类中,一些同步方法的不正确调用将造成该类缺陷缺陷。(4)同一变量的双重验证)同一变量的双重验证定义: 在java中,同一变量的双重验证指对一个对象进行了两次判断,判断其是否为空。(5)相互初始化的类和临界区内调用阻塞函数)相互初始化的类和临界区内调用阻塞函数定义: 在java中,互相初始化的类指的是两个类中分别对对方类的实例进行初始化的代码。4.3 缺陷模式缺陷模式 4.3.1 缺陷模式概述缺陷模式概述 4.3.2 故障模式故障模式 4.3.3 安全漏洞模式安全漏洞模式 4.3.4 缺陷模式缺陷模式 4.3.3 安全漏洞模式安全

32、漏洞模式 安全漏洞模式安全漏洞模式为他人攻击软件提供可能。而一旦软件被为他人攻击软件提供可能。而一旦软件被攻击成功,系统就可能发生瘫痪,所造成的危害较大,因攻击成功,系统就可能发生瘫痪,所造成的危害较大,因此,此类漏洞应当尽量避免。此,此类漏洞应当尽量避免。 下面以下面以C+为基础,介绍基于安全漏洞检测的缺陷模式。主要有:为基础,介绍基于安全漏洞检测的缺陷模式。主要有: (1)缓冲区溢出漏洞模式;)缓冲区溢出漏洞模式; (2)被污染的数据模式;)被污染的数据模式; (3)竞争条件)竞争条件 (4) 风险操作风险操作4.3.3 安全漏洞模式安全漏洞模式1 、缓冲区溢出(、缓冲区溢出(buffer

33、 overflow)漏洞模式)漏洞模式 定义:定义:当程序要在一个缓冲区内存储比该缓冲区当程序要在一个缓冲区内存储比该缓冲区的大小还要多的数据时,即会产生缓冲区溢出漏洞。的大小还要多的数据时,即会产生缓冲区溢出漏洞。 缓存区溢出主要有缓存区溢出主要有2种类型:种类型:n 数据拷贝造成的缓冲区溢出;数据拷贝造成的缓冲区溢出;n格式化字符串造成的缓冲区溢出格式化字符串造成的缓冲区溢出;1 、缓冲区溢出(、缓冲区溢出(buffer overflow)漏洞模式)漏洞模式(1) 数据拷贝造成的缓冲区溢出数据拷贝造成的缓冲区溢出 如果数据是从外部传进来的或是在缓冲区之间进行数据复制,如果数据是从外部传进来

34、的或是在缓冲区之间进行数据复制,在使用之前没有进行检验,那么,有可能出现安全问题。在使用之前没有进行检验,那么,有可能出现安全问题。 教材:例教材:例4-47 表表4-5 (2)格式化字符串造成的缓冲区溢出格式化字符串造成的缓冲区溢出 利用缓冲区时,若对数据长度不加限制,就可能造成溢出。利用缓冲区时,若对数据长度不加限制,就可能造成溢出。 教材:例教材:例4-48 表表4-64.3.3 安全漏洞模式安全漏洞模式n被污染的数据模式被污染的数据模式(Tainted Data) 定义定义:程序从外部获取数据时,这些数据可能含有具有欺骗性程序从外部获取数据时,这些数据可能含有具有欺骗性或者是不想要的垃

35、圾数据,或者是不想要的垃圾数据,如果在使用这些数据前不进行合法性检查如果在使用这些数据前不进行合法性检查则将威胁到程序的安全则将威胁到程序的安全,造成一个被污染的数据缺陷。,造成一个被污染的数据缺陷。 被污染的数据可能会导致程序不按原计划执行,也有可能直接或被污染的数据可能会导致程序不按原计划执行,也有可能直接或间接地导致间接地导致缓冲区溢出缺陷缓冲区溢出缺陷。 被污染的数据模式主要有两种类型被污染的数据模式主要有两种类型n 使用的数据来自外部的全局变量使用的数据来自外部的全局变量n 使用的数据来自输入函数使用的数据来自输入函数2 被污染的数据模式被污染的数据模式(1)使用的数据来自外部的全局

36、变量)使用的数据来自外部的全局变量 使用来自外部的全局变量前应先进行合法性检查使用来自外部的全局变量前应先进行合法性检查。 教材:例教材:例4-49 (2) 使用的数据来自输入函数使用的数据来自输入函数 教材:例教材:例4-50 表表4-74.3.3 安全漏洞模式安全漏洞模式n竞争条件竞争条件(Race Condition) 定义定义: 如果程序中有两种不同的如果程序中有两种不同的I/O调用同一文件进行操作,而调用同一文件进行操作,而且这两种调用是通过绝对路径或相对路径引用文件的,那么就易出现且这两种调用是通过绝对路径或相对路径引用文件的,那么就易出现竞争条件竞争条件问题。在两种操作进行的间隙

37、,黑客可能改变文件系统,那问题。在两种操作进行的间隙,黑客可能改变文件系统,那么将会导致对两个不同的文件操作而不是同一文件进行操作。么将会导致对两个不同的文件操作而不是同一文件进行操作。 这种典型的问题发生在用户拥有不同的权限运行的程这种典型的问题发生在用户拥有不同的权限运行的程序中序中(例如:数据库和服务器程序等例如:数据库和服务器程序等)。 程序代码中,针对文件名的一些操作往往会被黑客利用从而造程序代码中,针对文件名的一些操作往往会被黑客利用从而造成竞争条件。成竞争条件。 教材:例教材:例4-51、524.3.3 安全漏洞模式安全漏洞模式n风险操作(风险操作(Risky Operation

38、) 定义定义:如果不恰当地使用了某些标准库函数,可能会:如果不恰当地使用了某些标准库函数,可能会带来安全隐患。甚至在某些情况下,某些函数一经被使用带来安全隐患。甚至在某些情况下,某些函数一经被使用, 就可能会带来安全隐患。就可能会带来安全隐患。 例如像例如像rand()和和random()这样的随机数生成函数这样的随机数生成函数,它们它们在生成伪随机值的时候表现出来的性能是非常差的在生成伪随机值的时候表现出来的性能是非常差的, 如果用如果用它们来生成默认的口令它们来生成默认的口令, 这些口令将很容易被攻击者猜测到。这些口令将很容易被攻击者猜测到。 教材中给出了教材中给出了23种类型,每种类型都

39、给出了应用实例。种类型,每种类型都给出了应用实例。 例例4-53-例例4-79 23种类型及其对应实例种类型及其对应实例(1)_spawnvpe函数使用相对路径;(例函数使用相对路径;(例4-53)(2)不可靠的随机数;(例不可靠的随机数;(例4-54)(3)可预测的临时文件名(例)可预测的临时文件名(例5-55,56,57)(4)危险的外部程序调用(例)危险的外部程序调用(例5-58,59,60)(5)socke绑定问题(例绑定问题(例5-61)(6)使用不可靠的宏(例)使用不可靠的宏(例4-62)(7)使用不可靠的注册表参数(例)使用不可靠的注册表参数(例4-63)(8)使用不可靠的参数(

40、例)使用不可靠的参数(例4-64) (9) 对明确的宏定义使用变量(例对明确的宏定义使用变量(例4-65)(10)变量作为注册表参数(例)变量作为注册表参数(例4-66)(11)使用不可靠的)使用不可靠的shell命令(例命令(例4-67)(12)不充分的路径(例)不充分的路径(例4-68)23种类型及其对应实例种类型及其对应实例(13)不安全的权限提升(例)不安全的权限提升(例4-69)(14)使用不可靠的加密算法(例)使用不可靠的加密算法(例4-70)(15)使用不可靠的进程创建(例)使用不可靠的进程创建(例4-71)(16)不可靠的资源处理(例)不可靠的资源处理(例4-72)(17)忽略

41、检查函数的返回值(例)忽略检查函数的返回值(例4-73)(18)命名管道的脆弱性(例命名管道的脆弱性(例4-74) (19)Windows临时文件的脆弱性(例临时文件的脆弱性(例4-75)(20)以外的内存复制(例)以外的内存复制(例4-76)(21)文件存取函数(例)文件存取函数(例4-77) (22)不安全的文件操作(例不安全的文件操作(例4-78) (23)暴露绝对路径(例暴露绝对路径(例4-79)4.3 缺陷模式缺陷模式 4.3.1 缺陷模式概述缺陷模式概述 4.3.2 故障模式故障模式 4.3.3 安全漏洞模式安全漏洞模式 4.3.4 缺陷模式缺陷模式 4.3.4 缺陷模式缺陷模式缺

42、陷模式主要分为以下几类:缺陷模式主要分为以下几类: 1 、低性能模式、低性能模式: 2 、代码国际化模式、代码国际化模式 3 、疑问代码模式、疑问代码模式1 低性能模式低性能模式 低性能模式低性能模式: 该模式导致软件运行效率低下,因此建议采用更高效的代码来完成该模式导致软件运行效率低下,因此建议采用更高效的代码来完成同样的功能。这类模式主要包括使用低效函数同样的功能。这类模式主要包括使用低效函数/代码、使用多余函数、代码、使用多余函数、Java中显式垃圾回收、冗余代码、头文件中定义的静态变量、不必要的中显式垃圾回收、冗余代码、头文件中定义的静态变量、不必要的文件包含、字符串低效操作和有更简单

43、的运算可以替代等。文件包含、字符串低效操作和有更简单的运算可以替代等。低性能模式分为以下小类低性能模式分为以下小类 (1)使用低效率的函数)使用低效率的函数/代码(代码(10种);种); (2)使用多余函数()使用多余函数(5种)种) (3)显示垃圾回收)显示垃圾回收 (4)冗余代码;)冗余代码; (5)头文件中定义静态变量;)头文件中定义静态变量; (6) 不必要的文件包含不必要的文件包含 (7) 字符串低效操作字符串低效操作 (8)可以用更简单的运算替代)可以用更简单的运算替代1 低性能模式低性能模式 (1)使用低效率的函数)使用低效率的函数/代码代码 定义:定义:在在java程序中,对于

44、一些特定的类、函数和语法,若没有使程序中,对于一些特定的类、函数和语法,若没有使用合适的方法,将造成性能下降,此类缺陷为使用低效函数、代码缺用合适的方法,将造成性能下降,此类缺陷为使用低效函数、代码缺陷。陷。该类缺陷主要包括以下(该类缺陷主要包括以下(10种);种); 判定字符串为空的方法的使用;判定字符串为空的方法的使用; 在逻辑表达式中使用了非短路运算符;在逻辑表达式中使用了非短路运算符; 使用低效的类型构造器;使用低效的类型构造器; 不必要的包装类实例化;不必要的包装类实例化; 产生随机整数产生随机整数 在多个类之间复制很大的字符串常量在多个类之间复制很大的字符串常量 循环中的字符串连接

45、循环中的字符串连接 未定义为静态的内部类未定义为静态的内部类 未声明为静态属性;未声明为静态属性; 调用低效的调用低效的.url比较方法比较方法教材例4-80-4-871 低性能模式低性能模式:(2)使用多余函数)使用多余函数 定义定义:在:在java中,若调用了一些不必要的函数,中,若调用了一些不必要的函数,而造成性能下降,则此类缺陷为使用多余函数缺陷。而造成性能下降,则此类缺陷为使用多余函数缺陷。该类缺陷主要包括以下该类缺陷主要包括以下(5种)种) 同一锁的同步方法调用;同一锁的同步方法调用; 没有必要的方法调用;没有必要的方法调用; 调用了不必要的调用了不必要的getClass()方法;

46、方法; 参数为常数的数学方法;参数为常数的数学方法; 字符串变量调用字符串变量调用toString()教材例4-88-4-91(3)显示垃圾回收)显示垃圾回收 定义定义:在:在java中,垃圾回收是很耗费资源的,显示地调中,垃圾回收是很耗费资源的,显示地调用垃圾回收机制会导致应用的性能急剧下降,此类缺陷为用垃圾回收机制会导致应用的性能急剧下降,此类缺陷为垃圾回收缺陷。垃圾回收缺陷。1 低性能模式低性能模式:教材例4-921 低性能模式低性能模式:(4)冗余代码)冗余代码 定义定义:在:在java中,存在从未使用过的方法或属中,存在从未使用过的方法或属性,或存在从未使用读取过的局部变量,则此性,

47、或存在从未使用读取过的局部变量,则此类缺陷为冗余代码缺陷类缺陷为冗余代码缺陷1 低性能模式低性能模式:(5)头文件中定义静态变量)头文件中定义静态变量 定义定义:头文件中定义的函数或变量被声明为静态的,即:头文件中定义的函数或变量被声明为静态的,即包含该头文件的任一文件都比较并复制一份该对象,这样包含该头文件的任一文件都比较并复制一份该对象,这样无疑明显增加了可执行文件的大小。无疑明显增加了可执行文件的大小。教材例4-931 低性能模式低性能模式: (6)不必要的文件包含不必要的文件包含 定义定义:一个文件包含了另一个头文件却没有使用该头文:一个文件包含了另一个头文件却没有使用该头文件中的任何符号,这种缺陷会增加编译的时间。件中的任何符号,这种缺陷会增加编译的时间。教材例4-941 低性能模式低性能模式:(7)字符串低效操作字符串低效操作 定义定义:循环中的字符串连接。在循环里用:循环中的字符串连接。在循环里用“+”做做String变量的连接。变量的连接。教材例4-95(8)可以用更简单运算替代 例:i=i+1-i+ i=i-1-i-2 代码国际化模式代码国际化模式 该模式主要是在对语言进行国际化的该模式主要是在对语言进行国际化的过程中,可能造成

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论