尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

软件测试笔试题核心考点拆解:从SQL到测试用例设计的高分答题思路

软件测试笔试题核心考点拆解:从SQL到测试用例设计的高分答题思路 先说个可能让不少人意外的事实软件测试工程师的笔试很多时候比面试更筛人。面试还能靠表达和临场发挥撑一撑笔试却是一张卷子直接暴露你的基本功、逻辑习惯和工程思维。我这些年既作为候选人刷过不少大厂的测试笔试题也作为面试官出过题、批过卷一个很直观的感受是笔试挂掉的人往往不是不会做而是不知道每道题到底在考什么。这篇就把软件测试工程师笔试题里最常见的题型、背后的考察逻辑、以及我自己的答题套路完整拆一遍。1. 一套软件测试笔试题到底在考什么先说结论不管是校招还是社招软件测试的笔试题基本跑不出三个层面——基础概念、逻辑设计和工程场景。出题人不会闲到故意为难你他只是在用最短的时间判断你“能不能直接上手干活”。1.1 第一层基本功与概念的“秒答关”这一层通常是选择题、判断题、填空题覆盖的是软件测试的基础知识。我见过太多人在这一层翻车原因不是不懂而是复习的时候根本没把概念抠细。比如这几个高频考点测试用例的八大要素用例编号、测试标题、优先级、前置条件、测试数据、操作步骤、预期结果、实际结果。很多人能说出五六个但一写全就漏。等价类划分和边界值分析的区别这是笔试题里的常客。等价类是把输入域分成若干类从每一类里取一个代表值测试边界值则是专门针对边界附近的取值做验证。注意边界值分析并不是等价类的补充它两者通常是配合使用的。黑盒、白盒、灰盒测试的定义和典型方法黑盒不看内部结构只验证功能是否符合需求白盒要基于代码逻辑设计用例常见的有语句覆盖、分支覆盖、路径覆盖灰盒介于两者之间多用于集成测试阶段。软件测试的生命周期需求分析、测试计划、测试设计、测试执行、缺陷跟踪、测试报告。这个流程题社招笔试里出现率极高。回归测试和冒烟测试的区别冒烟测试是版本提测后的第一道关卡只验证主流程是否可测回归测试是在代码修改后验证原有功能没有被破坏。这里有个很实用的复习技巧把每个概念都问自己一句“它解决了什么问题不做什么”。比如性能测试不只看响应时间还要关注吞吐量、并发用户数、资源利用率。光背定义不够得理解它的应用场景。1.2 第二层逻辑设计与场景分析的“拉分项”选择题只是热身真正拉开差距的是简答题和设计题。这一层考的不是“你知道什么”而是“你会不会用”。最常见的题型是给出一个功能模块让你设计测试用例。比如经典的“登录功能测试用例设计”很多人上来就写输入正确用户名密码能登录、输入错误密码提示错误。这样写不是错但只能拿基础分。出题人真正想看的是你有没有一套完整的测试思维框架能不能覆盖正常路径、异常路径、边界情况、数据安全、兼容性、性能等多个维度。后面我会专门用一节拆解这个题的满分答法。还有一种必考题型是“给一段需求找出其中的问题”。这种题看似是测试用例设计的变体实际上在考察你的需求分析能力——能不能从一段不严谨的需求描述中识别出歧义、缺失、矛盾。我常见到的例子是“用户输入手机号点击获取验证码60秒后可重新获取”这里有至少三个隐含问题手机号格式不合法怎么处理60秒倒计时期间用户退出页面再进来倒计时还继续吗同一个手机号一天最多获取几次验证码1.3 第三层流程、工具与项目认知这一层对社招尤其重要。笔试题里会出现诸如你们公司的缺陷管理流程是怎样的如果开发说这个Bug不是问题你怎么处理描述一次你印象最深的线上事故排查过程。使用过哪些测试工具分别用在什么场景这些题没有标准答案但能看出你是否真的做过项目。我会在第4节给出这类题的回答策略。2. 高频考点逐项拆解从概念到模板化答题这一节我把笔试中出现频率最高、但最容易答不到点子上的几个主题单独拎出来讲。2.1 测试用例设计等价类、边界值怎么答才不算错先看一道真实笔试题的简化版某系统要求用户输入年龄年龄范围为18到60岁含18和60请设计测试用例。基础答法是这样输入18验证通过输入60验证通过输入17验证不通过输入61验证不通过输入30验证通过这套答法不错但只是边界值分析的骨架。想拿高分需要补上这几个维度数据类型边界输入17.5、60.0这种小数怎么处理如果字段是整数类型要不要做类型校验空值和缺失什么都不输入直接提交系统是否给出友好提示特殊字符和脚本注入输入script、18; DROP TABLE系统是否做了防注入处理负数和大数输入-1、99999999是否有溢出或异常处理格式和单位年龄字段是否允许输入“十八”“18岁”这种带单位的文本非英文字符中文数字“十八”是什么表现重复操作同一份数据连续两次提交是否会产生重复记录完整答法应该是先用等价类划分出有效等价类18-60的整数和无效等价类小于18、大于60、非整数、空值、非数字字符再对有效等价类的边界值18、60和无效等价类的边界值17、61做重点验证最后补上非法输入和异常场景。这样既展示了你的方法体系又充分体现了你考虑问题的全面性。这里有一个笔试中常犯的错误把等价类和边界值混为一谈。等价类的核心是“抽样代替穷举”边界值的核心是“错误最容易发生在边界附近”。两者是两种不同的方法但组合在一起用效果最好。在答题时一定要把这两个概念的字眼都写出来让阅卷人一眼看到你知道。2.2 缺陷生命周期与Bug单规范有一道我出题时特别爱用的简答题请简述一个Bug从发现到关闭的完整生命周期。这道题挂了不少人。很多人只写“发现、提交、修复、验证、关闭”这五步然后就没有然后了。一个完整的缺陷生命周期至少要包含这些状态新建New测试人员提交Bug状态置为新建。指派Assigned开发经理或组长将Bug指派给具体开发人员。修复Fixed开发人员修复完成标记为已修复。待验证Pending Verification测试人员对修复后的版本进行回归验证。关闭Closed验证通过Bug关闭。重新打开Reopen验证不通过或Bug在后续版本中复现重新激活。除了状态流转Bug单本身应该包含哪些字段也是笔试的常考内容。一个合格的Bug单至少要有所属模块、版本号、环境信息操作系统、浏览器、数据库版本、前置条件、操作步骤、实际结果、预期结果、严重程度、优先级、Bug截图或日志。这里有个很关键的区别严重程度和优先级不是一回事。严重程度是对系统影响的度量优先级是处理的先后顺序。一个Bug可能导致系统崩溃严重程度高但只发生在极其冷门的场景下优先级可以设置较低。给你一个直接能背下来的Bug标题模板[模块] [具体功能] [在XX条件下] [出现XX问题]例如“支付模块 在余额不足时未提示充值引导直接跳转至收银台”。2.3 数据库与接口考察SQL题怎么答能全对热词里反复出现的“软件测试笔试题sql”说明了一个现象SQL是笔试的必考项也是很多人的丢分重灾区。测试岗位的SQL题一般挑不出这三种类型单表查询基础筛选、排序、去重、分组统计。多表关联查询内连接查交集、左连接查带空值的记录、子查询嵌套。数据构造与校验为了某个测试场景需要造一些特定数据或者验证数据是否符合预期。常见的笔试题比如查询每个部门中工资最高的员工信息。这道题的正确思路是先按部门分组再用聚合函数找最大值。很多人会这样写SELECT department_id, MAX(salary) FROM employees GROUP BY department_id;这样能查出每个部门的最高工资但如果题目要求返回员工姓名、工号等详细信息这样就不够了。更优的写法是SELECT e.employee_id, e.department_id, e.salary FROM employees e INNER JOIN ( SELECT department_id, MAX(salary) AS max_salary FROM employees GROUP BY department_id ) t ON e.department_id t.department_id WHERE e.salary t.max_salary;这种用子查询关联的写法在测试岗位上已经算中高阶了笔试时这一题能直接拉开差距。SQL题还有一个常考的点就是如何造测试数据。比如你需要在测试环境里生成10000条订单数据来验证分页功能很多公司的笔试题会让你写一条SQL实现批量造数。思路一般是INSERT INTO orders (order_no, user_id, amount, status) SELECT CONCAT(ORDER, LPAD(n, 6, 0)), FLOOR(RAND() * 1000) 1, ROUND(RAND() * 1000, 2), PENDING FROM ( SELECT 1 AS n UNION SELECT 2 UNION SELECT 3 ... ) temp;这里有一个笔试中常见的坑临时表或数字表的长度不够时造数造到一半就停了。所以在造数前最好先确认数据量的规模再决定用UNION ALL拼多少行或者直接用information_schema.columns这种系统表来生成连续序列。数据库之外接口测试也是笔试题的高频方向。常考的点有HTTP协议的状态码含义200、201、301、302、400、401、403、404、500、502、503、GET和POST的区别、如何设计一个接口的测试用例、如何断言接口返回值。接口测试用例设计的核心思路是先验证接口本身的入参校验必填、类型、长度、枚举值再验证业务逻辑正常返回、异常返回、边界情况最后验证安全性和性能鉴权、并发、幂等性。这一套思路同样适用于笔试中的接口测试设计题。3. 典型笔试题解析现场拆解三道必考大题理论说再多不如直接看题。这一节我用三道我亲身遇到过也出过的经典笔试题演示完整的答题框架。3.1 经典题一设计一个登录功能的测试用例这应该是软件测试笔试题里出现频率最高的一道题没有之一。它之所以经典是因为登录几乎包含了测试用例设计的所有要素输入校验、交互逻辑、异常处理、安全、性能、兼容性。很多人的第一反应是给出这样几个用例输入正确的用户名和密码点击登录登录成功。输入错误的密码点击登录提示密码错误。输入不存在的用户名点击登录提示用户不存在。用户名和密码为空点击登录提示不能为空。这是完整的答题吗远远不是。一道“写登录功能测试用例”的真题至少要从以下几个维度展开功能用例正确用户名正确密码登录成功并跳转到首页。正确用户名错误密码提示密码错误。错误用户名正确密码提示用户不存在。大小写敏感的验证输入用错字母大小写能否正确校验。用户名带前后空格系统是否自动去除。记住密码功能重新打开页面后密码是否填充且加密显示。安全用例连续输错5次密码账户是否被锁定。登录失败时是否有验证码机制。密码在传输过程中是否加密https。URL中是否暴露敏感信息。退出登录后点击浏览器回退按钮能否返回到登录后的页面。兼容性用例不同浏览器Chrome、Firefox、Edge、Safari下的表现。不同操作系统Windows、macOS、iOS、Android下的表现。不同分辨率下的页面显示是否正常。性能与体验用例弱网环境下3G/4G登录响应时间是否可接受。大量用户同时登录时系统是否稳定。还有一个非常加分的角度当你把登录功能升级为“手机号验证码”登录时上面的框架依然适用但需要额外增加“60秒倒计时重新发送”“验证码有效期”等场景。在笔试时主动展现出这种“变体设计”的意识会让阅卷人觉得你的测试思维不是死记硬背的。这里我给你一套完整的模板答法示例直接背下来、套进去就能用用例编号测试标题优先级前置条件测试步骤预期结果TC-LOGIN-001验证正确用户名和密码可以登录P0已注册账号user01/pwd123输入正确的用户名和密码点击登录登录成功跳转至主页TC-LOGIN-002验证密码错误时提示明确错误信息P0已注册账号user01输入正确的用户名和错误的密码点击登录提示“密码错误还可尝试4次”TC-LOGIN-003验证空用户名和空密码不能登录P0无用户名、密码均不填写点击登录提示“请输入用户名和密码”TC-LOGIN-004验证连续输错5次后账户锁定P1已注册账号user01连续输入错误密码5次第5次后提示“账户已锁定请30分钟后重试”TC-LOGIN-005验证密码特殊字符是否正常处理P1已注册账号user02用户名正确密码为包含#!等特殊字符的合法密码登录成功3.2 经典题二SQL查询题带你躲坑很多测试岗笔试题里会给你两张表让你写SQL。常见的表结构是用户表usersuser_id, user_name, gender, age订单表ordersorder_id, user_id, order_amount, order_time, status给你一道高频题查询所有下过单的用户ID、用户名和累计下单金额且累计下单金额大于1000元按下单金额降序排列。如果你还没意识到这题有坑那确实该好好看看这里。很多人会写出这样的SQLSELECT u.user_id, u.user_name, SUM(o.order_amount) AS total_amount FROM users u INNER JOIN orders o ON u.user_id o.user_id WHERE SUM(o.order_amount) 1000 GROUP BY u.user_id, u.user_name ORDER BY total_amount DESC;这个写法错在WHERE子句中不能直接使用聚合函数。聚合函数的过滤条件必须放在HAVING子句里。正确写法是SELECT u.user_id, u.user_name, SUM(o.order_amount) AS total_amount FROM users u INNER JOIN orders o ON u.user_id o.user_id GROUP BY u.user_id, u.user_name HAVING SUM(o.order_amount) 1000 ORDER BY total_amount DESC;第二个坑是如果题目要求“所有用户无论是否下过单”那么就要用LEFT JOIN而不是INNER JOIN否则没下过单的用户会被过滤掉。这种细节就是用来区分你是有经验还是只会写“玩具SQL”的。第三个坑是数据精度与过滤条件的选择。比如状态为“已取消”的订单要不要计入累计金额如果题目没说你最好在答案里注明“按订单状态为已完成或已支付进行过滤”这会给阅卷人留下“这个人考虑周全”的印象。3.3 经典题三情景题——“版本明天上线但还有很多Bug没测完”这种情景题是社招笔试的压轴常客尤其在测试开发或高级测试岗位的笔试题中几乎必出。题干通常是这样你负责的项目还有一个新版本明天就要上线了但今天回归测试时发现还有很多Bug没有关闭开发也无法承诺今晚全部修复。作为测试负责人你会怎么处理这道题的考察目标不是“你会不会测”而是你有没有风险判断和沟通协调能力。一个合格的答法应该包含以下几个层次第一层先评估影响面。不是所有Bug都是一样的。先按严重程度和优先级分类是否有P0级阻断性问题比如主流程不通、数据丢失、安全漏洞如果有版本必须延期没得商量。如果没有P0但有较多P1级问题就需要评估这些问题是否影响核心用户路径。第二层提出可操作的解决方案。比如针对高风险模块做重点回归对P1级问题进行“部分灰度发布”或“功能开关控制”与产品经理确认是否有临时替代方案比如先隐藏某个入口后续版本再放开。第三层明确沟通和回滚机制。测试负责人需要向上汇报风险并制定“一旦线上出问题如何快速回滚”的预案。这体现的是工程化能力。第四层也是很多人容易忽略的版本上线计划和测试计划的联动。如果版本延期运营活动、市场推广、客服培训等上下游团队的安排也要同步调整。这一层一旦答出来面试官会默认你是一个有全局视野的测试工程师而不仅仅是个执行者。4. 笔试踩坑实录与高频错题避雷再好的方法论也抵不过“一写就错”。这一节我把我批卷过程中看到的高频错误以及我自己踩过的坑整理成一份避雷清单。4.1 坑一概念题答得模棱两可比如问到“黑盒测试和白盒测试的区别”很多人写“黑盒是不看代码白盒是看代码”。这样答没错但拿不到满分。更完整的答案应该包含测试对象、测试方法、测试目的、适用阶段四个维度的对比。黑盒测试以功能规格为依据验证软件是否符合预期行为白盒测试以程序内部结构为依据验证代码逻辑是否被充分执行黑盒适用于系统测试和验收测试白盒多用于单元测试阶段。你可以在笔试时用到这样一个小表格维度黑盒测试白盒测试测试依据需求规格说明书源代码逻辑测试方法等价类、边界值、因果图、错误推测语句覆盖、分支覆盖、路径覆盖测试目的验证功能正确性验证代码逻辑覆盖率适用阶段系统测试、验收测试单元测试、集成测试4.2 坑二测试用例设计没有优先级我见过候选人一口气写了30条登录测试用例但完全没标注优先级。对一个测试工程师来说如果上线时间紧你要能快速筛选出最重要的用例先执行。在笔试中标注P0/P1/P2的优先级既展示了你的工程意识也方便阅卷人快速判断你的用例设计思路。另外一个加分项是在用例标题中使用“验证XX时XX结果应为XX”这种结构化表述避免模糊不清的“测试密码错误”。4.3 坑三作答篇幅控制不当笔试时间通常有限很多人在“描述你的测试流程”这道题上写了两页却把“设计一个登录测试用例”的大题草草写了三行。这个习惯很吃亏。测试用例设计的大题分值通常更高也更直观地反映你的业务能力流程描述题得分天花板有限除非你写得极其出彩否则拉不开分数。我的建议是拿到卷子先快速扫一遍预估每道题的分值比重再分配时间。4.4 坑四忽略细节要求有一类题目会把“坑”埋在题干细微处比如“请写出用户年龄字段的边界值测试用例字段为必填项整数类型”。很多人拿到题就开始设计用例写了一大堆小数、负数、特殊字符唯独漏了“必填项”这三个字对应的用例不输入内容直接提交系统应提示“年龄不能为空”。这才是“隐藏考点”。所以在动笔前先把题干里每一个限定词圈出来再逐一对应用例覆盖。4.5 坑五不理解SQL的执行顺序很多人在SQL笔试题里写错不是因为不会写而是因为不理解SQL的逻辑执行顺序。SQL的执行顺序是FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY - LIMIT。理解了这个顺序你就能明白为什么WHERE中不能用聚合函数而HAVING可以。这是我在离线笔试中反复强调的一个点因为测试岗位识别数据准确性时写出正确SQL太重要了。5. 备考策略与学习路线不同人群怎么准备笔试笔试就像考试考的是熟练度。最后这一节我分别给三类人说说我的备考建议。5.1 应届生和转行者打好基础刷透高频题如果你正在准备校招或转行测试最重要的三件事是打牢理论基础、练熟SQL、总结一套自己的测试用例设计模板。理论基础方面至少要把软件测试的基本概念、生命周期、测试分类、测试用例设计方法等价类、边界值、因果图、正交实验、场景法这五块彻底吃透。市面上流传的“软件测试八股文”可以作为提纲但不能只背别人整理好的一百题而是要知道每个知识点对应的应用场景。SQL方面每天保持练几道题的手感。重点练聚合函数GROUP BY HAVING、多表连接INNER JOIN、LEFT JOIN、子查询、窗口函数ROW_NUMBER、RANK。测试岗位的SQL题通常不会考太复杂的存储过程和触发器但窗口函数在造数场景中很好用建议提前学一下。测试用例设计方面选三个最常见的功能登录、注册、购物车用我上面给过的模板分别写一套完整的测试用例并背下来。“背下来”的意思是理解其中的框架逻辑而不是死记硬背具体内容。因为题目可以千变万化但框架是通用的。5.2 有经验的人重点准备项目描述和场景题对于有一两年经验的人来说基础概念不是重点真正决定成败的是你怎么描述自己的项目经验。笔试中常出现的“请描述一个你负责过的测试项目包括其中的难点”这道题就是检验你有没有真正做过事。我建议按这个结构去准备项目背景你担任的角色测试策略典型问题结果量化。举个例子我在XX项目中负责支付模块的功能测试与接口测试。当时的难点是优惠券叠加逻辑复杂涉及满减、折扣、立减三种策略的组合。我基于判定表法梳理了12种组合场景并与开发、产品对齐了各种维度的优先级最终项目准期上线线上无重大Bug。这道题的关键在于你说了“判定表法”这个方法也展示了跨部门沟通和上线结果。面试官最忌讳听到的答案是“我就是执行测试点点点”。场景题的准备方式则是把实际工作中遇到的延期、漏测、跨团队扯皮、线上故障问题各整理成一段“背景处理过程结果”的小故事。笔试问到类似背景时直接套用你的故事框架。5.3 资料推荐与学习路径资料方面我个人的经验是不要把过多时间花在看视频教程上尤其是那种“全视频教程”动辄几十个小时的。视频适合入门和建立整体概念但笔试提分最快的永远是刷题和写用例。基础书单可以考虑《软件测试的艺术》经典适合建立测试思维、《软件测试》Ron Patton适合初学者和《How Google Tests Software》适合了解大厂测试体系。实战方面可以直接去找一些开源项目来练手比如用Jest或Selenium写自动化测试用例用Postman测公开API这比看任何教程都来得快。网上有大量的“软件测试面试题”合集我的建议是只看近一两年的、带详细解析的题目。有些老题库里的题型和概念已经过时了练了反而是浪费时间。最后给一个每天都能练的实操建议打开你手机里最常用的几个App每天挑一个功能用等价类和边界值的思路在脑子里设计测试用例。坚持两周你会发现自己在笔试里的“用例设计题”速度能有肉眼可见的提升。我自己在带新人的时候最常说的几句话是测试的笔试不是考你记住了多少概念而是考你有没有一套稳定的、可复用的思考框架。把基础知识学扎实把用例设计练成一种本能反应把SQL写到条件反射的程度剩下的事情无非是顺着框架填内容而已。准备的过程虽然枯燥但每多练一道题、多总结一个套路都会在真正坐在笔试考场上的那一刻变成你笔下的底气。
返回列表