软件测试学习笔记三(软件缺陷的表现形式、软件缺陷产生的根源、软件测试的目的和软件测试员的任务、bug不能被全部发现的原因)
目录
一、软件缺陷的表现形式(分类)
二、软件缺陷产生的根源
三、正确的程序应该具有的特点
四、为什么我们需要测试?
五、测试存在的问题
六、软件测试活动的目的&软件测试员的任务
七、为什么不能发现全部的bug?
一、软件缺陷的表现形式(分类)
- 软件没有做到规格说明书上要求要做到的事情
- 软件产生规格说明书上规定不能出现的错误
- 软件做了规格说明书上没有要求做的事情
- 软件没有做产品规格说明书上没有提到的但应该完成的事情
- 软件难以理解、使用困难、慢……
二、软件缺陷产生的根源
- 需求定义:错误的、不完整、不一致的要求
- 设计:软件基础设计存在缺陷
- 实现:芯片、布线错误,编程错误,恶意代码
- 支持的系统:不好的编程语言,有问题的编译器、调试器,误导人的开发工具
- 软件测试不充分:不完整的测试、验证性差、调试错误
- 更新:草率的重新开发或维护,试图修复缺陷的时候引入新的缺陷,逐步升级到过度复杂
三、正确的程序
- 没有语法错误
- 运行时没有明显的错误
- 没有错误的语句
- 有效的输入得到正确的输出
- 无效的输入得到正确的输出(这里的“正确”指的是给出一些友好的提示,而不是什么都没有或者程序直接奔溃)
- 任何可能的输入得到正确的输出
四、为什么要测试?
- 我们希望我们的程序是可靠的
- 大多数的安全漏洞是由软件缺陷造成的
- 软件缺陷造成的经济损失是惊人的
- 我们需要更强的测试来解决这些问题
五、软件测试存在的问题
由于我们不能发现所有的软件缺陷,有些缺陷可能在产品发布后被用户发现,那我们为什么还要花这么多的时间、精力和金钱在测试这件事上呢?
上面这张图片横坐标是软件测试的各个阶段,竖坐标是测试花费的费用
从图中我们可以看到,软件测试花费的费用随着发现软件缺陷的时间的延长呈指数级增长
所以,进行软件测试是必要的,而且软件测试要尽快尽早地进行。
六、软件测试活动的目的&软件测试员的任务
软件测试活动的目的:
- 发现bug
- 尽快尽早地在软件开发过程中发现bug
- 确保软件缺陷被修复(但在实际中由于预算、时间、技术等问题不能修复全部的缺陷)
软件测试员的任务:
- 发现bug
七、为什么不能发现全部的bug
- 太多的执行路径
如图中所示,从A到X有5条可能的路径(不循环的条件下)
在经过20次循序后,这里有520条路径从A到X
所以在这个程序中总共有5+5²+5³+……+520条可能的路径
假设测试一条途径需要一秒钟,那么将花费300万年!
假设程序P有X和Y两个输入,输出Z,程序运行在一个32位的计算机上,假设X和Y是整数,测试一组数据要花费1ms,请问要花费多长时间?
232 * 232/(3652460601000)=500万年! - 太多的输入可能
输入的多种途径:鼠标、键盘各种设备等
必须测试有效和无效的输入
最重要的是,有无穷的输入序列要被测试 - 太多的用户环境
难以复现用户硬件、外设、操作系统和应用的组合
难以复现上千节点的网络来测试网络软件
重点梳理:
- 软件缺陷的表现形式(分类)
- 软件缺陷产生的根源
- 软件测试活动的目的&软件测试员的任务
- 为甚不能发现全部的软件缺陷?