软件和软件测试
软件的分类:
按层次划分:
- 系统软件
- 支持软件
- 应用软件**
软件缺陷的由来:
- Bug
- Defect
软件缺陷的定义:
- 软件未实现产品说明书要求的功能
- 软件出现了产品说明书指明不该出现的功能
- 软件实现了产品说明书未提及的功能
- 软件未实现产品说明书虽未明确提及但应该实现的目标
- 软件难以理解,不易使用,运行缓慢
推荐书籍 <<软件测试的艺术>>
软件测试的定义和目的
- 正向思维的定义
- 反向思维的定义
出发点:测试是为发现错误而执行一个程序或系统的过程
测试是为了证明程序有错,而不是证明程序无错误
一个好的测试用例在于它能发现以前未发现的错误
一个成功的测试是发现了以前未发现的错误的测试 - 广义软件测试定义
软件测试是对软件形成过程中的所有工作产品(包括程序及相关文档)进行测试,而不仅仅是对程序的运行进行测试 - 验证
通过检查和提供客观证据来证实指定的需求是否满足 - 确认
通过检查和提供客观证据来证实特定目的的功能或应用是否已经实现
软件测试的目的:
- 以最少的人力、物力和时间找出软件中潜在的各种错误和缺陷,保证各种错误和缺陷得以修复,避免软件发布后由于潜在的软件错误和缺陷造成的隐患所带来的商业风险。
- 同时利用测试过程中得到的测试结果和测试信息,作为后续项目开发和测试过程改进的重要输入,避免在将来的项目开发和测试中重复同样的错误
- 采用更高效的测试管理手段
测试和调试的区别:
- 在主体、目标、方法和思路上有所不同
- 测试是从已知的条件开始,
软件的定义
- 软件= 程序+数据+文档
软件测试贯穿于整个软件生命周期中 - 文档
- 单元测试
- 集成测试
- 确认测试
- 系统测试
- 验收测试
软件生命周期和测试过程模型
软件生命周期:
立项-需求分析-设计、编码、测试-发布-运行维护-淘汰
|------------>-------->—>---------------|
软件工程:
软件开发过程模型:
- 瀑布模型
优点:
缺点:不适用用户需求的变化;用户最后才能看见整个软件 - 快速原型模型(工具Axure)
迅速建造一个可以运行的软件原型,以便理解和澄清问题,使开发人员与用户达成共识
这个模型适合预先不能确切定义需求的软件系统的开发
缺点:所选用的开发技术和工具不一定符合主流的发展;快速建立起来的系统加上连续的修改可能导致软件质量的下滑 - 增量模型
增量模型是把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次的分析、设计、编码和测试这些增量组件 - 迭代模型
强调开发的深入(优化) - 螺旋模型
螺线模型是一种演化软件开发过程模型,它兼顾了快速原型的迭代的特征以及瀑布模型的系统化与严格监控
螺旋模型的最大的特点在于引入了风险分析
软件测试过程模型
- V模型
缺点:仅仅把测试过程作为在需求分析、系统设计及编码之后的一个阶段,忽视了测试对需求分析、系统设计的验证 - W模型
明确表示了测试与开发的并行关系
尽早发现软件缺陷可降低软件开发的成本
用户需求 验收测试设计
~~~~
需求分析与系统设计
~~
确认与系统测试设计
~~~~
交付
~~~~~~
验收测试
~~~~~~~
概要设计
~~~~~~~~~~~~~~~~~
集成测试设计
~~~~~~~~~
实施
~~~~~
确认与系统测试
~~~~~~~~~
详细设计
~~~~~~~~~~~~~~~~~
单元测试设计
~~~
集成
~~~~
集成测试
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
编码
~~~~~~~~~~
单元测试
- H模型
将测试活动完全独立出来了,形成一个完全独立的流程,将测试准备活动和测试执行活动清晰地体现出来 - X模型
软件测试过程理念
- 尽早测试
测试人员早期参与软件项目
尽早开展测试执行工作 - 全面测试
对软件的所有产品进行全面的测试 - 全过程测试
测试人员要充分关注开发过程 - 独立的、迭代的测试
软件测试方法的分类
1 按照开发阶段划分
- 单元测试
单元测试又称模块测试,是针对软件设计的最小单位-程序模块进行正确性检验的测试工作。其目的在于检查每个程序单元能否正确实现详细设计说明中的模块功能、性能、接口和设计约束等的要求,发现各模块内部可能存在的各种错误。
单元测试需要从程序的内部结构出发设计测试用例 - 集成测试
集成测试也叫组装测试。通常在单元测试的基础上,将所有的程序模块进行有序的、递增的测试。集成测试是检验程序单元或部件的接口关系。
持续集成 - 确认测试
确认测试也叫有效性测试。是在模拟的环境下,验证软件的所有功能和性能及其他特性是否与用户的预期要求一致。通过了确认测试之后的软件,才具备进入系统测试阶段的资质。 - 系统测试
系统测试是在真实的系统运行的环境下,检查完整的程序系统能否和系统(包括硬件、外设、网络和系统软件、支持平台)正确配置、连接,并最终满足用户的所有需求 - 验收测试
是软件产品检验的最后一个环节,按照项目任务书或合同、供需双方的约定。
2 按照测试技术划分
- 黑盒测试
通过软件的外部表现来发现其缺陷和错误。黑盒测试法把测试对象看成一个黑盒子,完全不用考虑程序内部的结构和处理过程。黑盒测试在程序的界面处进行测试,它只是检查程序是否按照需求规格说明书的规定正常实现 - 白盒测试
通过对程序内部结构的分析,检测来寻找问题。白盒测试可以把程序看成装在一个透明的盒子里,检查是否所有的结构和路径都是正确的,检查软件内部动作是否按照设计说明书的规定正常进行 - 灰盒测试
介于黑盒测试和白盒测试之间的测试。灰盒测试关注输出对于输入的正确性;同时也关注内部表现。只是通过一些表征性的现象、事件、标志来判断内部的运行状态
3 按照代码运行划分
- 静态测试
代码测试:
界面测试:
文档测试: - 动态测试
4 按照软件特性划分
- 功能测试
黑盒测试的一方面
逻辑功能测试
界面测试
易用性测试
安装/卸载测试
兼容性测试 - 性能测试
关注软件中的某一功能在指定的时间、空间条件下,是否使用正常 - 安全性测试
使之不被非法入侵,不受各种因素的干扰
5 其他测试 - 回归测试
对软件的新版本测试时,重复执行之前某个重要版本的所有测试用例 - 冒烟测试
先验证一下软件的基本功能是否实现,是否具备可测性 - 随机测试
基于经验和直觉的测试,发现一些边缘性的错误 - 猴子测试
没有任何的主观意识和想法参与进来·
软件测试流程
获取测试需求—》编写测试用例----》制定测试方案----》开发与设计测试用例----》执行测试—》提交缺陷报告----》测试分析与评审----》提交测试总结-----》准备下一版测试
软件测试的原则
- 所有测试的标准都是建立在用户需求之上的
- 事先定义好产品的质量标准
- 软件项目一启动,软件测试也就开始
- 测试外包
- 软件测试计划是做好软件测试工作的前提
- 测试用例是设计出来的,不是写出来的,所以要根据测试的目的,采取相应的方法去设计测试用例,从未提高测试的效率。