动态测试方法

article/2025/10/15 22:32:01

动态测试方法,通过实际执行代码去发现潜在代码错误的测试方法。

人工动态方法

人工动态方法,可以真正检测代码的业务逻辑功能,其关注点是“什么样的输入,执行了什么代码,产生了什么样的输出”,主要用于发现算法错误和部分算法错误,是最主要的代码级测试手段。代码级测试的人工动态测试方法,其实就是单元测试所采用的方法。

单元测试,用驱动代码去调用被测函数,并根据代码的功能逻辑选择必要的输入数据的组合,然后验证执行被测函数后得到的结果是否符合预期。

单元测试中三个最主要的难点:

单元测试用例“输入参数”的复杂性;

单元测试用例“预期输出”的复杂性;

关联依赖的代码不可用。

单元测试用例“输入参数”的复杂性

单元测试用例“输入参数”的复杂性,表现在“输入参数”不是简单的函数输入参数。本质上讲,任何能够影响代码执行路径的参数,都是被测函数的输入参数。

第一,被测试函数的输入

参数 如示例的输入参数a和b


int someFunc(int a, int b)
{…
}

第二,被测试函数内部需要读取的全局静态变量。

如果被测函数内部使用了该函数作用域以外的变量,那么这个变量也是被测函数的输入参数。


bool someGlobalVariable = true;
void Func_SUT(int a)
{...if(someGlobalVariable == true){FuncA();}else{FuncB();}...
}

示例中 全局变量 someGlobalVariable,需要设计为true和false的情况,导致这个全局变量也成为了输入。

第三,被测试函数内部需要读取的类成员变量


class someClass{...bool someClassVariable = true;...void Func_SUT(int a){...if(someClassVariable == true){FuncA();}else{FuncB();}...}...
}

根据 someClassVariable 的取值不同,会执行两个不同的代码分支。同样地,单元测试想要覆盖这两个分支,就必须提供 someClassVariable 的不同取值,所以 someClassVariable 对于被测函数 Func_SUT 来说也是输入参数。

第四,函数内部调用子函数获得的数据 


void Func_SUT(int a){bool toggle = FuncX(a);if(toggle == true){FuncA();}else{FuncB();}
}

这里toggle 也成为一个被测函数的输入参数。

第五,函数内部调用子函数改写的数据

第六,嵌入式系统中,在中断调用中改写的数据

单元测试用例“预期输出”的复杂性

单元测试用例“预期输出”的复杂性,主要表现在“预期输出”应该包括被测函数执行完成后所改写的所有数据。

第一,被测函数的返回值

第二,被测函数的输出参数

第三,被测函数所改写的成员变量和全局变量

第四,被测函数中进行的文件更新、数据库更新、消息队列更新等

关联依赖的代码不可用

假设被测函数中调用了其他的函数,那么这些被调用的其他函数就是被测函数的关联依赖代码。

为了不影响被测函数的测试,我们往往会采用桩代码来模拟不可用的代码,并通过打桩补齐未定义部分

具体来讲,假定函数 A 调用了函数 B,而函数 B 由其他开发团队编写,且未实现,那么我们就可以用桩函数来代替函数 B,使函数 A 能够编译链接,并运行测试。

桩函数要具有与原函数完全相同的原形,仅仅是内部实现不同,这样测试代码才能正确链接到桩函数。一般来讲桩函数主要有两个作用,一个是隔离和补齐,另一个是实现被测函数的逻辑控制。

用于实现隔离和补齐的桩函数实现比较简单,只需拷贝原函数的声明,加一个空的实现,可以通过编译链接就可以了。用于实现控制功能的桩函数是最常用的,实现起来也比较复杂,需要根据测试用例的需要,输出合适的数据作为被测函数的内部输入。

自动动态方法

自动动态方法是,基于代码自动生成边界测试用例并执行来捕捉潜在的异常、崩溃和超时的测试方法。

自动动态方法的重点是:如何实现边界测试用例的自动生成。

解决这个问题最简单直接的方法是,根据被测函数的输入参数生成可能的边界值

任何数据类型都有自己的典型值和边界值,我们可以预先为它们设定好典型值和边界值,然后组合就可以生成了。

比如,函数 int func(int a, char *s),就可以按下面的三步来生成测试用例集。

定义各种数据类型的典型值和边界值。 比如,int 类型可以定义一些值,如 int 的最小值、int 的最大值、0、1、-1 等;char* 类型也可以定义一些值,比如“”、“abcde”、“非英文字符串”等。

根据被测函数的原形,生成测试用例代码模板,比如下面这段伪代码:

将参数 @a@和 @s@的各种取值循环组合,分别替换模板中的相应内容,即可生成用例集。由于该方法不可能自动了解代码所要实现的功能逻辑,所以不会验证“预期输出”,而是通过 try…catch 来观察是否会引发代码的异常、崩溃和超时等具有边界特征的错误。


http://chatgpt.dhexx.cn/article/Za4pWPOd.shtml

相关文章

linux同步时间服务器时间配置

linux时间同步简单配置如下(centos7.x): 安装时间服务器(系统一般会自带): yum install ntp ntpdate -y 时间服务器临时配置(重启该配置失效): ntpdate 192.133.203.89(时间服务器ip) 时间服务器配置: vim /etc/chrony.conf 进入vim编辑页面…

linux 多台机器修改时间同步

修改东八区 首先第一步,通过命令 :date -R 查看当前系统所在时区。如是0800,则是东八区,也就是我们当下的北京时间,如不是(如下图),做如下调整。 命令行键入命令:tzsele…

Linux时间同步:chrony

linux7以上版本都自带chrony服务 如果没有安装,则使用yum安装,如果安装了,请忽略 yum -y install chrony 说明:Chrony由两个程序组成,分别是chronyd和chronyc chronyd是一个后台运行的守护进程,用于调整…

linux同步时间(通过定时任务,按时同步时间)

安装同步器 yum install -y ntpdate同步时间(一次性同步,挂起或关闭虚拟机后时间再次不同步) ntpdate 0.centos.pool.ntp.org制作定时任务,同步时间 安装定时任务 yum –y install crontabs制作一个定时任务,设置开机自启 systemctl enable crond --now配置定时任务文件,添…

Linux同步时间的方法

方法一:非生产时使用 第一种是在所有机器上,使用连接工具的并发命令功能,同时运行修改时间命令,比如执行date -s “2019-05-25 17:00:00” ,这个方法适合自己测试环境用 第二种就是安装了一个ntpdate命令&#xff0c…

word中插入visio流程图的操作

1、首先需要将画好的流程图进行保存,注意保存的格式是vsdx 2、新建个word文档,找到插入-对象,打开如下: 3、点击由文件创建-浏览中找到你想插入的对应的visio的文件 4、找到之后,下一步就是直接点击确定,…

Visio如何裁剪图片

参考 Visio如何裁剪图片 - 云社区 - 腾讯云 1、首先点击打开Visio软件,如图所示 2、接着在Visio中装载需要处理的图片,点击文件-打开,如图所示 3、加载图片后,点击选中图片,如图所示 4、此时Visio上方菜单栏&#xf…

visio2019怎么对图片加箭头标注,Visio设置图片作为背景

visio2019怎么对图片加箭头标注,Visio设置图片作为背景 单个图片总时作为一个对象被标注,没办法标注细节,可以将图片作为背景,进行标注 首先,插入,新建页,背景页,把欲编辑的图片放…

流程图软件,visio,安装下载教程

建议:如果是插入到word中,建议使用2013版的visio,通过插入对象的方式,插入到word中。 方法一:插入-对象-新建visio 方法二:visio中画好图,插入-对象-由文件创建 这样的word中的visio对象&…

Microsoft Office Visio Professional 之包图

1 包的概念 1.1 包的定义 包(Package): 是UML用来组织模型元素的模型元素。 包中可以包含类、接口、构件、用例、结点、活动、状态、包等其他模型元素。 包是对软件模型进行分解、组织的有效的模型元素。 1.2 包的表示 UML用带把的矩形框来表示包。 1.3 包的关系 依赖关系泛化关…

visio标题怎么编辑?

第一步:点击“背景-1” 第二步:双击标题就可以出行文本框,然后可以编辑了 第三步:编辑完成 第五步:点击“页-1”返回就可以看到了,修改完成。欧耶!!! 一张图看懂性能测试…

Visio安装与下载

关于Visio2013版的安装与下载 Visio2013版的安装与下载教程 首先下载Visio2013,放个链接:https://pan.baidu.com/s/1G1C9cLH0uvcgtl2RShnRkw 提取码:jmiy 安装步骤: 找到下载的安装包,右键选择以管理员身份运行直接安…

如何在visio中画立体图形

最近写论文的时候要画立体结构图,起初没在visio中找到立体图像,问了同门,他和我说一笔一笔画,我不信!!! 最后终于找到了 —————————————————————————————— 0x00 …

【word小技巧】将visio图插入到word中

文章目录 实现步骤第一步:画一个visio图(随便画的哈)第二步,在visio图的空白处,右击,复制第三步:打开word,将光标放置需要插入visio图的地方,按ctrlv,就完成插入了 优点注…

visio常用标志

1、基站图标 网络—详细网络图 2、车辆,道路和建筑物 地图和平面布置图----地图—三维方向图形状 地图和平面布置图----地图—路标形状 2、切割图形 以切割半圆为例 画个圆在圆上画条线-----点击开发工具-----选中圆圈和直线----点击操作-----点击拆分----拖…

VISIO画立体图——VISIO画图技巧

3分钟你将学到 VISIO基础操作线图形与文本 VISIO画流程图VISIO画立体图实例分享 想画出上面这种图吗? 想拥有让人眼前一亮的流程图吗?学会VISIO,这些都so easy。 VISIO基础操作 基础操作包括:界面移动,放大缩小、删除…

visio 2016的使用

致谢:(1)visio 2016破解版32&64位下载(含产品密钥激活工具)简体中文版 (2)Microsoft visio 2013 professional破解软件 visio 2016全称为microsoft visio 2016,是一款由微软官方推出来,在W…

visio的使用技巧

一、调节箭头方向 1.打开你要修改的Microsoft Visio文件 2.选中你要修改的箭头,在上方的开始工具栏中找到“线条”选项,鼠标左键单击打开; 3.在下面找到“箭头”这个选项,鼠标移到上面去,就会展开;带阴影的…

visio绘制自定义图形(完全零基础)

版本使用的是2016,操作方法同样适用于2007/2010/2013/2019;主要用于自己总结以及记笔记了,这样后续用到上手会快一些。 首先画出一个手稿版本的图形,这样用软件作图时思路会清晰很多(这我导师画的,她应该不…