软件测试 - 测试基础理论

291 阅读4分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情

1 软件测试定义和目的

软件测试是在规定的条件下对程序进行操作以发现程序错误、衡量程序质量并对其是否能够满足设计要求进行评估。简单来讲软件测试就是一种实际输出和预期输出之间的比较过程。

软件测试的目的就是用最少的人力、物力等资源找到软件中的问题进行评估从而降低商业风险。

2 软件测试原则

  • 只能证明软件存在问题,不能证明不存在问题

  • 不能进行穷尽测试,应该分类别进行测试

  • 测试工作要尽早进入,降低修复成本

  • 缺陷存在集群现象,二八原则:20%的模块中存在80%的缺陷

  • 测试依赖环境

    • CS架构

      • 电脑端:windows macos linux
      • 移动端:android ios
    • BS架构

      • IE Chrome Safari Firefox 欧鹏
  • 杀虫剂现象:同一个功能由不同的测试人员进行测试,可能会测出更多的缺陷

  • 不存在缺陷是一个谬论

3 测试策略

  • 冒烟测试

对系统进行基本功能的测试,保证基本的功能和流程能够走通,也称为测试的接受性测试。

  • 回归测试
  • 修复一个缺陷
  • 新版本中新的功能对旧功能有影响

上述两种情况下需要将之前的测试用例在新的代码环境下再次进行测试

  • 随机测试

主要针对被测软件的一些重要功能进行复测,也包括测试那些当前测试用例没有覆盖到的部分

  • 探索性测试

意味着同时设计测试和执行测试。测试人员通过测试来不断学习被测系统。

4 软件测试分类

  • 是否覆盖源代码

    • 黑盒测试:只关注数据的输入和输出,不关注代码内部如何实现
    • 白盒测试:关注代码内部的实现逻辑
    • 灰盒测试:关注数据的输入和输出也关注代码内部的实现逻辑
  • 按照阶段

    • 单元测试

      • 对程序中的单个模块或者功能进行测试,或者是对软件中最小的可测单元进行检查和验证
      • 比如登录功能的一个用户名输入框就是一个小的模块
    • 集成测试

      • 将不同的模块进行组装测试
      • 比如登录功能中涉及到的用户名输入框和密码输入框进行组装测试
    • 系统测试

      • 模拟使用环境对软件进行测试,将整个软件作为一个整体,测试包括软件以及运行的硬件环境
    • 验收测试

      • α测试:内测版本,bug较多,一般开发人员内部使用
      • β测试:公测版本,bug较少,对所有用户开放的测试版本,这一版本通常由软件公司免费发布, 用户可从相关的站点下载,通过一些专业爱好者的测试, 将结果反馈给开发者, 开发者们再进行有针对性的修改
      • γ测试:软件正式版本的候选版本
  • 是否运行

    • 静态测试:主要检查文档中的缺陷

      • 不实际运行被测软件,只是静态地检查程序代码、界面或文档中可能存在的错误过程。
    • 动态测试

      • 是指实际运行被测程序,输入相应的测试数据,检查实际输出结果和预期结果是否相符的过程。
  • 是否是自动化

    • 手工测试
    • 自动化测试

5 软件开发流程 - 瀑布模型

  • 流程

    • 需求分析:对盖房子的图纸进行分析
    • 概要设计:建造房子的整体架构
    • 详细设计:每个房间的详细布置
    • 程序开发:实现上述设计
    • 软件测试:检查是否满足设计要求
    • 软件维护:对房子进行维护和维修
  • 特点

    • 线性模型:每个步骤都只关注自己的工作
    • 文档驱动:每个步骤都有自己的设计文档
  • 优缺点

    • 优点:只需要关注当前进行的阶段
    • 缺点:不响应需求变化,按照线性阶段来分析的话,软件测试在比较靠后的阶段,如果不在需求分析时介入,如果需求分析就错了的话可能会造成一步错步步错然后从头开始的问题
  • 应用场景:

    • 需求清晰的大型项目

6 软件质量模型

  • 功能性:检查业务功能是否满足需求
  • 可靠性:容错能力(恢复正常的时间、能力)
  • 易用性:看的懂、会使用等
  • 效率性:性能(响应时间、消耗的资源(CPU、内存)等)
  • 维护性:为后续功能的开发与维护提供便利
  • 移植性:软件需要在不同的软件环境和硬件环境下都能正常的工作