战略合作业务

Cpptest

Parasoft® C/C++test™ – 针对C/C++开发的综合性代码质量保障工具

Parasoft C++test能够使团队开发更好的代码,实施更有效的测试,以及持续地监视实现其质量目标的过程。使用C++test经时间验证的重要最佳实践—例如静态分析,全面的代码审查,运行时错误检测,集成覆盖率分析的单元测试和组件测试—能够在开发周期的开始阶段,自动地在开发者的桌面上完成。能够通过命令行模式自动化地执行回归和持续集成测试,为监测和分析质量趋势提供数据。此外,C++test与Parasoft的Concerto结合在一起,提供基于Web交互式的仪表板,具有细分能力的Concerto使团队能够通过C++test的结果以及其它关键进度指标来把握项目状态和趋势。

针对嵌入式和跨平台开发,C++test可以用在基于宿主环境和目标环境的代码分析和测试流程中。详情请参阅下面介绍。

自动化代码分析以提供代码规范性

一个正确实施的编码策略通过建立预防性的编码规范能够降低全部种类的编程错误。C++test通过静态分析代码来检查是否遵循这些策略。对C++test进行配置可以为他们的团队和组织实施一个代码标准的策略,用户可以在内建和自定义规则中定义他们自己的规则集。可以生成多种格式的代码分析报

数千条内建规则—包括实现FDA,PCI,中华人民共和国国家军用标准(GJB5369),MISRA,MISRA 2004,新的MISRA C++标准,和来自于Meyers的Effective C++和Effective STL等书籍以及从其他主流源码中总结的准则—有助于预防C/C++语言中潜在的缺陷,实施最佳的编码实践,以及提高代码的可维护性和可重用性。使用图形化的RuleWizard编辑器创建的自定义规则能增强标准API的使用,并预防

在不执行软件的情况下检测运行时缺陷

BugDetective, Parasoft先进的数据流静态分析功能,通过模拟应用程序的执行路径—可能跨越多个函数和文件—并确定这些路径是否会触发运行时缺陷。可以检测的缺陷类型包括使用未初始化的或无效的内存,空指针解引用,数组和缓冲区溢出,除零,内存和资源泄漏,以及各种风格的死代码(Dead Code)。

C++test通过为每个潜在的缺陷提供一个完整的路径分析,跟踪缺陷的产生过程,开发人员可以在IDE中快速地定位到路径中的任何一点,从而极大地简化了缺陷分析的工作。

C++test的静态分析在不执行代码的情况下检测严重的缺陷

(图示为Eclipse版本)

    优点
  • 提高团队开发效率
    应用一套全面的最佳实践集合以缩减测试时间,降低测试难度,和减少到达QA阶段的缺陷数量。
  • 优化团队开发资源的配置
    自动地审查已知的代码问题,以便有更多的时间可以被用于需要人类智慧的地方。
  • 建立更可靠的代码库
    高效地构建,并可持续地执行,和维护一个全面的回归测试套件,用于检测更新是否破坏了既有的功能。
  • 让C和C++代码质量和进度可视化
    获取对用于实现需求代码的评估,并跟踪其过程以实现质量和进度的目标。
  • 降低项目成本
    自动对广泛的潜在用户路径进行测试以查找出只有在真正使用时才能发现的问题。
简化代码审查

代码审查是已知的发现代码缺陷最有效的方法。然而不幸的是,许多组织没有充分利用代码审查,因为他们认为这需要做大量的工作。C++test的代码审查模块自动准备,通知,和跟踪同行代码审查,实现了一个非常有效的面向团队的过程。所有代码审查的状态,包括全部审查者的注释,都由C++test基础设施来维护和自动地分配。C++test支持两种典型的代码审查流程:

  • 提交后代码审查
    这个模式是通过自定义的源码控制器接口来自动地识别源代码库中的代码变化,并且根据预先设定的关于更改的代码到审查者的映射来创建代码审查任务。
  • 提交前代码审查
    用户可以通过选择一个为审查而分配的文件集合来从图形界面开始一个代码审查,或者自动地识别所有本地修改的源代码。

团队代码审查的功效通过C++test的静态分析能力得到进一步的增强了。因为能够自动地监测团队的编码策略,几乎完全消除了逐行检查的需求。到代码被提交用于审查的时候,违规也已经被识别出来并清理了。那么审查就可以集中在检查算法,审查设计,和找寻自动化工具无法检测的细微错误。

功能
  • 通过静态分析来使代码遵守用户选定的编码规范
  • 提供图形化的RuleWizard编辑器来创建自定义的编码规则
  • 通过对代码路径做静态模拟分析以定位潜在的运行时错误
  • 提供图形化接口和动态跟踪功能使代码审查自动化
  • 应用程序监测/内存分析
  • 自动生成并执行单元和组件级的测试
  • 灵活的桩函数机制
  • 完全支持回归测试
  • 代码高亮显示的覆盖率分析
  • 不止针对单元测试的代码覆盖率分析(包括应用程序级的测试)
  • 使用图形界面和命令行方式进行全面团队部署
监测应用程序的内存问题

运行时错误检测是用于消除严重的内存相关缺陷并具有零误报率的最著名方法。持续地监测运行的应用程序以查找某些类别的问题如内存泄漏,空指针,未初始化的内存,和缓冲区溢出以及在测试过程完成之后立即可见结果。

无需高级的和耗时的测试活动,准备好的应用程序通过标准的功能性测试然后标记出所有存在的问题。应用程序可以执行在目标设备,模拟的目标平台,或者宿主机上。收集的问题以及理解和解决这个问题所需的细节直接地显示在开发人员的IDE中(包括内存块的大小,数组索引,分配/释放堆栈跟踪等)。

在应用程序执行期间收集覆盖率指标。这些信息可以用于查看应用程序的哪一部分已经测试和微调整回归单元测试集(作为功能性测试的补充)。

运行时错误检测
  • 通过简单的功能测试

    识别复杂的内存相关的问题—例如:

    • 内存泄漏
    • 空指针
    • 未初始化的内存
    • 缓冲区溢出
  • 从应用程序运行过程中收集代码覆盖率
  • 通过在实际目标环境中监测应用程序以提升测试结果的准确性
具有覆盖率分析的单元和集成测试

C++test的自动化极大地提高了测试新开发或旧代码的正确性和可靠性的效率。C++test自动地为每个函数生成完整的测试,包括测试驱动和测试用例,这些测试用例是类似于CppUnit格式的纯C或C++代码。不论是否修改这些测试,它们都被用于代码功能性行为的初步验证。通过使用边界情况的条件,这些自动生成的测试用例也检查对未知输入的功能响应,揭露潜在的可能性问题。

完全通过一套具体的GUI构件来简化测试的创建和管理。图形化的测试用例向导使开发人员能够为选中的函数快速地创建黑盒功能性测试,而不必担心它们的内部运作或嵌入的数据依赖。数据源向导帮助参数化测试用例和桩函数以最小的努力使测试范围和覆盖率得到提升。使用桩函数视图很方便分析和生成桩函数,此视图显示所有在代码中使用的函数并允许用户为任何在测试范围内不可用的函数创建桩函数—或者为特定的测试目的而改变现有的函数。在测试用例浏览器中集中进行测试执行和分析,并合并了所有现有的项目测试和提供一个明确的通过/失败状态。这些功能用于支持自动的持续集成和测试“随进度而测试(test as you go)”开发特别有用。

提供多种测试覆盖率分析报告,包括语句,分支,路径,和MC/DC覆盖率,帮助用户评估测试的有效性和完整性,以及证明符合测试和验证的需求,例如DO-178B。测试覆盖率是通过对所有受支持的覆盖率指标的代码高亮来体现在GUI或用颜色表示的代码列表报告中。可以以多种格式生成包括文件,类,和函数数据的概要覆盖率报告。

支持嵌入式和跨平台开发

随着嵌入式系统中的软件组件变得越来越重要,全面提升了质量在嵌入式软件中的关注度。长期存在的质量对策,例如使用调试器做测试变得不再有效或不够充分。更加复杂的问题是,许多开发人员不能轻易地在实际的部署环境中运行一个测试程序,因为他们无法访问最后的系统硬件。为了应对这些挑战,需要在整个开发生命周期中实现代码质量—在自动化实施和监测的协助下,协同使用一个被时间证明的早期缺陷预防技术。

对于要求高品质的行业,例如航空,医疗,汽车,运输,和工业自动化,Parasoft基于Web交互式仪表板和具有SQL数据库支撑的数据细分能力的统计和报告系统,通过让遵守情况可视化来实现高效和可度量的质量过程。

在宿主机,模拟器和目标机上测试

C++test自动化实施完整的测试执行流程,包括测试用例生成,交叉编译,部署,执行,和加载结果(包括覆盖率指标)返回到GUI中。可以为自动的测试执行来从GUI或命令行交互地驱动测试,以及批处理回归测试。在交互模式中,为了方便调试或验证用户可以单独地或在选中的组中运行测试。对于批处理执行,用户可以针对指定的代码,它们的名称或者在磁盘上的位置来执行测试。

高度的可定制化

C++test允许用户完全自定义测试执行流程。除了使用内建的自动化测试以外,用户可以包含自定义的测试脚本和shell命令来使工具符合他们具体的构建和测试环境。

通过交叉编译为预期的目标环境所提供的运行时库,C++test可以被广泛的用于多种嵌入式操作系统和结构体系。C++test的所有测试中间产物的源代码都可见,因此完全可以移植。

C++test可自定义的工作流程使用户能够按照代码开发的方式来进行测试,并使用相同的测试套件来确认目标环境下的功能性/可靠性问题