推荐阅读:
- parasoft Jtest 使用教程:Windows单机和插件安装
- parasoft Jtest 使用教程:代码规范静态分析Suppressions(禁止)概念解析
- parasoft Jtest 使用教程:RuleWizard与BugDetective静态分析
- parasoft Jtest 使用教程:单元测试和用例生成详细解析
单元测试和测试用例的生成可谓是整个测试过程的核心和重点,今天就给大家解析这两个概念,让大家对这两点有更加深刻的理解,当然你也可以在评论区发表你的看法哟~
单元测试
“单元测试”是指在最简单的功能点测试软件代码,该功能点通常是单个类,或者一个函数。单元测试通常由开发人员在项目开发周期内执行,而不是在 QA 阶段进行。通过使用单元测试,您可以确保应用程序构建块在集成之前的可靠性,从而提高整个应用程序的质量。如果测试进行得早,则识别和修正缺陷的难度通常较低,耗时也较少。
手动单元测试通常涉及手工编写测试集、指定输入数据以及为缺少的函数提供桩函数。 Jtest 可将这些任务自动化,以使得单元测试更有效率,更具一致性。
通常,单元测试可能包括:
- 异常测试(也称为白盒测试、应力测试、结构测试或可靠性测试),用来确认代码的结构可靠性,能处理所有可行的输入以及输入组合,不会产生预料之外的异常。
- 功能测试,用于验证所建立模块是否符合需求和功能是否正常工作。在单元级别创建功能测试涉及到人工输入,以指定特定的输入和状态条件、以及预期的输出。功能测试可以作为白盒测试来实施(在了解接受测试的单元的内部组织和实现的情况下进行测试),或者黑盒测试,后者仅基于接受测试的单元的外部行为进行。
- 回归测试,用来验证现有代码行为不会随着代码库改进而更改。完成此测试的通常做法是,开发一组测试,验证它们的正确性,在代码更改之后运行它们,以捕获代码行为中的偏差。回归测试可能要依赖于异常测试和功能测试。
Jtest 可以执行上述所有类型的单元测试;可以自定义所执行测试的级别和范围,以便体现您的需求和测试习惯。
当您运行 Jtest 自动生成的测试用例时,请执行异常测试。此类测试可暴露意料之外的异常,并检查类在结构方面是否合理。可靠性测试能否成功,取决于代码是否能完全覆盖,因此必要时,您可能会想要扩展自动生成的测试用例,以增强代码覆盖率。Jtest 可测量测试覆盖率,以有助于您评估覆盖率,并确定哪些地方需要附加测试。
当您扩展自动生成的测试用例,以验证类的公共接口是否按照规范所述运行时,请执行功能测试。此外,如果你的规格说明公共接口需要由合同来设计。但您执行自动生成的单元测试用例,Jtest执行功能性测试。更重要的是,Jtest Tracer可以自动生成符合实际的功能性测试测试用例,这些测试用例在运行应用程序的过程中捕获代码的行为(例如,使用用例执行应用程序)
回归测试涉及到定期测试改进的代码库,其做法是运行所有可用的测试用例,并检查预期的结果是否发生更改。在当前测试的测试用例结果与预期的测试用例结果不匹配时,Jtest 会报告错误消息。
此外,Jtest可以配置来观察内存使用情况和报告任何检测到的内存泄露问题。如果内存泄露检测是可用的,在测试用例执行过程中,Jtest监控对象分配事件和对象销毁事件。如果它被分配了但在测试结束时,垃圾回收器没有销毁该对象,则该对象被认为是泄露的。每一个测试被执行三次,以确保泄露的内存没有初始化或缓存。如果Jtest确定泄露发生,它报告三次测试执行中最小的泄露和标记哪些内存被分配的行的位置。
测试用例生成
编写单元测试是一项重要任务,它确保了代码的质量。单元测试不仅能暴露错误和功能问题,而且能作为常规的回归测试运行,以有助于您确定代码的添加/修改是否破坏了现有功能,或者是否造成意外的更改。
不过,编写测试是一项耗时的工作,如果不仔细就可能会遗漏重要的情况。Jtest 提供的单元测试支持,可帮助开发人员和测试人员非常快速地创建良好的单元测试。Jtest 之所以能提供帮助,是因为它自动生成许多单元测试,允许用户自定义测试生成和执行,以符合他们的参数选择和需求。
Jtest 自动生成大量测试用例,这些测试用例会试图执行代码中的所有不同路径,然后保存实际的测试用例结果。从本质上来讲,这些测试用例就好比在对代码的当前状态照 x 射线,在修改代码之前拍摄代码运行情况的快照。它们还有助于识别可能影响代码可靠性和安全性的潜在异常状况。
Jtest 可以为任何Java代码生成从单个函数到整个项目的测试用例。通过在Jtest 中运行这些测试用例,您可以验证类的健壮性,识别可能造成程序进入不一致状态或终止状态的输入。您可以自定义预先配置的测试方式、以及特定的测试生成设置。
测试用例可以用C 或 C++ 源码来实现和保存(所用语言取决于要测试的原始源码)。这些测试用例使用与通用的 CppUnit 格式类似的格式。C++test 的测试提供了比 CppUnit 更广泛的功能,包括可以测试C代码、并在测试框架内提供对私有和保护成员数据以及成员函数进行访问的功能。
现有 CppUnit 测试用例可以导入到 C++test 中,与自动生成的测试用例配合使用。可以通过用户定义的测试用例对测试套件进行扩展,以改进测试覆盖率并验证特定的功能;可以通过修改自动生成的测试用例、或定义新的测试用例,来添加这些测试。对于回归测试,可以自动验证和配置任何可用的测试用例。通过保存所有可用的测试用例,并充分将它们用于自动回归测试,您可以建立一个回归测试基础结构,快速地识别因代码修改而引入的意外功能更改和异常。
自动测试用例生成的功能,允许您在更短的时间内创建更有效的测试套件。测试用例的开发,历来是单元测试过程中最耗时的部分。通过使用 Jtest,您无需编写任何代码以生成一组使用每一个类的基础测试用例,您可以通过向自动生成的测试用例添加少量代码来创建更多的测试用例。通常,您无需为简单方法编写测试用例而担心,可以将资源集中于更复杂方法的扩展/添加测试。
而且,自动测试用例生成可通过以下两种重要途径,有助于您预防发生错误:
- 它使您能够在完成类的编写或修改之后,立即生成和执行测试用例。这有助于您找到并纠正错误,以免您(或某个团队成员)无意中因添加问题类代码或与问题代码交互而引入附加的错误。
- 它通过自动生成必需的测试用例范围和类型,使得快速彻底的可靠性测试成为可能,这是通过手动设计测试用例所无法达到的。Jtest 会试图创建测试用例,执行所测试的全部方法的各种可能分支。例如,如果方法包含一个条件语句(例如 if 块),Jtest 会试图生成测试用例,以测试 if 语句的 true 和 false 结果。
查看更多parasoft测试产品