LDRA Testbed(TBrun)软件单元测试_操作指南

系列文章目录

LDRA Testbed软件静态分析_操作指南
LDRA Testbed软件静态分析_自动提取静态分析数据生成文档
LDRA Testbed软件静态分析_Jenkins持续集成_(1)自动进行静态分析的环境搭建
LDRA Testbed软件静态分析_Jenkins持续集成_(2)配置邮件自动发送静态分析结果
LDRA Testbed软件静态分析_软件质量度量
LDRA Testbed软件静态分析_常见问题及处理
LDRA Testbed(TBrun)软件单元测试_操作指南
LDRA Testbed(TBrun)软件单元测试_实例讲解
LDRA Testbed(TBrun)软件单元测试_常见问题及处理
LDRA Testbed(TBrun)软件集成测试_操作指南
LDRA Testbed(TBrun)软件集成测试_实例讲解
LDRA Testbed(TBrun)软件集成测试_常见问题及处理
粉丝问题解答系列文章… …
其他持续更新中… …


文章目录

  • 系列文章目录
  • 前言
  • 一、TBrun简介
  • 二、TBrun界面简介
  • 三、单元测试配置
    • 1、新建测试工程
    • 2、配置编译器
  • 四、编写测试用例
    • 1、创建测试序列
    • 2、创建测试用例
    • 3、编写用例描述
    • 4、设置桩函数
    • 5、插入初始化代码
    • 6、设置输入输出
  • 五、执行测试用例
  • 六、覆盖率分析
  • 七、导出测试用例
  • 总结


前言

通过前面的几篇文章,使用Testbed进行软件静态分析的内容已经基本讲解完毕。从这篇文章开始,将继续讲解如何使用TBrun进行软件单元测试、软件集成测试。文章皆为本人的一些使用经验,若有不当之处,欢迎各位读者交流指正。


一、TBrun简介

TBrun是LDRA公司出品的软件单元/集成测试工具,其能够自动生成测试驱动、自动执行测试用例、自动统计测试覆盖率,测试人员只需要专注于测试用例设计,帮助开发人员和测试人员更高效地完成测试任务。

二、TBrun界面简介

TBrun软件界面如下:
在这里插入图片描述
①是日志信息窗口,比如生成测试驱动、编译测试程序、执行测试用例等过程,都会在窗口输出相应的日志信息。
②是测试用例窗口,显示已经设计的所有用例。
③是文件视图窗口,显示被测源码文件下的变量、类型、函数以及测试覆盖率等。
④是所有调用的函数视图,显示当前被测源码文件中的所有函数。
⑤是测试用例输入输出窗口,每一条测试用例都可以在这个窗口中设计相应的输入输出列表。

三、单元测试配置

1、新建测试工程

在TBrun的上方菜单栏点击Source -> Single File(单个文件)或Multiple Files(多个文件),在弹出的窗口中选择单个被测源码文件或多个被测源码文件:
在这里插入图片描述
以Single File(单个文件)为例,在select file窗口选择一个被测源码文件:
在这里插入图片描述
导入被测源码文件后,TBrun会自动进行静态分析,分析完成后,会显示出file view和calls view窗口显示相关信息:
在这里插入图片描述

2、配置编译器

点击TBrun中上方菜单栏的Configure -> LDRA Testbed Configuration Options -> Switch Compiler进行编译器配置:
在这里插入图片描述
在弹出的Configure Compiler窗口中确认Default Compiler和Source Compiler,以选择IAR编译器为例,切换编译器后点击OK即可:
在这里插入图片描述
需要注意的是:
1、Default Compiler和Source Compiler都应该选择目标编译器;
2、如果在列表中没有找到对应编译器,可以通过Add Compiler添加需要的编译器(需要先配置编译环境)。

四、编写测试用例

1、创建测试序列

在TBurn中是使用测试序列来管理测试用例和测试数据的,因此在新建测试用例前需要创建序列(为了方便管理,通常一个被测函数创建一个测试序列)。
在TBurn菜单中选择Sequence->New:
在这里插入图片描述
输入序列名称(为了方便管理,序列名以函数名命名),勾上Code Coverage选项(这样在运行测试用例后才会对代码覆盖率进行统计):
在这里插入图片描述
进行单元测试时,在Test Scenarios选项卡选择Isolate fully all code elements选项(完全隔离所有代码元素,即单元测试时,将本单元以外的调用全部默认打桩隔离):
在这里插入图片描述
点击“Continue”即可完成测试序列的创建。

2、创建测试用例

在TBurn界面的右上角文件视图窗口中,选中被测函数,鼠标右键->Create New Test Case创建测试用例:
在这里插入图片描述
弹出测试用例创建向导窗口,此时窗口会显示函数的相关信息,如果被测函数涉及到指针,还会引导你设置指针指向的实体,按照引导步骤操作即可:
在这里插入图片描述
创建好测试用例后,会在左下角窗口中生成相应的测试用例条目,在右下角会显示该测试用例的默认输入输出列表,如下所示:
在这里插入图片描述

3、编写用例描述

用例描述包括序列级别的描述和用例级别的描述。
1、序列级别的描述
在TBurn菜单中点击Sequence->Sequence Documentation,在弹出的下图窗口中进行描述即可:
在这里插入图片描述

2、用例级别的描述
选中相应的测试用例,鼠标右键->Documentation & Requirements->Documentation,在弹出的下图中进行描述即可:
在这里插入图片描述
在这里插入图片描述
在测试用例描述中,建议可以填写被测软件版本、设计需求追踪、测试类型、测试方法、测试用例概述等,用于测试用例的管理、维护,以及生成测试文档。

4、设置桩函数

桩函数是被测试函数调用的子函数的一个替代函数,使得测试时不用关注原调用函数的具体功能,可以专注于被测函数本身的实现逻辑。对于桩函数有很多可选操作,涉及到桩函数的形参输入检查,形参输出赋值,桩函数返回值设置,桩函数修改全局变量(C++中还包括改变成员变量)、插入桩函数代码等。
函数打桩有两种方式:
1、选中测试用例,鼠标右键->Stub Management,这样的桩函数设置是跟选中的测试用例绑定的:
在这里插入图片描述
2、在函数调用列表中,单元测试模式默认会将所有调用函数打桩(系统函数除外)。选中要打桩的函数,鼠标右键->Managed Stub Properties可以进行全局桩设置:
在这里插入图片描述
选择template for new test cases,可以设置一个全局的测试桩模板,这样在新建的测试用例中会默认带有这个桩模板(测试用例中如果未更改,则会作为每一个测试用例的默认桩设置;测试用例中如果更改了这个桩,其会被测试用例中的桩设置覆盖):
在这里插入图片描述
最常用的桩函数设置有:对无返回值的函数打空桩(仅打桩,什么都不设置)、对有返回值的函数设置返回值(set return value on exit)、插入桩函数测试代码,实现对某些变量的赋值(set code segment)。

5、插入初始化代码

在被测函数中,有时会用到结构体指针或数组等变量,此时如果通过创建IO Variable的方式进行初始化,会导致要创建的IO Variables非常之多。因此,可以通过插入初始化代码的方式完成数组等的初始化。
1、序列级的初始化(对所有用例有效)
在TBurn菜单中点击Sequence->Code Inserts->Sequence Initialisation Code:
在这里插入图片描述
2、用例级的初始化
选中相应的测试用例,鼠标右键Code Inserts->Initialisation Code:
在这里插入图片描述
在这里插入图片描述

6、设置输入输出

在Variables I/O view窗口里的变量,在最左边有输入/输出的标识,输入以“I”标识,输出以“O”标识(此处的输出是指预期的输出值)。这些变量列表的Name、Type、Use等都可以根据自己的测试需要进行修改。对于标识为“I”的输入变量,一定要在输入框中填写一个确定的值,否则用例无法执行。
在这里插入图片描述
根据实际的测试需求,如果发现默认的测试用例I/O窗口中缺少相关输入输出变量,可以在Test Case View窗口选择测试用例并右键添加相关的输入输出变量,如下图,自己创建或导入即可:
在这里插入图片描述
能添加到I/O窗口的变量包括:
1、形参:包括输入赋值,输出检查;
2、全局变量:包括代码里的全局变量和用户自定义的全局变量,全局变量的处理包括输入赋值,输出检查;
3、C++里的成员变量:包括输入赋值,输出检查;
4、函数返回值。
注意:不能添加被测函数的局部变量,局部变量的作用域仅限于被测函数内,不能被单元测试用例访问。

结合实际的测试需求,填写测试用例的测试输入(以“I”标识的输入列表)、期望输出(以“O”标识的输出列表),如下图所示:
在这里插入图片描述

五、执行测试用例

测试用例的执行包括2种方式:
1、分步骤执行(生成、构建、执行驱动、输出测试结果及覆盖率情况):在TBurn菜单中的“Run Driver”中,或者在Test Case视图左下角按钮中,依次选择 Generate Driver、Build Driver、Execute Driver、Split Driver Output、Process Driver Output;
2、一步执行:在TBurn菜单中的“Run Driver”中,或者在Test Case视图左下角按钮中,选择Run Test Case Driver;
在这里插入图片描述
执行结果如下所示:
在这里插入图片描述
从上图可以看出测试用例的结果是PASS/FAIL。同时可以通过弹框右下角的Report查看相应的用例报告。
第1条用例PASS后,可以直接copy第1条用例生成第2条用例,然后再修改用例2的输入输出即可,直到有足够的测试用例来完成测试。

六、覆盖率分析

测试用例执行完成后,相应的代码覆盖率会实时更新,在file view窗口可以看到整个源码文件的覆盖率,以及当前被测函数的覆盖率,包括语句覆盖、分支覆盖、MCDC覆盖等:
在这里插入图片描述
在显示的覆盖率上右键选择“view pass/fail + flow diagram”,可以显示详细的代码覆盖情况:
在这里插入图片描述
在这里插入图片描述

七、导出测试用例

单元测试用例设计并执行完成后(函数功能全部验证通过,并且覆盖率也达到要求),此时该函数的单元动态测试结束。为了方便后续回归测试,需要将测试用例导出。具体操作如下:
在TBurn的菜单,选中Sequence->Export Test Case(TCF),通过文件浏览窗口选择保存路径,保存对应的TCF文件即可:
在这里插入图片描述
在这里插入图片描述


总结

以上就是如何使用Testbed(TBrun)进行软件单元测试的过程,上述步骤仅为流程性操作讲解,下一篇文章我将以一个被测函数作为示例进行进一步介绍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/651042.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探索循环逻辑:for逻辑分支与容器遍历的深度剖析

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:for逻辑与循环体的奥秘 二、for逻辑与循环体的结合使用 1. 函数与循环…

Python计算回归拟合各项指标

0、各项回归指标简介 Relative Root Mean Squared Error(RRMSE):The RRMSE normalizes the Root Mean Squared Error (RMSE) by the mean of observations. It goes from 0 to infinity. The lower the better the prediction performance.T…

电脑不能远程桌面连接不上,电脑无法建立远程桌面连接如何解决?

电脑无法建立远程桌面连接的问题,通常涉及到多个层面的因素,包括但不限于网络设置、系统配置、防火墙设置以及服务状态等。以下是一些专业性的解决方案,以帮助您解决这一问题。 首先,我们需要检查网络连接。远程桌面连接需要稳定的…

Day08:CSS 高级

目标:掌握定位的作用及特点;掌握 CSS 高级技巧 一、定位 作用:灵活的改变盒子在网页中的位置 实现: 1.定位模式:position 2.边偏移:设置盒子的位置 leftrighttopbottom 水平方向偏移:left、…

电子商务网站(网上商店PetShop)

PetShop是一个范例,微软用它来展示.Net企业系统开发的能力。PetShop随着版本的不断更新,至现在基于.Net2.0的PetShop 4.0为止,整个设计逐渐变得成熟而优雅,有很多可以借鉴之处。PetShop是一个小型的项目,系统架构与代码…

【软件设计师】——7.软件工程基础

目录 7.1 软件工程概述 7.2 需求分析 7.3 软件设计 7.4 软件开发方法及模型 7.4.1 软件开发方法 7.4.2 软件开发模型 7.5 软件测试 7.6 软件维护 7.7 软件质量保证 7.7.1 软件质量特性 7.7.2 程序质量评审 7.7.3 设计质量评审 7.8 软件过程改进 7.9 项目管理 7.1 …

【制作100个unity游戏之26】unity2d横版卷轴动作类游13(附带项目源码)

最终效果 系列导航 文章目录 最终效果系列导航前言存储点灯光后处理存储位置信息存储更多数据存储场景信息持久化存储数据引入Unity 的可序列化字典类调用 游戏结束源码完结 前言 欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各…

Appium系列(2)元素定位工具appium-inspector

背景 如实现移动端自动化,依赖任何工具时,都需要针对于页面中的元素进行识别,通过识别到指定的元素,对元素进行事件操作。 识别元素的工具为appium官网提供的appium-inspector。 appium-inspector下载地址 我这里是mac电脑需要下…

使用numpy手写一个神经网络

本文主要包含以下内容: 推导神经网络的误差反向传播过程使用numpy编写简单的神经网络,并使用iris数据集和california_housing数据集分别进行分类和回归任务,最终将训练过程可视化。 1. BP算法的推导过程 1.1 导入 前向传播和反向传播的总体…

编程-辅助工具-Git下载

文章目录 1、前言2、Git官网地址3、迅雷下载 1、前言 采用Git能下载github上的代码,其下载是采用官网下载的,但是下载速度比较慢,网上也推荐了镜像的方式,但是有些链接失效了,突然有一天想起用迅雷是不是合适&#xf…

在通过跨网文件交换时,如何保障科研结构核心研究数据?

当今科研领域,数据如同生命线,支撑着每一个突破性发现的诞生。随着国际合作的加深,跨网文件交换成了常态,但这也为科研机构的核心研究数据安全带来了一系列挑战。想象一下,那些精心搜集和分析的宝贵数据,在…

OpenBayes 教程上新 |全球首个开源的文生视频 DiT 模型!对标 Sora,保姆级 Latte 文生视频使用指南

小朋友不爱背诗怎么办?《千秋诗颂》试试看。 2 月 26 日,中国首部文生视频 AI 系列动画《千秋诗颂》于 CCTV-1 频道正式播出,这部动画由上海人工智能实验室和「央妈」(中央广播电视总台)强强联手,借助「央视…

Discuz!X3.4论坛网站公安备案号怎样放到网站底部?

Discuz!网站的工信部备案号都知道在后台——全局——站点信息——网站备案信息代码填写,那公安备案号要添加在哪里呢?并没有看到公安备案号填写栏,今天驰网飞飞和你分享 1)工信部备案号和公安备案号统一填写到网站备案…

安装appium自动化测试环境,我自己的版本信息

教程来自:Appium原理与安装 - 白月黑羽 我的软件的版本: 安装是选择为自己安装而不是选all user pip install appium-python-client命令在项目根目录下安装appium-python-client sdk的话最简单的安装方式就是去Android官网下一个android studio然后在…

强化学习_06_pytorch-PPO2实践(Humanoid-v4)

一、PPO优化 PPO的简介和实践可以看笔者之前的文章 强化学习_06_pytorch-PPO实践(Pendulum-v1) 针对之前的PPO做了主要以下优化: -笔者-PPO笔者-PPO2refdata collectone episodeseveral episode(one batch)activationReLUTanhadv-compute-compute adv as one seri…

鸿蒙ArkTS声明式开发:跨平台支持列表【按键事件】

按键事件 按键事件指组件与键盘、遥控器等按键设备交互时触发的事件,适用于所有可获焦组件,例如Button。对于Text,Image等默认不可获焦的组件,可以设置focusable属性为true后使用按键事件。 说明: 开发前请熟悉鸿蒙开…

【STM32踩坑】HAL固件库版本过高导致烧录后无法运行问题

问题引入 目前STM32CUBEMX已经更新到了6.11版本,对应的固件库也一直在更新; 以STM32F1库为例,目前最新的库对应版本为1.8.5 但是我们会发现,如果直接使用1.8.5版本的固件库生成HAL源码后,烧录是可以烧录,但…

【IC】良率模型-yield model

缺陷密度Default Density(D0),表示单位面积的缺陷数D。 单位面积有M个部件,一个部件的平均失效率为: 一个面积为A的系统(芯片)良率: Possion模型: 当M趋于无穷时,系统良率为possion模型。 Murphy模型:(D~对称三角分布) 大芯片或大系统possion模型预估良率过于…

Python自动化测试进阶:性能测试与持续集成实践

Python自动化测试进阶包括性能测试和持续集成实践两个关键方面。以下是对这两个领域的简要介绍,并附带一些示例代码。 性能测试 性能测试是评估软件在特定条件下的性能表现的过程。对于Python应用程序,可以使用一些工具来进行性能测试,例如ps…

linux centos tomcat启动内存泄漏

tomcat启动内存泄漏 经过与开发沟通,结果是开发写了死循环,导致内存泄漏,上一次是开发少打了一个jar包,让开发查代码就行,重新更新代码