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

发布新日志

  • 给alansure关于基于.NET内存检测的答复呵呵

    2007-09-17 11:24:43

    2007/09/17  有雨

    星期一,新一周的开始;呵呵,呼吸一下新鲜空气

    alansure:您好!

    目前偶主要是基于C/S架构的软件进行测试;偶尔会参与基于WEB形式的网页进行测试;但是基于WEB形式的性能测试比较少,这个偶会继续学习。。

    如果是WEB那种形式的话,可以借助loadrunner工具来进行网页性能监控,主要是模拟用户进行网页的并发性登陆和其他操作;loadrunner本身就有内存,CPU等监控工具;也可以借助windows 自带的那个monitor 进行内存的监控;当然网上也有一些免费的内存监控工具;这个是当前流行的基于网页的性能测试方法
    你也可以通过winrunner重复很多次做同一个操作;观察内存的变化。。
  • 黑盒测试之内存泄露与内存检测

    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 Bytes Working Set三个Counter

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

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

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

     

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

     

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

     

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

     

     

     

     

Open Toolbar