在TESSY中,测试对象的创建与识别不完整的排查,重点在于让TESSY获得完整的待测源码和编译环境,再通过模块分析将可测试的函数识别出来。当测试对象没有完整显示时,问题通常并不在于测试用例本身,而是源文件的范围、头文件的路径、宏定义、条件编译或者筛选规则,与正式工程没有保持一致。排查时应当先查看分析日志,再去检查预处理之后的源码内容。
一、TESSY测试对象怎么创建
TESSY中的测试对象,一般对应待测源文件里面的函数或方法。创建时不需要逐条输入函数名称,而是先建立测试模块、添加源文件,再执行模块分析,由软件将当前模块中能够进行单元测试的对象识别出来。
1、建立测试模块
在【Test Project】中创建Test Collection,再在测试集合下建立Module。
Module用来存放待测源码、编译环境、测试对象、接口定义和测试用例。模块的名称可以按照软件组件、功能单元或者源文件的用途来设置,这样可以避免到了后期出现多个模块名称相近,却无法判断各自对应哪一部分源码的情况。
2、添加待测源文件
进入模块的【Sources】设置,把当前测试单元需要分析和编译的源文件添加进去。
不必将整个软件工程一次性全部放进同一个模块。相关的头文件通常是通过包含路径参与解析的,只有确实需要编译和链接的源文件才加入模块。如果源码范围过大,外部函数、全局变量和接口之间的关系就会变得复杂。
3、生成测试对象
选中模块之后,执行【Analyze Module】。
分析完成以后,被识别到的函数会显示在模块下方。这个时候还需要检查参数、返回值、全局变量和外部函数,确认哪些数据属于输入,哪些结果需要验证,以及哪些外部调用需要使用桩函数来替代。
二、TESSY测试对象识别不完整怎么排查
测试对象识别不完整,常见的表现包括部分函数没有显示出来、函数参数缺失、全局变量未被识别,或者模块分析之后只生成了很少量的对象。遇到这种情况,不要反复新建模块,而应当先把分析过程中最早出现的错误解决掉。
1、查看模块分析信息
打开【Message Console】,检查模块分析所产生的错误和警告。
如果存在头文件找不到、数据类型无法识别、宏展开失败或者语法解析异常等情况,就应当优先处理排在最前面的那个错误。基础类型如果没有被正确解析,后面的函数声明和接口变量可能会接连缺失,只盯着最后一条报错去处理,通常不会有什么效果。
2、补齐编译环境
在测试环境中检查【Compiler Includes】和【Compiler Defines】。
包含路径应当覆盖项目公共头文件、芯片支持包以及编译器相关的目录,宏定义也要与正式工程的实际构建条件保持一致。如果目标函数受到条件编译的控制,而TESSY环境中没有定义相应的宏,那么该函数就会在预处理阶段被移除,无法成为测试对象。
3、检查对象筛选规则
在模块设置中检查【Test Object Include List】。
确认其中是否保留了函数名称、函数前缀或者匹配规则。当筛选范围设置得过窄时,只有符合条件的函数才会被显示出来。从其他测试模块复制之后,也可能遗留下旧项目中的筛选内容。可以先将筛选暂时取消,再重新分析模块,观察缺失的函数是否能够恢复。
三、源码能够编译但仍识别不全怎么办
正式工程能够编译通过,并不等于TESSY获得了完全相同的预处理环境。编译器扩展语法、静态内联函数、宏生成函数,以及头文件中的实现代码,都有可能影响测试对象的识别结果。
1、检查预处理结果
查看TESSY实际用于分析的预处理源码,确认目标函数仍然存在,相关的类型和函数声明也没有被条件编译删除。如果目标函数已经从预处理结果中消失,就应当回头检查宏定义、包含文件和编译选项。如果函数依然存在,再继续检查函数的修饰方式以及对象筛选条件。
2、处理特殊代码结构
重点检查静态内联函数、模板、命名空间、编译器扩展关键字、宏生成函数和嵌入式汇编。在必要的时候,可以在测试环境中补充兼容定义,帮助解析器去识别编译器专用的语法,但不要为了生成测试对象而直接去修改正式的业务逻辑。如果函数全部都是在头文件中实现的,还需要确认该头文件确实已经进入了当前模块的分析范围。
3、重新分析测试模块
在完成对源文件范围、头文件路径或者宏定义的调整之后,在模块上重新执行【Analyze Module】。
分析结束之后,再去检查测试对象的列表以及接口的变化。当参数类型、全局变量或者外部函数发生变化时,已有的测试数据可能需要重新映射。在调整之前,应当先保存好模块和测试用例,不要直接把整个模块重置,以免将已经建立起来的测试资产清除掉。
总结
TESSY测试对象的创建方法,以及测试对象识别不完整时的排查思路,可以按照建立测试模块、添加待测源文件、执行模块分析、检查测试接口这样的顺序来进行。测试对象缺失的时候,应当重点查看分析信息、头文件路径、宏定义和对象筛选规则,再结合预处理的结果去检查条件编译与特殊的代码结构。将TESSY的分析环境与正式工程的编译环境对齐之后,测试对象和接口才能被完整地识别出来。