1. 我们在哪里?(软件开发背景)

1.1 软件开发的宏观视角

软件开发不仅仅是写代码,它包含三个阶段七个环节:

  1. 计划阶段:问题定义、可行性分析。
  2. 开发阶段:需求分析、系统设计、开发、测试
  3. 运行阶段:运维。

1.2 角色与流程

  • 核心观点:测试不仅仅是测试工程师的事,它贯穿于整个软件生命周期。
  • 助教补充:PPT中提到了RUP(Rational Unified Process)模型,强调了不同角色(产品、设计、开发、测试)在迭代中的协作。

2. 生活离不开测试 (测试的重要性)

2.1 为什么需要测试?

  • 生活案例:PPT列举了毒校服、食物中毒、电动车自燃、三峡大坝防洪能力等例子。
  • 软件惨案
    • 国外:Intel Pentium 浮点运算错误(损失4.5亿美元)、Android计算器错误、千年虫问题。
    • 国内:汉芯造假事件、12306 崩溃、支付宝光缆被挖断、微博宕机(鹿晗公布恋情)。
  • 核心结论“不测试,毋宁死”。测试不充分就发布,会害死用户或造成巨大经济损失。

2.2 测试的时机

  • 考试重点软件测试应该跨越整个软件生命周期
    • 误区:很多团队认为“程序开发完成后,才开始软件测试”。
    • 正解:需求缺陷、设计缺陷也是软件缺陷。在需求不清楚时就进行测试(需求评审),能避免“事倍功半”。

3. 测试的定义和分类 (核心理论)

3.1 三种经典的测试定义

PPT中重点介绍了三种定义,请务必理解其侧重点:

  1. Myers的定义 (1979) —— 本课程采用的定义
    • 定义测试是为了发现错误而执行程序的过程。
    • 核心思想:带有“攻击性”。测试人员应该始终质疑并挑战软件,假定代码有错,想尽办法去攻击它。哪怕最后没发现错误,攻击性的过程也让结果更可信。
  2. Weinberg的定义
    • 定义:测试是一个获取信息的过程,用来降低决策风险。
    • 核心思想:测试是“服务性”工作。通过测试提供高质量信息(如性能数据、风险评估),帮助团队做决策(是否发布、是否修复Bug)。
  3. Kaner的定义
    • 定义:软件测试是一种技术调查,目的是向关系人提供有关产品质量的实验信息。
    • 核心思想:测试人员像“侦探”。不仅仅是找Bug,还要探索未知,做实验(如性能对比、复现疑难杂症)。

3.2 软件测试的目标 (The Goal)

==考试重点:请背诵==

  1. 发现缺陷 (Find bugs)
  2. 尽可能早发现缺陷 (Find them as early as possible)
  3. 确保缺陷被修复 (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,必须符合以下三者之一:

  1. 该做的不做:软件没有实现《需求规格说明书》(SRS) 中声明要做在功能。(例:SRS说要能打印,结果不能打印)
  2. 不该做的做了:软件实现了SRS中声明不该做的事情。(例:SRS说不能输入超过6个汉字,结果能输入,导致数据库报错)
  3. 必须做却没做:SRS虽然没写,但作为常识必须要做的。(例:甚至不需要写在文档里的常识,如“百度搜索不能搜出乱码”、“网站要安全”)。

4.3 Bug 的管理与生命周期

  • 管理工具:Bugzilla, BugFree, Mantis 等。
  • Bug 数据库原则
    1. 每个Bug是独一无二的 (Unique)。
    2. 系统中不应记录重复的Bug (Duplicated)。
  • Bug 的状态变迁 (State Transition)
    • 标准流程:New (新建) -> Open (打开/确认) -> Assigned (指派) -> Fixed (已修复) -> Closed (关闭)。
    • 异常流程
      • Duplicated:重复提交,被标记为重复。
      • Re-Open:开发说修好了,测试一测还是坏的,或者老Bug在新版本“复活”了。

5. 软件测试工程师 (职业素养)

  • 角色定位:质量管理的担当,理解需求,检查错误,决定稳定性。
  • 性格建议蓝色性格(追求完美、严谨)最佳。
  • 核心能力宇宙最强的想象力
    • 面试题案例:给盲人设计自行车、建酒店需要多少电梯。这考察的是发散思维和对特殊场景(边缘情况)的覆盖能力。
  • 职业现实:可能会面临加班(”为什么加班的总是我?”),因为测试往往是交付前的最后一道关卡。
1
2
3
4
5
6
7
8
**助教总结:**

这一章的核心思想是**“端正态度,明确定义”**。
首先,你要明白测试不仅是找错,更是一种跨越整个周期的质量保障哲学(不测试毋宁死)。
其次,要掌握核心定义:**Myers的测试定义**(为了发现错误而执行程序)和**Bug的三种判定标准**(该做未做、不该做做了、隐性需求未做)。
最后,理解测试的简化分类(黑白盒x动静态)和Bug的生命周期管理,这是后续学习具体测试技术的基础。

祝你复习顺利,考试高分!如果有关于具体概念的疑问,随时可以再问我。