《基于缺陷模式的件软测试.ppt》由会员分享,可在线阅读,更多相关《基于缺陷模式的件软测试.ppt(78页珍藏版)》请在三一办公上搜索。
1、第4章 基于缺陷模式的软件测试,地址:北京市海淀区学院路40号大唐电信测试空间楼联系电话:010-62303223 62303260 62303230,第4章 基于缺陷模式的软件测试,4.1 基于缺陷模式的软件测试概述 4.2 基于缺陷模式的软件测试指标分析 4.3 缺陷模式 4.4 基于缺陷模式的软件测试系统(DTS),4.1 基于缺陷模式的软件测试概述,缺陷模式必须满足下列几个条件:该模式下的缺陷是符合实际的。基于该模式的缺陷数目是可以容忍的。该模式下的缺陷是可以测试的。,采用该种方式实现测试,首先必须建立一种可以使用的模型(模式),称为缺陷模式。,基于缺陷模式的软件测试概述,基于模式的软
2、件测试技术具有的特点(5条):针对性强:如果说某种模式的缺陷是经常发生的,并且在被测软件中是存在的,则面向缺陷的测试可以检测出此类缺陷。基于缺陷模式的软件测试技术往往能发现其他测试技术难以发现的故障,如内存泄漏缺陷,空指针引用缺陷。工具自动化程度高以及测试效率高。缺陷定位准确:对测试所发现的缺陷能够准确定位。易学、易使用:对一般的IT专业专科以上的毕业生,该测试方法一般经过数天的培训即可掌握其使用方法。,缺陷模式,经过传统软件测试后,残留在软件中的缺陷一般都是小概率、开发人员疏忽造成的。我们对8类软件故障的测试实践表明,经过严格的传统软件测试,残留在软件中的故障密度为12个故障/10KLOC,
3、而没有经过严格测试的软件,其故障密度一般在510个故障/10KLOC,而这些故障一旦发生,往往会导致系统崩溃。软件缺陷模式就是经过理论分析、实践总结归纳出来的,我们目前将其分为故障、漏洞、疑问和规则模式。这是基于缺陷模式测试的核心技术之一。,缺陷模式的概念,(1)缺陷模式的定义 缺陷模式是缺陷的语法或语义特征的抽象,具有一定代表性或者会造成严重后果。(2)缺陷模式中缺陷产生的原因 疏忽:缺陷模式中的缺陷一般是由开发人员疏忽造成的。由于涉及可能多条路径、多个约束条件,疏忽往往是不可避免的。这类缺陷往往都是和路径或多个约束条件相关的。不理解:缺陷模式中的缺陷也可能是由于开发人员对程序语言本身不理解
4、造成的。如对某些规则不了解、对某些语言现象不理解都可能会产生缺陷。,(3)缺陷模式中缺陷的特点:一般都是非功能性的缺陷 路径敏感的缺陷一般都是有由疏忽造成的 路径不敏感的缺陷一般疏忽或不理解造成的 在大量工程软件的测试结果统计中,模式中的缺陷是会存在于大多数的软件中,并且有一定发生概率。这个概率要大于人们容忍的范围。,(4)软件缺陷模式中的缺陷发生密度 在以往的对N个软件测试活动中,该类缺陷的总个数除以N个软件的总行数1000,称为该类缺陷的缺陷密度,用缺陷个数/KLOC表示,N越大,其缺陷密度统计的准确性就越高。(5)缺陷模式的分类按缺陷产生后的严重程度:故障模式、安全漏洞模式、疑问代码模式
5、和规则模式(6)缺陷模式分类按是否是路径敏感 是路径敏感:需要人工确认 路径不敏感:不需要人工确认,作用及意义,软件缺陷模式与测试是软件测试领域中一种新型的软件测试技术 主要面向软件的非功能性缺陷,可以检测一般软件测试技术中难以检测的软件缺陷 与面向过程的软件测试具有很好的互补性 基于缺陷模式的测试技术与已往的软件测试有很大的不同,检测精度与效率比较高,测试成本低,软件缺陷模式,缺陷发生机理:疏忽、二义性、不理解、遗漏 分类:故障、安全漏洞、疑问代码、规则 语法与语义定义:给出基于语言的缺陷定义 缺陷新模式研究:论文、工具、实践、推理 缺陷模式数据库:核心技术之一,不断增补 嵌入式软件缺陷模式
6、研究:适合嵌入式特点,4.1 基于缺陷模式的软件测试概述 4.2 基于缺陷模式的软件测试指标分析 4.3 缺陷模式 4.4 基于缺陷模式的软件测试系统(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):(5)自动缺陷检测率(ADR):(6)计算复杂性,4.2 基于缺陷模式的软件测试指标分析
7、,漏报率(ER):设P是程序,M是缺陷模式,A是算法,IP(M,A,P)是IP总的数目,由于测试算法实现过程中的不同假设,会导致 IP(M,A,P)不同。漏报率定义为:,4.2 基于缺陷模式的软件测试指标分析,注意:理论上,在给定M和P之后,IP(M,P)是确定的,但在实际中很难得到IP(M,P)。假设不同的测试工具算法为:A1,A2,An,则通常用 表示IP(M,P)。对于每个IP通常需要人工去判断高IP是否真的是缺陷,根据程序的逻辑复杂性以及测试代价等因素,IP经确认后分为3种情况:表示IP确认为缺陷的数目:IPY(M,A,P)表示IP确认为非缺陷的数目:IPN(M,A,P)表示IP不能确
8、定是否缺陷的数目:IPU(M,A,P)所以,可得:IPY(M,A,P)+IPN(M,A,P)+IPU(M,A,P)=IP(M,A,P),准确率(CR):误报率(DR):,4.2基于缺陷模式的软件测试指标分析,缺陷检测率(DDR):自动缺陷检测率(ADR):用IPAY(P,A,M)表示不需人工确认,工具可以自动缺陷的检测个数。,4.2基于缺陷模式的软件测试指标分析,计算复杂性:在理论上,基于缺陷的软件测试技术可以100%的检测所定义的缺陷模式,但由于缺陷的检测可以模型化程序的遍历问题,对于大型程序,全部遍历虽然可以提高精度,但需要花费大量的时间。因此,该技术有一个 性价比 的问题,在时间遍历过程
9、中,往往都有一定的限制,如在一个函数内、一个类内、一个文件内等。,4.2基于缺陷模式的软件测试指标分析,基于缺陷模式的软件测试,4.1 基于缺陷模式的软件测试概述 4.2 基于缺陷模式的软件测试指标分析 4.3 缺陷模式 4.4 基于缺陷模式的软件测试系统(DTS),4.3 缺陷模式,4.3.1 缺陷模式概述 4.3.2 故障模式 4.3.3 安全漏洞模式 4.4.4 缺陷模式,4.3.1 缺陷模式概述,缺陷模式是和语言本身相关的,不同的语言有着不同的缺陷模式。我们以C+语言和Java语言为背景来描述其缺陷模式。将软件的缺陷模式分为四个层次:即故障模式 漏洞模式 缺陷模式 规则模式,软件缺陷模
10、式的分类:按缺陷严重程度,1.故障模式:此类缺陷是故障,一经产生,会导致系统出错。主要有:存储器泄露模式资源泄漏模式指针使用错误模式数组越界模式非法计算模式使用未初始化变量模式死循环结构模式死锁模式,4.3.1 缺陷模式概述,4.3.1 缺陷模式概述,2.安全漏洞模式:此类缺陷会给系统留下安全隐患,为攻击该系统开了绿灯。主要有:缓冲区溢出模式被感染的数据模式竞争条件模式风险操作模式,4.3.1 缺陷模式概述,3.缺陷模式:此类缺陷是不应该发生的,它未必会造成系统的错误,但可能会隐含某些故障,或者是由初级软件工程师不理解造成的。主要有:性能缺陷模式:此类缺陷会降低系统的性能疑问代码模式:让人费解
11、的代码,4.3.1 缺陷模式概述,4.规则模式:软件开发总要遵循一定的规则,某个团队也有一些开发规则,违反这些规则也是不允许的。主要有:代码规则复杂性规则控制流规则命名规则可移植性规则资源规则,4.缺陷模式,4.3.1 缺陷模式概述 4.3.2 故障模式 4.3.3 安全漏洞模式 4.3.4 缺陷模式,4.3.2 故障模式,故障模式中给出的故障描述,是程序中可能存在的故障,这些故障一旦被激活,就会使系统发生错误。包括以下几种故障模式(8种):存储泄漏的故障模式数组越界故障的故障模式使用未初始化变量故障模式空指针使用故障非法计算类故障死循环结构模式资源泄漏故障并发故障模式,4.3.2 故障模式,
12、存储泄漏的故障模式(Memory Leak Fault MLF)内存泄漏故障:设在程序的某处申请了大小为M的空间,凡在程序结束时M或者M的一部分没被释放、或者多次释放M或M的一部分都是内存泄漏故障。MLF有三种形式:(1)遗漏故障:是指申请的内存没有被释放。(2)不匹配故障:是指申请函数和释放函数不匹配。(3)不相等的释放错误:是指释放的空间和申请的空间大小不一样。,分析教材中的例子:例1-例9(9种情况),4.3.2 故障模式,数组越界故障的故障模式(OBAF)数组越界故障:设某数组定义为Arrayminmax,若引用Arrayi且imax都是数组越界故障。在C+中,若i0或imax是数组越
13、界故障。,4.3.2 故障模式,数组越界故障的类型分析(3种故障类型):(1)对程序中任何出现Arrayi的地方,都要判断i的范围,可能有三种情况:若i是在数组定义的范围内,则是正确的;若i是在数组定义的范围外,则是OBAF;若i是不确定的,则Arrayi是否是OBAF则不确定的。(分析教材例4-10和例4-11)(2)字符串拷贝过程中存在的数组越界故障。(分析教材例表4-1)(3)在结构类型中,由于结构体中的成员变量是连续存放的,在数组的拷贝过程中,多余的数据会自动的存放在后面所定义的成员变量中,这种情况数组并不产生越界错误。(分析教材例4-12),4.3.2 故障模式,3使用未初始化变量故
14、障模式(Uninitialized Variable Fault,UVF)定义:使用未初始化变量故障:存在一个路径,在该路径上使用前面没有被赋初值的变量是使用未初始化变量故障。,(分析教材例4-13、例4-14、例4-15、例4-16、例4-17),4.3.2 故障模式,4空指针使用故障(NULL Pointer Dereference Fault NPDF)定义:空指针使用故障:引用空指针或给空指针赋值的都是空指针使用故障。,(分析教材例4-18、表4-2),4.3.2 故障模式,5非法计算类故障(Illegal Computing Fault ILCF)定义:非法计算类故障:是指计算机不允
15、许的计算。一旦非法计算类故障产生,系统将强行退出。例如:除数为0故障。对数自变量为0或负数故障。根号内为负数的故障。,故障模式,6死循环结构模式(Dead Loop Fault DLF)定义:在控制流图中,对任何一个循环结构,包括:FOR语句中的死循环结构;WHILE语句中的死循环结构;DO-WHILE语句中的死循环结构;GOTO语句中的死循环结构;函数循环调用造成的死循环结构。要分析控制循环的变量的开始条件、结束条件、步长变化,检查该循环能否结束,若不能则会形成死循环。,(分析教材例4-19、例4-20、例4-21),故障模式,7资源泄漏故障(RLF)定义:资源泄漏故障:在Java程序中,当
16、一个资源被打开后,如果并不是在所有的可执行路径上都对其进行了显式的释放操作,则是一个资源泄漏故障。,资源泄漏一般分为4种情况:简单泄漏:资源被分配给本地变量,在该变量的有效范围内没有释放资源;异常泄漏:资源被分配给本地变量,在该变量的有效范围内也释放了资源,但在释放资源前由于异常抛出,导致资源释放操作没有执行 交叉函数泄漏:在一个方法内分配资源,该资源被传递到另外一个方法内,在另一个方法内没有正常释放资源;静态情况:资源被分配给静态变量或其他非本地变量,该变量没有被正常释放。,分析教材例4-22、例4-23、例4-24、例4-25,故障模式,8.并发故障模式 该模式主要是针对程序员对多线程的编
17、码机制、各种同步方法、Java存储器模式和java虚拟机的工作机制不清楚,而且由于线程启动的任意性和不确定性使用户无法确定所编写的代码具体何时执行而导致对公共区域的错误使用。这类模式主要包括:不正确的同步 可能导致死锁多线程应用中方法调用时机或方式不正确 同一变量的双重验证 相互初始化的类和临界区内调用阻塞函数等。,分析教材例4-22、例4-23、例4-24、例4-25,(1)不正确的同步,定义:在java程序中,由于对synchronized关键字使用不当将造成不正确的同步缺陷。主要有:不连续的同步;对易变域的同步;set方法被同步了,但get方法却没有被同步;方法writeObject同步
18、但其他方法均没有同步;方法readObject使用了synchronized修饰;静态域的不正确初始化;,分析教材例中对应类型的例题,(2)可能导致死锁,定义:在java中,对锁的不正确操作可能造成导致死锁的缺陷。,(3)多线程应用中方法调用时机或方式不正确,定义:在java中,一些同步方法的不正确调用将造成该类缺陷。,(4)同一变量的双重验证,定义:在java中,同一变量的双重验证指对一个对象进行了两次判断,判断其是否为空。,(5)相互初始化的类和临界区内调用阻塞函数,定义:在java中,互相初始化的类指的是两个类中分别对对方类的实例进行初始化的代码。,4.3 缺陷模式,4.3.1 缺陷模式
19、概述 4.3.2 故障模式 4.3.3 安全漏洞模式 4.3.4 缺陷模式,4.3.3 安全漏洞模式,安全漏洞模式为他人攻击软件提供可能。而一旦软件被攻击成功,系统就可能发生瘫痪,所造成的危害较大,因此,此类漏洞应当尽量避免。下面以C+为基础,介绍基于安全漏洞检测的缺陷模式。主要有:(1)缓冲区溢出漏洞模式;(2)被污染的数据模式;(3)竞争条件(4)风险操作,4.3.3 安全漏洞模式,1、缓冲区溢出(buffer overflow)漏洞模式 定义:当程序要在一个缓冲区内存储比该缓冲区的大小还要多的数据时,即会产生缓冲区溢出漏洞。缓存区溢出主要有2种类型:数据拷贝造成的缓冲区溢出;格式化字符串
20、造成的缓冲区溢出;,1、缓冲区溢出(buffer overflow)漏洞模式,(1)数据拷贝造成的缓冲区溢出 如果数据是从外部传进来的或是在缓冲区之间进行数据复制,在使用之前没有进行检验,那么,有可能出现安全问题。教材:例4-47 表4-5(2)格式化字符串造成的缓冲区溢出 利用缓冲区时,若对数据长度不加限制,就可能造成溢出。教材:例4-48 表4-6,4.3.3 安全漏洞模式,被污染的数据模式(Tainted Data)定义:程序从外部获取数据时,这些数据可能含有具有欺骗性或者是不想要的垃圾数据,如果在使用这些数据前不进行合法性检查则将威胁到程序的安全,造成一个被污染的数据缺陷。被污染的数据
21、可能会导致程序不按原计划执行,也有可能直接或间接地导致缓冲区溢出缺陷。被污染的数据模式主要有两种类型 使用的数据来自外部的全局变量 使用的数据来自输入函数,2 被污染的数据模式,(1)使用的数据来自外部的全局变量 使用来自外部的全局变量前应先进行合法性检查。教材:例4-49(2)使用的数据来自输入函数 教材:例4-50 表4-7,4.3.3 安全漏洞模式,竞争条件(Race Condition)定义:如果程序中有两种不同的I/O调用同一文件进行操作,而且这两种调用是通过绝对路径或相对路径引用文件的,那么就易出现竞争条件问题。在两种操作进行的间隙,黑客可能改变文件系统,那么将会导致对两个不同的文
22、件操作而不是同一文件进行操作。这种典型的问题发生在用户拥有不同的权限运行的程序中(例如:数据库和服务器程序等)。程序代码中,针对文件名的一些操作往往会被黑客利用从而造成竞争条件。教材:例4-51、52,4.3.3 安全漏洞模式,风险操作(Risky Operation)定义:如果不恰当地使用了某些标准库函数,可能会带来安全隐患。甚至在某些情况下,某些函数一经被使用,就可能会带来安全隐患。例如像rand()和random()这样的随机数生成函数,它们在生成伪随机值的时候表现出来的性能是非常差的,如果用它们来生成默认的口令,这些口令将很容易被攻击者猜测到。,教材中给出了23种类型,每种类型都给出了
23、应用实例。例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)使用不可靠的参数(例4-64)(9)对明确的宏定义使用变量(例4-65)(10)变量作为注册表参数(例4-66)(11)使用不可靠的shell命令(例4-67)(12)不充分的路径(例4-68),23种类型及其对应实例,(13)不
24、安全的权限提升(例4-69)(14)使用不可靠的加密算法(例4-70)(15)使用不可靠的进程创建(例4-71)(16)不可靠的资源处理(例4-72)(17)忽略检查函数的返回值(例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 缺陷模式,缺陷模式主要分为以下几类:1、低性能模
25、式:2、代码国际化模式 3、疑问代码模式,1 低性能模式,低性能模式:该模式导致软件运行效率低下,因此建议采用更高效的代码来完成同样的功能。这类模式主要包括使用低效函数/代码、使用多余函数、Java中显式垃圾回收、冗余代码、头文件中定义的静态变量、不必要的文件包含、字符串低效操作和有更简单的运算可以替代等。低性能模式分为以下小类(1)使用低效率的函数/代码(10种);(2)使用多余函数(5种)(3)显示垃圾回收(4)冗余代码;(5)头文件中定义静态变量;(6)不必要的文件包含(7)字符串低效操作(8)可以用更简单的运算替代,1 低性能模式,(1)使用低效率的函数/代码 定义:在java程序中,
26、对于一些特定的类、函数和语法,若没有使用合适的方法,将造成性能下降,此类缺陷为使用低效函数、代码缺陷。该类缺陷主要包括以下(10种);判定字符串为空的方法的使用;在逻辑表达式中使用了非短路运算符;使用低效的类型构造器;不必要的包装类实例化;产生随机整数 在多个类之间复制很大的字符串常量 循环中的字符串连接 未定义为静态的内部类 未声明为静态属性;调用低效的比较方法,教材例4-80-4-87,1 低性能模式:,(2)使用多余函数 定义:在java中,若调用了一些不必要的函数,而造成性能下降,则此类缺陷为使用多余函数缺陷。该类缺陷主要包括以下(5种)同一锁的同步方法调用;没有必要的方法调用;调用了
27、不必要的getClass()方法;参数为常数的数学方法;字符串变量调用toString(),教材例4-88-4-91,(3)显示垃圾回收 定义:在java中,垃圾回收是很耗费资源的,显示地调用垃圾回收机制会导致应用的性能急剧下降,此类缺陷为垃圾回收缺陷。,1 低性能模式:,教材例4-92,1 低性能模式:,(4)冗余代码 定义:在java中,存在从未使用过的方法或属性,或存在从未使用读取过的局部变量,则此类缺陷为冗余代码缺陷,1 低性能模式:,(5)头文件中定义静态变量 定义:头文件中定义的函数或变量被声明为静态的,即包含该头文件的任一文件都比较并复制一份该对象,这样无疑明显增加了可执行文件的
28、大小。,教材例4-93,1 低性能模式:,(6)不必要的文件包含 定义:一个文件包含了另一个头文件却没有使用该头文件中的任何符号,这种缺陷会增加编译的时间。,教材例4-94,1 低性能模式:,(7)字符串低效操作 定义:循环中的字符串连接。在循环里用“+”做String变量的连接。,教材例4-95,(8)可以用更简单运算替代 例:i=i+1-i+i=i-1-i-,2 代码国际化模式,该模式主要是在对语言进行国际化的过程中,可能造成本地设置和程序需求不符的情况,造成匹配错误。,3 疑问代码模式,该模式主要指:代码中容易引起歧义的,让人迷惑的编写方式。,4 基于缺陷模式的软件测试,4.1 基于缺陷
29、模式的软件测试概述 4.2 基于缺陷模式的软件测试指标分析 4.3 缺陷模式 4.4 基于缺陷模式的软件测试系统(DTS),基于缺陷模式的软件测试系统(DTS),本教材的作者自主开发的基于缺陷模式的测试系统DTS。介绍基于缺陷模式的软件测试的基本原理。DTS是作者在国家863“软件的故障模式与面向故障的软件测试系统”资助下开发的测试系统,能对上面介绍的缺陷模式进行有效测试。,DTS系统结构,基于缺陷模式的软件测试系统(DTS),DTS缺陷模式描述 1缺陷模式状态机有限自动机是计算机科学的重要基石,它在软件开发领域内通常被称作有限状态机。2缺陷模式状态机的xml描述作者用xml来对缺陷模式状态机
30、进行描述。xml schema定义了描述缺陷模式状态机的语法,包括标签以及标签的各个属性。,基于缺陷模式的软件测试系统(DTS),DTS的测试界面,基于缺陷模式的软件测试系统(DTS),补充:基于缺陷模式测试的三个研究领域,补充:,补充:,区间运算技术,扩展了经典的数值型区间代数理论,提出了区间集的概念并定义了数值型变量区间集上的集合运算、代数运算和逻辑运算,提高了分析的精度定义了布尔类型、数组类型、引用类型的区间及其运算方法 定义了条件表达式中的变量取值区间的可能集和必然集及其计算方法,提高了计算的效率 采用多值逻辑,减少了误报率引入了拓宽算子,提高对循环语句中变量分析的精确性,区间运算研究,函数间分析技术,创建函数摘要是一种灵活的过程间分析方法 函数摘要是对函数实际语义的抽象,当分析到该函数的调用时,就将该函数摘要作为函数调用的替代进行使用 函数摘要的灵活性在于其可以非常精确(相对复杂),也可以不精确(相对简单),函数间分析研究,变量相关性分析技术,变量的相关树 简化区间运算,压缩变量取值空间 路径敏感分析的简化,课堂练习题:分析一下各代码段的的缺陷类型,及其改进方式,