陈皓 一、 引言
我们都知道软件的测试(在以产品为主的软件公司中叫做QA—Quality Assessment)占了整个软件工程的30% -50%,但有这么一种说法,即使是最优秀测试专家设计出来的测试案例,也无法彻底地检测到内存上的问题。
使用C/C++开发的团队一定有被其内存问题折磨过的经历,内存问题一直是C/C++开发人员的心头之痛。特别当程序越来越多时,类的继承和关联越来越多时,内存问题也就越来越多,很多时候,开发人员在不经意的时候就带入了内存问题。这是C/C++世界中很难避免的东西,哪怕是有10年以上开发经验的老手,也难以避免或是杜绝内存问题。
而且,内存的问题是让人很难察觉的,特别是对于内存问题排名第一的Memory Leak来说,在几万行代码中出现Memory Leak的机率几乎是100%,而且要靠一般的手段是很难检测出这种程序错误的。它并不像“野指针”或是“数组越界”那么容易暴露出来(这些会让程序异常退出,而Memory Leak则不会)。当你发现你的服务器端的程序,每隔一个月(或是更长的时间)就把服务器上的内存全部耗尽时,让服务器有规律地每过几个月就当机一次,那么你的程序可能是中了Memory Leak了,同时,你会发现在数十万行代码中寻找这种Memory Leak无异于大海捞针。
于是,正如《黑客帝国II》中描述的那样,当你的程序越来越大,越来越复杂的时候,你会发现程序就越来越不受你的控制,有一些让你内存出现问题乃至让你应用程序崩溃的变量,他们生存在系统的边缘,你怎么找也找不到,这种情况下,除了用程序测试程序,别无其它的方法。对于C/C++内存问题中的Memory Leak这种顶级杀手,那怕最牛的程序员再加上最牛的系统架构师也很难把其找出来,对此,我们只有依靠程序,用程序去寻找这种系统的BUG。这么让我们事半功倍。
在我们寻求解决内存问题的同时,让我们所感到幸运的时,目前,已经有许多小的软件可供我们选择,如MallocDebug,Valgrind,Kcachegrind,dmalloc,NuMega,BoundsCheck,ParaSoft ,Insure++等等,在这里,我想向大家介绍的是Rational 公司(呵呵,应该是IBM了)的 Purify,这是我觉得最专业,也是最强大的内存检测工具。
Purify 所支持的操作系统有Windows 2000/XP Professional/NT、Sun Solaris、HP-UX、SGI-IRIX。我不知道其支不支持Linux,但在其网站上,我并没有看到这样的信息,但又听别人说他支持,所以在这里我不敢断言它不支持,想想要做UNIX下的软件能有不支持Linux的吗?可能很少吧。
下面,是我所使用的Purify的版本和运行Purify的操作系统:
> purify -version
Version 2003.06.00 Solaris 2
> uname -a
SunOS hostname 5.8 Generic_108528-11 sun4u sparc SUNW,Ultra-60
我会基于这个版本向你介绍Purify的强大功能。
文章来源于领测软件测试网 https://www.ltesting.net/