版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
静态扫描方法第1页,共30页,2023年,2月20日,星期四控制流与数据流扫描规则
举例静态扫描法第2页,共30页,2023年,2月20日,星期四控制流与数据流有向图DD图基本路径树数据流第3页,共30页,2023年,2月20日,星期四有向图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的入度和出度。
e1e2e3e4e5e6e7e8e9n0n1n2n3n4n6n7第4页,共30页,2023年,2月20日,星期四DD图:G=(V,E)有两个区分的边e0和ek(唯一进入的边和唯一离开的边),e0可以到达E的任何一个边,E的任何一个边都可以到达ek,对任何nV,nT(e0),nH(ek),indegree(n)+outdegree(n)>2indegree(T(e0))=0,outdegree(T(e0))=1,indegree(H(ek))=1,outdegree(H(ek))=0。
e0e1e2e3e4e5e6e7e8e9e10n0n1n2n3n4n6n7DD图路径、完整路径、可达、简单路径、基本路径第5页,共30页,2023年,2月20日,星期四floata,b,c,x1,x2,mid;scanf(“%f%,f%,f”,&a,&b,&c);if(a!=0){mid=b*b-4*a*c;if(mid>0){x1=(-b+sqrt(mid))/(2*a);x2=(-b-sqrt(mid))/(2*a);printf(“tworealroots\n”);}elseif(mid==0){x1=-b/2*a;printf(“onerealroot\n”);}else{x1=-b/(2*a);x2=sqrt(-mid)/(2*a))printf(“twocomplexroots\n”);
}
prinf(“x1=%f,x2=%f\n”,x1,x2);}else
prinf(“invalid”);Main(){}e0e1e2e3e4e5e6e7n0n1n2n3
e0e1e2e3e4e5e6第6页,共30页,2023年,2月20日,星期四e0e6e1e7e2e3e4e5e7e5e7e5e7基本路径树第7页,共30页,2023年,2月20日,星期四变量的定义性出现:若一个变量在程序中的某处出现,使数据与该变量相绑定,则称该出现是定义性出现。变量的引用性出现:若一个变量在程序中的某处出现,使与该变量相绑定的数据被引用,则称该出现是引用性出现。引用一般有两种用途,一是用于计算新的数据或为输出结果、或为中间计算结果,另一个用途是用于计算判断控制转移方向的谓词。数据流main(){intx,y;scanf(“%d%d”,&x,&y);while(x>0&&y>0){if(x>y)x=x-y;elsey=y-x}printf(“%d\n”,x+y);}第8页,共30页,2023年,2月20日,星期四代码扫描规则内存使用故障变量使用故障资源使用故障数据类型使用故障
第9页,共30页,2023年,2月20日,星期四内存是否没有被正确地初始化却被使用1)
扫描所有控制路径中局部指针变量的定义使用链,检查指针变量在引用前是否初始化。2)
扫描所有控制路径中指针参数变量的定义使用链,如果出现变量在引用前没有初始化,则查找所有包含函数调用的控制路径,扫描其中指针变量对应的定义使用链,检查变量在引用前是否初始化。3)
扫描所有控制路径中全局指针变量的定义使用链,如果变量在引用前没有初始化,则查找所有包含全局指针变量的控制路径,扫描全局指针变量的定义使用链,检查变量在引用前是否初始化。内存使用故障第10页,共30页,2023年,2月20日,星期四是否内存被释放后却继续被使用
1)
扫描所有控制路径中局部指针变量的定义使用链,检查指针变量在引用前是否已经释放。2)
扫描所有控制路径中指针参数变量的定义使用链,如果没有出现变量在引用前已经释放,则查找所有包含函数调用的控制路径,扫描其中指针变量对应的定义使用链,检查变量在引用前是否已经释放。3)
扫描所有控制路径中全局指针变量的定义使用链,如果没有出现变量在引用前已经释放,则查找所有包含全局指针变量的控制路径,扫描全局指针变量的定义使用链,检查该变量在引用前是否已经释放。内存使用故障第11页,共30页,2023年,2月20日,星期四是否存在内存泄漏
1)
扫描所有控制路径中指针变量的定义使用链,如果变量指向的内存在成功分配后没有释放,但是在指针的定义使用链中包含对指针的函数引用,则继续检查调用该变量的函数中的所有控制路径是否释放内存。2)
扫描所有控制路径中指针变量的定义使用链,如果变量指向的内存在成功分配后没有释放,但是在指针的定义使用链中包含对指针的返回引用,则继续检查包含返回变量的所有控制路径是否释放内存。3)扫描所有控制路径中指针变量的定义使用链,如果变量指向的内存在成功分配后没有释放,但是在指针的定义使用链中包含对指针的赋值引用,则继续检查包含被赋值变量的所有控制路径是否释放内存。
内存使用故障第12页,共30页,2023年,2月20日,星期四内存是否越界
1)
扫描局部指针变量的定义使用链,检查所有引用的内存空间是否超过给指针分配的内存空间。2)
扫描参数指针变量的定义使用链,检查所有引用的内存空间是否超过给指针分配的内存空间。3)扫描全局指针变量的定义使用链,检查所有引用的内存空间是否超过给指针分配的内存空间。
内存使用故障第13页,共30页,2023年,2月20日,星期四变量是否初始化
1)
扫描所有控制路径中局部变量的定义使用链,检查变量在引用前是否定义。2)
扫描所有控制路径中参数变量的定义使用链,如果变量在引用前没有定义,则查找所有包含函数调用的控制路径,扫描其中参数变量对应的定义使用链,检查变量在引用前是否定义。3)扫描所有控制路径中全局变量的定义使用链,如果变量在引用前没有定义,则查找所有包含全局变量的控制路径,扫描其中全局变量的定义使用链,检查全局变量在引用前是否定义。
变量使用故障第14页,共30页,2023年,2月20日,星期四变量的值是否可能导致异常1)
扫描所有控制路径中局部变量的定义使用链,检查变量的值是否会导致系统出现异常。2)
扫描参数变量对应的定义使用链,检查变量的值是否会导致系统出现异常。3)扫描所有控制路径中全局变量的定义使用链,检查全局变量的值是否会导致系统出现异常。变量使用故障第15页,共30页,2023年,2月20日,星期四变量是否发生上溢或下溢
1)
扫描局部数组变量的定义使用链,检查所有的引用位置是否出现上溢或下溢。2)
如果函数的参数变量是数组,扫描参数变量的定义使用链,检查所有的引用位置是否出现上溢或下溢。3)如果全局变量是数组,扫描全局变量在当前函数中的定义使用链,检查所有的引用位置是否出现上溢或下溢。
变量使用故障第16页,共30页,2023年,2月20日,星期四是否对不存在的或者错误的资源进行操作
1)
扫描所有控制路径中资源变量的定义使用链,检查在引用前是否判断变量的有效性。2)
如果全局变量使用了外部资源,则扫描所有包含全局变量的控制路径,检查在引用前是否判断变量的有效性。3)
如果参数变量使用了外部资源,并且在一条控制路径中在引用前没有判断其有效性,则扫描所有包含参数变量的控制路径,检查在引用前是否判断变量的有效性。资源使用故障第17页,共30页,2023年,2月20日,星期四是否正确地释放资源
1)
扫描所有控制路径中资源变量的定义使用链,如果变量指向的资源在使用后没有释放,但是在变量的定义使用链中包含对变量的函数引用,则继续检查调用该变量的函数中的所有控制路径是否释放资源。2)
扫描所有控制路径中资源变量的定义使用链,如果变量指向的资源在使用后没有释放,但是在变量的定义使用链中包含对变量的返回引用,则继续检查包含返回变量的所有控制路径是否释放资源。3)扫描所有控制路径中资源变量的定义使用链,如果变量指向的资源在使用后没有释放,但是在变量的定义使用链中包含对变量的赋值引用,则继续检查包含被赋值变量的所有控制路径是否释放资源。
资源使用故障第18页,共30页,2023年,2月20日,星期四变量的数据类型是否有错误
1)
扫描局部变量的定义使用链,当定义局部变量时,检查数据类型是否与局部变量声明的一致。2)
扫描局部变量的定义使用链,当对局部变量引用(赋值操作)时,检查被赋值变量类型是否与局部变量一致。3)扫描局部变量的定义使用链,当对局部变量引用(比较操作)时,检查被比较变量类型是否与局部变量一致。
数据类型故障第19页,共30页,2023年,2月20日,星期四是否存在不同数据类型的赋值
1)
扫描参数变量的定义使用链,当定义参数变量时,检查数据类型是否与参数变量声明的一致。2)
扫描参数变量的定义使用链,当对参数变量引用(赋值操作)时,检查被赋值变量类型是否与参数变量一致。3)扫描参数变量的定义使用链,当对参数变量引用(比较操作)时,检查被比较变量类型是否与参数变量一致。
数据类型故障第20页,共30页,2023年,2月20日,星期四是否存在不同数据类型的比较
1)
扫描全局变量在当前函数中的定义使用链,当定义全局变量时,检查数据类型是否与全局变量声明的一致。2)
扫描全局变量在当前函数中的定义使用链,当对全局变量引用(赋值操作)时,检查被赋值变量类型是否与全局变量一致。3)扫描全局变量在当前函数中的定义使用链,当对全局变量引用(比较操作)时,检查被比较变量类型是否与全局变量一致。
数据类型故障第21页,共30页,2023年,2月20日,星期四intmain(){ floata=1.0; floatb=2.0;
… if((a*2–b)==0.0) { return1; } return0;}第22页,共30页,2023年,2月20日,星期四voidmain(){ inta=0,b=0;
… switch(a) { case0: b=-1; case1: b=b/a;break; }
…}
第23页,共30页,2023年,2月20日,星期四intmain(){ intsum,i; for(i=1;i<30000;i++) { sum=sum+i; } return0;}第24页,共30页,2023年,2月20日,星期四voidfunc(){ floata=72.0; floatb=55.0; longresult=0; result=(long)(a*b);return1;}第25页,共30页,2023年,2月20日,星期四intfunc(){ charc1=0; c1=145; if(c1>300) { return3;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高空抛物入刑后“连坐条款”的报应刑与威慑刑张力
- 2026湖南长沙市华益中学春季教师招聘备考考试题库及答案解析
- 2025江西吉安市泰和县新睿人力资源服务有限公司招聘项目制员工16人参考考试题库及答案解析
- 2025福建漳州市交通发展集团有限公司招聘中一线岗位复面及相关事项参考考试题库及答案解析
- 2025年东营市东凯建设工程有限公司面向社会公开招聘工作人员(第二批)参考笔试题库附答案解析
- 2025河北唐山遵化市事业单位选聘高层次人才8人模拟笔试试题及答案解析
- 2026河北省定向长安大学选调生招录模拟笔试试题及答案解析
- 《加减混合》数学课件教案
- 2025广西梧州市龙投人力资源有限公司招聘备考笔试试题及答案解析
- 2025广东河源市连平县退役军人事务局招聘编外人员3人备考笔试题库及答案解析
- 山东省高二物理会考20252025年真题
- 高级英语2 (第四版)张汉熙 练习答案
- 非遗文化创意园项目可行性研究报告申请报告编制
- Unit1CulturalHeritageReadingforWriting课件-高一英语人教版
- 幼儿园健康教育活动设计与实施知到课后答案智慧树章节测试答案2025年春汉中职业技术学院
- 敦煌集团面试题目及答案
- 化工厂冬季四防培训课件
- 带状疱疹的护理医学课件
- T-GDCLPA-003-2024 农光互补项目认定标准
- 2025年广西贵港市农村电力服务有限责任公司招聘笔试参考题库附带答案详解
- Unit4 Fun with numbers 同步练习(含答案)
评论
0/150
提交评论