软件测试一页开卷

L如果你害怕失敗,那你很有可能會失敗。 If you’re afraid to fail, then you’re probably going to fail.

软件由以下四部分组成:

  • 程序:实际的代码部分。
  • 数据库:用于存储数据的系统。
  • 文档:用户手册、设计文档等。
  • 服务:软件运行所依赖的各种服务。

软件测试是为了发现软件中的缺陷,验证软件是否满足需求规格说明书中所述的功能和性能的过程。

  • 五个方面
    • 功能缺陷
    • 性能缺陷
    • 界面缺陷
    • 安全缺陷
    • 兼容性缺陷
  • 四个组成部分
    • 需求设计
    • 代码实现
    • 测试验证
    • 运维监控
  • 各组成比例
    • 需求设计:30%
    • 代码实现:30%
    • 测试验证:20%
    • 运维监控:20%
  • 经典例子:千年虫问题(Y2K问题),由于对年份只使用两位数,导致在2000年出现日期处理错误。

测试用例(Test Case)是为了验证软件需求是否正确实现而设计的一组输入、执行条件及预期结果。

测试用例定义1-15:

  1. 用例标识
  2. 用例名称
  3. 用例描述
  4. 优先级
  5. 预置条件
  6. 测试输入
  7. 操作步骤
  8. 预期结果
  9. 实际结果
  10. 测试环境
  11. 测试数据
  12. 测试时间
  13. 测试人员
  14. 相关文档
  15. 备注

必须给出:用例标识、用例名称、用例描述、预置条件、操作步骤、预期结果、实际结果。

软件测试计划是指为了确保软件产品质量而制定的详细测试方案,包含了测试目标、测试范围、测试策略、资源安排、进度计划、风险分析和应对措施等内容。

测试计划包含以下七个方面:

  1. 测试目标
  2. 测试范围
  3. 测试策略
  4. 资源安排
  5. 进度计划
  6. 风险分析
  7. 应对措施

静态测试是指不执行程序代码,通过代码审查、走查、静态分析工具等方法来发现软件缺陷。

静态测试内容

  • 代码审查
  • 走查
  • 代码规范检查
  • 静态分析工具

动态测试是指在程序执行过程中,通过输入数据、观察输出、监控系统行为等方式来发现软件缺陷。

动态测试内容

  • 功能测试
  • 性能测试
  • 兼容性测试
  • 安全测试

白盒测试是指测试者了解程序内部结构,根据代码逻辑设计测试用例,进行代码覆盖度分析。

白盒测试策略

  • 语句覆盖
  • 判定覆盖
  • 条件覆盖
  • 路径覆盖
  • 分支覆盖
  • 基本块覆盖

黑盒测试是指测试者不关心程序内部结构,根据需求规格说明书设计测试用例,验证软件功能和性能。

黑盒测试策略

  • 等价类划分
  • 边界值分析
  • 错误推测
  • 因果图
  • 状态迁移测试

软件测试过程包括以下阶段:

  1. 单元测试
  2. 集成测试
  3. 系统测试
  4. 验收测试

工程师应具备两项意识、三颗心、四种能力、五个特性。

两项意识

  1. 质量意识
  2. 安全意识

三颗心

  1. 责任心
  2. 细心
  3. 耐心

四种能力

  1. 分析能力
  2. 解决问题能力
  3. 学习能力
  4. 沟通能力

五个特性

  1. 专业性
  2. 创新性
  3. 协作性
  4. 适应性
  5. 持续改进性

确定等价类的六个原则:

  1. 覆盖全部输入域
  2. 划分为有效等价类和无效等价类
  3. 等价类之间互斥
  4. 每个等价类内部等效
  5. 等价类应尽量小
  6. 等价类应有实际意义

等价类测试用例设计:根据上述原则,设计测试用例覆盖所有等价类。

边界值分析基本思想是选择输入域边界附近的值进行测试,因为这些值容易出错。

边界值分析测试用例(以三角形为例)

  • 三角形三边边界值分别为a, b, c
  • 测试用例数目公式:4(极值数目)*n(变量数目)+1

六种逻辑覆盖法:

  1. 语句覆盖:确保每条语句至少执行一次。
  2. 判定覆盖:确保每个判定条件的每个分支至少执行一次。
  3. 条件覆盖:确保每个条件的每种可能取值至少执行一次。
  4. 判定/条件覆盖:确保每个判定和每个条件的每种可能取值至少执行一次。
  5. 路径覆盖:确保每条可能执行的路径至少执行一次。
  6. 基本块覆盖:确保每个基本块至少执行一次。

注意:语句覆盖最弱,路径覆盖最强。

单元测试是对软件的最小可测试单元(如函数、方法、模块)进行验证,以确保其功能正确。

  • 单元测试与集成测试的区别
    • 单元测试关注单个模块
    • 集成测试关注模块之间的接口和交互
  • 单元测试与系统测试的区别
    • 单元测试关注单个功能
    • 系统测试关注整个系统的功能和性能

集成测试是将单个模块组装成系统或子系统进行测试,验证它们之间的接口和交互是否正确。

集成测试方法

  • 大爆炸法
  • 增量法(自顶向下、自底向上)

系统测试是对整个系统进行全面测试,验证系统是否满足需求规格说明书中的所有功能和性能要求。

JUnit4注解:

  • @BeforeClass:表示整个类运行前会运行的方法
  • @AfterClass:表示整个类运行后会运行的方法
  • @Before:每个测试用例运行前会运行的方法,会重复运行
  • @After:每个测试用例运行后会运行的方法,会重复运行
  • @Test:对应的测试方法

JUnit5注解变更:

  • @BeforeClass变为**@BeforeAll**
  • @AfterClass变为**@AfterAll**
  • @Before变为**@BeforeEach**
  • @After变为**@AfterEach**
  • @Test不变