在TrueTime界面中有一个工具条,它的外观与我们在TrueCoverage中说到的那个工具条完全一样,实现的功能也基本一样,只是在TrueCoverage中,它控制的是覆盖率,在这里,它控制的是性能数据。我们现在来对它做一下说明。如下所示:
图5-2 运行控制工具条
这个工具条在程序运行起来后,会由不可用状态变为可用状态。工具条上各按钮功能为:
按钮1:如果在程序的运行过程中你按下了该按钮,则性能统计只计算到此,虽然还可以继续操作程序,但此时对程序的任何操作都不再计入到性能统计中去了。
按钮2:如果在程序的运行过程中你按下了该按钮,则TrueTime会马上显示截止到目前为止的性能统计情况。之后你可以继续操作程序,TrueTime会继续在后台记录程序的性能数据。
按钮3:如果在程序的运行过程中你按下了该按钮,则TrueTime会清除在这之前所记录的性能数据,使各项性能数据为零。你可以继续操作,TrueTime在后台从零开始重新记录程序的性能数据。
6当你退出程序时,TrueTime会显示本次操作过程中被执行到的模块、函数、代码行的执行性能数据。要想对程序开始一次新的性能统计,点击TrueTime 中的[Program / Start]菜单命令即可。
TrueTime检测结果的界面如下:
图5-3 TrueTime的运行界面
区域1:
列出了多次运行应用程序后,得到的多个性能检测结果。双击某一项,会在区域2、区域3中显示应用程序在这一次运行过程中的详细性能数据。
区域2:
该窗口中显示的数据与你在区域1中选中的某一次性能检测相对应。窗口中显示的数据以模块(exe、dll等)为单位,列出了程序在某一次执行过程中,各模块的性能数据。对于各模块更为详细的性能数据,显示在区域3中。
区域3:
该窗口中显示的数据与你在区域2中的选择相对应,显示了模块中各个函数的性能数据。在区域3中有三个标签页——Function List标签页、Source标签页、Session Summary标签页。每个标签页中都列出了一组性能数据。其实要使用TrueTime,也就是要了解这些性能数据的含义。下面按照标签页对各项性能数据的含义进行解释:
Function List标签页
在Function List标签页中,用鼠标左键双击某一个函数,会弹出一个对话框,如下图所示:
图5-4 性能数据查看对话框
通过该对话框,能够查看该函数的父函数(调用该函数的函数)、子函数(被该函数调用的函数)的性能信息。
Function List标签页列出了选定模块所包含的函数的性能数据,这些数据包括:
Function Name——函数名称。
% in Function——这是一个百分比,分子为该函数执行的时间,分母为系统从开始运行到结束的时间。
% with Children —— 这是一个百分比,分子为该函数执行的时间,其中包括在该函数中又调用的子函数的运行时间,分母为系统从开始运行到结束的时间。
Called——函数在本次的执行过程中被调用的次数。
Image——函数所在的模块名称(模块指EXE、DLL、OCX等)。
% in Image——这是一个百分比,分子为该函数执行的时间,分母为该函数所在的模块(EXE、DLL、OCX)运行的时间。
Average——函数多次运行时的平均执行时间,其中不包括该函数调用的子函数的运行时间。
First——函数第一次执行所耗费的时间。
Minimum——函数的多次执行中,耗费时间最短的那一次所用的时间。
Maximum——函数的多次执行中,耗费时间最长的那一次所用的时间。
Average with Children——函数被多次执行时,平均执行时间,其中包括该函数调用的子函数运行的时间。
Real——函数的平均执行时间,包括该函数调用的子函数所运行的时间,除此之外,还包括了花费在系统中同时运行着的其他应用程序的线程所耗费的时间。
Address——函数的入口地址。
Source标签页
Source标签页列出了选定模块的指定源文件所包含的各行程序代码的性能数据,这些数据包括:
Count——该行代码在测试过程中被执行的次数。
% of Function——这是一个百分比,分子为该行代码执行的时间,分母为该函数执行的时间。
% With Children——这也是一个百分比,分子为该行代码执行的时间,分母为系统从开始运行到结束的时间。
Time——在系统的运行过程中,该行代码运行时间的累计和。
Functions——该行代码调用的函数的数量。
Line#——代码所在行的行号。
Source——源代码。
Session Summary标签页
Session Summarye标签页列出了该次性能统计的概要信息,内容很好理解,在此就不详细介绍了。
TrueTime为性能数据提供了四种不同的单位,分别是:CPU时钟周期、微妙、毫秒、秒。我们可通过TrueTime中的[View/Scale]菜单项进行设置,如下:
图5-5 性能数据单位设置菜单
在菜单中选中哪一项,性能数据就会以该时间单位显示。
5.2 其他
TrueTime可以收集没有源码部分(比如第三方的DLL、OCX等)的运行性能数据,但如果我们想获得某一个模块的详细运行性能数据,还是需要该模块的源代码。
除了可以在VC++集成环境中使用TrueTime外,从 [开始菜单] 中启动TrueTime,然后打开经TrueTime编译连接生成的可执行文件,也可以进行性能数据的收集,操作方法与集成到VC++集成开发环境中的TrueTime的操作方法一样,在此不再赘述。
TrueTime的介绍到此就结束了。
6 结束
至此,NuMega for Visual C++的三个子功能——BoundChecker、TrueCoverage、TrueTime的使用方法,都已经介绍完毕。现在我们应该做的就是使用NuMega去测试程序,在实践中进一步深入了解这个白盒测试工具。