一、软件测试基础
1. 软件测试定义:
通过人工或自动的手段,对被测对象进行检测的活动,目的在于发现被测对象是否实现用户的需求,或者发现实际结果和预期结果之间的差异。
2. 什么是软件:
- 实现用户需求的源代码
- 与之相匹配的用户手册
- 支撑起软件运行的配置数据
3. 软件测试的目的:
- 发现被测对象与用户需求之间的差异—缺陷,bug,错误
- 通过测试活动,发现并解决缺陷
- 通过测试活动,获取被测对象的质量信息,为决策提供数据依据
- 通过测试活动,预防缺陷的产生,从而减低项目和产品的风险
- 通过测试活动,积累经验,为以后的类似的产品开发提供经验
4. 软件测试的原则:
- 测试证明软件存在缺陷的
- 不可能执行穷尽的测试
- 测试应尽早启动,尽早介入
- 缺陷存在集群效应
- 杀虫剂悖论
- 不同的测试活动依赖不同的测试背景
- 不存在缺陷的谬论
5. 软件测试的对象:源代码+文档+配置数据
- 需求分析阶段:测试需求文档是否正确实现用户的需求
- 系统设计阶段:概要设计文档和详细设计文档是否存在设计或逻辑上的错误
- 编码阶段:测试源代码,发现编程上的错误
- 系统测试阶段:验证被测对象是否满足用户的需求
6. 软件测试级别(软件测试的阶段)
- 组件或单元测试:单元指完成某个独立功能的模块,组件指一个或多个单元组成的针对被测系统最小的组成单元实施的测试活动。一般是类或者是函数,也可以是最小的功能单元。能发现80%的错误,效果好,但是效率低。
- 集成测试:这对组件/单元与组件/单元之间的接口实施的测试活动,验证接口设计是否与设计相符。
(1) 函数间的集成
(2) 模块间的集成
(3) 子系统间的集成 - 系统测试:将通过集成测试的软件,部署在真实的用户环境下,执行测试。效率高,常用。
- 验收测试:以用户为主的测试,验证组应该由项目组成员,用户代表组成。
(1) α测试:由用户在开发环境下,执行的测试活动,开发者就在测试人员的身边,发现问题及时沟通,解决,在受控的环境下执行的测试。
(2) β测试:开发者不在测试人员身边,发现问题由专人统一收集,再由研发人员进行修改,在不受控的环境下进行的测试。
(3) UAT测试(user allow test),一般商业用户测试系统可用性进行的测试。
7. 软件测试的方法
- 黑盒测试:不关注被测对象的内部结构,仅从用户需求考虑,是否满足用户显性的或者隐性的需求。
- 白盒测试:又称为结构测试,或者逻辑驱动测试,测试工程师需要了解内部设计结构等信息,熟悉相应的开发语言,对工程技术水平要求较高。
- 灰盒测试:介于白盒和黑盒之间,即关注被测对象的外部特性,又关注其内容设计。
- 静态测试:不执行被测对象源代码,不运行被测对象的测试方法。
- 动态测试:执行被测对象,进行测试的活动
- 手工测试:通过测试工程师试用,验证被测对象是否满足用户需求。
- 自动化测试:通过自动化测试工具,或脚本语言自动完成测试过程。
8. 软件质量
内部质量,过程质量,外部质量,使用质量,六大特性
- 功能性
(1) 定义:软件在指定的条件下,满足用户明确的和隐含需求的功能的能力。
(2) 适合性:软件为指定的任务和用户目标提供一组合适的功能的能力。
(3) 准确性:软件提供具有所需的精度的正确或相符的结果或效果的能力。
(4) 互操作性:软件与一个或多个的规定系统进行交互的能力。
(5) 保密安全性:软件保护信息和数据的能力,以使未授权的人员或系统不能阅读或修改这些信息或数据,而不拒绝授权人员或系统对他们的方法。
(6) 功能性依从性:软件遵循与功能性相关的标准,约定或法规以及类似规定的能力。这些标准包括国际标准,国家标准,行业标准,企业内部规范。 - 可靠性:
(1) 定义:软件在指定的条件下使用时,维持规定的性能级别的能力。
(2) 成熟性:软件为避免由软件错误而导致的失效的能力。
(3) 容错性:在软件出现故障或者违反指定接口的情况下,软件维持规定性能级别的能力。
(4) 易恢复性:在失效发生的情况下,软件重建规定的性能级别并恢复受直接影响的数据的能力。
(5) 可靠性依从性:软件遵循与可靠性相关的标准,约定或法规以及类似规定的能力。这些标准包括国际标准,国家标准,行业标准,企业内部规范。 - 易用性:
(1) 定义:在指定的使用条件下,软件被理解,学习,使用和吸引用户的能力。
(2) 易理解性:软件使用户能理解,以及如何将软件用于特定任务和使用环境的能力。
(3) 易学性:
(4) 易操作性:
(5) 吸引性:
(6) 易用性依从性: - 效率:
(1) 定义:在规定的条件下,相对于所需资源的数量,软件可提供适应性的能力。
(2) 时间特性:在规定条件下,软件执行其功能时,提供适当的响应和处理时间,以及吞吐率的能力。
(3) 资源利用性:在规定条件下,软件执行其功能时,使用合适的资源数量和类别的能力。
(4) 效率依从性: - 可移植性:
(1) 定义:软件可被修改的能力。修改可能包括修正,改进或软件对环境、需求和功能规格说明变化的一种适应性。
(2) 易分析性:软件诊断软件中的缺陷,失效的原因,或识别待修改部分的能力。
(3) 易改变性:软件使制定的修改可以被实现的能力。
(4) 稳定性:软件避免由于软件修改而造成的意外结果的能力。
(5) 易测试性:软件使已修改软件能被确认的能力。
(6) 移植性性依从性: - 可维护性:
(1) 定义:软件从一种环境迁移到另外一种环境的能力
(2) 适应性:软件无须采用有别于为考虑软件的目的而准备的活动或手段,就可能适应不同的环境。
(3) 共存性:软件在公共环境中与其他共享公共资源的能力。
(4) 易安装性:软件在制定环境中被安装的能力
(5) 易替换性:软件在相同的环境下,替代另一个相同途径的制定软件产品的能力。
(6) 可移植性依从性: