软件测试期末通关秘籍:从理论到实战的全面梳理-别卷,卷就是你赢
1. 软件测试基础概念扫盲期末考试前最头疼的就是各种抽象概念对吧别慌咱们用点外卖的例子来理解这些术语。想象你正在开发一个外卖APP的登录功能软件缺陷三兄弟就像送错餐的外卖小哥错误Error程序员把密码123456写成12345少写个6故障Fault用户输入正确密码却提示密码错误失效Failure连续输错3次后APP直接闪退V模型就像外卖的流水线左边是下单流程需求分析想吃什么→ 设计选餐厅→ 编码厨师做菜右边是验收流程单元测试尝一口菜→ 集成测试检查配送箱→ 系统测试送到家开箱测试环境五要素好比开餐厅硬件厨房设备手机/服务器软件菜谱APP操作系统网络外卖小哥的电瓶车4G/WiFi数据食材库存测试账号工具炒菜锅JMeter/Selenium去年考过这道题软件质量保证和测试的区别参考答案SQA是餐厅经理盯着厨师洗手消毒流程规范测试是美食评委直接试吃菜品结果验证2. 黑盒测试四大必考杀招2.1 等价类划分实战遇到输入框测试题记住这个口诀有效无效分开记一个无效单独测。比如测试手机号输入框# 有效等价类 valid [13800138000, 18812345678] # 无效等价类 invalid [ 123, # 长度不足 1380013800a, # 含字母 123456789012345 # 长度超限 ]考试常踩坑不要忘记空值测试比如应该触发手机号不能为空的提示。2.2 边界值分析法三连击测试年龄限制18-60岁的输入框时| 测试点 | 输入值 | 预期结果 | |--------------|--------|----------------| | 下边界点-1 | 17 | 报错 | | 下边界点 | 18 | 通过 | | 上边界点 | 60 | 通过 | | 上边界点1 | 61 | 报错 | | 中间值 | 30 | 通过 |去年大题考过三角形问题的边界测试。关键点100-200之间的边长要测99/100/101和199/200/201这6个值。2.3 决策表法拆解复杂逻辑遇到保险费计算这类多条件题按这个步骤操作列出所有条件年龄、性别、婚姻状况计算组合数3年龄×2性别×2婚姻12种合并相似项比如21岁以下不分婚姻状况| 年龄 | 性别 | 婚姻 | 结果 | |--------|------|------|---------| | 21 | - | - | 加收费 | | 21-26 | 女 | - | A类保险 | | 21-26 | 男 | 已婚 | B类保险 | | 26 | 男 | - | B类保险 |2.4 正交试验法快速降维当遇到并发用户数网络带宽服务器配置多因素测试时用L9(3^4)正交表# Python生成正交表 from allpairspy import AllPairs parameters [ [50, 100, 500], # 并发用户 [1M, 10M, 100M], # 带宽 [2G, 2.6G, 3G] # CPU ] for i, pairs in enumerate(AllPairs(parameters)): print(用例{}: {}.format(i1, pairs))实测技巧先做极差分析找出最关键因素响应时间影响最大的那个参数3. 白盒测试通关秘籍3.1 路径覆盖的武功心法看这段登录验证代码def login(username, password): if len(username) 0: # 节点A if password 123456: # 节点B return 成功 else: return 密码错误 # 节点C else: return 用户名为空 # 节点D画出DD路径图后计算圈复杂度 V(G) 32个if判断1独立路径A→D用户名为空A→B→成功A→B→C密码错误去年考过条件组合覆盖的变形题要测试if (x0 and y10)需要4个用例x0且y10真真x0且y10真假x0且y10假真x0且y10假假3.2 数据流测试的找茬技巧遇到for循环代码时重点检查定义-使用对变量初始化后是否被正确使用数据流异常未初始化就使用比如没设初始值的计数器重复定义循环体内重复声明同名变量// 典型错误示例 int sum; // 未初始化 for(int i0; i10; i){ sum i; // 使用未初始化的sum }3.3 单元测试的黄金组合用Python的unittest框架时记住这个模板import unittest class TestLogin(unittest.TestCase): classmethod def setUpClass(cls): # 初始化测试环境只执行一次 print(启动模拟登录服务) def test_success(self): self.assertEqual(login(admin, 123456), 成功) def test_empty_user(self): self.assertEqual(login(, 123456), 用户名为空) if __name__ __main__: unittest.main()踩坑提醒单元测试必须包含正常流程测试3-5个异常输入测试空值、超长、特殊字符边界条件测试最小/最大值4. 大题高频考点突破4.1 APFD计算三步法遇到测试用例优先级的题目画执行顺序表| 用例 | 检测缺陷 | 首次发现缺陷的用例 | |------|----------|--------------------| | T1 | D1,D2 | T1 | | T2 | D3 | T2 | | T3 | - | - |套APFD公式APFD 1 - (122)/(5×3) 1/(2×5) 0.7其中5是总缺陷数3是总用例数比较不同算法的APFD值越高说明优先级策略越好4.2 测试用例优先级算法对比四大算法考点贪心算法每次都选覆盖最多代码的用例复杂度O(n²m)n用例数m代码单元数额外贪心选覆盖最多未覆盖代码的用例需要定期重置当所有代码被覆盖时自适应随机选择与已选用例差异最大的基于搜索用遗传算法优化用例顺序记忆口诀贪吃蛇总想找新路贪心→额外贪心→自适应→搜索4.3 变异测试的杀手锏遇到变异得分计算题识别变异体类型等价变异体i和i1可杀死变异体把ab改成ab计算得分变异得分 被杀死的变异体 / (总变异体 - 等价变异体)当得分100%时需要添加新测试用例重新检查等价变异体5. 救命速查清单5.1 易混淆概念对比表概念黑盒测试白盒测试依据需求文档代码逻辑典型方法等价类划分路径覆盖适合阶段系统测试单元测试优势贴近用户视角发现深层逻辑错误5.2 测试类型速记脑图软件测试 ├── 按阶段 │ ├── 单元测试函数级别 │ ├── 集成测试接口对接 │ └── 系统测试整体流程 └── 按方法 ├── 静态测试代码审查 └── 动态测试实际运行5.3 常见陷阱警示牌α测试 vs β测试α是开发环境公司内部β是真实环境外部用户负载测试 vs 压力测试负载测试看100人在线是否正常压力测试找到系统崩溃的临界点回归测试重点必须包含基线测试用例之前通过的用例新增针对性测试用例针对修改部分最后三天冲刺建议每天用2小时做这三件事手写10个核心概念定义如V模型、等价类用Python实现1个测试算法如边界值生成分析1道往年大题重点看评分标准