51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 8374|回复: 5

无忧测试QQ整理——关于C/C++和Java的内存泄漏、内存溢出

[复制链接]

该用户从未签到

发表于 2005-6-26 16:31:05 | 显示全部楼层 |阅读模式
2005-06-22 09:21:58 小鱼(66944928)
请教一个问题,内存溢出怎么测试啊?


2005-06-22 09:25:09 songfun(6975740)
内存溢出的工具好像有:
Numega Bounds Checker

Rational Purify
还有Parasoft Insure++

2005-06-22 09:25:47 ╋映映╋(53447901)
这个是windows上的吧

2005-06-22 09:27:40 小鱼(66944928)
内存溢出跟内存泄漏是同一个概念啊?


2005-06-22 09:29:06 songfun(6975740)
一般是指memory leak吧,内存泄漏。溢出memory overflow


2005-06-22 09:39:07 songfun(6975740)
          公告
我上传了Loadrunner和QTP等大量材料,大家可以到共享去取


2005-06-22 09:46:27 小鱼(66944928)
请问一下,内存泄漏是不是看关闭这个应用程序后,它相应的进程有没有关闭?


2005-06-22 09:48:19 songfun(6975740)
呵呵,不是,不过这也算一个问题,腾讯的BQQ(就是现在的企业级软件RTX)就有这个情况。

2005-06-22 09:51:43 找Bug吃的人 (19837470)
有个判定评准吗,QQ有时也这个问题
TO songfun,能不能把你知道的内存泄漏的几种常见的现象整理一下,给大家分在共享里了?

2005-06-22 09:53:38 ╋映映╋(53447901)
这里有专人整理吗?我可以提供资料啊,平时工作太忙了

2005-06-22 09:54:52 songfun(6975740)
呵呵,╋映映╋,你整理一些资料上传到共享如何?
内存泄漏方面你应该比较熟一些,多和大家交流交流

2005-06-22 09:55:36 ╋映映╋(53447901)
我都是从性能测试的角度来看内存泄漏的

2005-06-22 09:57:06 找Bug吃的人 (19837470)
还有象数据死锁,CPU100%等的一些常见的现象,这些东西现在脑子里没有一个系统的

2005-06-22 09:59:40 ╋映映╋(53447901)
http://vivi.sina.com.cn/member/35241.html
我这里有一些在线的资料


2005-06-22 10:01:42 digman(6310930)
大家好,我问个问题:
1、测试用例的范围如何界定
2、测试用例的详细程度如何把握

主要是我们现在的系统功能点多,即使是在主要流程的重要功能上,也有很多,我与组员交流时,觉得这个详细程度无法很好的把握,


所以拿出来,大家讨论一下,分析一下为什么会对测试用例的详细级别存在疑问

或者采取什么样的制度规范来规划测试用例


2005-06-22 10:04:11 songfun(6975740)
to 小鱼:
   目前很多企业实际运作中没有做到那么专业,memory leaks的最大表现就是内存不断的被吃掉,就是说内存在不断增长。
   最土的办法有一种——在没有工具的情况下,开机运行,发现系统越来越慢,看看task manager的相应进程。

2005-06-22 10:04:58 ╋映映╋(53447901)

http://www.bea.com.cn/support_pa ... y_Leak_Pattern.html

探查内存不足/内存泄漏问题

2005-06-22 10:07:34 songfun(6975740)
to digman:
  用例范围的界定有时并不完全取决于测试主管(测试部门),市场、项目经理那边都有一定的影响力。
  但是不管什么样的测试,保证业务是第一的。就是说功能测试一定要走通。

2005-06-22 10:09:11 digman(6310930)
我初步计划是根据他们的需求分析以及我我掌握的业务知识来界定,但是这个界定时间可能会比较长

2005-06-22 10:09:56 songfun(6975740)
一般来说,你的用例可以发几个部分:功能测试、性能测试、界面测试。
在实际运用中,这几个比较常用,也是重中之重

2005-06-22 10:10:05 gladys(19785708)
用例范围的界定,我想首先应该参考 需求

2005-06-22 10:10:10 森林狼(6877439)
java怎么会能出现内存泄漏呢,只可能内存不足吧


2005-06-22 10:10:33 ╋映映╋(53447901)
怎么不会呢,使用不当就会的

2005-06-22 10:10:54 gladys(19785708)
内存泄漏与开发工具应该没有关系吧?

2005-06-22 10:11:55 digman(6310930)
如果分为功能测试、性能测试、界面测试,那么这三个内容是属于子系统呢,还是子系统隶属于他们三个呢

2005-06-22 10:11:56 森林狼(6877439)
不太明白java的内存是怎么泄漏的,能给讲讲在什么情况下会发生。


2005-06-22 10:15:57 小鱼(66944928)
现在的程序就是java的,用户issue反映是out of memory error,我从来没有测试过java的东西


2005-06-22 10:16:20 songfun(6975740)
to digman:
  你说的范围界定应该主要关注的是SRS和FS,功能要覆盖。

2005-06-22 10:16:42 ╋映映╋(53447901)
Junit in action买书吧,中文版的。书不错,排版也好

2005-06-22 10:16:43 digman(6310930)
恩,需求覆盖面
我打算自定义个字段,“测试类别”这个里面分功能测试,性能测试以及界面测试

2005-06-22 10:19:16 songfun(6975740)
digman,你可以到群里共享里下载用例模板看看。测试用例以系统测试ST为例,你可以分为功能测试用例文档、性能测试用例文档,然后在功能测试中根据你的业务模块划分——我的建议。未必非要这么做。

2005-06-22 10:20:22 digman(6310930)
这样分比较清楚,做起来可能会比较繁琐,和我一起测试的那个妹妹,估计又要不高兴了,他不太喜欢过于繁琐的工作

2005-06-22 10:20:39 songfun(6975740)
至于用例的细度,需要有一个规范文档。这个文档类似于编码规范文档。这个工作可以由QC来做。

2005-06-22 10:20:42 森林狼(6877439)
哦,看到bea的一个例子。java的内存泄漏和c的内存泄漏好像指的不是一个概念啊。是不是?

2005-06-22 10:22:00 gladys(19785708)
QC,能对用例的细度有很好的把握吗?这点有怀疑。。。

2005-06-22 10:22:05 songfun(6975740)
或者有些公司交给QA做。当然如果自己部门不那么规范的话,可以由测试主管来制定。这个文档比如是“*****系统测试用例编写规范”以及“用例设计模板”……

2005-06-22 10:23:06 songfun(6975740)
严格的说,可以是“test QC”,呵呵,角色比较混乱,大家现在不要太苛求,能有规范出台已经很了不起的,未必非要摊给谁来做。

2005-06-22 10:25:38 gladys(19785708)
是的,从实际情况出发,我想规范拿给测试主官来定,可能会好些。

2005-06-22 10:26:48 songfun(6975740)
JAVA里的outofMemory问题 其实 和 C/C++ 也差不多,不过java有自己的垃圾回收机制。
system.gc();

2005-06-22 10:28:20 digman(6310930)
我们公司即没有qa,也没有qc,反正现在所有的东西都是我们两个人来规划和做

2005-06-22 10:29:03 找Bug吃的人 (19837470)
我觉得这是你的机遇

2005-06-22 10:29:41 songfun(6975740)
to 森林狼:
  你既然提的是BEA的例子,那么你指的只是J2EE的内容,其实J2ME里同样也有java的内存泄漏。

2005-06-22 10:31:16 songfun(6975740)
java方面的内存泄漏在J2ME上尤其讲究,因为手机的内存太小,一个不小心系统就翘了。


2005-06-22 10:35:23 找Bug吃的人 (19837470)
就像C在WINCE对内存的调用也很讲究

2005-06-22 10:35:50 找Bug吃的人 (19837470)
大家现对高通的BERW那套东西有研究吗?

2005-06-22 10:35:54 digman(6310930)
我现在对这些虽然说也了解,但是更加具体的内容一直没有接触过,无从下手

2005-06-22 10:35:56 森林狼(6877439)
在有垃圾回收机制的情况下,java的内存泄漏是怎么产生的呢。象bea的那个例子,数据库连接对象是一直存在着的,只不过用户释放了,放回连接池里去的。如果连接池也不用了,这个内存肯定会释放了吧。


2005-06-22 10:42:13 ╋映映╋(53447901)
如果对象一直被引用着GC就不会回收内存,如果引用一直不释放outofmomory了

2005-06-22 10:42:55 songfun(6975740)
其实我们通常说 内存溢出、内存泄漏,指的都是 memory leaks,而真正的memory overflow那个往往是用在攻击上的。比如缓冲区溢出,DoS(拒绝服务攻击)之类,不过这方面我也不太懂,听说过一点而已,呵呵见笑了。

2005-06-22 10:43:47 lemon(9042829)
songfun:vb的内存溢出怎样测试呢?

2005-06-22 10:44:06 ╋映映╋(53447901)
vb的内存泄漏工具更多了啊
devpaterner,purify等等等等

2005-06-22 10:45:02 ╋映映╋(53447901)
GC是自动的,不能被控制的,是由系统决定了。不能不说没有bug,不过至少现在来说是合理的而已。

2005-06-22 10:45:11 lemon(9042829)
╋映映╋:内存溢出它的现象是不是就是:死机?

2005-06-22 10:45:33 ╋映映╋(53447901)
内存用完了,要么死机,要么程序自杀了

2005-06-22 10:45:58 songfun(6975740)
正如映映说的,如果一个不使用的对象被正在使用的对象引用了,那gc如何识别?它没那么智能吧。

2005-06-22 10:46:04 ╋映映╋(53447901)
我现在测试的tomcat就崩溃了

2005-06-22 10:46:46 遥远(38135388)
我用weblogic时,做压力测试也有weblgoic崩溃的现象

2005-06-22 10:46:51 森林狼(6877439)
java的outofmemory,好像是内存溢出,是jvm的内存不够引起的吧


2005-06-22 10:47:11 songfun(6975740)
weblogic 崩溃很正常的,呵呵

2005-06-22 10:47:42 遥远(38135388)
我后来把内存设为512就没发生这种现象了

2005-06-22 10:47:54 森林狼(6877439)
如果一个对象被引用了,那么这个对象就是在使用着的啊,如果垃圾回收去回收它,那岂不是会引起应用的崩溃?

2005-06-22 10:48:13 gladys(19785708)
很想知道怎么让weblgoic崩溃的?

2005-06-22 10:48:18 lemon(9042829)
╋映映╋:我在vb调试的时候能够发现内存溢出呀,为什么还要用专门的工具呢,换句话说,这个工具的优点在哪里呢?

2005-06-22 10:48:55 遥远(38135388)
做压力测试时,把指标设到尽可能大,还能不让weblogic崩溃?

2005-06-22 10:48:57 ╋映映╋(53447901)
也有可能是jvm内存不足,但是如果应用程序老是不释放对象引用即使内存调大了迟早也会outofmemory的

2005-06-22 10:49:28 songfun(6975740)
一个对象A,一个对象B。不同对象。

2005-06-22 10:50:00 ╋映映╋(53447901)
根据硬件条件或用户需求设定指标吧

2005-06-22 10:50:21 遥远(38135388)
做破坏还是很简单的

2005-06-22 10:50:41 gladys(19785708)
如果那个尽可能大的指标不在合理范围内,让它崩溃也不算很有效的测试吧?

2005-06-22 10:51:02 遥远(38135388)
vb没有自动回收垃圾机制

2005-06-22 10:51:21 遥远(38135388)
to gladys,是的

2005-06-22 10:51:23 gladys(19785708)
虽然我问这个问题主要是想知道怎么搞破坏  []

2005-06-22 10:51:27 ╋映映╋(53447901)
to lemon:
客套一点所就是:加速应用软件上市时间

2005-06-22 10:51:30 songfun(6975740)
to gladys:
  你说的那个就是压力测试的范畴,不是性能测试了。

2005-06-22 10:51:36 遥远(38135388)
但有时候你要考虑系统的可扩展性能的

2005-06-22 10:51:42 森林狼(6877439)
如果一个A对象的内存空间赋值给了一个B类型的引用。编译如果不报错,那就没有问题啊。有不少用法都是这样做的,比如多态不就这样实现的么。

2005-06-22 10:52:25 遥远(38135388)
songfun,java有一直回收不到的情况?
我一直认为是在某段时间内回收不了

2005-06-22 10:54:33 ╋映映╋(53447901)
面向对象技术的基本要素:多态、继承、封装

2005-06-22 10:54:38 遥远(38135388)
在系统还没来得及回收垃圾时,系统已经崩溃

2005-06-22 10:55:04 ╋映映╋(53447901)
面向对象技术的基本原则:抽象、封装、模块化、分层。
不要犹豫了:)

2005-06-22 10:55:22 遥远(38135388)
就是所谓的内存漏洞,只是指在java中

2005-06-22 10:55:41 森林狼(6877439)
遥远说得没错,内存回收很缓慢,有时也可看作内存泄漏。

2005-06-22 10:56:07 遥远(38135388)
呵呵,我并不是很了解java的回收机制

2005-06-22 10:56:41 森林狼(6877439)
一个对象的引用全部被释放了,那么这个对象的内存也就会被垃圾回收释放

2005-06-22 10:56:58 lemon(9042829)
╋映映╋:vb的内存溢出与多用户同时操作有无关系,在单用户不存在内存溢出的情况下?

2005-06-22 10:57:01 森林狼(6877439)
垃圾回收器应该对每个对象都有一个计数器吧

2005-06-22 10:57:03 遥远(38135388)
释放就回收?
释放到回收应该有个时间差吧

2005-06-22 10:57:45 森林狼(6877439)
那是垃圾回收器的轮询时间了

2005-06-22 10:58:34 ╋映映╋(53447901)
多用户操作和单用户操作和内存溢出没有直接关系。单用户内存泄漏的效果不明显,多用户加速了内存溢出。就这么简单理解吧

2005-06-22 10:58:37 遥远(38135388)
而就是在轮循时间里,系统的压力过大,导致崩溃,我们就认为是内存漏洞
这个理解对不对?

2005-06-22 10:59:01 ╋映映╋(53447901)
不太对啊

2005-06-22 10:59:01 ivy(380514686)
不对

2005-06-22 10:59:22 ╋映映╋(53447901)
这样理解太草率了

2005-06-22 11:00:10 遥远(38135388)
一般来说,对象使用完是要程序员自己释放的吧?

2005-06-22 11:00:42 遥远(38135388)
找Bug吃的人,c的内存漏洞比java的更值得注意

2005-06-22 11:00:57 gladys(19785708)
我们公司用JAVA,但我点点都不懂。。正好学习

2005-06-22 11:01:17 森林狼(6877439)
当然了,内存漏洞在c中太多了。

2005-06-22 11:01:40 ╋映映╋(53447901)
c中主要是指针使用不对引起的吧

2005-06-22 11:01:48 找Bug吃的人 (19837470)
TO 遥远:我在微软的社区也看一点有关内容,你那有好的东东没

2005-06-22 11:02:22 遥远(38135388)
没有,我这里主要是java的
只是在测试过程中的一些体会,没有资料

2005-06-22 11:02:52 森林狼(6877439)
在栈上的变量会自动随着栈的销毁而销毁,在堆上的空间就不行了。

2005-06-22 11:03:02 ╋映映╋(53447901)
我也主要是java的

2005-06-22 11:03:20 lemon(9042829)
呵呵,还好我是vb

2005-06-22 11:03:33 森林狼(6877439)
在堆上的空间,申请内存的函数和释放内存的函数配对使用。

2005-06-22 11:03:38 找Bug吃的人 (19837470)
我觉得C的指针用好,可以发挥好的效果,用不好会带来灾难

2005-06-22 11:03:44 森林狼(6877439)
一般,delete和new,malloc和free

2005-06-22 11:03:47 ╋映映╋(53447901)
不过c,vb的资料更多啊,网上一大堆呢。而且技术都是比较成熟了

2005-06-22 11:04:55 ╋映映╋(53447901)
http://www.uml.org.cn/Test/20046117.htm
C/C++内存问题检查利器—Purify  

2005-06-22 11:04:59 森林狼(6877439)
技术成熟有什么用啊,使用的人不成熟照样完蛋。

2005-06-22 11:05:19 ivy(380514686)
Purify,是很好的工具!

2005-06-22 11:05:44 森林狼(6877439)
我们公司正在用purify


2005-06-22 11:07:49 森林狼(6877439)
我在说技术方面的事。C比java灵活性要强,问题也会比java多,所以应该小心使用C,这需要经验的。

2005-06-22 11:07:57 gladys(19785708)
songfun你刚才有个参考SRS和FS  那个FS是什么的意思呀?

2005-06-22 11:08:07 找Bug吃的人 (19837470)
我现在觉得这句话蛮有道理的-以往开发做不好就去做测试,现在测试做不好就去做开发


2005-06-22 11:08:40 ╋映映╋(53447901)
JVM释放内存不是在内存吃紧的时候才释放(当然内存吃紧的时候会强制要求释放),从JDK1.2后,内存的释放是分散的,甚至随机的(只所以说随机是它有自己的算法,而不是严格的某种简单约束),这样,才可以让用户忽略内存回收所带来的系统代销。


2005-06-22 11:08:55 songfun(6975740)
SRS --需求规格说明书,也叫 需求规约;
FS  --功能性规格说明书。


2005-06-22 11:12:06 ray(8085413)
java会出现内存泄漏
因为引用的对象没有释放,但是又不再使用,就会造成无法进行垃圾回收
而这种情况就会出现问题


2005-06-22 11:15:12 songfun(6975740)
digman:
  关于规范制度的问题。首先要有明确的文档出台。有文档才有白纸黑字的规范,否则制度无从谈起,包括过程改进也要落实到文档规范中,在实际过程中有参照依据。
  关于流程复杂,业务庞大的情况,其实不止是你们,这在大部分企业都很常见。我们做的电信级系统的营业部分也是无法想象的庞大。关键是要有好的过程、好的指导思想——具体的说,有明确的指导方法:边界值、等价类划分、错误猜测,等。这些都要应用起来。不能完全跟着业务走,同一条路径没必要走几百遍,所以要适当的结合白盒的测试方法。
  至于你今天提的 测试需求,其实你没有明确,这里的测试需求不是 SRS里的需求, 测试需求的内容很多,这里填的内容是什么呢?其实可以理解为:测试要点、测试大纲,类似一个“目录、索引”——这个测试需求往往需要系统分析员级别的tester来做,当然实际过程中就不是这样了,呵呵。

2005-06-22 11:18:51 songfun(6975740)
分支一定要覆盖,路径都没100%覆盖,那还谈什么质量保证?

2005-06-22 11:19:10 遥远(38135388)
路径都没100%覆盖
这里指的是什么路径?


2005-06-22 11:21:12 songfun(6975740)
关于系统测试,我曾经和 海松宝 聊过,就是ST未必非要、只能做成黑盒测试。
传统意义上的 “系统测试=黑盒测试”已经不适用了,应该是“验收测试 -- 黑盒测试”
所以在系统测试的时候结合适量的白盒测试方法来设计测试用例。
或者这么说:结合别人的代码来设计用例。

2005-06-22 11:26:14 songfun(6975740)
digman,你说的用例的细度,要有针对性的把内部路径覆盖到,没有覆盖完全说明你的系统测试没做到位。
但是不能仅仅从UI上去设计用例,这样会出问题,容易遗漏。

2005-06-22 11:27:01 digman(6310930)
是的,这就牵扯到测试分析与设计


2005-06-22 11:27:43 digman(6310930)
我还没有给开发人员说我们也要有分析和设计,人家一脸的不屑一顾

2005-06-22 11:28:45 lemon(9042829)
分支过于庞大,路径不可能走完怎么办?
路径走完不太现实吧!?


2005-06-22 11:29:14 songfun(6975740)
路径怎么可能走不完??
路径总是人写的吧?严格的说,是coder对吧?coder都能写完,你无法覆盖完??


2005-06-22 11:30:07 森林狼(6877439)
路径覆盖可能是最轻的覆盖了吧。

2005-06-22 11:30:25 lemon(9042829)
当if--else嵌套太多,在相对时间内走完是不现实的

2005-06-22 11:30:28 songfun(6975740)
路径覆盖是最基本的啊,起码也要做到。

2005-06-22 11:30:39 遥远(38135388)
如果是业务逻辑路径的话,是可以走完的

2005-06-22 11:30:50 digman(6310930)
功能覆盖还是保证全的

2005-06-22 11:30:55 tomsyang(421532874)
尽可能达到分支覆盖100%

2005-06-22 11:31:11 森林狼(6877439)
if else倒好走,就是一些catch exception比较难做。


2005-06-22 11:31:25 tomsyang(421532874)
一样可以实现
我做了一个java的单元测试,没问题,都实现了
不过开始也费了不少劲

2005-06-22 11:31:59 songfun(6975740)
to lemon:
不会不现实,无论是 业务逻辑还是代码逻辑,都必定可以走完。
我做的项目应该只会比你们的庞大,不会比你们的小,呵呵,关键这里是人力资源安排的问题了。
要多少“人月”才能完成?

2005-06-22 11:32:45 遥远(38135388)
是的

2005-06-22 11:33:17 lemon(9042829)
因为if---else中有调用其他过程,而其他过程的if---else中又有其他调用

2005-06-22 11:33:20 遥远(38135388)
我们也做电信和移动的,项目也不小,但一个项目最多也就两个测试

2005-06-22 11:33:23 森林狼(6877439)
tomsyang,那些异常捕捉是怎么覆盖的?是用junit么,我也在考虑这个事情。

说说

2005-06-22 11:34:01 songfun(6975740)
尤其在现在很多企业里,他们不做单元测试和集成测试,所以要在系统测试里 一锅端 ,正是这种情况,系统测试 肩负着 “单元测试的使命”——路径覆盖。
所以,系统测试 其实是最困难的——按照 我们testing站长的说法。

2005-06-22 11:34:50 遥远(38135388)
我一直认为并不是所有的项目都要做单元测试和集成测试

2005-06-22 11:34:52 lemon(9042829)
songfun:你的系统或许比我庞大,但逻辑关系不一定比我门复杂呀

2005-06-22 11:35:32 lemon(9042829)
单元测试一定要做

2005-06-22 11:35:40 森林狼(6877439)
你只需走过你这个函数路径就可以了啊,至于调用其它函数中也有if else,那是由它的路径覆盖
来作阿。又不能我们一个测试程序,把整个系统程序的路径都走一遍


2005-06-22 11:36:35 tomsyang(421532874)
我不是用junit
用的是Jtest

2005-06-22 11:36:43 songfun(6975740)
呵呵,要说复杂,其实大家的业务都很复杂,市场是多元的。
你这些困难我也遇到过,我说了,是人力资源的安排问题。
没有做不完的事,只要人够多。呵呵!

2005-06-22 11:36:58 tomsyang(421532874)
不过junit只要可以stub也是一样可以得

2005-06-22 11:37:17 lemon(9042829)
森林狼:这在白盒好做,但做黑盒呢?

2005-06-22 11:37:43 遥远(38135388)
做是可以做

2005-06-22 11:37:44 森林狼(6877439)
没错,不能靠系统测试来发现所有的问题。有些问题只有在单元测试,集成测试时才会发现,系统测试想要测出来十分困难。比如一些容错的处理
回复

使用道具 举报

该用户从未签到

发表于 2006-4-18 16:42:00 | 显示全部楼层
哇,好东东,谢谢分享!!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2006-4-18 16:43:53 | 显示全部楼层
有没有关于内存溢出方面的实例、案例演示啊什么的啊?容易理解一些,先谢谢了!!!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2010-10-1 12:10:15 | 显示全部楼层
谁可以给我讲一下Struts2.0?
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2010-10-25 12:29:53 | 显示全部楼层
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-4-20 11:11:51 | 显示全部楼层
不好意思,,没有看完,不过谢谢你,习惯了等到用的时候才看,其实用的时候已经来不及看了
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-3-29 10:20 , Processed in 0.084660 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表