软件测试的目标:以尽可能少的时间和人力发现软件产品中尽可能多的错误。

测试用例:由测试数据和预期结果构成。

如何衡量一个测试用例的好坏?
一个好的测试用例应是极有可能发现至今为止尚未发现的错误的测试用例。

  • 成功的测试:发现了至今为止尚未发现的错误的测试。
  • 高效的测试:用少量的测试用例,发现被测软件尽可能多的错。

一个规范化的软件测试过程包括哪些活动?

  1. 制定测试计划
  2. 编制测试大纲
  3. 根据测试大纲设计生成测试用例
  4. 实施测试
  5. 生成测试报告

软件测试原则:

  • 应该尽早地、不断地进行测试。把软件测试贯穿于开发过程的始终。
  • 所有测试都应该能追溯到用户需求。从用户角度看,最严重的错误是导致软件不能满足用户需求的错误。
  • 应该从“小规模”测试开始,并逐步进行“大规模”测试。
  • 应该在测试之前就制定出了测试计划
  • 根据 Pareto 原理,80% 的错误可能出现在 20% 的程序模块中,测试成功的关键是怎样找出这 20% 的模块。
  • 应该由独立的第三方从事测试工作。
  • 对非法和非预期的输入数据也要像合法和和预期的输入数据一样编写测试用例。
  • 检查软件是否做了应该做的事,也要检查软件是否做了不该做的事。
  • 在规划测试时不要设想程序中不会查出错误。
  • 测试只能证明软件中有错误,不能证明软件中没有错误。


软件测试基础 - 图1测试计划是在什么时候完成的?

  • 单元测试计划,是在详细设计阶段完成的
  • 集成测试计划,是在概要设计阶段完成的
  • 确认测试计划,是在需求分析阶段完成的
  1. ![image.png](https://cdn.nlark.com/yuque/0/2020/png/561286/1578626693691-8484951d-3d92-4264-ab7f-d8c7ac2061f1.png "image.png")

单元测试

单元测试也称模块测试,一般是在编程阶段完成,由程序员对自己写的模块自行测试,检查模块是否实现了详细设计说明书中规定的功能和算法。
通常采用白盒测试。 软件测试基础 - 图2

image.png

集成测试

集成测试也称组装测试,主要目标是发现模块间的接口和通信问题。
集成测试主要发现设计阶段产生的错误,通常采用黑盒测试。

软件测试基础 - 图4

确认测试

确认测试的任务是检查软件的功能、性能和其他特征是否与用户的需求一致。
通常采用黑盒测试。

软件测试基础 - 图5

系统测试

系统测试的任务是把软件放在实际的硬件和网络环境中进行测试,主要测试软件的非功能需求和质量属性是否得到满足。
系统测试是根据系统方案说明书来设计测试用例的。

软件测试基础 - 图6

调试

调度的任务是根据测试时所发现的错误,找出原因和具体的位置,进行改正。
调度工作由程序开发人员进行,谁开发的程序由谁来进行调试。

软件测试基础 - 图7

例题

image.png
D,C,A,B,C
image.png
B, A

黑盒测试

黑盒测试也称为功能测试。在已知产品功能设计规格的基础上进行测试,以证明每个功能是否符合要求。

软件测试基础 - 图10

等价类划分

将所有可能的输入数据,划分为等价的部分,然后从每个部分中选取少数有代表性的数据作为测试用例。 软件测试基础 - 图11选取测试用例时,应遵从“设计一个用例时,应尽可能多地覆盖尚未覆盖的有效等价类,但每次应仅覆盖一个尚未覆盖的无效等价类”的原则。

边界值测试

对等价类划分法的一个补充,即选取正好等于、刚刚大于或刚刚小于边界的值作为测试数据。

错误推测法

列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例。

因果图

因果图法是根据输入条件和输出结果之间的因果关系来设计测试用例的,它首先检查输入条件的各种情况,并找出输出结果对输入条件的依赖关系,然后为每种输出条件的组合设计测试用例。

例题

image.png

白盒测试

白盒测试也称为结构测试。
在已知产品内部工作过程的基础上,通过测试证明每种内部操作是否符合设计规格要求。
最常见的方法是逻辑覆盖法。
逻辑覆盖法有6种方法,覆盖程度从弱到强的排序为:

  • 语句覆盖(覆盖程度最低)
  • 判定覆盖
  • 条件覆盖
  • 判定-条件覆盖
  • 条件组合覆盖
  • 路径覆盖(覆盖程度最高)