【软件测试】

article/2025/10/16 3:19:14

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 第四章 单元测试
    • 4.1 软件测试过程概述
    • 4.2 什么是单元测试
      • 4.2.1 单元测试的定义
      • 4.2.2 单元测试的重要性
      • 4.2.3 单元测试原则
    • 4.3 单元测试的目标和任务
      • 4.3.1 单元测试的目标:单元模块被正确编码
      • 4.3.2 单元测试的主要任务
    • 4.4 单元测试环境的建立
    • 4.5 单元测试主要技术
      • 4.5.1 静态测试
      • 4.5.2 动态执行测试
      • 4.5.3 状态转换测试
    • 4.6 单元测试的评估
    • 4.7 单元测试的管理
    • 4.8 单元测试工具
  • 总结
  • 第四章 重点


前言


第四章 单元测试

4.1 软件测试过程概述

在这里插入图片描述

  • 软件测试过程模型—W模型
  • 单元测试—模块/白盒技术
  • 集成测试—模块接口/黑盒+白盒技术
  • 系统测试—满足需求/黑盒
  • 验收测试—突出客户作用/黑盒

4.2 什么是单元测试

4.2.1 单元测试的定义

  • 单元测试是对软件最小可测试元素进行正确性检验的测试工作
  • 验证模块中是否存在差错,是否能正确实现功能,满足性能、接口要求
  • “单元”是软件中最小的、可以单独执行编码的单位
  • 单元选择依据:功能独立、可测、可观测、有明确的可定义的边界或接口
  • 确定单元的最基本原则:高内聚、低耦合
  • 测试对象:重要模块的重要控制路径
  • 每个程序模块可并行的、独立的进行测试工作

4.2.2 单元测试的重要性

  • 时间方面
  • 测试效果方面(①测试基础②深层次问题③关注代码控制流程)
  • 测试成本方面
  • 产品质量方面
  • 编程过程中,每写100行代码会犯150个错误
  • 编程与编译运行结束后,每100行代码中大约残留有1-3个Bug
  • 寻找与修改程序错误的代价占总体开发投资的40%-80%
  • Bug在整个研发流程中被发现的越早,修改的代价就越低

4.2.3 单元测试原则

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

4.3 单元测试的目标和任务

4.3.1 单元测试的目标:单元模块被正确编码

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

4.3.2 单元测试的主要任务

  • 模块接口:检查模块接口是否正确【检查模块单元数据输入和输出是否正确】
    • 模块接收输入的实际参数与形式参数的个数、类型、单位是否一致
    • 调用其他模块的实际参数与被调模块的形参是否一致
    • 全程变量的定义在各模块是否一致
    • 外部输入、输出
    • 文件、缓冲区、错误处理
  • 局部数据结构:检查局部数据结构完整性【检查模块内部内部数据的完整性和正确性】
    • 不正确或不一致的类型说明
    • 变量初始化或默认值有错
    • 不正确的变量名或从来未被使用过
    • 不相容的数据类型
    • 出现上溢或下溢和地址异常
    • 全局数据结构对模块的影响
  • 独立执行路径:
    • 检查每一条独立执行路径的测试。保证每条语句被至少执行一次。【测试独立路径,发现计算、判定和控制流错误】
      • 误解或不正确使用算术优先级
      • 混合类型运算
      • 变量初值错
      • 运算精度不够
      • 算法错误
      • 表达式符号错
    • 针对判定和条件覆盖。
      • 不同数据类型对象之间进行比较
      • 错误的使用逻辑操作和优先级
      • 由于计算机表示的局限性,期望理论上相等而实际上不相等
      • 不正确的判定或不正确的变量
      • 不正常或不存在的循环终止
      • 错误的修改了循环控制变量
  • 错误处理:预见、预设的各种出错处理是否正确有效。【模块中发生错误,系统的出错处理是否有效】
    • 输出的出错信息难以理解
    • 报告的错误与实际不相符
    • 程序定义的出错处理前系统已介入
    • 异常处理不当
    • 未提供足够的定位出错的信息
  • 边界条件:检查临界数据处理的正确性。【采用边界值分析方法,发现在边界发生的错误】
    • 普通合法数据的处理。
    • 普通非法数据的处理。
    • 边界值内合法边界数据的处理。
    • 边界值外非法边界数据的处理

4.4 单元测试环境的建立

PASS

4.5 单元测试主要技术

  • 主要采用白盒测试技术,辅之以黑盒测试技术
  • 单元测试主要技术:
    • 人工静态测试
    • 动态执行测试(白盒+黑盒)
    • 状态转换测试

4.5.1 静态测试

  • 不运行程序,单独检查单元代码并进行代码的评审和检查
  • 外部接口和程序代码的关键部分要进行桌面检查和代码审查
  • 目的:保证代码算法的逻辑正确性、清晰性、规范性、一致性、算法高效性
  • 适用于新开发和重用的代码
  • 通常在代码完成并无错误的通过编译或汇编后,采用自动化工具扫描分析、代码评审等方法
  • 由软件开发人员及开发小组成员共同完成
  • 常用方法:
    • 桌面检查(Desk Checking)
    • 代码走查(Walk Through)
    • 代码审查(Program Inspection)

4.5.2 动态执行测试

  • 动态白盒测试:逻辑覆盖和基本路径测试
  • 测试基本原则:
    • 保证单元中每一个独立路径至少执行一次
    • 保证所有判断的每一分支至少执行一次
    • 保证每一循环在边界条件和一般条件下至少执行一次
    • 验证所有单元内部数据结构的有效性
    • 动态黑盒测试:分为功能测试和非功能测试
    • 除了选择满足所需的覆盖标准外,可采用边界值分析、错误推测等技术

4.5.3 状态转换测试

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

4.6 单元测试的评估

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

4.7 单元测试的管理

  • 单元测试过程
    • 在详细设计阶段完成单元测试计划。
    • 建立单元测试环境,完成测试设计和开发。
    • 执行单元测试用例,并且详细记录测试结果。
    • 评估测试用例是否通过。
    • 提交《单元测试报告》。
  • 单元测试文档
    • 《软件需求规格说明书》、《软件详细设计说明书》  《单元测试计划》
    • 《单元测试计划》、《软件详细设计说明书》 《单元测试用例》
    • 《单元测试用例》文档及《软件需求规格说明书》、《软件详细设计说明书》  《缺陷跟踪报告》/《缺陷检查表》
    • 《单元测试用例》、《缺陷跟踪报告》/《缺陷检查表》 《单元测试检查表》
    • 评估 《单元测试报告》

4.8 单元测试工具

  • 单元测试工具简介
    • 自动化单元测试工具的工作原理是借助于驱动模块与桩模块工作的,运行被测软件单元以检查输入的测试用例是否按软件详细设计规格说明的规定执行相关操作
    • 常见分类:静态分析工具;代码规范审核工具;内存和资源检查工具;测试数据生成工具;测试框架工具;测试结果比较工具;测试度量工具;测试文档生成和管理工具
  • JUnit介绍
    • JUnit是一个开放源代码的Java测试框架,用于编写和运行可重复的测试
    • 它是单元测试框架体系xUnit的一个实例
    • xUnit系列框架,常用的根据语言不同分为JUnit(java),CppUnit(C++),DUnit (Delphi),NUnit(.net),PhpUnit(Php)等

总结

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

第四章 重点

  • ①掌握单元测试的目标和主要任务
  • ②掌握单元测试环境建立和所采用的主要技术
  • ③熟悉单元测试评估技术及管理过程
  • ④初步认识单元测试自动化工具,熟悉JUnit实现Java程序测试的基本方法

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

相关文章

软件测试之测试程序开发

软件测试培训之测试程序开发 脚本维护,测试数据准备,测试监控准备; 测试程序开发 性能测试场景设计和性能测试脚本设计中需要注意以下几个问题: 场景真实性: 每个脚本的具体操作步骤,是和真实环境操作类似的,每个场景内的测试程序之间的逻辑关系,压力比重…

程序员的测试课

git项目地址:GitHub - dreamhead/geektime-todo: Geektime Todo is a demo todo project for Geektime column. 1、实现一个Todo应用 设计规范 1、对于输入参数的检测,由入口部分代码进行处理。如空字符串。 2、Repository 的问题以运行时异常 的形式抛…

软件测试重点知识

软件测试的定义: 利用人工或自动化的手段来运行或测定某个系统,其目的在于测它是否满足规定的需求或检测预期结果与实际结果之间的差异。 软件测试的目的: 发现软件中存在的问题或缺陷,检查软件系统是否满足要求。 软件测试的对象…

跑批利器--读取文件

在上篇文章中已经对示例的基本业务和流程进行了解,同时也知道了SpringBatch的三个接口ItemReader,ItemProcessor,ItemWriter.接下来我们主要是通过示例来具体处理一个文本文件,将里面的数据和内容通过SpringBatch的加工处理来存到新的数据库中. SpringBatch提供专门的类去读取文…

金融任务实例实时、离线跑批,Apache DolphinScheduler 在新网银行的三大应用场景与五大优化...

在新网银行,每天都有大量的任务实例产生,其中实时任务占据多数。为了更好地处理任务实例,新网银行在综合考虑之后,选择使用 Apache DolphinScheduler 来完成这项挑战。如今,新网银行多个项目已经完成了实时与准实时的跑…

线程并发处理跑批任务

定时任务类代码: package com.jzfq.rms.autoApprove.job;import com.alibaba.fastjson.JSONObject; import com.jzfq.rms.autoApprove.bean.InnerRuleProcess; import com.jzfq.rms.autoApprove.bean.InnerRuleProcessQueryBean; import com.jzfq.rms.autoApprove.s…

Oracle-job跑批变慢案例

前言: 近期处理了一起应用job跑批变慢的案例,在一天job执行时间突然增加了几十倍,后面通过分析是由于索引的设计不合理导致执行计划的异常,把当时的问题分析过程记录下来,分享给大家。 问题: 数据库job存储执行时间增加几十倍 原因…

架构师自诉:如何做到百万数据半小时跑批结束

业务背景 跑批通常指代的是我们应用程序针对某一批数据进行特定的处理 在金融业务中一般跑批的场景有分户日结、账务计提、欠款批扣、不良资产处理等等 具体举一个例子 🌰 客户在我司进行借款,并约定每月 10 号码还款,在客户自主授权银行…

基于Kettle跑批的案例说明

需求概述 通过动态配置表的方式完成在kettle里动态配置参数,并调用ktr,实现跑批的目的。 问题分析 定义一个ktr读取配置表的信息并将拷贝记录到结果定义一个ktr从结果里获取记录并设置变量定义业务ktr(即按照业务需要开发的…

学习笔记-如何设计离线跑批系统

一、基本概念 离线跑批:通常指批量加工数据、完成一系列流程的定时任务。 业务场景:在银行、金融、支付出现较多,其他行业也可能涉及。 1. 定时的数据状态更新(到期失效) 2. 数据计算(计算罚息、计提&…

跑批利器--示例

接下来我们将通过简单的一个在线商店的应用示例来展示如何使用SpringBatch.通过这个示例我们可以进一步去理解SpringBatch批量处理程序它是如何实现高效的读写数据,何时去使用内部组件,如何实现你自己的组件,以及如何配置一个批量任务在Spring容器中. 这里我们简单描述一下业务…

如何设计一个多线程处理跑批功能

一、背景 最近承接了一个需求,背景是用户当天可以参与比赛竞猜,当天20点前参与竞猜,第二天上午10点出结果。系统的实现思路是用户参与竞猜时增加竞猜记录,第二天早上9点开始进行跑批,跑批依赖业务的配置,要…

跑批利器--批处理应用程序

目前笔者正在进行直销银行互联网核心的设计和研发,在银行相关系统中有一块内容比较关键,那就是跑批.因此接触到了SpringBatch的相关内容,作为学习和记录,有必要将SpringBatch的相关技术点和实际项目中遇到的问题记录下来,同时也跟各位来进行分享和学习. 首先先了解一下什么是批…

跑批 流程、代码梳理

权限系统 全部——ETL服务——计划维护 日程表:到时间触发跑批任务 复制任务编号 ETL设计——作业设计——自定义java——插入语句 找到类所在位置 org.isscloud.portal.agent.scf.batch.FinaResultBatch base下的agent下的scf.batch包下的FinaResultBatch类 S…

跑批为什么这么难

文章目录 问题分析SPL用于跑批应用效果SPL资料 业务系统产生的明细数据通常要经过加工处理,按照一定逻辑计算成需要的结果,用以支持企业的经营活动。这类数据加工任务一般会有很多个,需要批量完成计算,在银行和保险行业常常被称为…

Java开源专业计算引擎:跑批真的这么难吗?

业务系统产生的明细数据通常要经过加工处理,按照一定逻辑计算成需要的结果,用以支持企业的经营活动。这类数据加工任务一般会有很多个,需要批量完成计算,在银行和保险行业常常被称为跑批,其它像石油、电力等行业也经常…

银行跑批业务 的 初步理解(批量批量.....流水账)

一、初步理解 白天的柜台交易, 实时的 对帐户进行操作。 晚上 批量 , 比如 一些报表的生成 , 定期储蓄到期的自动转存 , 行内行外业务清分清算 , 有时还可能赶上利息计算....... 当然 不是所有的数据都是实时操作 , 因此跑批就是为此诞生。 二、逐渐深入 批量…

跑批设计-如何才能让跑批更加高速

跑批的应用场景 在开发过程中跑批经常使用的地方: 消息类:到期失效以及到期批量通知客户计算类:在财务中的罚息、计提、计息文件类:对账信息、还款信息同步以及报表生成 跑批数据特点 数据量非常大实时性并不是特别高&#xf…

跑批bat、shell

“跑批”也叫“批量处理”。批处理,也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。批处理文件的扩展名为bat 。 批处理定义:顾名思义&a…

gPRC基础教程

1.什么是RPC? RPC 远过程调用.在理解远程调用之前,首先我们来了解一下本地调用,只有更好的理解了本地调用,才能更好的理解RPC. 1.1 本地调用ex:本地的函数调用在函数调用的时候,一般会经过几个步骤 返回地址入栈参数入栈提升堆栈空间函数参数的复制执行函数调用清空堆栈 1.…