软件测试学习笔记三(软件缺陷的表现形式、软件缺陷产生的根源、软件测试的目的和软件测试员的任务、bug不能被全部发现的原因)

目录

一、软件缺陷的表现形式(分类)
二、软件缺陷产生的根源
三、正确的程序应该具有的特点
四、为什么我们需要测试?
五、测试存在的问题
六、软件测试活动的目的&软件测试员的任务
七、为什么不能发现全部的bug?

一、软件缺陷的表现形式(分类)

  • 软件没有做到规格说明书上要求要做到的事情
  • 软件产生规格说明书上规定不能出现的错误
  • 软件做了规格说明书上没有要求做的事情
  • 软件没有做产品规格说明书上没有提到的但应该完成的事情
  • 软件难以理解、使用困难、慢……

二、软件缺陷产生的根源

  • 需求定义:错误的、不完整、不一致的要求
  • 设计:软件基础设计存在缺陷
  • 实现:芯片、布线错误,编程错误,恶意代码
  • 支持的系统:不好的编程语言,有问题的编译器、调试器,误导人的开发工具
  • 软件测试不充分:不完整的测试、验证性差、调试错误
  • 更新:草率的重新开发或维护,试图修复缺陷的时候引入新的缺陷,逐步升级到过度复杂

三、正确的程序

  • 没有语法错误
  • 运行时没有明显的错误
  • 没有错误的语句
  • 有效的输入得到正确的输出
  • 无效的输入得到正确的输出(这里的“正确”指的是给出一些友好的提示,而不是什么都没有或者程序直接奔溃)
  • 任何可能的输入得到正确的输出

四、为什么要测试?

  • 我们希望我们的程序是可靠的
  • 大多数的安全漏洞是由软件缺陷造成的
  • 软件缺陷造成的经济损失是惊人的
  • 我们需要更强的测试来解决这些问题

五、软件测试存在的问题

由于我们不能发现所有的软件缺陷,有些缺陷可能在产品发布后被用户发现,那我们为什么还要花这么多的时间、精力和金钱在测试这件事上呢?
软件测试学习笔记三(软件缺陷的表现形式、软件缺陷产生的根源、软件测试的目的和软件测试员的任务、bug不能被全部发现的原因)
上面这张图片横坐标是软件测试的各个阶段,竖坐标是测试花费的费用
从图中我们可以看到,软件测试花费的费用随着发现软件缺陷的时间的延长呈指数级增长
所以,进行软件测试是必要的,而且软件测试要尽快尽早地进行。

六、软件测试活动的目的&软件测试员的任务

软件测试活动的目的:

  • 发现bug
  • 尽快尽早地在软件开发过程中发现bug
  • 确保软件缺陷被修复(但在实际中由于预算、时间、技术等问题不能修复全部的缺陷)

软件测试员的任务:

  • 发现bug

七、为什么不能发现全部的bug

  • 太多的执行路径
    软件测试学习笔记三(软件缺陷的表现形式、软件缺陷产生的根源、软件测试的目的和软件测试员的任务、bug不能被全部发现的原因)
    如图中所示,从A到X有5条可能的路径(不循环的条件下)
    在经过20次循序后,这里有520条路径从A到X
    所以在这个程序中总共有5+5²+5³+……+520条可能的路径
    假设测试一条途径需要一秒钟,那么将花费300万年!
    软件测试学习笔记三(软件缺陷的表现形式、软件缺陷产生的根源、软件测试的目的和软件测试员的任务、bug不能被全部发现的原因)
    假设程序P有X和Y两个输入,输出Z,程序运行在一个32位的计算机上,假设X和Y是整数,测试一组数据要花费1ms,请问要花费多长时间?
    232 * 232/(3652460601000)=500万年!
  • 太多的输入可能
    输入的多种途径:鼠标、键盘各种设备等
    必须测试有效和无效的输入
    最重要的是,有无穷的输入序列要被测试
  • 太多的用户环境
    难以复现用户硬件、外设、操作系统和应用的组合
    难以复现上千节点的网络来测试网络软件

重点梳理:

  • 软件缺陷的表现形式(分类)
  • 软件缺陷产生的根源
  • 软件测试活动的目的&软件测试员的任务
  • 为甚不能发现全部的软件缺陷?