软件单元测试工具Numega
1 前言
MILY: 宋体">我在本文中详细介绍了测试工具NuMega Devpartner(以下简称NuMega)的使用方法。
NuMega是一个动态测试工具,主要应用于白盒测试。该工具的特点是学习简单、使用方便、功能有效。NuMega共有三个独立的子功能——BoundsChecker、TrueCoverage、TrueTime。BoundsChecker为代码检错工具,TrueCoverage为测试覆盖率统计工具,TrueTime为程序运行性能测试工具。
本文挡通过三章对NuMega三个子功能的使用方法进行了介绍,各部分之间内容独立。如果你想了解NuMega的各项功能,建议阅读本文挡全部内容,如果你只想了解NuMega提供的某一个子功能的相关信息,按目录查看相应的章节即可。
需要说明的一点是,本文挡中所介绍的测试工具NuMega,专指NuMega for Visual C++版,对于NuMega for Visual Basic版和NuMega for Delphi版的使用说明,不在本文挡的介绍范围之内,这一点请注意。
2安装
NuMega的安装很简单。获得NuMega安装程序后,点击setup.exe进行安装即可。在安装过程中不需要什么特殊的设置。
不过有一点需要说明,在安装NuMega之前,应该确保你的机器上已经安装好了Visual C++,因为只有这样才能使NuMega成功的集成到Visual C++开发环境中去。
好了,下面我们分三个部分,分别介绍BoundsChecker、TrueCoverage、TrueTime的使用方法。
3 BoundsChecker
BoundsChecker 是一个Run-Time错误检测工具,它主要定位程序在运行时期发生的各种错误。BoundsChecker能检测的错误包括:
1))1、指针操作和内存、资源泄露错误,比如:
内存泄露;
资源泄露;
对指针变量的错误操作。
22、内存操作方面的错误,比如:
内存读、写溢出;
使用未初始化的内存。
33、API函数使用错误
图3-1 BoundsChecker在VC++集成开发环境中添加的菜单
BoundsChecker 已经非常完好的集成到VC++集成开发环境中了。
使用BoundsChecker对程序的运行时错误进行检测,有两种使用模式可供选择。一种模式叫做ActiveCheck,一种模式叫做FinalCheck。下面分别进行介绍。
3.1 ActiveCheck
ActiveCheck是BoundsChecker提供的一种方便、快捷的错误检测模式,它能检测的错误种类有限,只包括:内存泄露错误、资源泄露错误、API函数使用错误。
要想使用ActiveCheck模式来检测程序的运行时错误,只需在VC++集成开发环境中打开BoundsChecker功能,然后从调试状态运行程序即可。此时ActiveCheck会在后台自动运行,随时检测程序是否发生了错误。下面说一下具体的使用步骤。
3.1.1 用ActiveCheck来检测错误
使用ActiveCheck的具体的操作步骤如下:
首先,在VC++集成开发环境中打开你要对其进行测试的程序,同时保证项目处于Debug编译状态下。
其次,确保VC++集成开发环境中[BoundsChecker/Integrated Debugging]菜单项和[BoundsChecker/Report Errors and Events]菜单项处于被选中的状态。只有这两项被选中,BoundsChecker才会在程序运行过程中发挥作用。
最后,在VC++集成开发环境中选择[Build/ Start Debug/Go]菜单命令,在Debug状态下运行程序,ActiveCheck也在后台开始运行了。
这时,就可以按照制定好的测试用例,对程序进行操作。凡是程序执行过的代码,如果存在错误,ActiveCheck就会记录下来。
有一个地方要说一下,在[BoundsChecker]菜单中有一项[Report Errors Immediately],如下图所示:
图3-2 关于[BoundsChecker / Report Errors Immediately] 菜单项
该菜单项对于ActiveCheck 模式,以及下面就要介绍的FinalCheck模式的作用是一样的,即:如果不选中该项,则BoundsChecker会记录程序运行过程中发现的各种错误,直到程序结束后再进行报告;当选中该菜单项时,在程序的运行过程中,一旦BoundsChecker发现错误,会马上弹出如下的对话框进行提示:
图3-3 错误报告对话框
下面按图中标注的数字序号解释一下对话框中各个按钮的功能:
按钮1:点击该按钮,则表示先暂时不理会这个错误,继续执行程序。
按钮2:点击该按钮,则会马上跳转到出现问题的代码行处。处理完问题后,点击[Build/ Start Debug/Go]菜单项,可以继续执行程序,进行检测。
按钮3:点击该按钮,则将该错误添加到被忽略的错误列表中去,当再次出现这个问题时,BoundsChecker将不会进行报告。
按钮4:点击该按钮,则立即终止程序的执行。
按钮5:点击该按钮,会显示当前内存的申请、使用情况。
按钮6:点击该按钮,会得到当前这个错误的帮助信息。
按钮7、8: 这两个按钮与[BoundsChecker\Report Errors Immediately]和[BoundsChecker\ Report Errors and Event] 菜单命令的功能是完全一样的,在此不再赘述。
按钮9:点击该按钮,会显示/隐藏与该错误有关的函数调用堆栈情况,以及具体的出错代码行的位置。
是否选中[BoundsChecker/Report Errors Immediately]菜单项,完全取决于你自己的喜好,以及测试时的具体情况。如果你想要BoundsChecker在程序运行过程中实时向你汇报发现的错误,那么你就选中这个菜单项;如果想等到操作结束后,再对操作过程中BoundsChecker发现的错误统一进行分析,就不必选中这个菜单项。我在平常使用过程中更偏向于使用后一种。
3.1.2 分析错误
在你操作全部结束,退出程序后,
BoundsChecker 会显示一个所发现错误的列表。我们需要对列表中罗列的错误进行分析,来确定错误的原因和位置。
在错误检测结果列表中,罗列出了在程序的执行过程中ActiveCheck检测到的所有的内存泄露、资源泄露和API函数使用错误的相关信息。如下图所示:
图3-4 错误检测结果
在左边的窗口中,逐条列出了程序在内存、资源、API 函数使用上的问题,包括:该问题的种类,该问题发生的次数,如果是内存泄露,损失了多少内存,以及发生该问题的代码位置等等。当你用鼠标单击选中某一条记录时,在右边的窗口中会显示出与该条错误记录相对应的函数调用堆栈情况。当你用鼠标双击某一条错误记录时,会定位到引发该错误的源代码处。
好了,BoundsChecker在ActiveCheck模式下的使用方法至此介绍完了,是不是很简单?
在ActiveCheck模式下检测程序时,程序的运行速度基本不受影响,但其缺点是检测的错误种类有限,即只能检查出内存泄露错误、资源泄露错误、API函数使用错误。BoundsChecker 提供了另外一种检测错误的模式—— FinalCheck,也就是我们在前面提到的BoundsChecker的第二种使用模式。 FinalCheck可以检测出程序中更多的错误。下面我们就对它进行介绍。
3.2 用 FinalCheck检测更多的错误
FinalCheck具有BoundsChecker提供的所有检错功能。FinalCheck 是ActiveCheck的超集,它除了能够检测出ActiveCheck能够检测出的错误,还能发现很多 ActiveCheck 不能检测到的错误,包括:指针操作错误、内存操作溢出、使用未初始化的内存等等,并且,对于ActiveCheck能检测出的错误,FinalCheck能够给出关于错误更详细的信息。所以,我们可以把FinalCheck认为是ActiveCheck的功能增强版。我们付出的代价是:程序的运行速度会变慢,有时甚至会变的很慢。
要想在FinalCheck 模式下测试程序,不能使用VC++集成开发环境提供的编译连接器来构造程序,而必须要使用BoundsChecker提供的编译连接器来编译连接程序。当 BoundsChecker的编译连接器编译连接程序时,会向程序中插装一些错误检测代码,这也就是FinalCheck能够比ActiveCheck找到更多错误的原因。
下面就
介绍一下如何在FinalCheck模式下对程序进行测试:
1在VC++集成开发环境中打开你所要测试的项目。
2由于要使用BoundsChecker的编译连接器重新编译连接程序,所以我们为BoundsChecker独自构造一个文件夹。在VC++集成开发环境中,具体操作方法是:
A)点击[ Build/Configurations...]菜单命令。
B)在弹出的对话框中点击 Add 按钮。在Configuration 编辑框中添入你为BoundsChecker创建的文件夹的名称,这个名称是任意的,比如我们取名为BoundChecker。
C)在 Copy settings from组合框中选中 XXX—Win32 Debug项,然后点击OK按钮,接着点击Close按钮。
现在,我们已经为FinalCheck构造好了一个文件夹。
3 点击[Build/Set Active Configuration…] 菜单命令,选中你刚才为BoundsChecker建的文件夹, 然后点击OK按钮。这样BoundsChecker编译连接程序时生成的中间文件、可执行程序,都会被放到该文件夹下。
文章来源于领测软件测试网 https://www.ltesting.net/