今天刚到网上下了AQtime。因为有个通信及数据存储的程序出现的内存泄漏。在用户的环境里出现了两次,在测试的环境里一次也没有出现,开发人员猜测是一部分代码引起的。说要代码的覆盖测试。看看测试环境里有那些没有运行到。
问有AQtime有没有和自动化工具一起用?
在BBS里看到AQtime使用简介-覆盖率测试方法(转)
AQtime对实际可执行的代码行(不包括注释、空行、函数头、#include语句、宏定义、数据结构定义、case语句和对应的break、部分{}等)进行打点标记,完全执行的代码行标记绿点,部分执行到的代码行标记黄点,完全没有执行到的代码标记红点。这样AQtime统计的是插入的点数而不是实际的代码行数,这个点数要远远小于实际的代码行数。在AQtime中只有绿点的数量才作为被覆盖到的行的数量,而黄点和红点都被计算为未覆盖的行数,于是有计算覆盖率的公式:
绿点数量
覆盖率 = --------------------------------------------- * 100%
绿点数量+黄点数量+红点数量
二. AQtime覆盖率分析的意义
a.帮助发现未执行到的功能,为再次执行做准备;
软件中有些功能可能是相对比较隐蔽的,在编写测试用例时也可能没有涉及到此功能,如果没有覆盖率分析的话,那么此功能就可能不会被发现,这就造成覆盖不全面,为软件留下隐患。那么通过覆盖率分析就可以发现这些隐含的软件功能,可以针对这些功能重新设计必要的测试用例。
b.帮助发现特殊情况下才能走到的功能,以再次评判软件引入此功能是否
有必要;
这些特殊情况包括:异常处理、故障处理、特殊保护、特定情况下的功能处理等等,在软件测试的过程中这些情况往往是无法模拟的,这些无法覆盖到的功能有的可能是并不需要的,也就是说某些处理可能永远都无法走到,那么软件引入这些处理就是没有必要了。
c.帮助发现废码;
通过AQtime覆盖率的分析就可以发现所有的永远都不会执行到的代码,但是与程序无关的代码却不一定能够全部发现,因为这些代码是有可能被执行到的,例如程序的调试代码。这两者都应该在软件的后续版本中被删除掉,保留这些代码只会为软件的安全带来隐患,只是后者的排查难度比较大,需要进行全面的代码审查。
三. AQtime覆盖率分析的方法
1.重新编译被测软件,为软件增加调试信息项,具体添加的内容会因开发工具的不同而有所差异,详见AQtime帮助手册;
2.打开AQtime,新建一个工程;
3.加载被测软件:在AQtime左边的Setup属性页中点击“Add Module”按钮,此时会弹出一个“Add Module to Project”窗体,选择被测软件,然后点击“打开”按钮;
4.选择分析器:在AQtime的工具栏中点击“分析器选择” 下拉框,选择“Coverage Profiler”;
5.在Setup属性页的工具栏中的“View By”下拉框中,我们选择“Source File”;
6.新加一个“Areas”:在“Areas”区域中的空白处点击鼠标的右键,系统弹出一个浮动菜单,在菜单中点击“Add Area…”菜单项,此时系统出现“Add Area”对话框,接着,在对话框中的“Name”框中输入任意的字符,在“Type”中选择“Including”,“Level”中选择 “Line”,点击“OK”按钮;新建的Area出现在“Areas”区域中;
7.在“Areas”区域中系统有两个默认的Area:“Profile Entire .NET Code by Routines”和“Full Check by Routines”,请确认没有选择二者;
8.将被分析的源文件加载到新建的Area中:在Setup属性页中的Modules窗口中展开被测软件,此时被测软件所用到的所有源文件就以树状结构罗列出来,这些文件有的是开发工具自动加入的,我们就没有必要分析它们了,我们只选择开发方提供给我们的代码清单中包含的源文件即可。具体方法是,鼠标左建点击要加载的第一个源文件,然后按住Shift键,再用鼠标左键点击要加载的最后一个源文件并拖到新建的Area中,然后放开鼠标即可。如果添加了不需要分析的源文件,也可以进行移除操作,在Area中选择不需要分析的源文件用鼠标右键点击,在弹出的浮动菜单中点击“Remove”菜单项,然后确认即可;
9.运行被测软件:在工具栏中点击绿色的“Run”按钮或直接按F5键,AQtime开始运行被测软件,此时我们便真正开始了我们的测试工作,执行我们编写的测试用例。需要注意的是,在做完测试时一定要正常退出被测软件,一些意外的退出AQtime是无法获得测试结果的;
10.执行结果的保存与合并:我们的测试不可能一次全部做完,中间必有停顿,每做一次AQtime就会保存一次测试结果,当次数比较多时可能保存的结果就比较多了,这时AQtime的合并功能就显得非常重要了。测试结果保存在Report属性页中的Explorer窗口中,其中有三个根节点“Last Results”(最近的测试结果)、“Saved Results”(按了Explorer窗口工具栏上的保存按钮后保存的结果)和“Merged Results”(合并后的结果),这三个节点下的结果都可以合并,合并后的结果自动保存在“Merged Results”节点下。具体合并操作方法为:按住Ctrl键,用鼠标左键点击要合并的结果,然后放开Ctrl键,再在被选择的结果上点击右键,系统出现浮动菜单,选择“Merge”项,系统开始合并;
11.分析测试结果:在所有的测试结果中都有三个子节点“Routines”、“Modules”和“Source Files”。“Routines”是对函数覆盖分析的结果保存,“Modules”是整个软件总的覆盖率的统计,“Source Files”是针对在Area中加载的所有源文件的覆盖率的统计,我们分析的重点是“Routines”。在合并的测试结果中展开“Routines”节点,双击“All Threads”子节点,此时右边的“Report”
窗口中便会出现所有的函数的覆盖率统计表格。在表格中双击一个函数,在 AQtime的底边窗口中的“Editor”属性页中会看到相应的代码,属性页的左边会显示代码的调用情况——调用次数和标记。如果不能看到代码,那么就需要告诉AQtime代码的存在路径:在主菜单栏中点击“Options”,然后选择“Search Directories”项,系统弹出“Search Directories”对话框,接着点击“Browse…”按钮选择源代码所在的目录,如果源代码所在的文件夹比较多,那么我们可以只将根文件夹添加进去,然后选择“Include Subdirectorie”项,最后点击“OK”按钮。
在函数的覆盖率统计表格中我们可以看到程序的总行数、未覆盖行数、已覆盖行数、覆盖率和标记等列。根据这些信息我们便可以分析那些代码已经走到了那些还没有走到,没有走到的我们就要查找原因,针对不同的情况做不同的处理;
四. AQtime中影响覆盖率的因素
1.在新建的Area中没有去掉不要求分析的源文件。在测试正式执行前一定要把不需要参与分析的源文件去掉,否则覆盖率是不可能上去的,所有的工作都等于白做了。
2.用例设计不充分。在设计用例时不可能把所有的功能点都覆盖到,这就造成在执行用例时会有部分代码走不到,从而覆盖率受到影响。当我们分析覆盖结果时针对没有走到的代码还可以补充部分测试用例,以提高覆盖率。
3.源文件中存在废代码。包括以下几种情况:调试代码、无用的语句或函数,还有当需求发生了变化软件功能进行了修改后,但是以前的代码没有删除也是造成废码的情况。
4.不可能出现的异常处理。
5.不可能走到的条件分支。
6.空函数。
7.测试环境与实际运行环境的差别。
问有AQtime有没有和自动化工具一起用?
在BBS里看到AQtime使用简介-覆盖率测试方法(转)
AQtime对实际可执行的代码行(不包括注释、空行、函数头、#include语句、宏定义、数据结构定义、case语句和对应的break、部分{}等)进行打点标记,完全执行的代码行标记绿点,部分执行到的代码行标记黄点,完全没有执行到的代码标记红点。这样AQtime统计的是插入的点数而不是实际的代码行数,这个点数要远远小于实际的代码行数。在AQtime中只有绿点的数量才作为被覆盖到的行的数量,而黄点和红点都被计算为未覆盖的行数,于是有计算覆盖率的公式:
绿点数量
覆盖率 = --------------------------------------------- * 100%
绿点数量+黄点数量+红点数量
二. AQtime覆盖率分析的意义
a.帮助发现未执行到的功能,为再次执行做准备;
软件中有些功能可能是相对比较隐蔽的,在编写测试用例时也可能没有涉及到此功能,如果没有覆盖率分析的话,那么此功能就可能不会被发现,这就造成覆盖不全面,为软件留下隐患。那么通过覆盖率分析就可以发现这些隐含的软件功能,可以针对这些功能重新设计必要的测试用例。
b.帮助发现特殊情况下才能走到的功能,以再次评判软件引入此功能是否
有必要;
这些特殊情况包括:异常处理、故障处理、特殊保护、特定情况下的功能处理等等,在软件测试的过程中这些情况往往是无法模拟的,这些无法覆盖到的功能有的可能是并不需要的,也就是说某些处理可能永远都无法走到,那么软件引入这些处理就是没有必要了。
c.帮助发现废码;
通过AQtime覆盖率的分析就可以发现所有的永远都不会执行到的代码,但是与程序无关的代码却不一定能够全部发现,因为这些代码是有可能被执行到的,例如程序的调试代码。这两者都应该在软件的后续版本中被删除掉,保留这些代码只会为软件的安全带来隐患,只是后者的排查难度比较大,需要进行全面的代码审查。
三. AQtime覆盖率分析的方法
1.重新编译被测软件,为软件增加调试信息项,具体添加的内容会因开发工具的不同而有所差异,详见AQtime帮助手册;
2.打开AQtime,新建一个工程;
3.加载被测软件:在AQtime左边的Setup属性页中点击“Add Module”按钮,此时会弹出一个“Add Module to Project”窗体,选择被测软件,然后点击“打开”按钮;
4.选择分析器:在AQtime的工具栏中点击“分析器选择” 下拉框,选择“Coverage Profiler”;
5.在Setup属性页的工具栏中的“View By”下拉框中,我们选择“Source File”;
6.新加一个“Areas”:在“Areas”区域中的空白处点击鼠标的右键,系统弹出一个浮动菜单,在菜单中点击“Add Area…”菜单项,此时系统出现“Add Area”对话框,接着,在对话框中的“Name”框中输入任意的字符,在“Type”中选择“Including”,“Level”中选择 “Line”,点击“OK”按钮;新建的Area出现在“Areas”区域中;
7.在“Areas”区域中系统有两个默认的Area:“Profile Entire .NET Code by Routines”和“Full Check by Routines”,请确认没有选择二者;
8.将被分析的源文件加载到新建的Area中:在Setup属性页中的Modules窗口中展开被测软件,此时被测软件所用到的所有源文件就以树状结构罗列出来,这些文件有的是开发工具自动加入的,我们就没有必要分析它们了,我们只选择开发方提供给我们的代码清单中包含的源文件即可。具体方法是,鼠标左建点击要加载的第一个源文件,然后按住Shift键,再用鼠标左键点击要加载的最后一个源文件并拖到新建的Area中,然后放开鼠标即可。如果添加了不需要分析的源文件,也可以进行移除操作,在Area中选择不需要分析的源文件用鼠标右键点击,在弹出的浮动菜单中点击“Remove”菜单项,然后确认即可;
9.运行被测软件:在工具栏中点击绿色的“Run”按钮或直接按F5键,AQtime开始运行被测软件,此时我们便真正开始了我们的测试工作,执行我们编写的测试用例。需要注意的是,在做完测试时一定要正常退出被测软件,一些意外的退出AQtime是无法获得测试结果的;
10.执行结果的保存与合并:我们的测试不可能一次全部做完,中间必有停顿,每做一次AQtime就会保存一次测试结果,当次数比较多时可能保存的结果就比较多了,这时AQtime的合并功能就显得非常重要了。测试结果保存在Report属性页中的Explorer窗口中,其中有三个根节点“Last Results”(最近的测试结果)、“Saved Results”(按了Explorer窗口工具栏上的保存按钮后保存的结果)和“Merged Results”(合并后的结果),这三个节点下的结果都可以合并,合并后的结果自动保存在“Merged Results”节点下。具体合并操作方法为:按住Ctrl键,用鼠标左键点击要合并的结果,然后放开Ctrl键,再在被选择的结果上点击右键,系统出现浮动菜单,选择“Merge”项,系统开始合并;
11.分析测试结果:在所有的测试结果中都有三个子节点“Routines”、“Modules”和“Source Files”。“Routines”是对函数覆盖分析的结果保存,“Modules”是整个软件总的覆盖率的统计,“Source Files”是针对在Area中加载的所有源文件的覆盖率的统计,我们分析的重点是“Routines”。在合并的测试结果中展开“Routines”节点,双击“All Threads”子节点,此时右边的“Report”
窗口中便会出现所有的函数的覆盖率统计表格。在表格中双击一个函数,在 AQtime的底边窗口中的“Editor”属性页中会看到相应的代码,属性页的左边会显示代码的调用情况——调用次数和标记。如果不能看到代码,那么就需要告诉AQtime代码的存在路径:在主菜单栏中点击“Options”,然后选择“Search Directories”项,系统弹出“Search Directories”对话框,接着点击“Browse…”按钮选择源代码所在的目录,如果源代码所在的文件夹比较多,那么我们可以只将根文件夹添加进去,然后选择“Include Subdirectorie”项,最后点击“OK”按钮。
在函数的覆盖率统计表格中我们可以看到程序的总行数、未覆盖行数、已覆盖行数、覆盖率和标记等列。根据这些信息我们便可以分析那些代码已经走到了那些还没有走到,没有走到的我们就要查找原因,针对不同的情况做不同的处理;
四. AQtime中影响覆盖率的因素
1.在新建的Area中没有去掉不要求分析的源文件。在测试正式执行前一定要把不需要参与分析的源文件去掉,否则覆盖率是不可能上去的,所有的工作都等于白做了。
2.用例设计不充分。在设计用例时不可能把所有的功能点都覆盖到,这就造成在执行用例时会有部分代码走不到,从而覆盖率受到影响。当我们分析覆盖结果时针对没有走到的代码还可以补充部分测试用例,以提高覆盖率。
3.源文件中存在废代码。包括以下几种情况:调试代码、无用的语句或函数,还有当需求发生了变化软件功能进行了修改后,但是以前的代码没有删除也是造成废码的情况。
4.不可能出现的异常处理。
5.不可能走到的条件分支。
6.空函数。
7.测试环境与实际运行环境的差别。