1. 我们在哪里?(软件开发背景)
1.1 软件开发的宏观视角
软件开发不仅仅是写代码,它包含三个阶段七个环节:
- 计划阶段:问题定义、可行性分析。
- 开发阶段:需求分析、系统设计、开发、测试。
- 运行阶段:运维。
1.2 角色与流程
- 核心观点:测试不仅仅是测试工程师的事,它贯穿于整个软件生命周期。
- 助教补充:PPT中提到了RUP(Rational Unified Process)模型,强调了不同角色(产品、设计、开发、测试)在迭代中的协作。
2. 生活离不开测试 (测试的重要性)
2.1 为什么需要测试?
- 生活案例:PPT列举了毒校服、食物中毒、电动车自燃、三峡大坝防洪能力等例子。
- 软件惨案:
- 国外:Intel Pentium 浮点运算错误(损失4.5亿美元)、Android计算器错误、千年虫问题。
- 国内:汉芯造假事件、12306 崩溃、支付宝光缆被挖断、微博宕机(鹿晗公布恋情)。
- 核心结论:“不测试,毋宁死”。测试不充分就发布,会害死用户或造成巨大经济损失。
2.2 测试的时机
- 考试重点:软件测试应该跨越整个软件生命周期。
- 误区:很多团队认为“程序开发完成后,才开始软件测试”。
- 正解:需求缺陷、设计缺陷也是软件缺陷。在需求不清楚时就进行测试(需求评审),能避免“事倍功半”。
3. 测试的定义和分类 (核心理论)
3.1 三种经典的测试定义
PPT中重点介绍了三种定义,请务必理解其侧重点:
- Myers的定义 (1979) —— 本课程采用的定义
- 定义:测试是为了发现错误而执行程序的过程。
- 核心思想:带有“攻击性”。测试人员应该始终质疑并挑战软件,假定代码有错,想尽办法去攻击它。哪怕最后没发现错误,攻击性的过程也让结果更可信。
- Weinberg的定义
- 定义:测试是一个获取信息的过程,用来降低决策风险。
- 核心思想:测试是“服务性”工作。通过测试提供高质量信息(如性能数据、风险评估),帮助团队做决策(是否发布、是否修复Bug)。
- Kaner的定义
- 定义:软件测试是一种技术调查,目的是向关系人提供有关产品质量的实验信息。
- 核心思想:测试人员像“侦探”。不仅仅是找Bug,还要探索未知,做实验(如性能对比、复现疑难杂症)。
3.2 软件测试的目标 (The Goal)
==考试重点:请背诵==
- 发现缺陷 (Find bugs)
- 尽可能早发现缺陷 (Find them as early as possible)
- 确保缺陷被修复 (Make sure they get fixed)
3.3 测试的分类
虽然测试种类多达500种,但本课程为了简化学习,重点掌握以下四象限分类法:
| 分类维度 | 静态测试 (Static) | 动态测试 (Dynamic) |
|---|---|---|
| 定义 | 不运行程序,只看代码或文档 | 需要运行程序进行检查 |
| 黑盒 (Black Box) | 静态黑盒(看需求文档、说明书,不看代码) | 动态黑盒(运行程序,像用户一样点点点,不看内部逻辑) |
| 白盒 (White Box) | 静态白盒(Code Review,直接看源代码逻辑) | 动态白盒(运行程序,并监控内存、覆盖率等内部状态) |
- 助教通俗解释:
- 黑盒 vs 白盒:黑盒是把软件当成一个打不开的黑箱子,只管输入输出(像用户);白盒是打开箱子看里面的齿轮怎么转(像修表匠)。
- 静态 vs 动态:静态是“体检看片子”(不跑起来);动态是“跑步测心率”(跑起来)。
4. 什么是软件缺陷 (Bug)?
4.1 Bug 的定义
Bug 是预期结果与实际结果之间的差别。
4.2 Bug 的三要素 (==核心考点==)
一个问题被判定为Bug,必须符合以下三者之一:
- 该做的不做:软件没有实现《需求规格说明书》(SRS) 中声明要做在功能。(例:SRS说要能打印,结果不能打印)
- 不该做的做了:软件实现了SRS中声明不该做的事情。(例:SRS说不能输入超过6个汉字,结果能输入,导致数据库报错)
- 必须做却没做:SRS虽然没写,但作为常识必须要做的。(例:甚至不需要写在文档里的常识,如“百度搜索不能搜出乱码”、“网站要安全”)。
4.3 Bug 的管理与生命周期
- 管理工具:Bugzilla, BugFree, Mantis 等。
- Bug 数据库原则:
- 每个Bug是独一无二的 (Unique)。
- 系统中不应记录重复的Bug (Duplicated)。
- Bug 的状态变迁 (State Transition):
- 标准流程:New (新建) -> Open (打开/确认) -> Assigned (指派) -> Fixed (已修复) -> Closed (关闭)。
- 异常流程:
- Duplicated:重复提交,被标记为重复。
- Re-Open:开发说修好了,测试一测还是坏的,或者老Bug在新版本“复活”了。
5. 软件测试工程师 (职业素养)
- 角色定位:质量管理的担当,理解需求,检查错误,决定稳定性。
- 性格建议:蓝色性格(追求完美、严谨)最佳。
- 核心能力:宇宙最强的想象力。
- 面试题案例:给盲人设计自行车、建酒店需要多少电梯。这考察的是发散思维和对特殊场景(边缘情况)的覆盖能力。
- 职业现实:可能会面临加班(”为什么加班的总是我?”),因为测试往往是交付前的最后一道关卡。
1 | **助教总结:** |