单元测试(白盒测试方法)

一、单元测试

1.单元测试是对软件的基本组成单元进行的测试,如函数、类或类的方法。

单元测试是对软件的最小可测试单元(即可独立编译或汇编的程序模块)进行的测试活动,也称为模块测试

二、白盒测试方法

实例代码

    public static int test(int a,int b,int c) {
1         int result = 0;
2         if(a == 0 or b > 2) {
3             result = b - a;}
4         if(a > 0 and c > 0 ) {
5             result = c * a;}
6        return result;}

流程图

1)语句覆盖

语句覆盖法是指设计适当数量的测试用例,使被测程序中的每条语句至少被执行一次

语句覆盖率的计算方法为:至少被执行一次的语句数量 / 程序中可执行的语句总数

语句覆盖可以使程序中的语句都被测试到,但是它也是覆盖最弱的一种逻辑覆盖方法,无法发现程序中的很多逻辑错误

2)分支(判定覆盖)

分支覆盖,也叫判定覆盖,是指运行代码进行测试时程序中的所有判定语句的真、假分支至少都被执行过一次。

分支覆盖率的计算方法为:测试时覆盖到的判定语句真、假分支的总数 / 程序中判定语句真、假分支的总数

分支(判定)覆盖比语句覆盖的的覆盖效果要强一些,但是分支(判定)覆盖可能还是无法发现程序中的一些逻辑错误

3)条件覆盖

条件覆盖法是指设计适当数量的测试用例,运行被测程序,使得程序中每个判断语句中条件的真、假分支至少被执行一次(复合条件要拆分)

但是,满足了条件覆盖也不能保证所有的分支都已经得到覆盖

4)分支-条件覆盖

指运行代码进行测试时,程序中所有判断语句中的条件取值为真、取值为假的情况和整个判断语句取真分支、假分支的情况都被覆盖到(即,至少被执行过一次)

无法覆盖所有路径

5)条件组合覆盖

要求让每个条件为真、为假情况所有可能的组合都至少被执行一次

满足了条件组合覆盖也不能保证所有的路径都已经得到覆盖

6)路径覆盖

程序中的所有路径都至少被执行一次

但对于包含多且复杂的判断语句、循环语句的程序来说,要覆盖每一条路径将会非常困难

7)基本路径覆盖

基本路径覆盖法是在程序控制流图的基础上,通过分析控制结构的圈复杂度,导出基本可执行的路径集合设计测试用例,运行被测程序,使程序的基本路径都得到覆盖。

控制流图中如果含有复合条件,需要改为单条件嵌套的形式

V(G) = A + 1,其中 A 代表控制流图中的封闭区域数量。从下图可以看出,程序的控制流图中共有 4 个封闭区域,所以,圈复杂度 V(G) = 4 + 1 = 5 。

V(G) = P + 1,其中 P 代表控制流图中的判定节点数

V(G) = e - n + 2,其中 e 代表控制流图中的边的数量,即控制流中的箭头数量;n 代表控制流图的节点数量,即控制流图中的圆圈数量

圈复杂度是指程序中的独立路径数量,是确保程序中每个可执行语句至少执行一次需要的测试用例数量的最小值

可以使程序中的每条独立路径都至少执行一次。如果程序中的基本路径达到了 100% 覆盖,则分支(判定)覆盖、条件覆盖也能达到 100% 覆盖。

8)简单循环测试

简单循环是最简单的循环,即只有一个循环且没有嵌套,例如,一个 while 循环、一个do-while 循环、一个 for 循环

简单循环的测试用例需要考虑下列几种情况(设最大循环次数为 n ):

(1)循环 0 次:测试跳过整个循环的场景;

(2)循环 1 次:目的是检查循环的初始值是否正确;

(3)循环 2 次:目的是检查多次循环是否正确;

(4)循环 m 次(其中 2 < m < n - 1):目的是检查多次循环是否正确

  5)循环 n - 1 次:目的是检查边界值是否正确;

(6)循环 n 次:目的是检查边界值是否正确;

(7)循环 n + 1 次:目的是检查边界值是否正确。

9)嵌套循环

是指一个循环语句的循环体内含有其他的循环语句的语法结构

按简单循环的方法对最内层循环进行测试,其他循环次数设置为最小值

2)由内向外逐步对每一层循环进行测试,直到所有各层循环都测试完成。测试时将当前循环的所有外层循环的循环次数设置为最小值,所有内层循环的循环次数设置为典型值;

3)对各层循环同时取最小循环次数进行测试,如果有最大次数,再同时取最大循环次数进行测试

10)串接循环

是指两个或多个循环连接在一起的循环结构,也称连锁循环

第二种串接循环是各个循环体之间有关联关系,第二个循环的输入来自于第一个循环的输出,对于这种串接循环,我们可以考虑使用嵌套循环的测试方法来进行测试。

按简单循环的方法对下层循环进行测试,其他循环次数设置为最小值;

2)由下至上逐步对每一层循环进行测试,直到所有循环都测试完成。测试时将当前循环的所有上层循环的循环次数设置为最小值,所有下层循环的循环次数设置为典型值;

3)对各层循环同时取最小循环次数进行测试,如果有最大次数,再同时取最大循环次数进行测试。

三、常见问题

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2010-2022 同等学力申硕国考:软件工程简答题真题汇总

2010年简答题 给出数据流图的定义&#xff0c;并举例说明数据流图的四个基本构成成份。 数据流图&#xff08;Data Flow Diagram, DFD&#xff09;是一种用于描述系统中数据流动和处理过程的图形工具。它通过直观的方式展示了系统的输入数据如何经过一系列处理变换为输出数据&a…

海外盲盒APP开发:如何用技术重构“惊喜经济”

当盲盒的神秘感遇上技术的确定性&#xff0c;一场关于消费体验的革命正在海外市场悄然发生。从概率算法的公平性到AR虚拟开箱的沉浸感&#xff0c;从跨境物流的实时追踪到多语言支持的无缝切换&#xff0c;海外盲盒APP的开发是一场技术、设计与商业逻辑的深度融合。概率算法&am…

Aosp13 手机sim卡信号格显示修改

工作中&#xff0c;客户要求对信号格显示偏弱不够友好为由&#xff0c;提出修改&#xff0c;要求使其显示信号强一些。在此记录 一问题&#xff1a;修改系统sim卡显示的信号格&#xff0c;在设备其他配置不变的情况下&#xff0c;使其信号格显示比原有的要优秀二 …

硬件开发2-汇编2(ARMv7-A)- 裸机开发

一、指令1、b&#xff08;Branch&#xff09;原型&#xff1a;B<c> <label>作用&#xff1a;实现无条件跳转&#xff0c;常用于不返回的跳转场景特点&#xff1a;仅跳转到目标地址&#xff0c;不保存返回地址示例&#xff1a;b reset ;跳转到reset标号处执…

清源 SCA 社区版更新(V4.2.0)|漏洞前置感知、精准修复、合规清晰,筑牢软件供应链安全防线!

随着数字化进程加速&#xff0c;软件供应链安全威胁日益复杂&#xff0c;公开漏洞响应滞后、0day 攻击防不胜防、组件升级编译失败、安全与合规风险混杂......这些痛点让企业安全团队、运维人员及研发团队疲于应对。自 2025 年 7 月 1 日安势清源 SCA 社区版首次正式发布以及在…

氚燃料增殖里程碑:MIT新型BABY包层技术实验验证

● 导语 5月20日&#xff0c;麻省理工学院&#xff08;MIT&#xff09;发文称&#xff0c;BABY实验首次获取了氚在装置内增殖的实测数据&#xff0c;验证了核心模型&#xff0c;并为未来核聚变电厂的燃料自循环奠定了重要基础。 原文&#x1f447;&#x1f3fb; https://m…

python+springboot+uniapp微信小程序题库系统 在线答题 题目分类 错题本管理 学习记录查询系统

目录技术栈介绍具体实现截图系统设计研究方法&#xff1a;设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理&#xff0c;难度适中&#xff0…

Office转PDF转换器v1.0.py

软件介绍 这是批量将word、Excel、PPT转换为PDF格式的软件&#xff0c;不过PPT转换为PDF需要电脑安装了office&#xff0c;目前这个我还没有解决没有office也可以安装的方法。 软件使用 软件使用是比较简单的&#xff0c;导入文件/文件夹&#xff0c;在自定义输出路径 点击这…

62_基于深度学习的海洋垃圾检测识别系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)

目录 项目介绍&#x1f3af; 功能展示&#x1f31f; 一、环境安装&#x1f386; 环境配置说明&#x1f4d8; 安装指南说明&#x1f3a5; 环境安装教学视频 &#x1f31f; 二、数据集介绍&#x1f31f; 三、系统环境&#xff08;框架/依赖库&#xff09;说明&#x1f9f1; 系统环…

深入浅出 全面剖析消息队列(Kafka,RabbitMQ,RocketMQ 等)

消息队列 一、概念 消息队列&#xff08;MQ&#xff09;&#xff1a;一种异步通信机制&#xff0c;通过“消息”的形式让不同系统或模块解耦核心思想&#xff1a;发送方&#xff08;生产者Producer&#xff09;只负责发送消息&#xff0c;接收方&#xff08;消费者Consumer&…

Flux Images Generation API 对接说明

本文将介绍一种 Flux Images Generation API 对接说明&#xff0c;它是可以通过输入自定义参数来生成Flux官方的图片。 接下来介绍下 Flux Images Generation API 的对接说明。 申请流程 要使用 API&#xff0c;需要先到 Flux Images Generation API 对应页面申请对应的服务…

CSS布局 - 网格布局 -- 笔记3

目录网格布局基础网格网格剖析CSS 提供了一些控制网页布局的几个重要工具&#xff0c;这里介绍网格布局。 网格布局 CSS 网格可以定义由行和列组成的二维布局&#xff0c;然后将元素放置到网格中。有些元素可能只占据网格的一个单元&#xff0c;另一些元素则可能占据多行或多…

合约开发完后部署测试

一 编译npx hardhat compile二 测试npx hardhat test三部署注意部署的时候2.0和3版本有所区别&#xff0c;3.0如下# 部署到本地网络&#xff08;如已运行 npx hardhat node&#xff09; npx hardhat ignition deploy ./ignition/modules/MyModule.ts --network localhost# 部署…

产品无法正确解析复杂表格和流程图,有什么替代方案或优化方法?

在真实办公场景中&#xff0c;文档内的元素往往不具备标准化和格式化特征&#xff0c;像双栏表格、无线图表等复杂元素十分常见。而传统 OCR 工具在面对这类复杂文档时&#xff0c;存在明显的能力短板&#xff1a;它无法准确判断复杂表格的结构逻辑以及内容的顺序逻辑&#xff…

《Html模板》HTML数学题目生成器 - 让数学练习更简单(附源码)

目录专栏导读&#x1f9ee; HTML数学题目生成器 - 让数学练习更简单项目简介✨ 核心功能&#x1f3af; 灵活的运算类型选择&#x1f4ca; 智能题目生成算法⚙️ 个性化参数设置&#x1f5a8;️ 专业打印优化&#x1f3a8; 用户体验设计现代化界面交互体验&#x1f6e0;️ 技术实…

Go语言设计模式(七)组合模式

组合模式是指将一组相似对象当做一个单一对象的设计模式.1.组成角色:1.1组件:组合中的对象声明接口,主要用于访问和管理其子组件.1.2叶子节点:定义组合中原始对象行为的类.叶子节点表示组合中的叶对象.1.3组合:又称为容器,存储子组件并在组件接口中实现与子组件有关的类.1.4客户…

AI 3D 生成工具知识库:当前产品格局与测评总结

聚焦于 AI 3D 生成领域的领军产品、功能比较及实测性能。内容分为产品格局、通用功能、测评系统与基准测试&#xff0c;以及单视图生成实测结果。所有信息基于脚本分析&#xff0c;并交叉验证了产品名称、团队背景&#xff08;如 VAST AI 的 TripoSR/Meshy 的 Meshy-1、影眸科技…

淘客app的容器化部署与编排:基于Kubernetes的微服务架构实践

淘客app的容器化部署与编排&#xff1a;基于Kubernetes的微服务架构实践 大家好&#xff0c;我是阿可&#xff0c;微赚淘客系统及省赚客APP创始人&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在淘客app的业务迭代中&#xff0c;传统物理机部署面…

当GitHub不再纯粹:Python自动化测试的未来是AI还是危机?

全球最大的开源代码平台&#xff0c;彻底被卷进了AI洪流&#xff01;作为全球最大的“程序员交友平台”&#xff08;手动狗头&#xff09;&#xff0c;GitHub 可以说是每一个开发者又爱又恨的“家”。没错&#xff0c;就是那个全球最大、没有之一的开源代码托管平台&#xff01…

Spring Boot + MySQL 创建超级管理员

Spring Boot系统创建超管实现方式1. 数据库脚本初始化&#xff08;最直接的方式&#xff09;2. Spring Boot 启动时自动创建&#xff08;代码级初始化&#xff09;2.1 实体类定义2.2 Repository 接口2.3 初始化组件2.4 配置密码加密器3. 通过接口手动创建&#xff08;最安全的方…