我们一起成长。。一起思考。。一起进步,希望能够和大家一起讨论

黑盒测试之内存泄露与内存检测

上一篇 / 下一篇  2007-09-11 11:27:29 / 个人分类:内存检测

                      黑盒测试之内存泄露与内存检测

                                                        -----aotup

内存错误和内存泄露给程序带来了很大的不稳定,是黑盒测试的一项重要关注点

 

一、    内存错误

 

内存错误:当一个指针或者该指针所指向的内存单元成为无效单元,或者内存中分配的数据结构被破坏时,就会造成内存错误。常见的内存错误:

1)指针或内存未被初始化

2)内存分配未成功,却使用了它

3)内存分配成功并且初始化,但操作越过了内存的边界;例如数组的边界

4)释放了内存却被继续使用:某个对象被释放却被继续使用;函数的return语句指向栈内存的指针或者引用;使用freedelete释放内存没有将指针设置为NULL

5)删除未被初始化的指针、删除非堆指针、多次删除同一指针或者覆盖一个指针的内部数据结构

Windows出现内存不能读写的提示信息:则可能是应用程序没有检查内存分配失败;或者是程序试图读写的内存被无疑中释放了或者由于某些操作变成为无效了

 

二、内存泄漏

 

  内存泄漏在被动态分配的内存没有被释放时产生。有许多情况会导致内存泄漏,如没有在程序的全部执行路径中释放内存,没有在析构函数中释放所有的内存等。忘记释放内存;构造函数失败;存在内存泄漏的析构函数;存在内存泄漏的异常处理程序;如文件、窗口、设备上下文、GDI对象使用完未释放;多个返回语句;使用错误形式的delete。一个程序在崩溃之前可运行的时间越长,则导致崩溃的原因与内存泄漏的关系越大。

 

  

三、    内存的初始化

 

在调试版本里,堆里未被初始化的内存被0xCD字节模式填充,堆里释放的内存被0xDD字节模式填充。堆栈里被初始化的内存被0xCC字节模式填充。调试版本和发布版本里,未被初始化的全局内存都被初始化为0

 

四、    内存泄漏的发生方式

 

以发生的方式来分类,内存泄漏可以分为4类:

 

1.常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。

 

2.偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。

 

3.一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,但是因为这个类是一个Singleton,所以内存泄漏只会发生一次

 

五、    内存泄露的监测

 

作为黑盒测试,则WINDOWS NT自带的Performance Monitor不失一个有效的内存泄露工具,Performance Monitor加入了系统监视功能:比如CPU的使用率,内存的使用情况,I/O操作的频繁度等都作为一个个Counter,应用程序可以通过读取这些Counter了解整个系统的或者某个进程的运行状况。

  

我们一般可以监视Process对象的Handle CountVirutal BytesWorking Set三个Counter

Handle Count记录了进程当前打开的HANDLE的个数,监视这个Counter有助于我们发现程序是否有Handle泄漏;

Virtual Bytes记录了该进程当前在虚地址空间上使用的虚拟内存的大小,NT的内存分配采用了两步走的方法,首先,在虚地址空间上保留一段空间,这时操作系统并没有分配物理内存,只是保留了一段地址。然后,再提交这段空间,这时操作系统才会分配物理内存。所以,Virtual Bytes一般总大于程序的Working Set

如果程序存在内存的泄漏这个值会持续增加,但是Virtual Bytes却是跳跃式增加的。

 

WINDOWS NT自带的Performance Monitor的打开方式为Windows任务管理器-〉查看菜单->选择列表,就可以添加需要监控的计数器

 

六、.winrunner自动化测试工具在内存检测中的使用

 

    我们需要对软件的使用进行分析,找出容易出现内存泄露或可能出现内存泄露的地方,使用winrunner工具重复执行同一个操作,通过观察windowsPerformance Monitor则能看出是哪个操作引起了内存泄露。

 

 

 

 


TAG: 内存检测

⿺佐oοО℡的个人空间 引用 删除 ⿺佐oοО℡   /   2007-09-11 12:12:47
代公司发布一招聘职位
职责和要求:  
薪金范围:2000-6000+项目提成
职位描述:
1、组织及控制软件项目测试的过程,负责软件产品的质量把关;
2、承担特性测试方案和测试用例的设计,完成测试用例、脚本以及测试代码实现、测试环境搭建、和测试执 行等工作;
3、负责记录、统计、汇总、分析和报告软件产品存在的质量问题,对软件进行功能和性能测试,提交BUG,配合开发人员进行单元测试,配合第三方对软件进行测试;
4、具备C#等语言的编程知识和实际编写能力,熟悉MSSQL数据库及.net语言;
5、负责制定测试计划,编写测试用例,执行测试,编写测试报告,会同相关人员分析测试结果;
6、组织进行软件产品的单元(白盒)测试、集成测试等。

任职要求:
1、熟悉C#、C++等程序设计语言及面向对象编程方法,熟练掌握常用测试工具并精通测试技能;
2、能独立使用VS2005(或VS2003)开发环境,具备Windows开发环境源码级测试经验;
两年以上工作经验,无工作经验或不适合本岗位者请勿投递简历。
  
备注:  
本公司主要从事游戏开发及运营。工作地点:广东佛山
TEL:0757-82360108
QQ:164995603
联系人:耿小姐
Email:qmodern@163.com
招聘连接:www.conwei.com
请在简历中注明您的期望薪资和其他待遇要求。并附上相关作品或个人网站。
 

评分:0

我来说两句

日历

« 2024-04-22  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 27063
  • 日志数: 31
  • 文件数: 5
  • 建立时间: 2007-09-10
  • 更新时间: 2008-05-09

RSS订阅

Open Toolbar