以人为主的测试,到以测试用例为主的测试用例

发布新日志

  • 《Rational Purify中文使用手册》

    2007-06-22 14:52:52

  • Purify检测的代码错误类型

    2007-06-22 14:31:42

     

    一、红色叹号提示

    1、  ABR: Array Bounds Read

    数组越界读(只检测动态内存分配的数组,对Global、Local、Static的数组无法检测)。

    2、  ABW: Array Bounds Write

    数组越界写(只检测动态内存分配的数组,对Global、Local、Static的数组无法检

    3、  ABWL: Late Detect Array Bounds Write (An ABWL message indicates that the program wrote a value before the beginning or after the end of an allocated block of memory)
    4、  BSR: Beyond Stack Read

    函数可能读了一个当前堆栈之外的指针。例如在写变量值的时候程序出现了异常,那么读此变量时,就会发生BSR错误。(不适用于堆栈内的本地数组)

    5、  BSW: Beyond Stack Write

    函数可能写了一个当前堆栈之外的指针。(不适用于堆栈内的本地数组)

    6、  EXU: Unhandled Exception

    未经处理的异常

    7、  FFM: Freeing Freed Memory

    正在释放已经释放过的内存。
    8、  FIM: Freeing Invalid Memory

    试图释放未分配的、无效的内存。

    9、  FMM: Freeing Mismatched Memory

    释放不匹配的内存,用不正确的API函数释放某类内存。

    10、FMR: Free Memory Read

    读取已经释放或者未经分配的内存内容。

    11、 FMW: Free Memory Write

    对已经释放或者未经分配的内存做写入操作。

    12、 FMWL: Late Detect Free Memory Write

    13、IPR: Invalid Pointer Read

    程序正在读取一个无效的,不可以设定地址的内存区域。

    14、IPW: Invalid Pointer Write

    程序正在对一个无效的,不可以设定地址的内存区域进行写操作。

    red zone

    For error detection runs, the bytes that are placed at the beginning and end of each allocated block of memory in a program at run time. The red zone is used to detect Array Bounds Read (ABR), Array Bounds Write (ABW), and Late Detect Array Bounds Write (ABWL) errors.

    15、NPR: Null Pointer Read

    空指针读。

    16、NPW: Null Pointer Write

    空指针写。

    二、黄色警告信息

    1、COM: COM API/Interface Failure

    COM操作失败。在每一个COM API或COM接口调用后,Purify都会检查HRESULT,如果它的值不是标明操作成功的S_OK,就会显示此错误。

    2、HAN: Invalid Handle

    无效句柄。在期望出现句柄的地方出现了一个非句柄的值或者是一个错误类型的句柄。

    3、ILK: COM Interface Leak

    COM接口漏洞。当一个COM接口的引用总数大于1时,会出现此提示。

    4、MLK: Memory Leak

    堆内存泄露。指内存块中没有任何内容或者内存块没有被任何指针引用。以下两种情况都会出现此错误提示。

    A、在函数中分配了本地内存,但在退出函数的时候没有Free。

    B、内存块的指针被清除或改变或不在其作用域内。

    If the section of the program where the memory is allocated and leaked is executed repeatedly, you might eventually run out of swap space, causing slow downs and crashes. This is a serious problem for long-running, interactive programs.

    5、PAR: Bad Parameter

    程序在调用Win32API或者C运行时常规函数时传递了一个错误的参数。

    6、UMC: Uninitialized Memory Copy

    将一个未初始化的值从一个内存区拷贝到另外一个。

    7、UMR: Uninitialized Memory Read

    读取未初始化的内存块的值。

    三、兰色提示信息

    1、BOX: MessageBox

    如果程序中用到了MessageBox()或者MessageBoxEx()两个函数,Purify运行结束后就会出现此项提示信息。

    2、EXC: Continued Exception

    3、EXH: Handled Exception

    4、EXI: Ignored Exception

    5、HIU: Handle In Use

    句柄被分配后,没有释放。

    6、MAF: Memory Allocation Failure

    内存分配失败。

    7、MIU: Memory In Use

    正要分配的堆内存上已经有指针了。

    8、MPK: Potential Memory Leak

    堆内存可能泄露。在内存块的开始没有指针,但在块的内部看起来有指针指向。

    9、ODS: OutputDebugString

    程序中调用了OutputDebugString函数。

  • 内存泄漏检查-Rational Test Suite-Purify

    2007-06-21 14:53:45

     

           大家在测试过程中最头痛的是什么问题,我想大概是服务器运行时不知不觉的服务器就出现异常,通过SystemMonitor发现系统的内存随时间不断的减少,特别在C++的开发下由于没有像Java,C#有比较好的GC,所有的内存都是开发员进行控制,很容易出现内存泄漏的情况,那么如何高效的发现内存问题,成为高级测试人员与开发人员关注的问题。

         
    工欲善其事,必先利其器,要快速的在大型的应用中人工的排查内存问题,就有如大海捞针。如何在几百万代码定位问题,人工!显然是不可能的,那必须要借助工具,现在有许多比较好的内存检查工具,比如下面给大家介绍的Purify,PurifyIBM公司出的面象C++VBJava的内存检查工具。

    Purify可检查的常见错误类型如下:

    1 堆阵相关错误。

    2 堆栈相关错误。

    3 垃圾内存收集-Java 代码中相关的内存管理问题。

    4 COM 相关错误。

    5 指针错误。

    6 内存使用错误。

    7 Windows API 相关错误。

    8 句柄错误。

    当然可检查的错误类型还有很多,大家可以参考联机帮助,但我认为常见的错误大多数都发生上面提到的一些错误。

           下面主要给大家以一个例子来说明Purify的使用:

     

    1

    Purify的使用还是比较简单的,一般只要把程序写成.EXE,然后直接运行就行了,当然如果程序比较大时,则需要重新组织一下,分几个段进行测试,最好的办法就是用CPPUnit来写测试框架,直接调用单个的函数进行测试是最好的,我的例子就是用CPPunit来写的,单独调用相关的测试函数进行测试,由于这里不是介绍CppUint,所以只是给大家提一下,单元测试可以这样写。Purify的启动还是比较简单的,就是运行一个.EXE

           运行完后结果如下图:

     

     

     

    2

    大家可以看到报以下几个出错,有位未初始化内存,数组越界读写,内存泄露等几个大家比较头痛的问题,以前代码比较多时是无法查到的,现在有了这个工具,就可以很快的查到问题。

           同时Purify不光可以显示出错还可以定位是那段代码出错,当然你要有代码,不过它是把相关的模块全部显示出来,你要从里面找出是由你的代码引起的问题才行,这是一个比较晕的事情,不过多做几次就行,当然如果程序是你写的就更好了,就更容易找到问题,对上面的出现问题的点进行展开,跟据一些使用的经验我一般不会找系统相关的函数,而是先找与自己工程相关的函数,比如下图中的内存演示 int CMabString::LeakMemory():

    3

    就是工程中的代码,一般问题都是由自己的代码引起的,但Purify把所有与此相关的模块都引入,所以你要过滤出什么是真正问题的所在,同时你们还可以看到如果程序有代码的话,Purify可以把代码中的错误都标出,从而减小你再去查找代码的难度,从而快速的定位问题。

    当然,Purify还有许多比较好的特性,比如过滤,错误显示设定等等,通过它你可以更快更好的发现问题。

           Purify是一款非常不错的内存检查工作,结合PureCoverage,QuantifyRose Test Suite下的工具,就可以对代码级进行很好的测试,当然如果再结合测试框架,形成自动化测试则能大幅度的节约测试成本,提高工作效率,当然实施单元测试还是要看整个测试团队的能力,不能强推J。如果你要了解其它两个工具,可以看我专栏的其它介绍,谢谢大家。

Open Toolbar