第一次接触Tessy时,我对着全英文的界面有点发怵。但实际用下来发现,这个工具的逻辑其实非常清晰。我们先从最基础的工程创建说起,这里有几个新手容易踩的坑需要特别注意。
安装Tessy时建议选择默认路径,我试过自定义路径带空格的情况,结果导入头文件时各种报错。新建工程时弹出的第一个对话框,工程名称这里要像对待C语言变量名一样谨慎——只允许字母、数字和下划线,中文字符和空格都是禁止的。有次我手快写了"测试工程",结果后续所有操作都无法进行,不得不重新开始。
创建测试集时有个隐藏技巧:右键点击工程名称时,弹出的菜单里"Add Test Set"和"New Test Set"功能完全一样。但如果你在左侧导航栏空白处右键,会发现只有后者可用。这个细节官方文档没提,是我反复尝试才发现的。
选择编译器环节更是个分水岭。GNU GCC编译器对新手最友好,但如果你在用IAR或Keil开发实际项目,就需要在TEE标签页手动添加。这里有个冷知识:Tessy 4.2之后版本开始支持Clang,但需要单独安装插件。我建议先用GCC跑通流程,再考虑其他编译器。
很多人以为导入代码就是简单的文件拖拽,其实Tessy在这步藏着不少玄机。就拿isValueInRange这个函数来说,它的原型可能是这样的:
c复制int isValueInRange(int value, int min, int max) {
return (value >= min) && (value <= max);
}
在Compiler窗口添加头文件路径时,有个反常识的操作:路径中的斜杠必须用正斜杠(/)而不是反斜杠()。即使你在Windows系统下,也要遵循这个规则。我有次花了半小时排查编译错误,最后发现是路径分隔符的问题。
代码分析阶段最容易忽略的是预处理定义。如果你的头文件里有用到#ifdef条件编译,记得在"Preprocessor Definitions"里补上对应的宏定义。有次我测试覆盖率始终上不去,后来发现是漏定义了DEBUG宏,导致半个函数的代码被编译器直接跳过了。
TIE(Test Interface Editor)界面看似简单,实则暗藏杀机。设置输入输出参数时,指针类型必须手动勾选"Pointer"选项,否则后续测试用例注入数据时会直接崩溃。这个坑我踩过三次,现在每次操作都会条件反射般检查这个选项。
设计isValueInRange的测试用例时,我习惯先用等价类划分法确定边界。这个函数的测试应该包含这些典型场景:
在TDE(Test Data Editor)里新建用例时,有个效率技巧:按住Ctrl键可以批量选择多个参数统一设置。比如要测试边界值时,可以一次性选中min和max参数,然后统一设置为边界条件。
测试覆盖率设置里最容易被忽视的是"MC/DC"(修正条件/判定覆盖)。对于isValueInRange这样的布尔运算函数,建议勾选这个选项。它能验证每个条件是否独立影响判定结果,我在汽车电子项目中这个选项是必开的。
运行用例后如果看到覆盖率没到100%,别慌。先点开CV(Coverage Viewer)看具体哪行代码没执行。有次我发现return语句始终是部分覆盖,仔细检查才发现是漏测了min>max的异常分支。
导出报告前,我强烈建议先在"Report Configuration"里自定义模板。默认模板会包含大量无用信息,而实际项目中我们通常只需要:
有个实用技巧:在"Export Options"里勾选"Include screenshots",会自动把关键操作界面的截图插入报告。这个功能在给领导演示时特别管用,能直观展示测试过程。
报告格式选择也有讲究。PDF适合正式交付,但调试时我更喜欢HTML格式——它生成的交互式覆盖率报告可以直接点击代码跳转。有次客户质疑某个分支未覆盖,我就是用这个功能当场演示了测试用例的触发过程。
最后提醒个小细节:报告默认会包含完整路径信息。如果涉及敏感项目,记得在"Security Options"里勾选"Obfuscate paths",这个选项会把路径替换为占位符,避免泄露目录结构。