0. Tessy 简介

Tessy是一个专门针对嵌入式软件的C/C++代码进行单元、集成测试的工具,它可以自动化地执行测试、评估测试结果并生成测试报告

在以V模型为例的开发模式中,Tessy主要应用在单元/模块测试,集成/组件测试。在V模型的开发模式中,单元测试是第一个动态测试活动。通过函数级测试,有效检查出每一类错误,比如算法错误、边界控制错误、数据溢出等。通过单元测试,可以尽可能早得发现Bug,防止到后面的测试过程或者到最终用户那里才被发现。在整个项目开发测试周期中,越早发现Bug越好,事实证明,开展详尽规范的单元测试能够有效减少系统测试和回归测试时间,降低开发成本

另外,Tessy也可以满足各类标准(ISO26262、IEC 61508、 EN 50128/50129、 DO-178B、汽车SPiCE或FDA的软件验证通用原则)对测试的需求,比如ISO26262中各个测试等级中对模块测试的要求可以使用Tessy来满足,当然Tessy本身也通过了Tuev的认证,可以在安全相关性的软件研发过程中被使用

1. 新建工程

image

Important

工程名以及相关路径不能包含中文字符和空格,否则报错

image

image

image

2. 导入源代码

image

image

image

Tip

强烈建议将项目代码中所有头文件存放在一个目录中,例如都存放在HHH目录中;此做法可避免大量的报错

image

image

image

image

Note

控制台中报error部分问题需要解决,warning部分可忽略不做处理,对工程无影响

image

image

image

image

3. 界面介绍

一共有9个界面,每个界面对应了不同的工作区,如下图

image

  1. Requirement Mangement: 需求管理界面,目前不适用

  2. Coverage Viewer: 代码覆盖情况查看界面

  3. Overview: 全局界面

  4. Test Interface Editor: 接口配置界面

  5. Classification Tree Editor: 分类树界面(用于集成测试)

  6. Test Data Editor: 用例设计界面

  7. Scenario editor: 工具场景界面,目前不适用

  8. Script Editor: 脚本编辑界面

  9. Interface Data Assigner: 接口数据管理界面(用于回归测试及代码修改后)

4. 接口配置处理

点击进入Test Interface Editor(TIE)界面,对函数接口进行配置,该界面会显示该函数的所有输入输出及函数接口

image

Important

  1. 接口中所有函数都必须进行打桩,包括内部和外部所有的函数,并且未使用部分的External Functions中的函数也必须全部打桩,否则执行用例将会报错
  2. 桩函数分为普通桩和高级桩,如果有高级桩的选项,必须打高级桩,只有普通桩则就打普通桩,否则执行用例时将报错

Tip

默认选择的接口配置有些会有出入,需要根据代码实际修改;一些不影响覆盖率的变量可以设置为不关心

image

5. 设计测试用例

点击Test Data Editor(TDE)界面,即可进行用例设计

image

Tip

  1. 用例设计应当结合源代码进行设计;用例步骤可单独执行测试,也可多步骤或多用例一起执行
  2. 每条用例或步骤可整体复制粘贴,可以节省用例设计时间
  3. 每条用例填写完后必须手动Ctrl+S进行保存,图标将由灰色变为黄色

image

image

Note

由于可以一键更改实际值,我们设计用例时可只设计输入,输出则可为任意值

image

image

点击Coverage Viewer(CV)界面查看覆盖情况

点击流程图中的任意节点和路径即可看到源代码及覆盖情况

Tip

在设计用例时,利用这个界面了解未覆盖部分情况可代码,能够大大提高测试效率

image

6. 生成报告

按照下图生成并导出测试报告

Note

报告只选取PDF文件,其中包含一个Overview report和若干个Detail report

image

image

https://qtiu5p27dc.feishu.cn/drive/folder/CXyUfKKumlxApcd4oAZcqrTTnoc?from=from\_copylink

https://qtiu5p27dc.feishu.cn/drive/folder/W0RUfsgRIldNYIdgsdcc7IylnMd?from=from\_copylink

7. 问题处理与操作

导入工程后,在编译分析阶段、用例执行阶段两个阶段过程中,每个项目都大概率会出现一些问题;然而花费时间的地方正是这些地方,所以针对某个项目或者兄弟项目时,解决这些问题可以让我们一劳永逸;这里列出一些常见的问题类型,并提供解决思路

  1. 在开始导入代码前,先将工程代码中所有的#error替换成//#error屏蔽掉

  2. 将所有头文件提取并放在一个文件夹中

  1. 出现头文件找不到的情况,报错为No such file or directory xxx.h

这种情况大概率为头文件未包含或者重复包含,检查头文件是否存在,如果未包含则需要将头文件放置到报错的文件中(C文件或者调用的头文件)

这种情况就是头文件的问题,将变量源头所在的头文件找到并添加到测试的C代码文件中

在Tessy环境配置中添加编译器自定义命令(谨慎操作):__builtin_va_start=;__builtin_va_end(ap)=((void)0)

根据控制台报错信息针对处理,一条一条解决

  1. 出现Unable to rececive block size这个问题

该问题为指针引起,第一个原因是在设计测试用例过程中,未将指针变量设置为动态类型,第二个原因不可避免,这个时候将代码中包含指针的语句进行屏蔽,则可完美解决

这个问题有两种解决方法,第一种最简单的就是将const去掉暂时解决执行过程,第二种方法可以配置Tessy环境,将Const变量设置为可作为输入(谨慎操作)

这个时候大概率是由于忘记打桩或者没打高级桩,或者TIE界面中接口为Unknow

如果花费大量时间仍然没有解决一些问题,可以针对报错部分进行屏蔽,即哪里报错屏蔽哪里(前提不影响大的方向下)

转载请注明出处