软件说明
Parasoft C++test 能够使团队开发更好的代码,实施更有效的测试,以及持续地监视实现其质量目标的过程。使用 C++test 经时间验证的重要更佳实践—例如静态分析,全面的代码审查,运行时错误检测,集成覆盖率分析的单元测试和组件测试—能够在开发周期的开始阶段,自动地在开发者的桌面上完成。能够通过命令行模式自动化地执行回归和持续集成测试,为监测和分析质量趋势提供数据。此外, C++test 与 Parasoft 的 Concerto 结合在一起,提供基于 Web 交互式的仪表板,具有细分能力的 Concerto 使团队能够通过 C++test 的结果以及其它关键进度指标来把握项目状态和趋势。
针对嵌入式和跨平台开发, C++test 可以用在基于宿主环境和目标环境的代码分析和测试流程中。详情请参阅下面介绍。
C++test 的静态分析在不执行代码的情况下检测严重的缺陷 (图示为 Eclipse 版本) |
优点
|
自动化代码分析以提供代码规范性
一个正确实施的编码策略通过建立预防性的编码规范能够降低全部种类的编程错误。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 的代码审查模块自动准备,通知,和跟踪同行代码审查,实现了一个非常有效的面向团队的过程。所有代码审查的状态,包括全部审查者的注释,都由 C++test 基础设施来维护和自动地分配。C++test 支持两种典型的代码审查流程:
- 提交后代码审查。这个模式是通过自定义的源码控制器接口来自动地识别源代码库中的代码变化,并且根据预先设定的关于更改的代码到审查者的映射来创建代码审查任务。
- 提交前代码审查。 用户可以通过选择一个为审查而分配的文件集合来从图形界面开始一个代码审查,或者自动地识别所有本地修改的源代码 。
团队代码审查的功效通过 C++test 的静态分析能力得到进一步的增强了。因为能够自动地监测团队的编码策略,几乎完全消除了逐行检查的需求。到代码被提交用于审查的时候,违规也已经被识别出来并清理 了。那么审查就可以集中在检查算法,审查设计,和找 寻自动化工具无法检测的细微错误。
监测应用程序的内存问题
运行时错误检测是用于消除严重的内存相关缺陷并具有零误报率的最著名方法。持续地监测运行的应用程序以查找某些类别的问题—如内存泄漏,空指针,未 初始化的内存,和缓冲区溢出—以及在测试过程完成 之后立即可见结果。
无需高级的和耗时的测试活动,准备好的应用程序通过标准的功能性测试然后标记出所有存在的问题。应 用程序可以执行在目标设备,模拟的目标平台,或者宿 主机上。收集的问题以及理解和解决这个问题所需的细节直接地显示在开发人员的 IDE 中 (包括内存块的 大小,数组索引,分配/释放堆栈跟踪等。)
在应用程序执行期间收集覆盖率指标。 这些信息可以 用于查看应用程序的哪一部分已经测试和微调整回归单元测试集(作为功能性测试的补充)。
具有覆盖率分析的单元和集成测试
C++test 的自动化极大地提高了测试新开发或旧代码的正确性和可靠性的效率。 C++test 自动地为每个函数生成完整的测试,包括测试驱动和测试用例, 这些测试用例是类似于 CppUnit 格式的纯C 或 C++ 代码。不论是否修改这些测试, 它们都被用于代码功能性行为的初步验证。通过使用边界情况的条件, 这些自动生成的测试用例也检 查对未知输入的功能响应,揭露潜在的可能性问题。
完全通过一套具体的 GUI 构件来简化测试的创建和管理。图形化的测试用例向导使开发人员能够为选中的函数快速地创建黑盒功能性测试,而不必担心它们的内部运作或嵌入的数据依赖。数据源向导帮助参数化测试用例和桩函数— 以最小的努力使测试范围和覆盖率得到提升。使用桩函数视图很方便分析和生成桩函数,此视图显示所有在代码中使 用的函数并允许用户为任何在测试范围内不可用的函数创建桩函数—或者为特定的测试目的而改变现有的函数。在测试用例浏览器中集中进行测试执行和分析,并合并了所有现有的项目测试和提供一个明确的通过/失败状态。 这些功能用于支持自动的持续集成和测试”随进度而测试(test as you go)“ 开发特别有用。
提供多种测试覆盖率分析报告,包括语句,分支,路径,和 MC/DC 覆盖率, 帮助用户评估测试的有效性和完整性, 以及 证明符合测试和验证的需求,例如 DO-178B。测试覆盖率是通过对所有受支持的覆盖率指标的代码高亮来体现在 GUI 或用颜色表示的代码列表报告中。可以以多 种格式生成包括文件, 类,和函数数据的概要覆盖率报告。
先进的单元测试功能
|
仪表板跟踪关键的开发指标 |
自动化回归测试
C++test 有助于健壮性回归测试套件的开发,帮助检测是否增量代码变更破坏了现有的功能。无论团队是有大量的遗留代码库,还是少量刚好完成的代码,或者介于 两者之间的情况,C++test 都能够通过自动地记录运行时测试结果而产生的测试断言来生成捕获现有软件行为 的测试。随着代码库的发展, C++test 重新运行这些测试并将当前的结果与原来捕获的”黄金集合(golden set)”相比较。它可以很容易地被配置为使用不同的执行设置,测试用例,和桩函数以支持在不同环境中的测试 (例如, 不同的持续集成阶段, 测试不完整的系统, 或 者测试一个完整系统的特定部分)。这种类型的回归测试对于支持敏捷开发和发布周期短的情况, 以及确保不
可配置的详细报告
C++test 的 HTML, PDF 和自定义格式的报告可以通过 GUI 控件或一个选项文件来配置。标准报告包括有通过 /失败的代码分析和测试结果的概要,已分析文件的列表,和一个代码覆盖率概要。此报告可以进行自定 义,以包括活动的静态分析检查的清单, 具有单独测试的通过/失败状态的扩展测试输出, 对于关键指标的趋势图参数,和用颜色表明的所有代码覆盖率结果的完整代 码清单。生成的报告可以根据各种角色的过滤器通过邮件被自动地发送。除了直接提供数据给负责缺陷所标记代码的开发人员, C++test 也发送概要报告给管理人 员和团队负责人。
高效的团队部署
C++test 建立了一个高效的过程以确保软件验证任务被植入到团队的现有工作流程中并且自动地—使团队 更加专注于真正需要人类智慧的任务。通过自动化任务安排C++test 建立了一个高效的过程以确保软件验证任务被植入到团队的现有工作流程中并且自动地—使团队更加专注于真正需要人类智慧的任务。通过自动化任务安排
支持嵌入式和跨平台开发
随着嵌入式系统中的软件组件变得越来越重要,全面提升了质量在嵌入式软件中的关注度。长期存在的质量对策,例如使用调试器做测试变得不再有效或不够充分。更加复杂的问题是,许多开发人员不能轻易地在实际的部署环境中运行一个测试程序,因为他们无法访问最后的系统硬件。为了应对这些挑战,需要在整个开发生命周期中实现代码质量—在自动化实施和监测的协助下,协同使用一个被时间证明的早期缺陷预防技术。
对于要求高品质的行业,例如航空,医疗,汽车,运输,和工业自动化, Parasoft 基于 Web 交互式仪表板和具有 SQL 数据库支撑的数据细分能力的统计和报告系统,通过让遵守情况可视化来实现高效和可度量的质量过程。
C++test 可自定义的工作流程使用户能够按照代码开发的方式来进行测试,并使 用相同的测试套件来确认目标环境下的功能性/可靠性问题 |
在宿主机,模拟器 和目标机上测试
C++test 自动化实施完整的测试执行流程, 包括测试用例生 成,交叉编译,部署,执行,和加载结果 (包括覆盖率指标) 返回到GUI 中。可以为自动的测试执行来从 GUI 或命令行交互地驱动测试, 以及批处理回归测试。在交互模式中, 为了方便调试或验证用户可以单独地或在选中的组中运行测 试。对于批处理执行,用户可以针对指定的代码,它们的 名称或者在磁盘上的位置来执行测试。
高度的可定制化
C++test 允许用户完全自定义测试执行流程。除了使用内建 的自动化测试以外,用户可以包含自定义的测试脚本和 shell 命令来使工具符合他们具体的构建和测试环境。
通过交叉编译为预期的目标环境所提供的运行时库,C++test 可以被广泛的用于多种嵌入式操作系统和结构体系。 C++test 的所有测试中间产物的源代码都可见,因此完全可以移植。