执行测试_单元测试


在执行测试为主线,中间穿插质量特性,学会自动化工具的使用。

软件测试的过程

  • 测试范围:逐渐增大:先使用白盒测试,然后黑盒测试的比例逐步增加。
  • 测试视角:从代码到使用

具体来说就是:

  • 单元测试—模块/白盒技术可以并行进行
  • 集成测试—模块接口/黑盒+白盒技术
  • 系统测试—满足需求/黑盒兼容性问题等等
  • 验收测试—突出客户作用/黑盒

单元测试

定义
单元测试是对软件最小可测试元素进行正确性检验的测试工作

  • 单元选择依据:功能独立、可测、可观测、有明确的可定义的边界或接口
    因此单元的备选有:类/方法/idea的model

  • 验证模块中是否存在差错,是否能正确实现功能,满足性能、接口要求

  • “单元”是软件中最小的、可以单独执行编码的单位

  • 确定单元的最基本原则:高内聚、低耦合

  • 测试对象:重要模块的重要控制路径

  • 每个程序模块可并行的、独立的进行测试工作

注意:一个模块的编写完成,就要进行测试。而不是集成前集中进行

单元测试的重要性

  • 时间方面
  • 测试效果方面( ①测试基础 ②深层次问题 ③关注代码控制流程 )
  • 测试成本方面
  • 产品质量方面

单元测试原则

  1. 单元测试越早进行越好
  2. 单元测试应该依据《软件详细设计规格说明》进行
  3. 对于修改过的代码应该重做单元测试
  4. 测试人员应如实记录实际的测试结果
  5. 应注意选择好被测软件单元的大小
  6. 应该包含正面测试和负面测试
  7. 注意使用单元测试工具

单元测试的目标和任务

目标: 单元模块被正确编码
具体有以下几个方面:

  • 数据或信息能否正确的流入和流出单元
  • 在单元工作过程中,其内部数据能否保持其完整性,包括内部数据的形式、内容及相互关系不发生错误,也包括全局变量在单元中的处理和影响
  • 在数据处理的边界处能否正确工作
  • 单元的运行能否做到满足特定的逻辑覆盖
  • 单元中发生错误,其中的出错处理措施是否有效
  • 指针是否被错误引用、内存是否及时释放性能
  • 有没有安全隐患安全

主要任务

单元测试的主要任务是测试功能方面的问题,主要有以下五个方面:

模块接口

检查模块接口是否正确,checklist:
模块接收输入的实际参数与形式参数的个数、类型、单位是否一致
调用其他模块的实际参数与被调模块的形参是否一致
全程变量的定义在各模块是否一致
外部输入、输出
文件、缓冲区、错误处理

只能使用静态测试,无法使用动态测试

局部数据结构

检查局部数据结构完整性,Checklist:
不正确或不一致的类型说明
变量初始化或默认值有错
不正确的变量名或从来未被使用过
不相容的数据类型
出现上溢或下溢和地址异常
全局数据结构对模块的影响
建议使用静态测试,动态测试效果不好

独立执行路径

检查每一条独立执行路径的测试。保证每条语句被至少执行一次。

Checklist:

  • 误解或不正确使用算术优先级
  • 混合类型运算
  • 变量初值错
  • 运算精度不够
  • 算法错误
  • 表达式符号错

针对判定和条件覆盖。Checklist:

  • 不同数据类型对象之间进行比较
  • 错误的使用逻辑操作和优先级
  • 由于计算机表示的局限性,期望理论上相等而实际上不相等
  • 不正确的判定或不正确的变量
  • 不正常或不存在的循环终止
  • 错误的修改了循环控制变量

使用以基本路径测试为基础的动态白盒测试

错误处理

预见、预设的各种出错处理是否正确有效。
Checklist:

  • 输出的出错信息难以理解
  • 报告的错误与实际不相符
  • 程序定义的出错处理前系统已介入
  • 异常处理不当
  • 未提供足够的定位出错的信息
    也就是能够用自然语言 清楚的告诉用户错在哪,怎么改。

动态黑盒测试

边界条件

检查临界数据处理的正确性。Checklist:
普通合法数据的处理。
普通非法数据的处理。
边界值内合法边界数据的处理。
边界值外非法边界数据的处理

动态黑盒测试

单元测试环境的建立

单元测试环境=被测模块 + 驱动模块 + 桩模块

  • 驱动模块(drive): 对底层或子层模块进行测试所编写的调用这些模块的程序
    接收测试数据,把相关的数据传送给被测模块,启动被测模块,并打印出相应的结果

  • 桩模块(stub): 对顶层或上层模块进行测试时所编写的替代下层模块的程序
    进行很少的数据处理,如打印入口和返回

注:

  • 自动和手工测试都要搭建驱动模块 + 桩模块

  • 驱动模块 + 桩模块 的设计越简单越好,消耗的资源越少越好

  • 驱动模块好写,桩模块难写

单元测试主要技术

主要采用白盒测试技术,辅之以黑盒测试技术

单元测试主要技术:

  1. 人工静态测试
  2. 动态执行测试(白盒+黑盒)
  3. 状态转换测试

1. 静态测试

不运行程序,单独检查单元代码并进行代码的评审和检查
外部接口和程序代码的关键部分要进行桌面检查和代码审查
目的:保证代码算法的逻辑正确性、清晰性、规范性、一致性、算法高效性

  1. 静态测试
    适用于新开发和重用的代码
    通常在代码完成并无错误的通过编译或汇编后,采用自动化工具扫描分析、代码评审等方法
    由软件开发人员及开发小组成员共同完成
    常用方法:
    桌面检查(Desk Checking)
    代码走查(Walk Through)
    代码审查(Program Inspection)

2. 动态执行测试

动态白盒测试:逻辑覆盖和基本路径测试
测试基本原则:
保证单元中每一个独立路径至少执行一次
保证所有判断的每一分支至少执行一次
保证每一循环在边界条件和一般条件下至少执行一次
验证所有单元内部数据结构的有效性
2. 动态执行测试
动态白盒测试:逻辑覆盖和基本路径测试
测试基本原则:
保证单元中每一个独立路径至少执行一次
保证所有判断的每一分支至少执行一次
保证每一循环在边界条件和一般条件下至少执行一次
验证所有单元内部数据结构的有效性

3. 状态转换测试

当单元可能处于不同状态转换时,应根据单元可能进入的状态、这些状态之间的转换、引起转换可能导致的状态等进行测试

单元测试的评估

通过单元测试的一般准则:

  • 软件单元功能与设计需求一致
  • 软件单元接口与设计需求一致
  • 能够正确处理输入和运行中的错误
  • 在单元测试中发现的错误已经得到修改并且通过了测试
  • 达到了相关的覆盖率的要求
  • 完成软件单元测试报告

4.7 单元测试的管理

  1. 单元测试过程
    在详细设计阶段完成单元测试计划。
    建立单元测试环境,完成测试设计和开发。
    执行单元测试用例,并且详细记录测试结果。
    评估测试用例是否通过。
    提交《单元测试报告》。

  2. 单元测试文档
    《软件需求规格说明书》、《软件详细设计说明书》  《单元测试计划》
    《单元测试计划》、《软件详细设计说明书》 《单元测试用例》
    《单元测试用例》文档及《软件需求规格说明书》、《软件详细设计说明书》  《缺陷跟踪报告》/《缺陷检查表》
    《单元测试用例》、《缺陷跟踪报告》/《缺陷检查表》 《单元测试检查表》
    评估 《单元测试报告》

单元测试工具

单元测试工具简介
自动化单元测试工具的工作原理是借助于驱动模块与桩模块工作的,运行被测软件单元以检查输入的测试用例是否按软件详细设计规格说明的规定执行相关操作。

常见分类:静态分析工具;代码规范审核工具;内存和资源检查工具;测试数据生成工具;测试框架工具;测试结果比较工具;测试度量工具;测试文档生成和管理工具

JUnit⭐

JUnit是一个开放源代码的Java测试框架,用于编写和运行可重复的测试。

  • 它是单元测试框架体系xUnit的一个实例
    (xUnit系列框架,常用的根据语言不同分为JUnit(java),CppUnit(C++),DUnit (Delphi),NUnit(.net),PhpUnit(Php)等)

⭐JUnit特性

  1. 可以使测试代码与产品代码分开
  2. 针对某一个类的测试代码通过较少的改动便可以应用于另一个类的测试
  3. 易于集成到测试人员的构建过程中,JUnit和Ant的结合可以实施增量开发
  4. JUnit是公开源代码的,可以进行二次开发
  5. 可以方便地对JUnit进行扩展

JUnit框架组成

  • 对测试目标进行测试的方法与过程集合,可称为测试用例(TestCase)。

  • 测试用例的集合,可容纳多个测试用例(TestCase),将其称作测试包(TestSuite)。

  • 测试结果的描述与记录(TestResult) 。

  • 测试过程中的事件监听者(TestListener)。

  • 每一个测试方法所发生的与预期不一致状况的描述,称其测试失败元素(TestFailure)

  • JUnit Framework中的出错异常(AssertionFailedError)

JUnit注解(Annotation)

  • @Test:测试方法,表明这是一个测试方法。在Junit中将会自动被执行
  • @Before:初始化方法,在任何一个测试执行之前必须执行的代码
  • @After:释放资源,在任何测试执行之后需要进行的收尾工作
  • @Ignore:忽略的测试方法,该方法尚未完成,暂不参与此次测试
  • @BeforeClass:针对所有测试,只执行一次
  • @AfterClass:针对所有测试,将会在所有测试方法执行结束后执行一次
@BeforeClass –> @Before –> @Test –> @After –> @AfterClass

JUnit断言

  • assertTrue|False(boolean condition):判定结果是否为真|假
    如果断言成立,继续运行后续测试;
    如果不成立,抛出AssertionFailedError异常

  • assertEquals([String message, ] expected,actual[,tolerance]):判定表达式是否相等

public void assertTrue(boolean condition){
if(!conditon) abort();
}
assertEquals(“两数不等”,3.33,10.0/3.0,0.01)
  • assertSame([String message, ] expected,actual):判定引用是否指向同一对象
  • assertNull|NotNull([String message], java.lang.object object):判定一个对象是否为空|非空
  • fail([String message]):立即终止测试代码的执行
  • assertEquals([String message,] Object[] expected, Object[] actual) 判定数组长度及每个对应的元素是否相等

注意:遇到第一个断言失败的情况,该测试方法立即结束执行

总结

目标:确保模块被正确的编码
依据:详细设计说明书
过程:设计、脚本开发、执行、调试和分析结果
测试方法:白盒+黑盒
评估方法:通过所有测试用例,代码无严重缺陷
执行者:程序开发人员+测试人员

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末自行领取】

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

性能测试的五大目标

性能测试的目的其实是为了验证软件系统是否能够达到用户的性能指标,发现软件系统中存在的性能瓶颈,随后优化软件,最后起到优化系统的目的。 主要有以下几点: 评估系统的能力 测试中得到的负荷和响应时间数据可以被用于验证所计…

工具方法 - Dropit文件管理工具

Personal Assistant to Automatically Manage Your Files / 自动管理文件的私人助理 之前为了管理电脑上的文件,尝试了一段时间DropIt这个工具。这是一个开源免费软件。使用时,只需将文件拖动到DropIt的浮动图标上,就会自动根据文件类型(文件…

Linux 查看磁盘 df -h 已经查看目录大小 du -sh ./*

使用df -h 命令可以查看磁盘信息 df -h 如下图所示: 获取当前目录 每个目录大小 du -sh ./* du -sh ./* 如果文件比较多 我们想获取文件大小最大的前10个 可以运行如下命令: du -ah | sort -rh | head -n 10 du -ah:显示当前目录及其子目录的所有文件和目录的…

YOLOv8+SAHI,针对小目标检测的切片辅助训练推理,缺陷检测检测精度大幅提升

💡💡💡本文摘要:1)分析了工业缺陷的难点;2)提供了用SAHI方法子图训练,如何自动生成对应xml的代码;3)SAHI+YOLOv8如何推理 原图 切分为子图训练+推理 1.工业缺陷检测介绍 得益于机器视觉的不断发展

Java程序的执行原理

计算机能认识的机器语言 机器语言是由0和1组成,分别代表不通电和通电两种运行状态(因为计算机底层都是硬件电路),例如:00011110101001.... 编程语言发展历程 机器语言 汇编语言 高级编程语言-Java、Python、C等 …

16个AI应用技巧,职场提升永远可以相信!

人工智能(AI)的迅速崛起,已经深刻地改变了多个行业,并将在未来持续塑造我们的职场格局。为了应对这一潮流,职场人士必须主动适应AI带来的技术变革,持续学习新技能,提升自己的专业能力。这篇文章…

C++第二讲:类和对象

C第二讲:类和对象 1.类的定义1.1类定义格式1.2访问限定符1.3类域1.4类定义注意事项 2.实例化2.1什么是实例化2.2对象大小2.3this指针2.4题目练习 3.C语言和C实现Stack对比4.构造函数4.1什么是构造函数4.2构造函数的使用 5.析构函数5.1什么是析构函数5.2析构函数的使…

地大信息-基础信息平台 GetImg 任意文件读取漏洞复现

0x01 产品简介 地大信息的基础信息平台,通过整合各类空间基础数据,包括地理、地质、气象等多源信息,构建了一个空-天-地一体化的自然灾害监测物联网和时空感知大数据平台。该平台不仅支持数据的集成、管理和共享,还提供了丰富的数据分析和应用服务,为政府决策、行业监管和…

java-CC1 链条审计

java-CC1 链条审计 CC1 是 CommonsCollections1 的简称,它是 Apache Commons Collections 库中的一个已知的反序列化利用链。而这个库也是 java 中比较通用的库。在 java 语言里面有执行系统命令的Runtime类 像 php 中的 eval()、system()、exec()、shell_exec()、…

抖音生活服务常见玩法及收益情况详解!普通人如何把握机会?

随着抖音在生活服务板块的布局力度持续加大,越来越多的人开始逐渐意识到它所蕴含着的巨大收益潜力,但却由于对它的具体概念较为模糊而始终找不到入局的途径。那么本期,我们就来详聊一下抖音生活服务是干什么的和可以怎么干的两大核心问题&…

【C语言必学知识点七】你知道在动态内存管理中存在的内存泄露问题吗?遇到内存泄露时应该如何处理?今天跟你好好介绍一下如何正确使用calloc与realloc!!!

动态内存管理——动态函数(calloc、realloc)的使用 导读一、calloc函数1.1 函数介绍1.2 calloc的使用1.3 calloc与malloc 二、realloc函数2.1 函数介绍2.2 realloc的使用2.3 realloc的空间分配2.3.1 空间分配成功——地址的改变2.3.2 空间分配失败——内…

14.其他流(下篇)

目录 1. IO流的体系结构 2.字节缓冲流 3.字符缓冲流 4.转换流 5.序列化 6.打印流 7.压缩流与解压流 8.工具包 1. IO流的体系结构 IO流的使用原则:随用随创建,什么时候不用什么时候关闭 1.1 io流的体系结构图 1.2缓冲流的分类 缓冲流,也叫高效流&#…

Redhat 7,8系(复刻系列) 一键部署Oracle21c-xe rpm

Oracle21c-xe前言 无论您是开发人员、DBA、数据科学家、教育工作者,还是仅仅对数据库感兴趣,Oracle Database Express Edition (XE) 都是理想的入门方式。它是全球企业可依赖的强大的 Oracle Database,提供简单的下载、易于使用和功能齐全的体验。您可以在任何环境中使用该…

买家希望信任内容,但他们看重你的内容吗?[新研究]

B2B 技术买家希望获取可信的内容。他们还需要在内容中找到价值。 根据 Informa Tech 的一份 最新研究报告(需注册),许多人发现这种组合难以捉摸。 B2B 营销人员如何填补信任差距,以便买家能够更多地参与、采取更多行动&#xff…

【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧

文章目录 Python NumPy学习指南第一部分:NumPy简介与安装1. 什么是NumPy?2. 安装NumPy使用pip安装:使用Anaconda安装: 第二部分:NumPy数组基础1. NumPy数组的创建从列表创建一维数组:创建多维数组&#xff…

Java语言程序设计基础篇_编程练习题*18.28 (非递归目录大小)

目录 题目:*18.28 (非递归目录大小) 习题思路 代码示例 输出结果 题目:*18.28 (非递归目录大小) 不使用递归改写程序清单18-7 习题思路 ( getSize方法) 创建一个变量表示总共的大小。传入路径,创建File文件。创建A…

生成式人工智能在无人机群中的应用、挑战和机遇

人工智能咨询培训老师叶梓 转载标明出处 无人机群在执行人类难以或危险任务方面有巨大潜力,但在复杂动态环境中学习和协调大量无人机的移动和行动,对传统AI方法来说是重大挑战。生成式人工智能(Generative AI, GAI),凭…

IPPBX概述

IP PBX涵义 IP PBX是一种电信设备,IP PBX是一种专用交换机(企业内的电话交换系统),用于在本地线路上的VoIP(互联网协议语音或IP)用户之间切换呼叫,同时允许所有用户共享一定数量的外部电话线路…

【Java】网络编程:TCP_IP协议详解(IP协议数据报文及如何解决IPv4不够的状况)

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 &#x1f354…

编译和链接以及makefile

编译和链接以及makefile 问题引出,为什么我们会忽略编译和链接这个步骤 一定都会用到但却很少被重视的步骤——编译和链接,通常这两个步骤被我们的IDE封装的很完美,我们一般都是一件构建。 但是一旦遇到错误的时候,尤其是链接相关…