基于缺陷模式的软件测试

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第4章基于缺陷模式的软件测试4.1基于缺陷模式的软件测试概述4.2基于缺陷模式的软件测试指标分析4.3缺陷模式4.4基于缺陷模式的软件测试系统(DTS)4.1基于缺陷模式的软件测试概述缺陷模式必须满足下列几个条件:1.该模式下的缺陷是符合实际的。2.基于该模式的缺陷数目是可以容忍的。3.该模式下的缺陷是可以测试的。采用该种方式实现测试,首先必须建立一种可以使用的模型(模式),称为缺陷模式。基于缺陷模式的软件测试概述基于模式的软件测试技术具有的特点(5条):1.针对性强:如果说某种模式的缺陷是经常发生的,并且在被测软件中是存在的,则面向缺陷的测试可以检测出此类缺陷。2.基于缺陷模式的软件测试技术往往能发现其他测试技术难以发现的故障,如内存泄漏缺陷,空指针引用缺陷。3.工具自动化程度高以及测试效率高。4.缺陷定位准确:对测试所发现的缺陷能够准确定位。5.易学、易使用:对一般的IT专业专科以上的毕业生,该测试方法一般经过数天的培训即可掌握其使用方法。缺陷模式经过传统软件测试后,残留在软件中的缺陷一般都是小概率、开发人员疏忽造成的。我们对8类软件故障的测试实践表明,经过严格的传统软件测试,残留在软件中的故障密度为1~2个故障/10KLOC,而没有经过严格测试的软件,其故障密度一般在5~10个故障/10KLOC,而这些故障一旦发生,往往会导致系统崩溃。软件缺陷模式就是经过理论分析、实践总结归纳出来的,我们目前将其分为故障、漏洞、疑问和规则模式。这是基于缺陷模式测试的核心技术之一。缺陷模式的概念(1)缺陷模式的定义缺陷模式是缺陷的语法或语义特征的抽象,具有一定代表性或者会造成严重后果。(2)缺陷模式中缺陷产生的原因�疏忽:缺陷模式中的缺陷一般是由开发人员疏忽造成的。由于涉及可能多条路径、多个约束条件,疏忽往往是不可避免的。这类缺陷往往都是和路径或多个约束条件相关的。�不理解:缺陷模式中的缺陷也可能是由于开发人员对程序语言本身不理解造成的。如对某些规则不了解、对某些语言现象不理解都可能会产生缺陷。(3)缺陷模式中缺陷的特点:�一般都是非功能性的缺陷�路径敏感的缺陷一般都是有由疏忽造成的�路径不敏感的缺陷一般疏忽或不理解造成的�在大量工程软件的测试结果统计中,模式中的缺陷是会存在于大多数的软件中,并且有一定发生概率。这个概率要大于人们容忍的范围。(4)软件缺陷模式中的缺陷发生密度�在以往的对N个软件测试活动中,该类缺陷的总个数除以N个软件的总行数×1000,称为该类缺陷的缺陷密度,用缺陷个数/KLOC表示,N越大,其缺陷密度统计的准确性就越高。(5)缺陷模式的分类——按缺陷产生后的严重程度:故障模式、安全漏洞模式、疑问代码模式和规则模式(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基于缺陷模式的软件测试指标分析1.漏报率(ER):设P是程序,M是缺陷模式,A是算法,IP(M,A,P)是IP总的数目,由于测试算法实现过程中的不同假设,会导致IP(M,A,P)不同。漏报率定义为:|),(||),(),,(|PMIPPMIPPAMIPErrorRatio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不能确定是否缺陷的数目:IPU(M,A,P)所以,可得:IPY(M,A,P)+IPN(M,A,P)+IPU(M,A,P)=IP(M,A,P)n1ii)P,A,M(IP2.准确率(CR):3.误报率(DR):4.2基于缺陷模式的软件测试指标分析),,(),,(),,(PAMIPPAMIPPAMIPioCorrectRatUY),,(),,(PAMIPPAMIPioDistortRatN4.缺陷检测率(DDR):5.自动缺陷检测率(ADR):用IPAY(P,A,M)表示不需人工确认,工具可以自动缺陷的检测个数。4.2基于缺陷模式的软件测试指标分析),,(),,(PAMIPPAMIPctingRatioDefectDeteY6.计算复杂性:在理论上,基于缺陷的软件测试技术可以100%的检测所定义的缺陷模式,但由于缺陷的检测可以模型化程序的遍历问题,对于大型程序,全部遍历虽然可以提高精度,但需要花费大量的时间。因此,该技术有一个性价比的问题,在时间遍历过程中,往往都有一定的限制,如在一个函数内、一个类内、一个文件内等。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语言为背景来描述其缺陷模式。将软件的缺陷模式分为四个层次:即故障模式漏洞模式缺陷模式规则模式软件缺陷模式的分类:按缺陷严重程度1.故障模式:此类缺陷是故障,一经产生,会导致系统出错。主要有:存储器泄露模式资源泄漏模式指针使用错误模式数组越界模式非法计算模式使用未初始化变量模式死循环结构模式死锁模式4.3.1缺陷模式概述4.3.1缺陷模式概述2.安全漏洞模式:此类缺陷会给系统留下安全隐患,为攻击该系统开了绿灯。主要有:缓冲区溢出模式被感染的数据模式竞争条件模式风险操作模式4.3.1缺陷模式概述3.缺陷模式:此类缺陷是不应该发生的,它未必会造成系统的错误,但可能会隐含某些故障,或者是由初级软件工程师不理解造成的。主要有:性能缺陷模式:此类缺陷会降低系统的性能疑问代码模式:让人费解的代码4.3.1缺陷模式概述4.规则模式:软件开发总要遵循一定的规则,某个团队也有一些开发规则,违反这些规则也是不允许的。主要有:代码规则复杂性规则控制流规则命名规则可移植性规则资源规则4.缺陷模式4.3.1缺陷模式概述4.3.2故障模式4.3.3安全漏洞模式4.3.4缺陷模式4.3.2故障模式故障模式中给出的故障描述,是程序中可能存在的故障,这些故障一旦被激活,就会使系统发生错误。包括以下几种故障模式(8种):存储泄漏的故障模式数组越界故障的故障模式使用未初始化变量故障模式空指针使用故障非法计算类故障死循环结构模式资源泄漏故障并发故障模式4.3.2故障模式1.存储泄漏的故障模式(MemoryLeakFaultMLF)内存泄漏故障:设在程序的某处申请了大小为M的空间,凡在程序结束时M或者M的一部分没被释放、或者多次释放M或M的一部分都是内存泄漏故障。MLF有三种形式:(1)遗漏故障:是指申请的内存没有被释放。(2)不匹配故障:是指申请函数和释放函数不匹配。(3)不相等的释放错误:是指释放的空间和申请的空间大小不一样。分析教材中的例子:例1----例9(9种情况)4.3.2故障模式2.数组越界故障的故障模式(OBAF)数组越界故障:设某数组定义为Array[minmax],若引用Array[i]且imin或imax都是数组越界故障。在C++中,若i0或imax是数组越界故障。4.3.2故障模式数组越界故障的类型分析(3种故障类型):(1)对程序中任何出现Array[i]的地方,都要判断i的范围,可能有三种情况:若i是在数组定义的范围内,则是正确的;若i是在数组定义的范围外,则是OBAF;若i是不确定的,则Array[i]是否是OBAF则不确定的。(分析教材例4-10和例4-11)(2)字符串拷贝过程中存在的数组越界故障。(分析教材例表4-1)(3)在结构类型中,由于结构体中的成员变量是连续存放的,在数组的拷贝过程中,多余的数据会自动的存放在后面所定义的成员变量中,这种情况数组并不产生越界错误。(分析教材例4-12)4.3.2故障模式3.使用未初始化变量故障模式(UninitializedVariableFault,UVF)定义:使用未初始化变量故障:存在一个路径,在该路径上使用前面没有被赋初值的变量是使用未初始化变量故障。(分析教材例4-13、例4-14、例4-15、例4-16、例4-17)4.3.2故障模式4.空指针使用故障(NULLPointerDereferenceFaultNPDF)定义:空指针使用故障:引用空指针或给空指针赋值的都是空指针使用故障。(分析教材例4-18、表4-2)4.3.2故障模式5.非法计算类故障(IllegalComputingFaultILCF)定义:非法计算类故障:是指计算机不允许的计算。一旦非法计算类故障产生,系统将强行退出。例如:除数为0故障。对数自变量为0或负数故障。根号内为负数的故障。4.3.2故障模式6.死循环结构模式(DeadLoopFaultDLF)定义:在控制流图中,对任何一个循环结构,包括:FOR语句中的死循环结构;WHILE语句中的死循环结构;DO-WHILE语句中的死循环结构;GOTO语句中的死循环结构;函数循环调用造成的死循环结构。要分析控制循环的变量的开始条件、结束条件、步长变化,检查该循环能否结束,若不能则会形成死循环。(分析教材例4-19、例4-20、例4-21)4.3.2故障模式7.资源泄漏故障(RLF)定义:资源泄漏故障:在Java程序中,当一个资源被打开后,如果并不是在所有的可执行路径上都对其进行了显式的释放操作,则是一个资源泄漏故障。资源泄漏一般分为4种情况:简单泄漏:资源被分配给本地变量,在该变量的有效范围内没有释放资源;异常泄漏:资源被分配给本地变量,在该变量的有效范围内也释放了资源,但在释放资源前由于异常抛出,导致资源释放操作没有执行交叉函数泄漏:在一个方法内分配资源,该资源被传递到另外一个方法内,在另一个方法内没有正常释放资源;静态情况:资源被分配给静态变量或其他非本地变量,该变量没有被正常释放。分析教材例4-22、例4-23、例4-24、例4-254.3.2故障模式8.并发故障模式该模式主要是针对程序员对多线程的编码机制、各种同步方法、Java存储器模式和java虚拟机的工作机制不清楚,而且由于线程启动的任意性和不确定性使用户无法确定所编写的代码具体何时执行而导致对公共区域的错误使用。这类模式主要包括:不正确的同步可能导致死锁多线程应用

1 / 77
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功