软件测试面试题整理

软件测试的几个阶段
在进行Beta测试之前和之后,通常会进行以下几种测试:
-
内部测试(Internal Testing)
-
在Beta测试之前,开发团队会进行内部测试,对软件进行全面的测试。这个阶段包括单元测试、集成测试和系统测试,以验证软件是否满足预期的功能和质量标准。
-
单元测试(Unit Testing):在软件开发过程中的最早阶段进行,针对软件中的每个独立单元(如函数、方法)进行测试。目的是验证每个单元的功能是否正确,是否达到预期的结果。可以使用特定的测试框架和工具来执行单元测试。
-
集成测试(Integration Testing):在单元测试之后进行,将已经通过单元测试的单元组合在一起进行测试。集成测试的目的是验证单元之间的相互作用是否正常,并且整个系统是否能够正确地运行。可以使用不同的方法和工具,如自动化测试框架或手动测试。
-
系统测试(System Testing):在集成测试之后进行,对整个软件系统进行全面的测试。系统测试的目的是验证软件系统是否满足用户需求和设计规范,并且符合预期的功能和性能要求。系统测试可能涉及多个方面,包括功能测试、性能测试、安全性测试等。可以进行手动测试或自动化测试,以确保软件的质量和稳定性。
-
-
Alpha测试:
-
在Beta测试之前,有时会进行Alpha测试。Alpha测试是由开发团队内部进行的测试,旨在验证软件的基本功能和稳定性,通常涉及到更小规模的用户。
-
-
Beta测试:
-
Beta测试是将软件提供给一部分真实用户进行使用和测试。这是一种真实环境下的测试,主要关注用户体验和反馈。
-
-
回归测试(Regression Testing)
-
在Beta测试结束后,可能会进行回归测试。回归测试的目的是确保在修复Bug或进行其他改进之后,软件的已有功能没有产生新的问题或影响。
-
-
性能测试(Performance Testing)
-
性能测试主要关注软件的性能指标,如响应时间、吞吐量和负载能力等。这样可以确保软件在正式发布之前能够承受预期的工作负载。
-
-
安全性测试(Security Testing)
-
安全性测试用于评估软件在保护用户数据和系统安全方面的能力。这样可以发现和修复潜在的安全漏洞和风险。
-
这些测试环节通常是软件测试过程中的重要组成部分,可以确保软件在发布之前和之后的质量和稳定性。具体的测试流程和方法会根据项目需求和测试策略进行定制。



等价类划分
等价类划分是软件测试中的一种测试设计技术,它通过将输入值和输出值划分为若干等价类(Equivalent Class),以最小化测试用例的数量并覆盖尽可能多的情况。
在等价类划分中,将相似的输入值划分为同一个等价类,并期望这个等价类中的测试用例的行为是相同的。这样就可以选择一个代表性的测试用例来代表整个等价类。
举例来说,假设有一个函数用于验证用户年龄是否符合规定的范围(18岁到60岁之间)。根据等价类划分的原则,可以将输入值划分为以下等价类:
- 合法的年龄:18-60之间的年龄,如25、35。
- 非法的年龄:小于18岁或大于60岁的年龄,如16、70。
- 边界值:18和60本身。
在这种情况下,我们可以选择以下测试用例来覆盖这些等价类:
- 测试用例1:输入合法的年龄,如25。
- 测试用例2:输入非法的年龄,如16。
- 测试用例3:输入非法的年龄,如70。
- 测试用例4:输入边界值18。
- 测试用例5:输入边界值60。
通过这样的等价类划分,我们只需要选择五个测试用例,即可覆盖所有可能的情况。这样可以有效地降低测试工作量,同时仍然能够测试到各种可能的输入情况和相应的处理逻辑。
错误推断法
错误推断法(Error Guessing)是一种软件测试的技术,它基于测试人员的经验和直觉来推测可能存在的错误和问题,以设计和执行测试用例。
错误推断法的核心思想是测试人员通过分析软件系统的特点、业务逻辑、用户需求等,从中尝试推测可能存在的错误情况。这种方法不是基于系统的规范或设计文档,而是依赖于测试人员的主观判断和猜测。
这里给出一个示例来说明错误推断法的应用:
假设测试人员要测试一个电子商务网站的搜索功能。根据经验和直觉,测试人员可能会推测以下可能存在的错误:
- 输入无效的搜索关键字,如特殊字符或过长的字符串。
- 输入包含敏感词的搜索关键字,如攻击性语言或屏蔽词汇。
- 搜索结果不符合预期,如搜索结果应包含某一特定商品,但未显示正确的结果。
- 搜索功能在高并发情况下无法正常工作,导致系统崩溃或响应缓慢。
- 界面上的搜索按钮无效,无法触发搜索操作。
根据这些猜测的错误情况,测试人员可以设计相应的测试用例来验证这些假设。例如,测试人员可以输入各种不同的搜索关键字,包括异常情况,观察系统的行为是否符合预期。
需要注意的是,错误推断法主要依赖于测试人员的经验和洞察力,因此可能有一些潜在的错误情况无法被发现。因此,错误推断法通常与其他测试技术结合使用,以确保测试的全面性和准确性。


负载测试(Load Testing)
负载测试(Load Testing)是一种软件测试技术,用于评估系统在正常和峰值负载条件下的性能和可靠性。负载测试模拟了真实用户或系统的操作行为,以验证系统在高负载情况下的表现和性能指标。
负载测试的目的是确定系统处理大量并发用户或请求时的极限能力,并查找性能瓶颈,以便根据测试结果采取优化措施。它可以帮助确定系统的强度、稳定性和可伸缩性。
举个例子,假设有一个电子商务网站,希望进行负载测试以评估其在高流量情况下的性能。以下是一个负载测试的示例过程:
-
目标设定:确定负载测试的目标和测试规模。例如,在峰值时,网站需要支持多少并发用户或请求,并设置相应的性能指标,如响应时间、吞吐量等。
-
测试环境搭建:配置适当的硬件设备、网络连接和基础软件环境,以模拟真实用户的访问行为。可以使用负载测试工具来模拟并发用户、生成请求,并收集性能指标。
-
脚本设计:使用负载测试工具创建测试脚本,模拟真实用户的访问行为。脚本可以包括登录、搜索、购买等常见操作,并设置用户操作之间的时间间隔。
-
负载测试执行:在负载测试工具的控制下,执行测试脚本以模拟用户并发访问。逐渐增加并发用户或请求的数量,观察系统的响应时间、吞吐量等性能指标。
-
性能指标收集:在测试执行期间,收集和分析系统的性能指标,如响应时间、吞吐量、错误率等。这些指标可以用于评估系统的性能等级,检测性能瓶颈和优化需求。
-
问题分析与优化:根据测试结果,分析性能问题和瓶颈,并采取相应的优化措施。这可能包括调整系统配置、增加服务器资源、优化代码或数据库查询等。
-
结果报告和总结:整理测试结果和分析报告,总结负载测试的结论和建议。向相关人员和团队提供详细的负载测试报告,包括性能指标、问题和解决方案。
通过负载测试,可以评估系统在真实用户负载下的性能状况,并帮助开发团队识别和解决性能问题,以提供更好的用户体验和稳定性。

MCDC(Modified Condition/Decision Coverage)
MCDC是一种测试技术,用于评估和确保在程序中各种条件和决策的覆盖程度。MCDC强调每个条件和决策的独立测试,以确保它们的所有可能性都被覆盖。
MCDC技术基于判定覆盖,即要求每个条件的取值都至少被测试一次。但与传统的条件覆盖不同,MCDC还要求以下几个修正条件的覆盖:
- M条件(Modified Condition):每一个条件在独立测试中至少改变一次其值。
- C条件(Condition):每个条件取真和假的情况都要覆盖到。
- D条件(Decision):每个决策都要覆盖到,即每个条件的所有组合情况都要覆盖到。
简单来说,MCDC要求测试用例必须能够独立地改变每个条件的值,并保证每个条件的所有可能组合都被覆盖到。这样做可以有效地减少测试用例的数量,同时提高对关键条件和决策的测试覆盖度。
举个例子来说明MCDC的应用:
假设有一个简单的函数,用于计算两个整数相除是否能整除。函数代码如下:
bool isDivisible(int dividend, int divisor) {if (divisor != 0 && dividend % divisor == 0) {return true;}else {return false;}
}
使用MCDC进行测试时,需要覆盖到以下情况:
- M条件:测试用例要覆盖至少改变一次
divisor和dividend的值。 - C条件:测试用例要覆盖
divisor为0和非0的情况。 - 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的覆盖要求,有效地测试函数对各种可能情况的处理能力。



白盒测试
白盒测试是一种软件测试方法,它通过测试内部结构、设计和实现的细节,以验证软件的正确性和效率。下面是几种常见的白盒测试方法:
-
基本路径测试(Basis Path Testing):基于控制流图和程序的基本路径来设计测试用例,以确保每个程序路径都至少被执行一次。
-
控制流测试(Control Flow Testing):根据程序的控制结构(如条件语句、循环和分支)设计测试用例,以覆盖各种可能的情况。
-
语句覆盖测试(Statement Coverage Testing):确保每个程序语句至少被执行一次的测试方法。通过运行测试用例并收集覆盖率信息,可以确定哪些语句未被执行。
-
判定覆盖测试(Decision Coverage Testing):确保每个判定(条件语句)的每个可能结果都至少被覆盖一次的测试方法。它关注每个判定的真和假分支的覆盖情况。
-
条件覆盖测试(Condition Coverage Testing):确保每个条件的每种可能取值组合至少被测试一次的方法。它关注每个条件的各种可能性。
-
路径覆盖测试(Path Coverage Testing):根据程序的控制流图中的路径来设计测试用例,以确保每个路径都被覆盖一次。路径覆盖是一种全面而严格的覆盖方法。
-
边界值测试(Boundary Value Testing):测试程序在输入的边界值和接近边界值的情况下的行为。这种测试方法是基于边界条件可能引发更多错误的观点。
-
数据流测试(Data Flow Testing):关注程序的数据流和变量之间的依赖关系,设计测试用例以测试正确的变量使用和数据流转。
这些白盒测试方法各自强调了不同的测试目标和覆盖范围。选择适合的白盒测试方法取决于系统的特点、测试目的和时间限制。通常,结合多种白盒测试方法可以提高测试覆盖度并发现更多的潜在问题。





相关文章:
软件测试面试题整理
软件测试的几个阶段 在进行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文件࿰…...
boost.circular_buffer的使用和介绍
C 文章目录 C 很多时候,我们需要在内存中记录最近一段时间的数据,如操作记录等。由于这部分数据记录在内存中,因此并不能无限递增,一般有容量限制,超过后就将最开始的数据移除掉。在stl中并没有这样的数据结构…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
