zoukankan      html  css  js  c++  java
  • C++ Test单元测试工具

    第一部分:

    C++ Test是Parasoft公司出品的一个针对C/C++源代码进行自动化单元测试的工具。它可以对源代码进行三种测试:白盒测试、黑盒测试以及回归功能测试。

     白盒测试
      C++ Test对C/C++源代码进行分析,针对所有的类的成员函数(包括:公共的、保护的以及私有类型的)进行测试。测试的方法是判断当输入一个非法的参数时,有关函数能否正确处理。(Record命令)在此状态下软件针对指定的文件、类或者是函数自动生成测试用例。

     黑盒测试
      不仅对源代码进行分析,并且只针对类的公共接口函数进行测试。(Play命令)
      在此状态下软件不自动生成测试用例,而是直接运行在"测试用例编辑器"中当前已有的测试用例(手工添加的)。

      回归功测试
      在修改源代码后用原有的测试用例进行重新测试。(Play命令)
      建议在实际使用中首先用Record命令执行一遍白盒测试,让软件根据函数自动生成相应的测试用例,然后再根据需要手工添加一些测试用例,最后再通过Play命令执行一遍黑盒测试。

      示例一
      假设我们要测试如下一个类的成员函数:int mode2(int nParam),则在进行白盒测试时软件会自动为我们生成如下6个测试用例:
      nParam = 1, 0, -1, 2147483647, -2147483647, 230

      可以看出,软件测试用例的生成主要还是测试一些边界值,例如最大值、最小值、0等。
      示例二
      假设我们要测试如下一个类的成员函数:void strcpy(char* dest, char const * src),则软件会自动生成如下9个测试用例:
      (1) dest = NULL, src = NULL
      (2) dest = "yPqKIJ!u_", src = NULL
      (3) dest = "", src = NULL
      (4) dest = NULL, src = "h)zn9b"
      (5) dest = "BsmC,/i=zI6CT}pX", src = "HcI{BeP(J"
      (6) dest = "", src = "% i?~TnON"
      (7) dest = NULL, src = ""
      (8) dest = "($MN<n;^", src = ""
      (9) dest = "", src = ""
      可见,如果我们的代码在实现时没有对各种可能情况(尤其是边界条件)进行特殊处理的话,则通过C++Test可以方便地发现这些潜在的问题。此外,对于一些特殊的测试情况,我们还可以手工创建测试用例。此外,采用C++ Test也可以帮助我们检查程序的编码情况,判断是否严格按编码规范进行开发。

    使用
      C++ Test的使用比较简单,即可以针对一个VC工程进行全面的测试,也可以一次只对一个C/C++源文件进行测试。
      在试用中发现,如果项目比较大时,最好不要直接对一个工程进行自动测试,而应按文件一个一个地测试,否则可会会导致程序死掉。由于其是采用JAVA技术开发的,所以在使用时最好使用运算速度较快的机器。

    第二部分:

    C++Test是一个C/C++单元级测试工具,自动测试C/C++类、函数或部件,而不需要编写测试用例、测试驱动程序或桩调用代码。C++Test能够自动测试代码构造(白盒测试)、测试代码的功能性(黑盒测试)和维护代码的完整性(回归测试)。C++Test是一个易于使用的产品,能够适应任何开发生命周期。通过将C++Test集成到开发过程中,您能够有效地防止软件错误,提高代码的稳定性,并自动化地实现单元测试(这是极端编程过程的基础)。
    著名测试专家Boris Beizer博士认为:"软件开发历史上最臭名昭彰的错误都是单元错误--即通过适当的单元测试可以发现的错误。" 他引证了Voyager的错误(将探测器发送到太阳)、AT&T和DCS的错误(曾造成美国三分之一的电话瘫痪)以及Intel奔腾芯片错误,都能够通过全面的单元测试排除掉。

    C++Test进行的测试类型有:自动化测试代码构造(白盒测试)、自动化测试代码的功能性(黑盒测试)和自动化测试代码更新以维护代码的完整性(回归测试)。

     

    图01. Parasoft C++test工具条直接嵌入到Visual Studio环境下使用

     

    图02. Parasoft C++test运行界面

    1. 自动建立测试驱动和桩函数

    C++Test自动建立一个测试驱动程序,其设计目标是极大化类的测试覆盖性和错误检测。为类建立测试驱动,你只要简单地打开这个类,然后按Build Test键。C++Test将自动建立测试驱动程序。
    另外,如果被测的方法需要调用当时还不存在或无法访问的函数,C++Test能够自动生成桩函数;这样能够测试与外部资源操作的交互作用和不包含任何隐藏的弱点。C++Test不是实际调用这些函数,而是调用桩函数并返回桩函数提供的值。如果你需要控制使用的返回值,你可以建立一个桩调用表,生命输入/输出的关系。

    你还能加入用户定义的桩函数。例如,如果你要使用原始的函数,且该函数定义在不同的文件中;或者你想要仿真原始函数的行为,而用一个简单的函数替代它

    自动生成C/C++类的测试驱动程序和桩函数的能力是C++Test所独有的;只有C++Test能够自动测试C/C++类(一当它能够编译时),而不需要用户的任何干预。使得你能够尽快地自动检测代码错误,以最容易、最省钱和最快速的方法找到和修正它们。如果没有这样的自动化工具,大量的时间和资源消耗将失去单元测试的潜在好处和现实意义。

    2. 静态测试

    C++Test内嵌了业界最出名的Effective C++(epcc)、More Effective C++(mepcc)、meyer-klaus(mk)以及Universal Code Standard(ucs)等超过700条的C/C++规范,用户自己还能自定义规范。同时,它也集成了由parasoft累积出来的一些规范。静态测试中,C++Test会对代码进行详尽的扫描,验证代码中是否存在和这些规范相冲突的地方,尽快的发现一些简单或低级错误,避免由它们带来的集成扩散。


    3. 白盒测试

    C++Test提供了一种有效并且高效的方法执行白盒测试。C++Test完全自动执行所有的白盒测试过程,自动生成和执行精心设计的测试用例。自动标记任何运行失败,并以一种简单的图示化结构显示。然后自动保存这些测试用例,能够方便地用于以后的回归测试。
    由于C++Test能够自动生成桩函数,或允许你加入自己的桩函数,因此它能够测试引用外部对象的类。换句话说,C++Test能够运行任何一个或一组类,并自动生成和执行一组测试用例,它们被设计成能够发现尽可能多的错误。

    C++Test允许你定制白盒测试用例的生成,和在什么层次上(项目、文件、类或方法)执行测试。


    4. 黑盒测试

    C++Test通过自动化黑盒测试的大部分操作,减轻了这类测试的负担。特别是以两种方法自动化黑盒测试的第一阶段--建立测试用例:
    · 帮助你设置每个测试用例的结果
    你可以简单地输入测试用例输入,然后让C++Test运行测试用例并自动确定实际的输出结果。如果结果正确,不需要其它动作。如果结果不正确,你可以输入预期的输出结果。这样比手工输入每个测试用例的结果更快更容易。
    · 自动生成测试用例的核心集合
    C++Test自动设计了一组广谱的白盒测试用例。当使用这些测试用例在黑盒测试时,你只需简单地观察实际的输出结果,然后对任何不正确的结果输入预期的值。
    当你需要输入或修改测试用例时,你可以在C++Test自动生成的测试用例框架种简单地键入相应的值。这将显著地加快建立测试用例的过程。

    在自动化建立黑盒测试用例的大多数步骤之外,C++Test完全自动化余下的黑盒测试步骤。按一个键,你能够对项目、文件、类或方法运行一个或一组。C++Test然后自动执行所有的测试用例,报告所有的输入/输出关系,并标记任何实际输出与预期不一致或导致程序崩溃的测试用例。


    5. 回归测试


    C++Test完全自动化与回归测试有关的所有步骤。C++Test首次测试某个类时,自动保存其测试和测试参数。当需要执行回归测试时,你可以打开合适的项目和文件,运行所有原来的白盒和黑盒测试用例;C++Test会自动运行完全相同的测试用例和测试参数,并告之发现的任何问题。这意味着你能够立即知道修改是否引入了任何错误。


    6. 监视测试覆盖性


    为了帮助你测量当前使用的测试用例集合的有效性,并且给你提供达到尽可能高的覆盖性的信息,C++Test自动监视测试覆盖性。

    C++Test实时跟试覆盖性,然后建立一个综合测试覆盖性报告。覆盖性窗口图示化地说明了当前正在被执行的代码行,已执行过的行和每行的执行次数。因此,它不仅指出了一个代码行是否被测试过,而且说明了被测试的有多彻底。这些信息对于确定那些代码需要追加测试是非常有帮助的。

    产品版本与系统要求说明

    目前C++test有三个版本:C++test专业版,C++test架构师版和C++test服务器版,点击这里察看详细说明

    系统要求:

    • Windows
      • Windows NT, Windows 2000, or Windows XP
      • One of the following compilers: Microsoft? Visual C++? 6.0, .NET?, .NET ? 2003, or 2005; GCC 2.95.x, 3.2.x, 3.3.x, or 3.4.x; Green Hills MULTI for Windows x86 Native v4.0.1
      • Pentium class processor 800MHz
      • 512 MB RAM (1 G recommended)
      • 150 MB free disk space for C++test installation
      • Additional disk space for C++test projects data
    • UNIX
      • Linux Red Hat kernel 2.4 (with System V IPC) or higher with glibc 2.2 or higher and an x86-compatible processor OR Solaris 7, 8, 9 and an UltraSPARC processor
      • One of the following compilers:
        • Linux: GCC 2.95x, 3.2.x, 3.3.x, 3.4.x , or 4.0.x
        • Solaris: GCC 2.95x, 3.2.x, 3.3.x, 3.4.x, or 4.0.x; Sun? C++ 5.3? (Sun Forte C++ 6 Update 2), Sun? C++ 5.5? (Sun ONE Studio 8), Sun? C++ 5.6? (Sun ONE Studio 9), Sun? C++ 5.7? (Sun ONE Studio 10), or Sun? C++ 5.8? (Sun ONE Studio 11); Green Hills MULTI for SPARC Solaris Native v4.0.1
      • 512 MB RAM (1 G recommended)
      • 150 MB free disk space for C++test installation
      • Additional disk space for C++test projects data
  • 相关阅读:
    mysql 基础sql语句
    mysql存储引擎概述
    docker命令总结
    python链接postgresql
    Log4.net示例
    postgresql 使用游标笔记
    npm常用命令
    Nginx命令
    Ubuntu命令总结
    NHibernate总结
  • 原文地址:https://www.cnblogs.com/spinsoft/p/2579580.html
Copyright © 2011-2022 走看看