今天刚到网上下了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使用的更多相关文章

  1. AQTime教程(1)

    AQTime教程 1 简介 AQTime和MemProof都是AutomatedQA旗下的产品,AQTime比MemProof提供了更丰富强大的功能.该产品含有完整的性能和调试工具集,能够收集程序运行 ...

  2. AQTime教程

    1 简介 AQTime和MemProof都是AutomatedQA旗下的产品,AQTime比MemProof提供了更丰富强大的功能.该产品含有完整的性能和调试工具集,能够收集程序运行时关键的性能信息和 ...

  3. .NetChajian

    Code generation(代码自动生成) NVelocity CodeSmith X-Code .NET XGoF - NMatrix / DEVerest Compilation(编译工具) ...

  4. 浅析c#内存泄漏

    一直以来都对内存泄露和内存溢出理解的不是很深刻.在网上看到了几篇文章,于是整理了一下自己对内存泄露和内存溢出的理解. 一.概念 内存溢出:指程序在运行的过程中,程序对内存的需求超过了超过了计算机分配给 ...

  5. [XAF] How to improve the application's performance

    [自己的解决方案]数据量大时,可显著提升用户使用体验! 1.Root ListView 参考官方的E1554 点击导航菜单后首先跳出查询条件设置窗体进行设置 可设置查询方案或查询方案的查询条件,排序字 ...

  6. Graphic32中TBitmap32.TextOut性能分析[转载]

    转载:http://blog.csdn.net/avan_lau/article/details/6958497 最近在分析软件中画线效率问题,发现在画一些标志性符号的方法,存在瓶颈,占用较大的时间. ...

  7. Delphi XE5 常见问题解答

    Delphi XE5 常见问题解答 有关于新即时试用的问题吗?请看看 RAD Studio 即时试用常见问答. 常见问题 什么是 Delphi? Embarcadero? Delphi? XE5 是易 ...

  8. UE4 性能优化方法(工具篇)

    本文依据UE4官方文档以及官方博客等总结而来,可能不全面,后面会陆续添加.内置工具的详细说明请参考官方文档. 游戏帧率很低,或者有卡顿的现象,可能会有很多原因,这时候不要乱猜,比如是不是人物太多了或者 ...

  9. delphi一些小技巧 从别处看到

    开发环境--------    Delphi 7是一个很经典的版本,在Win2000/XP下推荐安装Delphi 7来开发软件,在Vista下推荐使用Delphi 2007开发软件.安装好Delphi ...

随机推荐

  1. eclipse中把选中的代码全部变成大写或者小写的快捷键

    Ctrl+shift+x是把选中的变成大写 Ctrl+shift+y是把选中的变成小写

  2. Java中for each与正常for循环效率对比

    循环ArrayList时,普通for循环比foreach循环花费的时间要少一点:循环LinkList时,普通for循环比foreach循环花费的时间要多很多. 当我将循环次数提升到一百万次的时候,循环 ...

  3. opencv_将图像上的4个点按逆时针排序

    1:代码如下: #include "stdafx.h" #include "cxcore.h" #include "cvcam.h" #in ...

  4. TCP定时器 之 连接建立定时器

    当服务器收到新的syn请求,会回复syn+ack给请求端,若某时间内未收到请求端回复的ack,新建连接定时器超时执行回调,重传syn+ack,当超时超过固定次数时,该连接中止:本文主要分析其初始化流程 ...

  5. docker —宝塔面板

    下载个单独的系统镜像 [root@git opt]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/nginx-tomcat ...

  6. 跨IDC ycache原理和配置说明

    总体介绍:   多idc缓存方案的invalid方案(如下图),是通过两个操作保证多个idc之间的缓存的高可用性和最终一致性的. 更新数据库后,发送invalid消息:invalid消息广播到其他id ...

  7. Eclipse Setting

    下载 https://www.eclipse.org/downloads/packages/ 自动保存代码 编码设置 代码自动提示 .abcdefghijklmnopqrstuvwxyz 字体大小设置 ...

  8. leetcode-hard-array-54. Spiral Matrix-NO

    mycode 思路:这种方格图一定要预先设置定位的变量,例如最大的长.宽,变化中的长.宽,在while循环中也要不断判断是否满足break条件 class Solution(object): def ...

  9. PADS常用画板过程

    转载:PADS LAYOUT的一般流程 http://www.doc88.com/p-9129306856292.html https://wenku.baidu.com/view/cc4e0b338 ...

  10. 浏览器端-W3School-JavaScript-Browser: Navigator 对象

    ylbtech-浏览器端-W3School-JavaScript-Browser: Navigator 对象 1.返回顶部 1. Navigator 对象 Navigator 对象 Navigator ...