在TESSY当中,测试对象的创建与识别不完整的排查,关键是要让TESSY拿到完整的待测源码和编译环境,再通过模块分析把可测试的函数识别出来。测试对象出现缺失的时候,问题往往不是出在测试用例上,而是源文件的范围、头文件的路径、宏定义、条件编译或者筛选规则,跟正式的工程没有对上。排查的时候,应当先去看一看分析日志,然后再去检查预处理之后的源码内容。
一、TESSY测试对象怎么创建
TESSY里面的测试对象,通常对应的是待测源文件里的函数或者方法。创建的时候不需要一个一个去输入函数的名字,而是先把测试模块建好,把源文件添加进去,然后再去执行模块分析,由软件把那些可以拿来做单元测试的对象给生成出来。
1、建立测试模块
在【Test Project】中创建Test Collection,再在测试集合下建立Module。
Module这个模块是用来存放待测的源码、编译的环境、测试的对象、接口的定义,还有测试用例的。模块的名字,可以照着软件的组件、功能的单元,或者是源文件的名字来起,这样可以避免到了后期,冒出来好几个名字差不多的模块,却分不清楚它们各自对着哪一块代码。
2、添加待测源文件
进到模块的【Sources】设置里面去,把当前测试单元需要去分析和编译的源文件给加进来。
不需要把整个软件工程,一口气全都塞到同一个模块里面去。测试对象依赖到的其他源文件,是可以根据编译和链接的需要再去补的,相关的头文件,则是通过包含路径去解析。一旦源码的范围弄得太大,就会让外部的函数、全局的变量,还有接口之间的关系变得很绕,模块分析要花掉的时间也会跟着变长。
3、生成测试对象
把模块选上以后,去执行【Analyze Module】这个操作。
TESSY把源码分析完了之后,就会把认出来的函数,列在模块的下头。接下来,还要去检查参数、返回值、全局的变量,还有外部的函数,去把哪些数据算是输入,哪些结果需要去验证,以及哪些外部的调用,要拿桩函数来把它替掉。
二、TESSY测试对象识别不完整怎么排查
测试对象识别得不完整,常常碰到的样子,是有一部分函数没有显示出来、函数的参数缺了、全局的变量没有被认到,或者是模块分析跑完以后,就只生出来很少的几个对象。遇到这种情况,不要反反复复地去新建模块,而应当先去把分析过程里面蹦出来的头一批错误给处理掉。
1、查看模块分析信息
打开【Message Console】,检查模块分析产生的错误和警告。
要是里头有头文件找不到、数据类型的识别不了、宏展开没成功,或者是语法解析出了岔子,那就应当先去把最早出现的那个问题给解决掉。基础的类型要是没有正确地解析出来,跟在后头的函数声明,还有接口的变量,就可能会一连串地跟着缺掉,光去处理最后一条报错,常常是没有用的。
2、补齐编译环境
在测试环境里面,去检查一下【Compiler Includes】和【Compiler Defines】。
包含的路径,应当能把项目的公共头文件、芯片的支持包,还有编译器相关的那些目录都给盖住,宏的定义也要跟正式工程实际构建的条件对得上。要是目标函数是受条件编译控制的,可是TESSY的环境那边没有去定义对应的宏,这个函数就会在预处理的那一步被移掉,也就没有办法变成测试对象了。
3、检查对象筛选规则
在模块设置中检查【Test Object Include List】。
去确认一下,这里头是不是保留了函数的名称、前缀,或者是匹配的表达式。要是规则划定的范围太窄了,那就只有那些正好合得上条件的函数,才会被显示出来。从别的测试模块那里复制过来以后,也可能还留着旧项目里面的筛选内容。可以先把筛选暂时关掉,再重新去分析一遍模块,看一看那些缺掉的函数,是不是就回来了。
三、源码能够编译但仍识别不全怎么办
正式工程那边能编译通过,并不代表TESSY就拿到了完全一模一样的预处理环境。编译器扩展的语法、静态的内联函数、由宏生成出来的函数、模板,还有写在头文件里面的实现代码,这些东西都有可能会影响到测试对象的识别结果。
1、检查预处理结果
去瞅一眼TESSY实际拿去分析的那份预处理源码,确认目标函数是不是还在里面,跟它相关的类型还有函数的声明,有没有被条件编译给删掉。
要是目标函数已经从预处理的结果里面消失了,那就应当回头去查一查宏的定义、包含的文件,还有编译的选项。要是函数明明还在那里,却没有在测试对象的列表里面冒出来,那再去接着查一查函数是用什么方式修饰的,还有对象筛选的条件。
2、处理特殊代码结构
把检查的重点,放在静态的内联函数、模板、命名空间、编译器扩展的关键字、由宏生成出来的函数,还有嵌入式的汇编上面。
到了必要的时候,是可以在TESSY的测试环境里面,去补上一些兼容的定义,帮着解析器去认出编译器专用的那些语法,但是不要为了把测试对象给生出来,就直接去动手改动正式的代码逻辑。要是函数全都是实现在头文件里面的,那还要去确认一下,这个头文件是不是确实进到了当前模块的分析范围里头。
3、重新分析测试模块
在动手改过了源文件的范围、头文件的路径,或者是宏的定义之后,要在模块上面重新去执行一次【Analyze Module】。
分析跑完了之后,再去检查一下测试对象的列表,还有接口上面发生的变化。要是参数的类型、全局的变量,或者是外部的函数发生了变化,那已经有了的测试数据,可能就要重新去做映射。在调整以前,应当先把模块和测试用例备份一下,不要一下子就把整个模块都给重置掉,免得把已经建好的测试资产给清没了。
总结
TESSY的测试对象怎么去创建,还有测试对象识别得不完整该怎么去排查,可以照着先建立测试模块、再添加待测的源文件、接着去执行模块的分析、然后去检查测试接口,这么个顺序来做。测试对象缺了的时候,要重点去查看Message Console、Compiler Includes、Compiler Defines,还有Test Object Include List这几个地方,再结合着预处理的结果,去把条件编译和特殊的代码结构查一查。把TESSY的分析环境,跟正式工程的编译环境给对齐了,测试对象和接口才能被完完整整地认出来。