Cantata AutoTest生成完整的单元测试脚本或添加测试用例到现有的Cantata脚本中。它根据如下指定的代码结构覆盖率度量目标,通过解析C源代码来确定遍历代码的所有可能路径:
100%函数入口点覆盖
100%语句覆盖
100%判定覆盖
100%唯一原因MC/DC覆盖
算法创建一个测试用例向量来执行所有的代码路径,它使用Cantata强大的白盒能力来设置数据、参数和控制函数调用接口。
测试向量驱动代码并检查函数间传递的参数、可访问的全局数据值、调用序列和返回值。
AutoTest生成的测试用例可以像用户自己生成的测试用例一样进行编辑,每个测试用例都描述了通过创建该用例来执行的代码的路径,这使得它们易于维护。
配置自动化测试生成
AutoTest生成选项可以很容易的通过GUI或命令行来配置:
所需的代码覆盖率(规则集)
如何模拟或拦截函数调用
是否访问全局静态变量
隔离的单元测试或集群的集成测试静态函数
数据检查(比如:全局数据、函数调用参数或返回值);
在强制路径的函数调用期间是否修改全局数据;
自动生成时对时间、路径、数组等的最大值限制
代码覆盖率规则集的选择将确定深度(如达到覆盖率目标所需的用例数),规则集的种类由AutoTest特定的和标准的Cantata工作空间的代码生成选项来确定。
隔离的单元测试或集群的集成测试,使用黑盒或白盒测试方法,提供灵活性,以适应任何首次测试的彻底性和代码重构所需的测试维护性。
如果AutoTest不能生成测试用例或测试用例不完整,则AutoTest Generation Report将会对源代码中任何可测试性问题提供有用的见解。
AutoTest Generation Report中的告警消息表明了哪些地方不能生成测试用例以及测试用例为什么生成失败,并指示源代码中可能存在的问题或动态测试它的能力。因此,即使AutoTests不能动态运行,它也可以作为代码评审的有力补充。
Cantata AutoTest Generation Report表明通过执行自动生成的测试用例可预期达到的代码覆盖率。由于AutoTest测试用例最初按执行通过而生成,唯一会失败的检查是设置的覆盖率规则达不到预期的目标。
获取完整的代码覆盖率只是测试目标的一部分。可检测AutoTest生成的测试用例,并与需求之间建立适当的映射(更多详情查看Cantata需求追踪功能)。在这种情况下,AutoTest极大的减少了开发人员选择测试用例向量来验证需求的工作量。
当测试复杂代码时,即使有详细的需求,通过健壮性测试后代码中仍可能遗留未执行的路径。因为完整的覆盖率所需的输入向量的不同组合很难识别。对于这些“边缘测试用例”,如果代码不是冗余的,AutoTest可以生成测试用例来填补缺失的代码覆盖率。
AutoTest能够仅针对所选函数生成一组专门的测试用例达到100%覆盖率。在任何对整体代码覆盖率没有贡献的测试用例上,自动化的代码覆盖率优化机制能够单击按钮来删除/禁用它。
依赖于系统测试的遗留代码修改起来昂贵且低效,但是编写一组完备的单元测试在商业上是行不通的。Cantata 的AutoTest为选择的代码自动生成一套单元测试用例。这些测试用例可以作为基线安全集,当将来代码变更时防止回归错误。这样减少了对昂贵、耗时的系统测试的依赖,以及更为彻底和精确的瞄准错误。
Cantata AutoTest生成了一组Cantata Makefiles,这些文件可以很容易的集成到任何开源的或商业的持续集成工具中,以便在开发过程中,在每次集成时都能实现完全自动化的测试。
即使正在使用其它单元测试工具,也可以升级到具有强大测试功能优势的Cantata工具上。当传统工具没有很好的支持或不符合安全标准工具认证时,尤其如此。
Cantata AutoTest提供两种高度自动化的方式来升级单元测试工具:
对于可接受质量级别的代码库,现有的测试可以简单的替换为AutoTest生成的Cantata单元测试用例集。
对于使用C语言开发的传统工具(如xUnit类的工具),现有的测试用例可以合并到Cantata测试脚本中,保留遗留测试用例的价值,然后使用包括AutoTest在内的其它Cantata功能来增加测试。
可以使用Test Script Wizard 调用AutoTest,也可以在Test Script Manager视图下,在现有测试脚本中生成其它测试用例。对于较大规模的代码库,使用命令行运行AutoTest可能更为方便。
AutoTest解析源代码并使用Cantata选项来生成:
AutoTest Generation Report为生成的测试用例提供概况的和详细的两种报告。
Cantata测试脚本(或为现有测试脚本新增测试用例)
Cantata Makefiles用来构建测试可执行文件
构建并运行生成的测试用例,生成标准的Cantata结果和报告。
如果Cantata AutoTest生成不完整的测试或遇到可疑的代码质量,在AutoTest Generation Report将会生成告警消息。这些告警消息表明了源代码或其动态测试中可能存在的问题,因此它们可能具有重要的价值。
Cantata AutoTest的报告包括:
不可达代码,不能生成测试用例来测试被测软件的所有部分。
潜在的崩溃场景,如空指针、数组索引越界、判定使用未初始化变量和零除
类型截断,类型强制转换导致数据丢失
使用未初始化数据,比如大型结构体中的字段
函数中有非常量静态数据,在测试用例起始处其值是未知的
非返回函数,函数没有向调用函数返回——尽管Cantata有能力围绕这个功能进行测试
隐式的函数声明,在声明前调用了函数