ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

软件测试面试基础题30道:从用例设计到缺陷管理全解析

软件测试面试基础题30道:从用例设计到缺陷管理全解析 最近不少准备软件测试面试的朋友问我基础题到底怎么答才能让面试官满意。网上的面试题整理一抓一大把但很多答案一看就是背的面试官追问两句就站不住了。这篇我结合自己做测试这几年的经验整理了30道软件测试基础面试题每道都给了参考答案重点放在面试官提问背后的意图和追问方向上。适合正在准备测试岗面试的同学也建议刚入行的测试工程师拿来做自查——基础题不一定考倒你但一定能照出你的理解深度。1. 核心概念题面试开场三板斧看你有没有测试思维这一part的问题通常出现在面试前十分钟看起来最简单实际最考验一个人对测试的理解。很多新人栽跟头不是不会背定义而是一开口就暴露了测试就是点点点的认知。1.1 什么是软件测试这道题面试官真想听什么第1题什么是软件测试软件测试的目的是什么答案参考软件测试是通过手工或自动化方式对软件产品进行验证和确认的过程。它的目的不只是找Bug而是从多维度评估软件质量包括验证软件是否满足需求规格、功能是否正确、性能是否达标、用户体验是否可接受以及是否存在潜在的缺陷风险。我特别想强调一点面试官抛出这个问题不是等你背ISO标准定义。他真正想听的是你心里测试两个字的分量。你要是只答测试就是找Bug大概率会被划入点鼠标型测试员那一档。标准答案之外加一句测试是质量保障的一部分它贯穿需求分析到上线维护的全过程整个回答的层次就不一样了。第2题软件测试的原则有哪些答案参考软件工程领域公认的测试七大原则测试只能证明缺陷存在不能证明软件没有缺陷穷尽测试是不可能的测试需要取舍和风险控制测试应尽早介入越早发现缺陷修复成本越低缺陷具有集群性少量模块往往集中了大多数缺陷杀虫剂悖论重复执行同样的用例会失效用例需要持续更新测试策略依赖于上下文不同业务场景测试重点不同没有缺陷不等于可以发布软件还需满足用户的真实需求经验补充这道题答全七条的人不多能答出五条以上就超过大多数人。但别急着当复读机举一个实际例子更加分。比如缺陷集群性——我在测电商项目的时候订单模块的Bug数量占了全项目的一半还多后来测试资源就向这个模块倾斜这就是原则在实际工作中的应用。1.2 测试用例与缺陷两个绕不开的概念第3题测试用例是什么核心要素有哪些答案参考测试用例是为特定测试目标设计的一组输入、执行条件和预期结果的集合。核心要素包括用例编号、所属模块、用例标题、前置条件、测试步骤、测试数据、预期结果、实际结果、优先级和用例状态。这里有个高频雷区很多新人列要素漏掉预期结果。实际上预期结果是用例的灵魂——没有预期结果执行完你根本不知道这一条算通过还是失败。补充一点面试官如果追问好的测试用例标准是什么可以答可追溯对应需求、可执行步骤清晰、可验证预期明确、有优先级先跑核心。第4题缺陷Bug的生命周期是什么答案参考一个典型缺陷的生命周期是新建New→ 指派Assigned→ 修复Fixed→ 验证Verified→ 关闭Closed。此外还有拒绝Rejected/Not a Bug、延期Deferred、重新打开Reopen等状态。面试官很可能追问开发改了说修好了你验证发现还没好这时候怎么办正确答案是把缺陷状态改成重新打开并重新指派而不是默默去找开发再聊。缺陷状态流转本质上是团队协作的流程规范答这道题的时候把每个状态变更都要有明确记录这个意识体现出来会显得你很有工程素养。第5题什么是回归测试为什么重要答案参考回归测试是在软件代码发生变化之后重新执行原有测试用例确认这次修改没有破坏已有的功能或者没有引入新的缺陷。代码修复、需求变更、配置调整、环境更新之后都需要做回归。重要性在于修复一个Bug往往牵一发而动全身尤其是模块间有依赖关系时A模块的修改很可能让B模块挂掉。经典场景开发为了修一个支付金额计算错误改了公共方法结果订单列表的金额展示全部错了。不做回归测试按下葫芦浮起瓢就是家常便饭。回答时如果能提到回归测试需要优先选择核心业务链路和与改动模块有依赖关系的用例面试官会点头。2. 用例设计题方法不在背得多在于怎么用用例设计方法几乎是必考项但面试官真正深挖的是你能不能现场举出例子而不是把方法名称当顺口溜背一遍。2.1 最基本的等价类与边界值第6题测试用例设计有哪些常用方法答案参考常用的有等价类划分法、边界值分析法、判定表法、因果图法、正交试验法、场景法、错误推测法。实际项目里等价类加边界值能覆盖80%以上的功能测试场景判定表用于组合条件场景法用于业务流程错误推测法靠经验补漏。说句实在话面试答这个题不难难的是别像背书一样。我建议每个人准备一到两个自己真正用过的例子比如你之前测过注册页面就用注册页的字段验证来举例说清楚我用等价类分了有效和无效数据再用边界值测了6位和16位临界点。有实操支撑的答案和背课本的答案面试官一句话就能区分。第7题什么是等价类划分法举例说明。答案参考等价类划分是把所有可能的输入数据按测试效果等效的原则分成若干类从每一类中选取一个代表性数据进行测试。可分为有效等价类符合需求、能被程序接受的输入和无效等价类不符合需求、程序应拒绝的输入。举例一个用户名输入框要求6到16位字母或数字。有效等价类8位字母数字组合取一个代表即可无效等价类少于6位、多于16位、包含特殊字符、包含中文、为空。这五类里各取一个值设计用例就用很少的用例覆盖了绝大部分输入情况。回答时把有效和无效都测到这件事讲清楚因为很多新人只测了能成功的路径。第8题什么是边界值分析法为什么它特别重要答案参考边界值分析法专门针对输入或输出边界进行测试因为程序在边界处最容易出问题比如把错写成、循环边界少判断一次。取位方法包括上点边界上的取值、离点离边界最近的点、内点边界内的任意点。举例某个输入范围是1到100分。上点是1和100离点是0和101内点取50。设计用例就测1、100、0、101、50这五个值再加上一个正常范围内的任意值。边界值法成本极低但发现缺陷的效率极高这就是它特别重要的原因。补充一句软件需求文档里的大于等于不超过XX以内这些描述每一个都隐藏着边界点。2.2 组合条件与业务流第9题什么是判定表法什么时候用它答案参考判定表法用来分析和表达多个输入条件下系统的复杂逻辑组合。判定表由条件桩、动作桩、条件项和动作项组成它把什么条件下做什么操作这个逻辑全部罗列清楚避免遗漏组合。举例某购物平台打折规则——会员且满100元打8折会员不满100元打9折非会员满100元打9.5折非会员不满100元不打折。就可以用判定表列出是否会员、金额是否满100四个组合分别对应四种折扣。这道题的关键是什么时候该用判定表当需求中有多个条件、每个条件又有多个取值而动作随条件组合变化时判定表就是首选。第10题什么是场景法和判定表有什么区别答案参考场景法从用户的实际使用场景出发把系统的操作流程梳理成基本流和备选流。基本流是用户完成业务的主路径备选流是各种分支、异常和中断情况。设计用例时覆盖基本流加尽量多的备选流。举例以用户在线下单为基本流登录→浏览商品→加入购物车→提交订单→支付→完成。备选流包括库存不足、余额不够、支付超时、订单取消、网络中断、重复提交。每一个备选流都要设计对应用例。区别上场景法偏重流程和状态流转判定表偏重条件组合逻辑场景法更接近用户视角适合业务流程复杂的系统判定表适合规则判断复杂的模块。3. 流程、文档与缺陷管理题基本功决定你的工程素养这一块被很多人忽略觉得知道流程就行问那么细干嘛。实际上招聘初级测试岗面试官特别看重你有没有规范的工程意识。流程和文档答得专业对面基本能判断出你在大厂跟过正经项目。3.1 测试流程与测试计划第11题完整的软件测试流程是什么样的答案参考经典V模型或敏捷模式下的完整流程大致是需求评审→测试计划→测试分析与设计→测试用例编写→测试用例评审→测试执行含缺陷跟踪与回归→测试报告→上线验证。测试人员从需求评审阶段就要介入而不是等开发提测才开始动手。我在实际项目里感受最深的一点是需求评审是测试的黄金介入点。很多问题在需求阶段发现成本比开发完再返工低一个数量级。面试时可以主动提一句我习惯在需求评审阶段就列出疑问点和产品确认口径这样后面的用例设计才有依据这个表述非常加分。第12题测试计划包含哪些内容答案参考测试计划是指导整个测试工作的纲领性文件核心内容有测试目标与范围测什么、不测什么、测试策略功能/性能/安全/兼容性的测试深度和手段、测试资源人员、设备、测试环境、进度安排里程碑节点、通过/失败标准、风险与应对措施、交付物清单用例、缺陷报告、测试报告。面试官追问怎么判断测试可以通过频率也不低。这时候可以补充用例执行率达到100%、致命和严重级别缺陷全部关闭、遗留缺陷有明确评估和上线风险说明、核心业务链路全部验证通过。测试计划背后的问题是你有没有全局规划能力别只答成流程清单。3.2 缺陷报告与冒烟测试第13题一份合格的缺陷报告包含哪些核心要素答案参考缺陷标题、所属版本和环境、前置条件、复现步骤、实际结果、预期结果、严重级别、优先级、附件日志、截图、录屏、提交人和提交时间。有的公司还会要求填写缺陷类型、发现阶段、关联需求等。这里我想多说几句。实际工作中一个让开发看一眼就想骂人的缺陷报告往往是点击某按钮后报错这种没有前置条件、没有数据、没有任何截图。而一个优秀测试提的缺陷会精确到在Chrome 120版本、Android 14、弱网状态下输入11位手机号错误验证码点击登录后页面白屏日志见附件开发照着步骤两分钟就能复现定位。能不能写出可复现且可定位的缺陷报告很能体现测试的基本功。第14题缺陷的严重级别和优先级有什么区别答案参考严重级别衡量缺陷对系统的影响程度一般分为致命系统崩溃、数据丢失、严重主要功能不可用、一般功能异常但有绕过方案、轻微UI错位、文案错误。优先级衡量缺陷需要被修复的紧急程度由业务影响、用户影响、开发工作量等多方面决定。两者的典型区别一个后台运营报表偶尔计算错误严重级别高数据准确性受影响但如果这个功能使用频率很低优先级可能只是中等反过来登录按钮文字写错了严重级别低但它直面所有用户优先级反而可能是最高。面试时提到严重级别和优先级不是一一对应的有时需要拉齐产品、开发、测试三方一起评定说明你真的处理过这类问题。第15题什么是冒烟测试什么时候做答案参考冒烟测试是对软件的核心功能或主要业务流程进行快速验证判断当前构建是否具备进入详细测试的条件。通常在开发提测后、正式测试前先做一轮也可以在回归测试开始前做。冒烟测试用例数量少、执行速度快只覆盖最核心的链路能不能通。我习惯拿装修来类比水电进场后要先检查水电通不通才能让木工进场干活。冒烟测试就是那个先通水电的环节冒烟都过不了后面的功能测试、接口测试做得再细都是白搭。回答时加上冒烟测试通过是提测的准入门槛显得你对提测流程有管理意识。第16题测试报告包含哪些核心内容答案参考测试报告是测试阶段结束后的输出物核心内容有测试概述背景、范围、时间、测试执行情况用例总数、执行数、通过数、失败数、阻塞数、通过率、缺陷统计与分析按模块/严重级别分布、缺陷密度、修复率、遗留缺陷情况、风险提示、测试结论是否允许发布、遗留问题的处理建议。写测试报告最容易犯的错是写成测试执行流水账做了多少条、通过了多少条就完事。面试官想听的是你会不会分析哪些模块缺陷密度高需要关注、遗留缺陷会影响什么场景、上线风险可不可控。结论不是拍脑袋而是用缺陷数据支撑出来的。4. 接口与自动化基础题初级测试岗的分水岭现在无论大厂小厂测试岗面试基本都会带一点接口和自动化的概念题。不需要你有多深的代码能力但基础概念必须清楚这是初级测试岗位的分水岭。4.1 接口测试的认知与工具第17题什么是接口测试和UI测试有什么区别答案参考接口测试是绕过用户界面直接对软件各模块之间、系统与外部系统之间的接口进行测试验证请求参数、响应数据、状态码、业务逻辑是否正确。UI测试则是模拟用户在界面上的操作验证页面展示、交互流程和用户体验。区别上可以从几个维度看接口测试更早介入开发周期执行稳定、速度快、定位问题准还能覆盖UI测试难以触达的异常场景UI测试更接近用户真实行为但运行慢、对环境依赖大、前端元素一变就容易挂。实际项目中合理的策略是接口测试为主、UI自动化补充核心路径同时保留核心功能的手工UI测试。能说出这个策略说明你不是只会测界面。第18题常用的接口测试工具有哪些答案参考常见的有Postman、JMeter、Apifox、SoapUI以及通过代码实现的Requests Pytest组合。Postman适合日常调试和轻量验证JMeter擅长接口测试和性能测试Apifox集成了接口文档、调试和Mock能力代码方案适合做接口自动化回归。被问到你用过哪个的时候别只说用过Postman。我建议至少准备一个具体场景比如用Postman做了环境变量管理、断言返回状态码、跑了一个多接口的测试集或者用Requests写脚本读取测试数据、断言关键字段。简单一句话配上真实的项目描述比列举十个工具名都有说服力。4.2 自动化测试入门三问第19题什么是自动化测试哪些场景适合自动化哪些不适合答案参考自动化测试是用脚本或测试工具代替手工执行测试用例由程序自动完成执行、比对和结果输出的过程。适合的场景有冒烟测试、回归测试、大量重复性数据测试、长时间稳定性测试、并发性能测试。不适合的场景有需求频繁变更的模块、UI经常改动的界面、一次性的探索性测试、用户体验和视觉相关的验证。这道题的底层逻辑其实是ROI投入产出比。自动化脚本的编写和维护都要成本如果你的项目每周都在变脚本也跟着每周重写就得不偿失。面试时主动说出是否自动化要算经济账会让面试官觉得你是个理性、有工程判断力的人而不是追热点。第20题什么是断言在自动化测试里起什么作用答案参考断言是自动化测试中用来判断测试是否通过的机制它把测试得到的实际结果与预先定义的预期结果进行比对若不一致则判定用例失败。常见断言包括相等断言、包含断言、正则匹配、HTTP状态码校验、响应时间校验、数据库数据校验等。举例接口测试中请求一个查询接口断言返回的code字段为0、data数组不为空、列表第一项的ID等于预期值UI自动化中点击提交后断言页面上出现了下单成功的提示文案。没有断言的自动化测试脚本就像考试不批卷跑了也白跑。这个比喻很好用面试官往往听过会心一笑。5. Linux、SQL与HTTP基础题测试工程师的必备周边技能测试岗基础面试题里Linux命令、SQL查询和HTTP协议几乎是标配。不需要精通但日常排错、定位问题、验证数据时必须会用。5.1 常用Linux命令现场秀第21题你平时怎么查看应用日志最常用的命令是什么答案参考最常用的是tail -f实时跟踪日志文件比如tail -f app.log如果日志太多加grep过滤关键词比如tail -f app.log | grep ERROR要看指定行数用tail -n 100 app.log分页查看用less app.log在less里按/搜索关键词查看文件的头部内容用head -n 50 app.log。注意一点面试官问查看日志其实是模拟你线上排查问题的场景。完整的回答应该体现先看关键行再按时间或关键词缩小范围最后定位异常堆栈的思路。比如我会说提测后服务报错了先tail -n 200 app.log | grep Exception找到异常行再less打开看上下文最后确认是空指针还是数据库连接超时。这套思路比单独背命令有说服力得多。第22题怎么查看某个端口是否被占用答案参考Linux下常用两条命令netstat -tunlp | grep 端口号或者lsof -i:端口号。其中netstat的参数里t表示TCP协议、u表示UDP、n以数字形式显示地址和端口、l只显示监听状态的端口、p显示占用端口的进程。Windows环境则用netstat -ano | findstr 端口号再配合tasklist查看对应PID的进程名。实际工作中这个场景太常见了测试环境服务起不来大概率就是端口被上一个没杀干净的进程占了。我自己的习惯是先用lsof -i:8080查到PID然后kill -9 PID清理再确认端口释放。回答时把这个查进程、杀进程、再验证的小闭环说完整面试官会认为你是有实战手感的人。5.2 SQL与网络基础第23题一条完整的SQL查询语句怎么写常见关键字有哪些答案参考基础结构是select 列名 from 表名 where 条件 group by 分组字段 having 分组过滤条件 order by 排序字段 limit 数量。进阶还包括join联表查询、子查询、聚合函数count、sum、avg、max、min、distinct去重等。典型例子查用户表中状态为1的最近10条记录select * from user where status 1 order by create_time desc limit 10;统计每个城市的用户数并筛选大于100人的城市select city, count(*) from user group by city having count(*) 100;。面试时手写SQL题不算难但要注意细节where在分组前过滤、having在分组后过滤、order by放在最后这几点写错了很丢分。第24题LEFT JOIN和RIGHT JOIN有什么区别答案参考LEFT JOIN左连接返回左表的全部记录右表只返回匹配的记录没有匹配时右表字段以NULL填充RIGHT JOIN右连接正好相反返回右表的全部记录左表只返回匹配的记录没有匹配时左表字段为NULL。INNER JOIN只返回两表都匹配的记录。举个例子员工表employee和部门表department要查询所有员工及其部门名称就用LEFT JOIN因为主表是员工表即使某个员工还没分部门也要显示出来select e.name, d.dept_name from employee e left join department d on e.dept_id d.id;。实际开发习惯里LEFT JOIN用得比RIGHT JOIN多得多因为把主表固定在左侧更直观。能提到这一点说明你不只是会背书。第25题常见HTTP状态码有哪些分别代表什么答案参考按大类分1xx为信息提示2xx表示成功3xx表示重定向4xx表示客户端错误5xx表示服务端错误。高频单点200是请求成功201是创建成功301是永久重定向302是临时重定向304是资源未修改可以走缓存400是请求参数错误401是未认证没登录403是已认证但无权限访问404是资源不存在405是请求方法不允许500是服务器内部错误502是网关错误网关收到了上游的无效响应503是服务不可用504是网关超时。面试官爱追这两个点一是401和403的区别——一个没登录、一个没权限二是502和504的区别——一个是上游响应无效、一个是上游响应超时。这两个对比背下来基本不会被问倒。第26题GET和POST有什么区别答案参考核心区别有几个层面语义上GET用于读取资源POST用于提交数据或创建资源参数位置GET放URL的查询字符串里POST放在请求体里GET受URL长度限制POST理论上无硬性限制GET请求可能被浏览器缓存POST一般不缓存GET是幂等的重复请求结果一样POST不幂等从安全性看POST参数在Request Body里相对不那么显眼但两者明文都不安全要加密必须走HTTPS。补充一个进阶点在RESTful接口设计里POST通常表示新增资源所以同一个接口地址下GET是查、POST是增语义完全不同。面试时能补充到这一层说明你对HTTP和接口设计的理解不只是停留在GET快POST慢这种表面。6. 场景开放题没有标准答案但存在高分思路聊到最后面试官一般会抛一两个开放题或情景题。这类题没有标准答案考的是思维结构、应变能力和沟通意识。6.1 经典场景题登录页面怎么测第27题给你一个登录页面你如何设计测试用例答案参考我会按维度拆开测功能维度正确账号密码登录成功、错误密码提示、空值校验、记住密码、忘记密码、验证码正确/错误/过期、退出登录输入维度长度限制、特殊字符、空格、SQL注入、XSS脚本安全维度密码是否加密传输、密码是否明文返回、连续错误是否锁定、是否有验证码防爆破兼容性维度不同浏览器、不同操作系统、不同分辨率、移动端适配性能维度并发登录、弱网状态体验维度回车提交、Tab键切换、错误提示是否清晰、按钮重复点击是否防抖。这道题想拿高分关键是展示结构化思维。不要东一句西一句先说我会从功能、输入、安全、兼容、性能、体验六个维度来测面试官马上就会觉得你思路清晰。另外可以加一句登录是所有业务的门户我会优先保证功能正确和安全性再覆盖兼容和体验体现你的优先级判断。6.2 突发情况与跨岗位沟通第28题功能上线后发现了严重Bug你作为测试怎么处理答案参考第一步立刻同步给测试负责人和项目经理说明影响范围和严重程度同时尽可能保留现场信息比如日志、截图、操作路径。第二步拉通开发定位根因评估影响面有哪些用户受影响、是否有替代方案。第三步紧急决策根据Bug影响决定是紧急修复后发版、回滚到上一版本还是关闭入口先止血。第四步修复后补充对应的回归测试用例并验证修复不引入新问题。最后复盘为什么线上才暴露是测试用例遗漏还是执行遗漏后续怎么防。这道题背后考的是风险意识和团队协作。最怕听到赶紧叫开发改这不是处理问题是制造二次混乱。一个成熟测试的处理逻辑一定是先止血再定位再修复再回归最后复盘。把这条链路答出来面试官基本就认可你的应变能力了。第29题你如何保证测试覆盖率答案参考我从四个层面保证需求层面评审时充分理解业务规则用需求追踪矩阵把每条需求映射到测试用例确保没有漏需求设计层面用等价类、边界值、判定表等方法来设计用例避免只测正常路径执行层面严格记录执行情况对未执行的用例说明原因并可借助JaCoCo这类代码覆盖率工具找出未被覆盖的分支和行流程层面做用例评审让开发和产品帮忙看是否有遗漏场景。这道题的关键词是方法论。简单的我测得很细基本等于没答。能说出需求追踪矩阵代码覆盖率工具用例评审这三个词中的任意两个都会是一个不错的答案。补充一点个人体会覆盖率不是说100%就万事大吉有意义的覆盖率是把核心业务链路全部覆盖作为底线而不是追求无意义的高分支覆盖。第30题开发说这不是Bug你怎么办答案参考第一步先翻需求文档、原型图和设计稿确认预期结果的定义检查是不是我自己理解偏了。第二步如果确认预期无误当面向开发演示复现路径讲清楚实际结果是什么、预期结果是什么、依据是哪个需求条目避免在IM上文字纠缠。第三步双方仍有分歧时把问题抛给产品经理或测试负责人做裁决并把结论记录到缺陷跟踪系统里。第四步如果确实是需求本身不明确推进产品经理补充或修订需求再按新口径执行测试。这题几乎每轮面试都问因为它考察情绪控制和沟通能力。两个雷区一是唯唯诺诺直接关掉缺陷——这是放弃测试立场二是当场跟开发吵起来——这不是解决问题。测试的立场是以需求为准、用证据说话、对质量负责把这个边界把握好答案就对了一大半。说实话这30道题整理下来我自己也有点感慨——基础题考到最后考的其实是你如何看待测试这份工作。是把测试当成点鼠标的体力活还是当成一门需要方法论、工程思维和风险意识的技术活儿面试官只要追问两三个为什么就能探到底。最后分享一个我面试时的习惯也算是个小技巧准备题目答案的时候不要只背结论给每道题准备一个自己真实做过的例子。比如问你边界值你就拿自己测过的那个输入框讲问你缺陷流程你就拿自己提过的那个经典Bug讲。例子一旦具体面试官就会从考你知识切换到跟你聊经验这种对话氛围下通过率会高很多。30道题之外也建议大家把简历上写过的每个熟悉都过一遍因为你写上去的每一条都有可能变成考场上的一道追问。
返回列表