功能测试中常见的面试题-二
二、测试设计与用例编写题
解释等价类划分 (Equivalence Partitioning) 和边界值分析 (Boundary Value Analysis)?并举例说明。
等价类划分 (EP): 将输入域划分为若干组(等价类),假设同一组内的数据对揭露程序错误具有等效性。只需从每个等价类中选取一个代表值进行测试即可。
例子: 测试一个输入年龄(1-120岁)的文本框。
有效等价类: [1, 120] (如 30)
无效等价类: < 1 (如 0, -5) 和 > 120 (如 121, 200)
边界值分析 (BVA): 是对等价类划分的补充,关注输入域边界及其附近的值。因为经验表明,边界处最容易出错。
例子: 同上年龄输入框 (1-120)。
有效边界值: 1, 120 (边界点), 2, 119 (边界内邻点)
无效边界值: 0 (刚好小于下界), 121 (刚好大于上界)
通常结合使用: 先划分等价类,再针对每个等价类的边界设计测试用例。
什么是决策表测试 (Decision Table Testing)?适用于什么场景?
回答: 决策表是一种系统性的方法,用于测试由多个输入条件组合决定的不同输出结果(动作) 的业务规则或逻辑。它以表格形式列出所有可能的条件组合及其对应的预期输出。
适用场景: 复杂的业务逻辑、规则引擎、具有大量布尔条件(真/假)组合的功能。
例子: 信用卡申请审批规则(条件:年龄、收入、信用分;动作:批准/拒绝/需人工审核)。
什么是状态转换测试 (State Transition Testing)?适用于什么场景?
回答: 这种方法适用于系统或对象的行为依赖于其当前状态,并且状态会因特定事件或条件而改变的场景。通过绘制状态转换图或状态转换表,设计测试用例来覆盖有效的状态转换路径(正常流)和无效的转换(异常流)。
适用场景: 具有明确状态和状态转换的系统,如登录/登出流程、订单状态机(待支付、已支付、发货中、已完成、已取消)、工单状态、游戏角色状态等。
什么是错误推测法 (Error Guessing)?
回答: 一种基于测试人员经验、直觉和对系统弱点的理解来推测程序中可能存在的错误,并针对性地设计测试用例的方法。它依赖于测试人员的技能和对类似系统常见缺陷的了解。
例子: 测试文件上传功能时,推测可能的错误:上传超大文件、上传0字节文件、上传非法格式文件、上传文件名包含特殊字符的文件、网络中断时上传等。
一个好的测试用例应包含哪些要素?
回答: 通常包含:
用例ID: 唯一标识符。
用例标题/描述: 清晰、简洁地说明测试目的(What to test?)。
前置条件: 执行该用例前系统必须满足的状态(如:用户已登录,特定数据已存在)。
测试步骤: 详细、可执行的操作步骤(How to test?)。
测试数据: 执行步骤所需的具体输入值。
预期结果: 每一步或整个用例执行后,系统应有的正确响应或状态(What should happen?)。
后置条件: 执行后系统的状态(可选,常用于清理或为后续用例准备)。
优先级: 标识用例的重要程度(高/中/低)。
所属模块/功能: 方便组织和管理。
如何为一个登录功能设计测试用例?
回答: 这是非常经典的场景题!考虑以下方面:
功能正确性:
输入正确用户名和密码 -> 登录成功(跳转到正确页面,创建有效Session)。
输入正确用户名+错误密码 -> 登录失败,提示“密码错误”。
输入错误用户名+正确密码 -> 登录失败,提示“用户名不存在或密码错误”(安全考虑,避免提示太明确)。
输入错误用户名+错误密码 -> 登录失败。
用户名/密码为空 -> 登录失败,提示“用户名/密码不能为空”。
用户名/密码包含空格(前/中/后) -> 处理是否合理(通常应Trim前后空格)。
输入验证 (等价类 & 边界值 & 特殊字符):
用户名/密码长度限制(过短/过长/恰好边界)。
用户名/密码允许的字符类型(字母、数字、特殊字符@#$_等,需根据需求)。
输入SQL注入/XSS尝试字符串 -> 应被阻止或转义。
用户体验:
错误提示信息是否清晰、友好、无技术术语。
登录失败后,密码是否被清空(安全考虑)?用户名是否保留(方便用户)?
是否有“忘记密码”、“注册”等链接?是否可用?
是否有“记住我”功能?是否有效?
安全性:
传输是否加密(HTTPS)?
登录失败多次是否有锁定机制(防暴力破解)?
登录成功后Session管理是否安全(Cookie HttpOnly, Secure)?
错误信息是否泄露敏感信息(如明确提示“该用户不存在”)?
其他:
不同浏览器/设备上的表现(兼容性)。
网络中断时登录。
同时多点登录(同一账号在不同地方登录)的处理。