51Testing软件测试论坛

标题: 内存泄漏如何测试? [打印本页]

作者: Chenny    时间: 2006-6-23 16:09
标题: 内存泄漏如何测试?
面临一个问题,一直没有搞清楚:

如何测试内存泄漏?
1.怎么知道程序中是否存在内存泄漏?
2.如何定位内存泄漏?内存泄漏出现在哪儿?是那个函数或哪几个函数引起的呢?
3.如何预防内存泄漏?

欢迎大家参与讨论,共同学习!
谢谢
作者: Chenny    时间: 2006-6-23 17:25
各位没有遇到这个问题么?
自己先顶一下!
作者: windowstest    时间: 2006-6-23 17:54
如果是用VC++写的程序,在DEBUG模式下关闭程序就可以看到有没有内存泄漏;如果是用别的工具写的也是有专门的内存测试泄漏工具的
作者: rosefrozen    时间: 2006-6-23 22:01
内存泄露我也不是很了解,上课时听老师讲过,我来试着回答一下:
内存泄漏是指程序在运行过程中申请的内存,在程序结束时没有被释放。如申请的指针没有释放,或其他需要占用系统内存的变量。内存泄漏可通过代码走读来发现和定位,也可以用专用的工具来测试和定位,工具有rational公司的purify等。预防内存泄漏的唯一方法就是要求程序员在程序结束时,必须将每个申请的内存都释放。
作者: millionaire    时间: 2006-6-24 00:46
在.net平台下,代码托管,这方面的问题少的多了.
针对C++,BoundsChecker采用一种被称为 Code Injection的技术,来截获对分配内存和释放内存的函数的调用。简单地说,当你的程序开始运行时,BoundsChecker的DLL被自动载入进程的地址空间(这可以通过system-level的Hook实现),然后它会修改进程中对内存分配和释放的函数调用,让这些调用首先转入它的代码,然后再执行原来的代码。
作者: hubanmao    时间: 2006-6-24 08:37
只说大概了解的吧
Win32编程中常见内存错误:内存分配错误,使用未初始化的内存,内存泄露,使用已经释放的资源
lz所说内存泄露需要坚持一条原则:确保没有返回的但已经分配的缓冲区不再使用时被释放.特别是当有一些分支有公共的释放代码时,需要确保所有适当的内存都被释放了
广义的说,内存泄露不仅包含堆内存泄露,还包含系统资源的泄露,比如核心态HANDLE,GDI Object,SOCKET,INterface等
比如说你建立了逻辑画笔,逻辑画刷,这个大刷子用完了必须从hdc删除,要不会留下无效句柄
检查,反正我用BoundsChecker
作者: Chenny    时间: 2006-6-25 15:14
谢谢各位的回复与讨论!

1.使用工具测试可以知道程序中是否存在内存泄漏。如BoundsChecker。
2.还是使用工具,要么白盒测试,检查源代码。
3.坚持一条原则:确保没有返回的但已经分配的缓冲区不再使用时被释放.特别是当有一些分支有公共的释放代码时,需要确保所有适当的内存都被释放了

楼上讲的非常好哟,学到不少!

可是,我测试的是嵌入式系统,又没有测试工具,该如何解决这种问题呢?
期待大家继续讨论!
作者: g_win    时间: 2006-6-26 09:53
你如果没有工具,那只好检查代码了。
Purify确实是个不错的工具。
作者: Chenny    时间: 2006-6-26 14:05
唉,上次被人问到这个问题,不知怎么回答
我们公司小,都没有测试工具的,Purify,Load,Win 等都没有接触过

呵呵,继续学习!
作者: Chenny    时间: 2006-6-28 13:35
哦?帖子沉了?
各位没有补充么?
作者: newboy    时间: 2006-6-29 15:17
我们现在是java的程序,通过使用Jprobe的Memory Debuger进行内存的测试,感觉还是挺有效果的
作者: unknow-ask    时间: 2006-6-29 16:06
那不用工具也不要看代码,就从内存的使用情况能否来确定有内存泄露现象?
作者: seramiller    时间: 2006-6-29 17:25
用jprobe看一下吧
作者: Salanganezhou    时间: 2006-6-29 18:00
偶是测试的,每次都是从Task Manager里观察,有无Memory leak.
作者: seramiller    时间: 2006-6-29 18:01
task manager有时候会误报。
作者: lindongfeng    时间: 2006-6-30 09:38
4楼的兄弟说的已经很明白了,使用工具,如果贵公司使用的记事本来编程,那么你只能用眼睛去看程序了,如果是使用开发工具来开发的C++和程序或是VC++的程序,那么你就可以使用NUMEGA来进行内在泄漏的测试(其中包括BoundsChecker)这个网上有很多下载的,使用也很简单,在2000年左右的时候比较胜行,但后来随着开发平台的不断转移,接触的比较少了,不过做硬件或是底层开发用到C的时候,还是大有用场 。
作者: Chenny    时间: 2006-7-20 17:17
楼上的兄弟可否 讲的具体一点,小弟很有兴趣哦,还没有找到下载该工具的地方啊
我是做 SOC 的软件测试,与硬件联系紧密,希望对此有更多了解!
谢谢。

[ 本帖最后由 Chenny 于 2006-7-20 17:24 编辑 ]
作者: Chenny    时间: 2006-7-20 17:18
这里怎么不能贴 附件啊
本来想 贴一些从网上搜到的相关文档与大家共享的。
作者: Chenny    时间: 2006-7-20 17:22
From Baidu:
在测试工作中,需要接触到各种类型的测试工具。一般来说,有以下一些类型的工具:
测试管理工具:可以帮助完成测试计划、跟踪测试运行结果等的工具。这类工具还包括有助于需求、设计、编码测试及缺陷跟踪的工具;
静态分析工具:分析代码而不执行代码。这种工具检测某些缺陷比用其它方法更有效,开销也更小。这种工具一般可以度量代码的各种指标,如McCabe测定复杂度,Logiscope度量代码和规范的复合度等等;
覆盖率工具:这种工具评估通过一系列测试后,软件被执行的程度。这种工具大量的被应用于单元测试中,如PureCoverage、TrueCoverage、Logiscope等;
动态分析工具:这种工具评估正在运行的系统。例如,检查系统运行过程中的内存使用情况,是否有内存越界、内存泄露等等,这类工具有Purify、BoundChecker等;
测试执行工具:这类工具可使测试能够自动化进行,并且各个层次(单元测试、集成测试、系统测试)的执行工具都有。例如系统测试阶段有功能测试自动化工具,如Robot、Winrunner、SilkTest等;还有性能测试工具,如Loadrunner、SilKPerformer等。

白盒测试工具主要有:
内存资源泄漏检查:Numega中的bouncechecker,Rational的Purify
代码覆盖率检查:Numega中的truecoverage,Rational的Purecoverage,Telelogic公司的logiscope, Macabe公司的Macabe
代码性能检查:Numega中的truetime,Rational的Quantify
代码静态度量分析质量检查工具:logiscope和Macabe

黑盒测试工具主要有:
客户端功能测试:MI公司的winrunner,compuware的qarun,Rational的robot
服务器端压力性能测试: MI公司的winload,compuware的qaload,Rational的SQA load等等
Web测试工具:MI公司的Astra系列,rsw公司的e-test suite
测试管理工具:rational的test manager,compuware的qadirector等
缺陷跟踪工具:trackrecord,Testtrack

单元测试工具:
测试框架: delphi dunit
java junit
c++ cppunit
Visual Basic VBUnit
(.NET platform) NUnit
作者: 逍遥剑客    时间: 2006-7-20 18:06
如果是在实在是找不到工具,而代码也不太明白的话,在测试时间允许的情况吓干脆写个循环,运行个几万次,几十万次。如果正常运行估计就没有问题了。这是没有办法中的最傻的,最笨的办法了。

如果开发的时候用JAVA,或.NET开发软件的话可能这问题就比较少了,我记得它们都有所谓的内存回收机制,好像是自动把以前申请过的内存空间而现在没有用到的给释放掉。
作者: 夏雪    时间: 2006-7-20 20:48
rational有专门内存泄漏的工具的Purify,可以试试
作者: polobo    时间: 2006-7-20 22:54
学习了。
作者: liujieru    时间: 2006-7-21 09:04
Purify是商业软件,谁知道它的购买价格?

购买它就是要得到注册号吧?
作者: Chenny    时间: 2006-7-21 14:32
有否免费的软件可以共享?
作者: st_simon    时间: 2006-7-21 16:03
一直在用purifyplus,呵呵,感觉不错.
作者: 青青    时间: 2008-5-28 12:39
做疲劳测试,容易测出内存泄露问题。
作者: 疾风天鹰    时间: 2008-11-13 13:08
小弟请教下LS的,什么叫疲劳测试?




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2