下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、软件测试技术,主讲人:刘 伟,缺陷模式,缺陷模式是和语言本身相关的,不同的语言有着不同的缺陷模式。 故障模式 漏洞模式 缺陷模式 规则模式,故障模式,此类缺陷是故障,一经产生,会导致系统出错。 内存泄露模式 资源泄漏模式 指针使用错误模式 数组越界模式 非法计算模式 使用未初始化变量模式 死循环结构模式 死锁模式,故障模式,故障模式中给出的故障描述,是程序中可能存在的故障,这些故障一旦被激活,就会使系统发生错误。包括以下几种故障模式:,故障模式,1、内存泄漏的故障模式(Memory Leak Fault, MLF) 定义:设在程序的某处申请了大小为MB的空间,凡在程序结束时MB或者MB的一部分
2、没被释放、多次释放MB或MB的一部分都是内存泄漏故障。 MLF有三种形式: 遗漏故障:是指申请的内存没有被释放。 不匹配故障:是指申请函数和释放函数不匹配。 不相等的释放错误:是指释放的空间和申请的空间大小不一样。,例题,例4-1:申请的内存没有被释放 listrec *add_list_entry(listrec *entry,int value) listrec *new_entry=(listrec *)malloc(sizeof(listrec); if(!new_entry) return NULL; if(!entry) return NULL; 例4-2/3:申请函数和释放函数不
3、匹配 str=malloc(10) ; ; delete(str) ; str=new(10);. ; free(str);. malloc与free匹配;new与delete匹配,例4-6:申请内存的pointer发生了变化 char *p=malloc(10); +p; free(p); 例:“=”指针赋值,不能重复删除。 char *str=new char100; char *p; str=abc; p=str; delete str; delete p;,文件检索系统中关于内存错误,D0005(D0012、D0013、D0018同): 报错行:delete l_Link-m_node
4、.m_dirname; 原因:l_Link-m_node.m_dirname = (char*) new char(strlen(l_Buf1)+1); D0017: while(l_DirSearch) l_Link1 = l_DirSearch; l_DirSearch = l_Link1-m_next; if(l_DirSearch = NULL) l_DirSearch = l_DirSet; /l_DirSet = NULL; delete l_Link1; ,故障模式,2、数组越界故障的故障模式(Out of Bounds Array Access Fault OBAF) 定义:设
5、某数组定义为Arrayminmax,若引用Arrayi且imax都是数组越界故障。,故障模式,(1)对程序中任何出现Arrayi的地方,都要判断i的范围,可能有三种情况: 若i是在数组定义的范围内,则是正确的; 若i是在数组定义的范围外,则是OBAF; 若i是不确定的,则Arrayi是否是OBAF则不确定 例4-10:数组越界 int data10; for(i=0; i=10; i+)datai=.;,(2)字符串拷贝过程中存在的数组越界故障 。 例(文件检索系统,集成测试): #define MAXPATTERN 3 #define MAXFILELEN 12 char l_PatMAXP
6、ATTERN+1MAXFILELEN+1; memset(l_Pat, 0, 20*(MAXFILELEN+1); (3)在结构类型中,由于结构体中的成员变量是连续存放的,在数组的拷贝过程中,多余的数据会自动的存放在后面所定义的成员变量中,这种情况数组并不产生越界错误。,故障模式,3使用未初始化变量故障模式(Uninitialized Variable Fault,UVF) 定义:使用未初始化变量故障:存在一个路径,在该路径上使用前面没有被赋初值的变量是使用未初始化变量故障。 例4-13 使用未初始化变量 char c; while(c!=EOF ,文件检索系统中使用未初始化变量错误 D000
7、1(D0002同): DirSettingLink *l_Link ; while(l_Link) g_DirRoot = l_Link-next; l_Link-next = NULL; delete l_Link-m_node.m_dirname; delete l_Link; l_Link = g_DirRoot; ,故障模式,4空指针使用故障(NULL Pointer Dereference Fault NPDF) 定义:引用空指针或给空指针赋值的都是空指针使用故障。 例4-18:引用空指针 listrec *new_entry=(listrec *)malloc(sizeof(lis
8、trec); if(!entry) return NULL; new_entry-value=value; new_entry-next=entry-next;,提示:在申请空间后、fopen打开文件之后,都需要判断是否申请、打开成功。,文件检索系统中空指针错误,D0009: str=NULL; if(strlen(str) 3) | (str = NULL) return FALSE; D0006(D0024同): path=NULL; ; l_Out = fopen(path,wt);,故障模式,5非法计算类故障(Illegal Computing Fault ILCF) 定义:非法计算类
9、故障:是指计算机不允许的计算。 一旦非法计算类故障产生,系统将强行退出。例如: 除数为0故障。 对数自变量为0或负数故障。 根号内为负数的故障。,故障模式,6死循环结构模式(Dead Loop Fault DLF) 定义:在控制流图中,对任何一个循环结构,包括: FOR语句中的死循环结构; WHILE语句中的死循环结构; DO-WHILE语句中的死循环结构; GOTO语句中的死循环结构; 函数循环调用造成的死循环结构。,死循环,例4-19:无增量 for(i=1; i=100; j+ ) 例4-20:无结束条件 for(i=1;i+) 例4-21:增量变化不能使程序结束 for(i=1;i=1
10、00;i=i+2),故障模式,7资源泄漏故障(RLF) 定义:资源泄漏故障:在Java程序中,当一个资源被打开后,如果并不是在所有的可执行路径上都对其进行了显式的释放操作,则是一个资源泄漏故障。 简单泄露 异常泄露 交叉函数的情况 “静态”情况,故障模式,8. 并发故障模式 该模式主要是针对程序员对多线程的编码机制、各种同步方法、Java存储器模式和java虚拟机的工作机制不清楚,而且由于线程启动的任意性和不确定性使用户无法确定所编写的代码具体何时执行而导致对公共区域的错误使用。 这类模式主要包括不正确的同步、死锁、多线程应用中方法调用时机或方式不正确、同一变量的双重验证、相互初始化的类和临界
11、区内调用阻塞函数等。,安全漏洞模式,此类缺陷会给系统留下安全隐患,为攻击该系统开了绿灯。 缓冲区溢出模式 被感染的数据模式 竞争条件模式 风险操作模式,安全漏洞模式,安全漏洞模式为他人攻击软件提供可能。而一旦软件被攻击成功,系统就可能发生瘫痪,所造成的危害较大,因此,此类漏洞应当尽量避免。,安全漏洞模式,缓冲区溢出(buffer overflow)漏洞模式 定义:当程序要在一个缓冲区内存储比该缓冲区的大小还要多的数据时,即会产生缓冲区溢出漏洞。 缓存区溢出主要有2种类型: 数据复制造成的缓冲区溢出 格式化字符串造成的缓冲区溢出,例4-47:数据复制造成的缓冲区溢出 main(int argc,
12、 char *argv) char argvBuffer16; if(argc=2) strcpy(argvBuffer,argv1); . argv来自命令行,长度如果超过15则溢出 例4-48:格式化字符串造成的缓冲区溢出 int main() char fixed_bur10; sprintf(fixed_buf,”very long format string .n”); . sprintf引号内字符长度超过10,则造成缓冲区溢出。,安全漏洞模式,被污染的数据模式(Tainted Data) 定义:程序从外部获取数据时,这些数据可能含有具有欺骗性或者是不想要的垃圾数据,如果在使用这些数
13、据前不进行合法性检查则将威胁到程序的安全,造成一个tainted data缺陷。tainted data可能会导致程序不按原计划执行,也有可能直接或间接地导致缓冲区溢出缺陷。 被污染的数据模式主要有两种类型: 使用的数据来自外部的全局变量 使用的数据来自输入函数,例4-49:使用的数据来自外部的全局变量 main(int argc, char *argv) char argvBuffer16; if(argc=2) strcpy(argvBuffer,argv1); . 例4-50:使用的数据来自输入函数 FILE *f=NULL; char *config = getenv(“CONFIG_
14、FILE”); if(config!=NULL) f=fopen(config,”r”);,安全漏洞模式,竞争条件(Race Condition) 定义: 如果程序中有两种不同的I/O调用同一文件进行操作,而且这两种调用是通过绝对路径或相对路径引用文件的,那么就易出现Race Condition问题。在两种操作进行的间隙,黑客可能改变文件系统,那么将会导致对两个不同的文件操作而不是同一文件进行操作。 这种典型的问题发生在用户拥有不同的权限运行的程序中(例如:setuid程序、数据库和服务器程序等)。,安全漏洞模式,风险操作(Risky Operation) 定义:如果不恰当地使用了某些标准库函
15、数,可能会带来安全隐患。甚至在某些情况下,某些函数一经被使用, 就可能会带来安全隐患。,随机数,例如像rand()和random()这样的随机数生成函数,它们在生成伪随机值的时候表现出来的性能是非常差的, 如果用它们来生成默认的口令, 这些口令将很容易被攻击者猜测到。 可以选变量作为种子,如时间: srand(unsigned) time(NULL) ; rand() ; 更精确,可以使clock、硬件,缺陷模式,此类缺陷是不应该发生的,它未必会造成系统的错误,但可能会隐含某些故障,或者是由初级软件工程师不理解造成的。 性能缺陷模式:此类缺陷会降低系统的性能 疑问代码模式:让人费解的代码,缺陷
16、模式,低性能模式: 该模式导致软件运行效率低下,因此建议采用更高效的代码来完成同样的功能。这类模式主要包括使用低效函数/代码、使用多余函数、Java中显式垃圾回收、冗余代码、头文件中定义的静态变量、不必要的文件包含、字符串低效操作和有更简单的运算可以替代等。,例: i=2 与 2=i 比较下两段代码各有什么优缺点:,if (condition) for (i=0; iN; i+) DoSomething(); else for (i=0; iN; i+) DoOtherthing(); ,for (i=0; iN; i+) if (condition) DoSomething(); else
17、DoOtherthing(); ,规则模式,软件开发总要遵循一定的规则,某个团队也有一些开发规则,违反这些规则也是不允许的。 代码规则 复杂性规则 控制流规则 命名规则 可移植性规则 资源规则,文件检索系统中其他错误,D0003:函数用错 /return stricmp(l_Buf1, l_Buf2); return strcmp(l_Buf1, l_Buf2); D0008:冗余代码 else fclose(l_In); return FALSE; ,文件检索系统中其他错误,D0010:超出数组范围 /if( l_Order = MAXPATHLEN) if( l_Order MAXPATHLEN) D0011: 出错行:if(_chdrive( g_T
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑智能化水泵控制系统方案
- 监理工作程序与管理方案
- 公司激励机制完善方案
- 公司固定资产管理数字化方案
- 工程设备维护保养方案
- 风电场防腐蚀与保护措施方案
- 风电场环境影响评估与应对方案
- 防护门安装施工技术方案
- 地下车库建设方案
- 城区供热老旧管网改造项目社会稳定风险评估报告
- 学生介绍班级
- 滴滴考试题目及答案
- 2026年河南应用技术职业学院单招职业适应性测试题库带答案详解
- 山西省部分学校2025-2026学年八年级上学期阶段二质量检测语文试题(含答案)
- 中小学校长安全培训课件
- OTC药品营销活动
- 运动员数据管理与健康档案模板
- AI工具深度测评与选型指南(5大类别,39个工具,92个实例测评)
- 新能源开发流程
- 智联招聘笔试题库
- 2025年公路检测工程师《水运结构与地基》试题及答案
评论
0/150
提交评论