【培训】DAY1 软件测试概述
推荐阅读:
- 【培训】DAY1测试基础技能之软件测试概述
- 【培训】DAY2测试基础方法
- 【培训】DAY3测试基础技能
- 【培训】DAY4测试流程
- 【培训】DAY5 操作手册与BUG处理流程
- 【培训】DAY6 测试理念
软件测试概述
软件为什么需要被测试?
软件是人编的,所以不完美。
我们以两个案例说明测试软件的必要性。
- 千年虫 (Y2K)
- 英特尔奔腾浮点除法缺陷
千年虫 (Y2K)
计算机系统的2000年问题,简称Y2K,或千年危机、千年虫问题,是指在计算机软、硬件系统以及使用数字化程序控制芯片的各种应用系统中,由于只采用两位十进制数字来表示年份,当日期从1999年12月31日转入2000年1月1日时,用来表示年份的后两位十进制数字“00”,与1900年的“00”一致,因而计算机操作系统误认为是1900年1月1日,给以年份日期进行计算的系统带来破坏,造成技术、政治、经济、法律上的问题。
详细的可以看这里.
英特尔奔腾浮点除法缺陷
在计算机的“计算器”程序中输入以下算式:
(4195835/3145727)*3145727-4195835
如果答案是0,就说明计算机没问题。如果得出别的结果,就表示计算机使用的是带有浮点除法软件缺陷的老式英特尔奔腾处理器——这个软件缺陷被烧录在一个计算机芯片中,并在制作过程中反复生产。
1994年10月30日,弗吉利亚州Lynchburg学院的Thomas R .Nicely博士在他的一个实验中,用奔腾PC机解决一个除法问题时,记录了一个想不到的结果,得出了错误的结论。
万幸的是,这种情况很少见,仅仅在进行精度要求很高的数学、科学和工程计算中才会导致错误。
详细的可以看这里.
以上两个事例充分说明:软件测试非常有必要开展。
什么是软件测试?
软件 = 程序 + 数据 (库) + 文档 + 服务
软件测试,是为了尽快尽早地发现在软件产品中所存在的各种软件缺陷,而展开的贯穿整个软件开发生命周期、对软件产品(包括阶段性产品)进行验证和确认的活动过程。
什么是软件缺陷?
计算机系统或者程序中存在的任何一种破坏正常运行能力的问题、错误,或者隐藏的功能缺陷、瑕疵。缺陷会导致软件产品在某种程度上不能满足用户的需要。
从产品内部看,软件缺陷是软件产品开发或维护过程中所存在的错误、毛病等问题;
从外部看,软件缺陷是系统所需要实现的某种功能的失效或违背。因此软件缺陷就是软件产品中所存在的问题,最终表现为用户所需要的功能没有完全实现,未满足用户的需求。
描述软件失败的术语
- 缺点(defect)
- 故障(fault)
- 问题(problem)
- 错误(error)
- 异常(anomaly)
- 偏差(variance)
- 失败(failure)
- 缺陷(bug)
软件缺陷的主要类型
-
功能、特性没有实现或者部分没有实现。
-
设计不合理,存在缺陷。
-
实际结果与预期结果不一致。
-
运行出错,包括运行中断、系统崩溃、界面混乱。
-
数据结果不正确、精度不高。
-
用户不能接受的其他问题,如存取时间过长、界面不美观。
软件的缺陷是软件开发过程中的重要属性,反映软件开发过程中需求分析、功能设计、用户界面设计、编程环节所隐含的问题,也为项目管理、过程改进提供了许多信息。
软件缺陷的组成
软件测试相关概念
软件质量的定义
- 一般,软件质量由三部分组成:
- 软件产品的质量;
- 软件开发过程中的质量;
- 应用领域或者业务上的质量。
-
软件质量具有3A特性:
Accountability(可说明性)
Availability(有效性)
Accessibility(易用性) -
对于广义的软件质量,又是由产品质量,过程质量和商业环境质量这三者决定的。
软件测试的目的
- 测试的目的就是发现软件中的各种错误和缺陷;
- 测试只能证明软件存在缺陷,不能证明软件不存在缺陷;
- 测试可以使软件中缺陷降低到一定程度,而不是彻底消灭;
- 以较少的用例、时间和人力找出软件中的各种错误和缺陷,
- 一个好的测试用例是在于它能发现至今未发现的错误。
- 一个成功的测试是发现了至今未发现的错误的测试。
最重要的三条:
- 证明所做的是客户所需的;
- 确保编码人员正确理解设计的意图;
- 通过回归测试来保证目前运行的程序在将来仍然可以正常工作。
软件测试的目标
最终目的,是确保软件的功能符合用户的需求,把尽可能多的问题在发布或交付前发现并改正。
一般达到以下目标:
- 确保软件完成了它所承诺或公布的功能
- 为软件的质量评估提供依据
- 确保软件满足性能的要求
- 确保软件是健壮的和适应用户环境,为软件质量改进和管理提供帮助
软件测试的关键问题
谁:开发人员、测试人员
对象:需求、设计、实现、程序、文档、环境等
时机:与开发并行、尽早开始
如何:计划、策略、方法、管理
停止:预定时间、测试用例数、覆盖率、缺陷总数、单位时间缺陷数
软件测试的原则
- 所有的测试都应追溯到用户需求
- 保证测试的覆盖程度,但穷举测试是不可能的
- 越早测试越好,测试过程与开发过程应是相结合的
- Pareto原则:测试中发现的80%的错误可能来自于20%的程序代码
- 测试的规模由小而大,从单元测试到系统测试
- 为了尽可能地发现错误,应该由独立的第三方来测试
- 不能为了便于测试擅自修改程序
- 既应该测试软件该做什么也应该测试软件不该做什么
软件测试的工作流程
- 测试计划
- 测试设计
- 测试执行
- 测试报告
软件测试的分类(方法)
按测试范围分类
- 单元测试(unit testing)
- 组件测试(component testing)
- 集成测试(integration testing)
- 系统测试(system testing)
- 验收测试(acceptance testing)
- 安装测试(installation testing)
测试内容
- 回归测试
- 功能测试
- 负载测试
- 压力测试
- 性能测试
- 强度测试
- 易用性测试
按测试目的分类
- 正确性测试(correctness testing),又可分为白盒测试(white- box)和黑盒测试(black-box)。
- 性能测试(performance testing)
- 可靠性测试(reliability testing),又可分为强壮性测试(robustness, strong testing),异常处理测试(exception handling testing)和负载测试(stress, load testing)。
按测试对象分类
- 单元测试(unit testing)
- 组件测试(component testing)
- 模块测试(module testing)
- 程序测试(program testing)
- 系统测试(system testing)
- 文档测试(document testing)
软件测试的生命周期
-
软件测试的纵向过程
从过程的观点来考虑整个测试过程的话,在软件工程环境中的测试是顺序实现的单元测试、集成测试、系统测试、验收测试四个纵向步骤的序列,这些步骤可用下图表示。 -
软件测试的横向过程
每一个测试阶段,从横向来看也有一个完整的过程,跟软件开发过程的线性顺序模型相似,如下图所示。