当前位置: 首页 > news >正文

软件测试面试题整理

970e91b829de4f55a0d60c12edecd863.png

软件测试的几个阶段

在进行Beta测试之前和之后,通常会进行以下几种测试:

  1. 内部测试(Internal Testing)

    1. 在Beta测试之前,开发团队会进行内部测试,对软件进行全面的测试。这个阶段包括单元测试、集成测试和系统测试,以验证软件是否满足预期的功能和质量标准。

    2. 单元测试(Unit Testing):在软件开发过程中的最早阶段进行,针对软件中的每个独立单元(如函数、方法)进行测试。目的是验证每个单元的功能是否正确,是否达到预期的结果。可以使用特定的测试框架和工具来执行单元测试。

    3. 集成测试(Integration Testing):在单元测试之后进行,将已经通过单元测试的单元组合在一起进行测试。集成测试的目的是验证单元之间的相互作用是否正常,并且整个系统是否能够正确地运行。可以使用不同的方法和工具,如自动化测试框架或手动测试。

    4. 系统测试(System Testing):在集成测试之后进行,对整个软件系统进行全面的测试。系统测试的目的是验证软件系统是否满足用户需求和设计规范,并且符合预期的功能和性能要求。系统测试可能涉及多个方面,包括功能测试、性能测试、安全性测试等。可以进行手动测试或自动化测试,以确保软件的质量和稳定性。

  2. Alpha测试:

    1. 在Beta测试之前,有时会进行Alpha测试。Alpha测试是由开发团队内部进行的测试,旨在验证软件的基本功能和稳定性,通常涉及到更小规模的用户。

  3. Beta测试:

    1. Beta测试是将软件提供给一部分真实用户进行使用和测试。这是一种真实环境下的测试,主要关注用户体验和反馈。

  4. 回归测试(Regression Testing)

    1. 在Beta测试结束后,可能会进行回归测试。回归测试的目的是确保在修复Bug或进行其他改进之后,软件的已有功能没有产生新的问题或影响。

  5. 性能测试(Performance Testing)

    1. 性能测试主要关注软件的性能指标,如响应时间、吞吐量和负载能力等。这样可以确保软件在正式发布之前能够承受预期的工作负载。

  6. 安全性测试(Security Testing)

    1. 安全性测试用于评估软件在保护用户数据和系统安全方面的能力。这样可以发现和修复潜在的安全漏洞和风险。

这些测试环节通常是软件测试过程中的重要组成部分,可以确保软件在发布之前和之后的质量和稳定性。具体的测试流程和方法会根据项目需求和测试策略进行定制。

416f8fbea7c2493c825316b6c1efc75c.png

09c38bd472964e18b5dc971773440aa1.png

c0543562642548929f8488c98205f1ec.png

等价类划分

等价类划分是软件测试中的一种测试设计技术,它通过将输入值和输出值划分为若干等价类(Equivalent Class),以最小化测试用例的数量并覆盖尽可能多的情况。

在等价类划分中,将相似的输入值划分为同一个等价类,并期望这个等价类中的测试用例的行为是相同的。这样就可以选择一个代表性的测试用例来代表整个等价类。

举例来说,假设有一个函数用于验证用户年龄是否符合规定的范围(18岁到60岁之间)。根据等价类划分的原则,可以将输入值划分为以下等价类:

  1. 合法的年龄:18-60之间的年龄,如25、35。
  2. 非法的年龄:小于18岁或大于60岁的年龄,如16、70。
  3. 边界值:18和60本身。

在这种情况下,我们可以选择以下测试用例来覆盖这些等价类:

  1. 测试用例1:输入合法的年龄,如25。
  2. 测试用例2:输入非法的年龄,如16。
  3. 测试用例3:输入非法的年龄,如70。
  4. 测试用例4:输入边界值18。
  5. 测试用例5:输入边界值60。

通过这样的等价类划分,我们只需要选择五个测试用例,即可覆盖所有可能的情况。这样可以有效地降低测试工作量,同时仍然能够测试到各种可能的输入情况和相应的处理逻辑。

错误推断法

错误推断法(Error Guessing)是一种软件测试的技术,它基于测试人员的经验和直觉来推测可能存在的错误和问题,以设计和执行测试用例。

错误推断法的核心思想是测试人员通过分析软件系统的特点、业务逻辑、用户需求等,从中尝试推测可能存在的错误情况。这种方法不是基于系统的规范或设计文档,而是依赖于测试人员的主观判断和猜测。

这里给出一个示例来说明错误推断法的应用:

假设测试人员要测试一个电子商务网站的搜索功能。根据经验和直觉,测试人员可能会推测以下可能存在的错误:

  1. 输入无效的搜索关键字,如特殊字符或过长的字符串。
  2. 输入包含敏感词的搜索关键字,如攻击性语言或屏蔽词汇。
  3. 搜索结果不符合预期,如搜索结果应包含某一特定商品,但未显示正确的结果。
  4. 搜索功能在高并发情况下无法正常工作,导致系统崩溃或响应缓慢。
  5. 界面上的搜索按钮无效,无法触发搜索操作。

根据这些猜测的错误情况,测试人员可以设计相应的测试用例来验证这些假设。例如,测试人员可以输入各种不同的搜索关键字,包括异常情况,观察系统的行为是否符合预期。

需要注意的是,错误推断法主要依赖于测试人员的经验和洞察力,因此可能有一些潜在的错误情况无法被发现。因此,错误推断法通常与其他测试技术结合使用,以确保测试的全面性和准确性。

c789a1574fc544d79bda5a406256788c.png

8e89f202be014613831535f4ea236455.png

负载测试(Load Testing)

负载测试(Load Testing)是一种软件测试技术,用于评估系统在正常和峰值负载条件下的性能和可靠性。负载测试模拟了真实用户或系统的操作行为,以验证系统在高负载情况下的表现和性能指标。

负载测试的目的是确定系统处理大量并发用户或请求时的极限能力,并查找性能瓶颈,以便根据测试结果采取优化措施。它可以帮助确定系统的强度、稳定性和可伸缩性。

举个例子,假设有一个电子商务网站,希望进行负载测试以评估其在高流量情况下的性能。以下是一个负载测试的示例过程:

  1. 目标设定:确定负载测试的目标和测试规模。例如,在峰值时,网站需要支持多少并发用户或请求,并设置相应的性能指标,如响应时间、吞吐量等。

  2. 测试环境搭建:配置适当的硬件设备、网络连接和基础软件环境,以模拟真实用户的访问行为。可以使用负载测试工具来模拟并发用户、生成请求,并收集性能指标。

  3. 脚本设计:使用负载测试工具创建测试脚本,模拟真实用户的访问行为。脚本可以包括登录、搜索、购买等常见操作,并设置用户操作之间的时间间隔。

  4. 负载测试执行:在负载测试工具的控制下,执行测试脚本以模拟用户并发访问。逐渐增加并发用户或请求的数量,观察系统的响应时间、吞吐量等性能指标。

  5. 性能指标收集:在测试执行期间,收集和分析系统的性能指标,如响应时间、吞吐量、错误率等。这些指标可以用于评估系统的性能等级,检测性能瓶颈和优化需求。

  6. 问题分析与优化:根据测试结果,分析性能问题和瓶颈,并采取相应的优化措施。这可能包括调整系统配置、增加服务器资源、优化代码或数据库查询等。

  7. 结果报告和总结:整理测试结果和分析报告,总结负载测试的结论和建议。向相关人员和团队提供详细的负载测试报告,包括性能指标、问题和解决方案。

通过负载测试,可以评估系统在真实用户负载下的性能状况,并帮助开发团队识别和解决性能问题,以提供更好的用户体验和稳定性。

911ba3b39f5444179006f57c233d78bb.png

MCDC(Modified Condition/Decision Coverage)

MCDC是一种测试技术,用于评估和确保在程序中各种条件和决策的覆盖程度。MCDC强调每个条件和决策的独立测试,以确保它们的所有可能性都被覆盖。

MCDC技术基于判定覆盖,即要求每个条件的取值都至少被测试一次。但与传统的条件覆盖不同,MCDC还要求以下几个修正条件的覆盖:

  1. M条件(Modified Condition):每一个条件在独立测试中至少改变一次其值。
  2. C条件(Condition):每个条件取真和假的情况都要覆盖到。
  3. D条件(Decision):每个决策都要覆盖到,即每个条件的所有组合情况都要覆盖到。

简单来说,MCDC要求测试用例必须能够独立地改变每个条件的值,并保证每个条件的所有可能组合都被覆盖到。这样做可以有效地减少测试用例的数量,同时提高对关键条件和决策的测试覆盖度。

举个例子来说明MCDC的应用:

假设有一个简单的函数,用于计算两个整数相除是否能整除。函数代码如下:

bool isDivisible(int dividend, int divisor) {if (divisor != 0 && dividend % divisor == 0) {return true;}else {return false;}
}

使用MCDC进行测试时,需要覆盖到以下情况:

  1. M条件:测试用例要覆盖至少改变一次divisordividend的值。
  2. C条件:测试用例要覆盖divisor为0和非0的情况。
  3. D条件:测试用例要覆盖能整除和不能整除的情况。

例如,为了覆盖M条件,可以设计一个测试用例:

isDivisible(10, 0); // 将divisor的值从非0改变为0

为了覆盖C条件,可以设计两个测试用例:

isDivisible(10, 2); // divisor非0的情况
isDivisible(10, 0); // divisor等于0的情况

为了覆盖D条件,可以设计四个测试用例:

isDivisible(10, 2); // 能整除的情况
isDivisible(10, 3); // 不能整除的情况
isDivisible(10, 0); // divisor等于0的情况
isDivisible(0, 2); // dividend等于0的情况

通过这些测试用例的设计和执行,可以实现MCDC的覆盖要求,有效地测试函数对各种可能情况的处理能力。

7a2a1b92773e4f4fa8f821c3f57614de.png

79c1bcf4079443198a2ee9ddf7f767c7.png

bda4c8ef7cf246da90e5af5c87f63ba6.png

白盒测试

白盒测试是一种软件测试方法,它通过测试内部结构、设计和实现的细节,以验证软件的正确性和效率。下面是几种常见的白盒测试方法:

  1. 基本路径测试(Basis Path Testing):基于控制流图和程序的基本路径来设计测试用例,以确保每个程序路径都至少被执行一次。

  2. 控制流测试(Control Flow Testing):根据程序的控制结构(如条件语句、循环和分支)设计测试用例,以覆盖各种可能的情况。

  3. 语句覆盖测试(Statement Coverage Testing):确保每个程序语句至少被执行一次的测试方法。通过运行测试用例并收集覆盖率信息,可以确定哪些语句未被执行。

  4. 判定覆盖测试(Decision Coverage Testing):确保每个判定(条件语句)的每个可能结果都至少被覆盖一次的测试方法。它关注每个判定的真和假分支的覆盖情况。

  5. 条件覆盖测试(Condition Coverage Testing):确保每个条件的每种可能取值组合至少被测试一次的方法。它关注每个条件的各种可能性。

  6. 路径覆盖测试(Path Coverage Testing):根据程序的控制流图中的路径来设计测试用例,以确保每个路径都被覆盖一次。路径覆盖是一种全面而严格的覆盖方法。

  7. 边界值测试(Boundary Value Testing):测试程序在输入的边界值和接近边界值的情况下的行为。这种测试方法是基于边界条件可能引发更多错误的观点。

  8. 数据流测试(Data Flow Testing):关注程序的数据流和变量之间的依赖关系,设计测试用例以测试正确的变量使用和数据流转。

这些白盒测试方法各自强调了不同的测试目标和覆盖范围。选择适合的白盒测试方法取决于系统的特点、测试目的和时间限制。通常,结合多种白盒测试方法可以提高测试覆盖度并发现更多的潜在问题。

500eae2aeb0c48299457c2cc5ad5dfaf.png

a5a6800fccb8454d8966f6bb9b4d9978.png

1a335472648d48878a4ec58e34d518e6.png

fe2373ddc80146e1a131019a7f4583ea.png

445f20f44d7e4cd2bc2e0755ee4f005a.png

相关文章:

软件测试面试题整理

软件测试的几个阶段 在进行Beta测试之前和之后,通常会进行以下几种测试: 内部测试(Internal Testing) 在Beta测试之前,开发团队会进行内部测试,对软件进行全面的测试。这个阶段包括单元测试、集成测试和系…...

C++三剑客之std::variant(二):深入剖析

目录 1.概述 2.辅助类介绍 2.1.std::negation 2.2.std::conjunction 2.3.std::is_destructible 2.4.std::is_object 2.5.is_default_constructible 2.6.std::is_trivially_destructible 2.7.std::in_place_type和std::in_place_index 3.原理分析 3.1.存储分析 3.2.…...

实验一 安装和使用Oracle数据库

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…...

软件工程研究生后期总结

写这篇随笔的时候,我已经处于研究生阶段的后期,只剩下一个硕论答辩即可结束研究生生涯。趁有闲暇时间,我希望可以从实习、兼职、论文和求职等几个角度重新整理一下研究生后期的工作和收获,以及对未来工作和生活做出展望。 首先简…...

Java爬虫爬取图片壁纸

Java爬虫 以sougou图片为例:https://pic.sogou.com/ JDK17、SpringBoot3.2.X、hutool5.8.24实现Java爬虫,爬取页面图片 项目介绍 开发工具:IDEA2023.2.5 JDK:Java17 SpringBoot:3.2.x 通过 SpringBoot 快速构建开发环境…...

红队打靶练习:HOLYNIX: V1

目录 信息收集 1、arp 2、netdiscover 3、nmap 4、nikto whatweb 目录探测 1、gobuster 2、dirsearch 3、dirb 4、feroxbuster WEB sqlmap 1、爆库 2、爆表 3、爆列 4、爆字段 后台登录 1、文件上传 2、文件包含 3、越权漏洞 反弹shell 提权 总结 信息…...

elasticsearch[二]-DSL查询语法:全文检索、精准查询(term/range)、地理坐标查询(矩阵、范围)、复合查询(相关性算法)、布尔查询

ES-DSL查询语法(全文检索、精准查询、地理坐标查询) 1.DSL查询文档 elasticsearch 的查询依然是基于 JSON 风格的 DSL 来实现的。 1.1.DSL 查询分类 Elasticsearch 提供了基于 JSON 的 DSL(Domain Specific Language)来定义查…...

Microsoft Word 设置底纹

Microsoft Word 设置底纹 References 打开文档页面,选中特定段落或全部文档 在“段落”中单击“边框”下三角按钮 在列表中选择“边框和底纹”选项 在“边框和底纹”对话框中单击“底纹”选项卡 在图案样式和图案颜色列表中设置合适颜色的底纹,单击“确…...

【大数据】Flink 详解(九):SQL 篇 Ⅱ

《Flink 详解》系列(已完结),共包含以下 10 10 10 篇文章: 【大数据】Flink 详解(一):基础篇【大数据】Flink 详解(二):核心篇 Ⅰ【大数据】Flink 详解&…...

workflow源码解析:GoTask

关于go task 提供了另一种更简单的使用计算任务的方法,模仿go语言实现的go task。 使用go task来实计算任务无需定义输入与输出,所有数据通过函数参数传递。 与ThreadTask 区别 ThreadTask 是有模板,IN 和 OUT, ThreadTask 依赖…...

SpringMVC入门案例

引言 Spring MVC是一个基于MVC架构的Web框架,它的主要作用是帮助开发者构建Web应用程序。它提供了一个强大的模型驱动的开发方式,可以帮助开发者实现Web应用程序的各种功能,如请求处理、数据绑定、视图渲染、异常处理等。 开发步骤 1.创建we…...

Docker本地私有仓库搭建配置指导

一、说明 因内网主机需要拉取镜像进行Docker应用,因此需要一台带外主机作为内网私有仓库来提供内外其他docker业务主机使用。参考架构如下: 相关资源:加密、Distribution registry、Create and Configure Docker Registry、Registry部署、D…...

python 通过定时任务执行pytest case

这段Python代码使用了schedule库来安排一个任务,在每天的22:50时运行。这个任务执行一个命令来运行pytest,并生成一个报告。 代码开始时将job_done变量设为False,然后运行预定的任务。一旦任务完成,将job_done设置为True并跳出循…...

算法面试题:合并两个有序链表

描述:给定两个按非递减顺序排列的链表,合并两个链表,并将结果按非递减顺序排列。 例如: # 链表 1: 1 -> 2 -> 4 # 链表 2: 1 -> 3 -> 4合并后的链表应该是:1 -> 1 -> 2 -> 3 -> 4 -> 4 …...

LaWGPT安装和使用教程的复现版本【细节满满】

文章目录 前言一、下载和部署1.1 下载1.2 环境安装1.3 模型推理 总结 前言 LaWGPT 是一系列基于中文法律知识的开源大语言模型。该系列模型在通用中文基座模型(如 Chinese-LLaMA、ChatGLM等)的基础上扩充法律领域专有词表、大规模中文法律语料预训练&am…...

西门子博途用SCL语言写的入栈出栈

1.用户登录 #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogin(1) 2.用户退出 #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogout(); 3.画面跳转 SetPictureName("P…...

密码产品推介 | 沃通安全电子签章系统(ES-1)

产品介绍 沃通安全电子签章系统(ES-1)是一款基于密码技术、完全自主研发的商用密码产品,严格遵循国家密码管理局制定的相关标准,可为企业和个人提供安全、合规的电子签章功能服务。产品的主要用途是为各类文书、合同、表单等电子…...

蓝桥杯真题(Python)每日练Day1

说明:在CSP认证的基础上(可以看看本人CSP打卡系列的博客)备赛2024蓝桥杯(Python),本人专业:大数据与数据科学 因此对python要求熟练掌握,通过练习蓝桥杯既能熟悉语法又能锻炼算法和思…...

IDEA怎么用Devtools热部署

IDEA怎么用Devtools热部署 大家知道在项目开发过程中,有时候会改动代码逻辑或者修改数据结构,为了能使改动的代码生效,往往需要重启应用查看改变效果,这样会相当耗费时间。 重启应用其实就是重新编译生成新的Class文件&#xff0…...

boost.circular_buffer的使用和介绍

C 文章目录 C 很多时候,我们需要在内存中记录最近一段时间的数据,如操作记录等。由于这部分数据记录在内存中,因此并不能无限递增,一般有容量限制,超过后就将最开始的数据移除掉。在stl中并没有这样的数据结构&#xf…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

恶补电源:1.电桥

一、元器件的选择 搜索并选择电桥&#xff0c;再multisim中选择FWB&#xff0c;就有各种型号的电桥: 电桥是用来干嘛的呢&#xff1f; 它是一个由四个二极管搭成的“桥梁”形状的电路&#xff0c;用来把交流电&#xff08;AC&#xff09;变成直流电&#xff08;DC&#xff09;。…...

解析“道作为序位生成器”的核心原理

解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制&#xff0c;重点解析"道作为序位生成器"的核心原理与实现框架&#xff1a; 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...

内窥镜检查中基于提示的息肉分割|文献速递-深度学习医疗AI最新文献

Title 题目 Prompt-based polyp segmentation during endoscopy 内窥镜检查中基于提示的息肉分割 01 文献速递介绍 以下是对这段英文内容的中文翻译&#xff1a; ### 胃肠道癌症的发病率呈上升趋势&#xff0c;且有年轻化倾向&#xff08;Bray等人&#xff0c;2018&#x…...

Redis上篇--知识点总结

Redis上篇–解析 本文大部分知识整理自网上&#xff0c;在正文结束后都会附上参考地址。如果想要深入或者详细学习可以通过文末链接跳转学习。 1. 基本介绍 Redis 是一个开源的、高性能的 内存键值数据库&#xff0c;Redis 的键值对中的 key 就是字符串对象&#xff0c;而 val…...