静态扫描方法.ppt_第1页
静态扫描方法.ppt_第2页
静态扫描方法.ppt_第3页
静态扫描方法.ppt_第4页
静态扫描方法.ppt_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、白盒测试方法 静态扫描法,金大海 2006年5月,控制流与数据流 扫描规则 举例,静态扫描法,控制流与数据流,有向图 DD图 基本路径树 数据流,有向图,G=(V,E),V是顶点的集合,E是有向边(简称边)的集合。e=(T(e),H(e)E是一对有序的邻接节点,T(e)是尾,H(e)是头。如果H(e)=T(e),则e和e是临界边。H(e)是T(e)的后继节点,T(e)是H(e)的前驱节点,indergee(n)和outdegree(n)分别是结点n的入度和出度。,DD图:G=(V,E)有两个区分的边e0和ek(唯一进入的边和唯一离开的边),e0可以到达E的任何一个边,E的任何一个边都可以到达e

2、k,对任何nV,nT(e0),nH(ek), indegree(n)+outdegree(n)2 indegree(T(e0)=0,outdegree(T(e0)=1,indegree(H(ek)=1,outdegree(H(ek)=0。,DD图,路径、完整路径、可达、简单路径、基本路径,e0,e1,e2,e3,e4,e5,e6,e0,e6,e1,e7,e2,e3,e4,e5,e7,e5,e7,e5,e7,基本路径树,变量的定义性出现:若一个变量在程序中的某处出现,使数据与该变量相绑定,则称该出现是定义性出现。 变量的引用性出现:若一个变量在程序中的某处出现,使与该变量相绑定的数据被引用,则称

3、该出现是引用性出现。引用一般有两种用途,一是用于计算新的数据或为输出结果、或为中间计算结果,另一个用途是用于计算判断控制转移方向的谓词。,数据流,main() int x,y; scanf(“%d %d”, ,代码扫描规则,内存使用故障 变量使用故障 资源使用故障 数据类型使用故障,内存是否没有被正确地初始化却被使用 1) 扫描所有控制路径中局部指针变量的定义使用链,检查指针变量在引用前是否初始化。 2) 扫描所有控制路径中指针参数变量的定义使用链,如果出现变量在引用前没有初始化,则查找所有包含函数调用的控制路径,扫描其中指针变量对应的定义使用链,检查变量在引用前是否初始化。 3) 扫描所有控

4、制路径中全局指针变量的定义使用链,如果变量在引用前没有初始化,则查找所有包含全局指针变量的控制路径,扫描全局指针变量的定义使用链,检查变量在引用前是否初始化。,内存使用故障,是否内存被释放后却继续被使用 1) 扫描所有控制路径中局部指针变量的定义使用链,检查指针变量在引用前是否已经释放。 2) 扫描所有控制路径中指针参数变量的定义使用链,如果没有出现变量在引用前已经释放,则查找所有包含函数调用的控制路径,扫描其中指针变量对应的定义使用链,检查变量在引用前是否已经释放。 3) 扫描所有控制路径中全局指针变量的定义使用链,如果没有出现变量在引用前已经释放,则查找所有包含全局指针变量的控制路径,扫描

5、全局指针变量的定义使用链,检查该变量在引用前是否已经释放。,内存使用故障,是否存在内存泄漏 1) 扫描所有控制路径中指针变量的定义使用链,如果变量指向的内存在成功分配后没有释放,但是在指针的定义使用链中包含对指针的函数引用,则继续检查调用该变量的函数中的所有控制路径是否释放内存。 2) 扫描所有控制路径中指针变量的定义使用链,如果变量指向的内存在成功分配后没有释放,但是在指针的定义使用链中包含对指针的返回引用,则继续检查包含返回变量的所有控制路径是否释放内存。 3) 扫描所有控制路径中指针变量的定义使用链,如果变量指向的内存在成功分配后没有释放,但是在指针的定义使用链中包含对指针的赋值引用,则

6、继续检查包含被赋值变量的所有控制路径是否释放内存。,内存使用故障,内存是否越界 1) 扫描局部指针变量的定义使用链,检查所有引用的内存空间是否超过给指针分配的内存空间。 2) 扫描参数指针变量的定义使用链,检查所有引用的内存空间是否超过给指针分配的内存空间。 3) 扫描全局指针变量的定义使用链,检查所有引用的内存空间是否超过给指针分配的内存空间。,内存使用故障,变量是否初始化 1) 扫描所有控制路径中局部变量的定义使用链,检查变量在引用前是否定义。 2) 扫描所有控制路径中参数变量的定义使用链,如果变量在引用前没有定义,则查找所有包含函数调用的控制路径,扫描其中参数变量对应的定义使用链,检查变

7、量在引用前是否定义。 3) 扫描所有控制路径中全局变量的定义使用链,如果变量在引用前没有定义,则查找所有包含全局变量的控制路径,扫描其中全局变量的定义使用链,检查全局变量在引用前是否定义。,变量使用故障,变量的值是否可能导致异常 1) 扫描所有控制路径中局部变量的定义使用链,检查变量的值是否会导致系统出现异常。 2) 扫描参数变量对应的定义使用链,检查变量的值是否会导致系统出现异常。 3) 扫描所有控制路径中全局变量的定义使用链,检查全局变量的值是否会导致系统出现异常。,变量使用故障,变量是否发生上溢或下溢 1) 扫描局部数组变量的定义使用链,检查所有的引用位置是否出现上溢或下溢。 2) 如果

8、函数的参数变量是数组,扫描参数变量的定义使用链,检查所有的引用位置是否出现上溢或下溢。 3) 如果全局变量是数组,扫描全局变量在当前函数中的定义使用链,检查所有的引用位置是否出现上溢或下溢。,变量使用故障,是否对不存在的或者错误的资源进行操作 1) 扫描所有控制路径中资源变量的定义使用链,检查在引用前是否判断变量的有效性。 2) 如果全局变量使用了外部资源,则扫描所有包含全局变量的控制路径,检查在引用前是否判断变量的有效性。 3) 如果参数变量使用了外部资源,并且在一条控制路径中在引用前没有判断其有效性,则扫描所有包含参数变量的控制路径,检查在引用前是否判断变量的有效性。,资源使用故障,是否正

9、确地释放资源 1) 扫描所有控制路径中资源变量的定义使用链,如果变量指向的资源在使用后没有释放,但是在变量的定义使用链中包含对变量的函数引用,则继续检查调用该变量的函数中的所有控制路径是否释放资源。 2) 扫描所有控制路径中资源变量的定义使用链,如果变量指向的资源在使用后没有释放,但是在变量的定义使用链中包含对变量的返回引用,则继续检查包含返回变量的所有控制路径是否释放资源。 3) 扫描所有控制路径中资源变量的定义使用链,如果变量指向的资源在使用后没有释放,但是在变量的定义使用链中包含对变量的赋值引用,则继续检查包含被赋值变量的所有控制路径是否释放资源。,资源使用故障,变量的数据类型是否有错误

10、 1) 扫描局部变量的定义使用链,当定义局部变量时,检查数据类型是否与局部变量声明的一致。 2) 扫描局部变量的定义使用链,当对局部变量引用(赋值操作)时,检查被赋值变量类型是否与局部变量一致。 3) 扫描局部变量的定义使用链,当对局部变量引用(比较操作)时,检查被比较变量类型是否与局部变量一致。,数据类型故障,是否存在不同数据类型的赋值 1) 扫描参数变量的定义使用链,当定义参数变量时,检查数据类型是否与参数变量声明的一致。 2) 扫描参数变量的定义使用链,当对参数变量引用(赋值操作)时,检查被赋值变量类型是否与参数变量一致。 3) 扫描参数变量的定义使用链,当对参数变量引用(比较操作)时,

11、检查被比较变量类型是否与参数变量一致。,数据类型故障,是否存在不同数据类型的比较 1) 扫描全局变量在当前函数中的定义使用链,当定义全局变量时,检查数据类型是否与全局变量声明的一致。 2) 扫描全局变量在当前函数中的定义使用链,当对全局变量引用(赋值操作)时,检查被赋值变量类型是否与全局变量一致。 3) 扫描全局变量在当前函数中的定义使用链,当对全局变量引用(比较操作)时,检查被比较变量类型是否与全局变量一致。,数据类型故障,int main() float a = 1.0; float b = 2.0; if (a * 2 b) = 0.0) return 1; return 0; ,voi

12、d main() int a = 0, b = 0; switch (a) case 0: b = -1; case 1: b = b / a; break; ,int main() int sum, i; for (i =1; i 30000; i+) sum = sum + i; return 0; ,void func() float a = 72.0; float b = 55.0; long result = 0; result = (long)(a*b); return 1; ,int func() char c1 = 0; c1 = 145; if (c1 300) return 3; if (c1 25) return 2; return 1; ,void func() int i = 0; for (i = 0; i 10; i+) if (i = 5) break; return; ,int foo103() int *pi = 0;

温馨提示

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

评论

0/150

提交评论