1、 什么是软件测试
测试的含义“以检验产品是否满足需求为目标“,软件测试的重要活动即发现错误
软件测试的经典定义:在规定的条件下对软件进行操作,以发现错误,并对软件质量进行评估。
软件是由程序、数据和文档组成的,软件测试就是对软件形成过程中的文档、数据和程序进行测试,而不仅仅是对程序进行测试。
60%以上的软件错误并不是程序错误,而是软件分析和设计的错误
2、 什么是软件质量
经典定义:软件特性的总和,软件满足规定或潜在用户需求的能力
软件质量包括“内部质量“、“外部质量”以及“使用质量”,也就是说“软件满足规定或者潜在用户需求能力”要从“内部质量”、“外部质量”和“使用质量”三部分体现
3、 软件测试和质量保证的区别:
软件测试只是软件质量保证的一个工作环节:
质量保证:通过预防、检查和改进来保证软件质量。采用全面质量管理和过程改进的原理来开展质量保证工作,主要着眼于软件开发活动的过程、步骤和产物。
软件测试:关心的并不是过程的活动,而是对过程的产物以及开发的软件进行剖析。通过执行软件来,对过程中的产物(开发文档和程序)进行走查,发现问题,报告质量
4、 软件测试的目的:
测试的目的不仅仅是为了发现软件错误和缺陷,而是也是对软件质量进行评估,以提高软件质量。
测试是程序的执行过程,目的在于发现错误;
一个好的测试用例在于发现了至今未发现的错误;
一个成功的测试是发现了 至今未发现的错误的测试;
5、 软件测试原则:
① 所有的测试都应该追溯的用户的需求
② 应该把“尽早的和不断的测试”作为软件测试者的座右铭
③ 完全测试是不可能的,测试需要终止
输入量太大
输出结果太多
路径组合太多
(中止测试原则)根据测试错误的概率以及软件可靠性要求,来确定测试的停止测试时间
④ 测试无法显示软件潜在的缺陷
软件测试只能证明软件存在错误而不能保证软件没有错误
⑤ 充分注意测试中的群集现象
测试后程序中残存的错误数目和该程序中已经发现的错误数目成正比
⑥ 程序员应该避免检查自己的程序
⑥ 尽量避免测试的随意性
6、 软件测试对象
在整个软件生命周期中,各个阶段有不同的测试对象,形成了不同开发阶段的不同类型的测试。
需求分析、概要设计、详细设计以及程序编码等阶段得到的不同的文档,例如需求规格说明书、概要设计规格说明书、详细设计规格说明书以及源程序,都应该成为测试对象。
软件编码完成后,对每一模块进行测试,称为“模块测试”或“单元测试”。在模块集成后,对集成在一起的模块组件,称为“集成测试”,在集成测试后需要检测和证实软件是否满足软件需求说明书中规定的需求,这就称为“确认测试”,将整个软件集成为系统,安装在运行环境下,对硬件、网路、操作系统以及支撑平台构成的整体系统进行测试,称为“系统测试”。
验证:保证软件正确实现特定功能的一系列活动和过程
确认:保证软件满足用户需求的一系列活动或过程。
7、 软件测试分类
⑴按照开发阶段划分
① 单元测试
又称为模块测试,检查各个程序单元能否正确的实现详细设计说明中的模块功能、性能、接口和设计约束等要求,发现各个模块可能存在的各种错误
② 集成测试
又称为组装测试,在单元测试的基础上,将所有的程序模块进行有序的、递增的测试。集成测试是检验程序单元或部件的接口关系,逐步集成为符合概要设计要求的程序部件或系统
③ 确认测试
通过检查和提供数据,证实软件是否满足特定预期用途的需求。确认测试时候检测和证实软件是否满足软件需求说明规格的需求
④ 系统测试
对集成的硬件和软件进行测试。
⑤ 验收测试
按照项目书或合同,供需双方约定的验收依据文档进行的对整个系统的测试和评审
⑵按照测试实施组织划分
① 开发方测试
通常也叫验收测试或“a”测试,开发方在开发环境下,通过测试和提供数据,证实软件的实现是否满足规定的需求,是否满足软件设计说明或软件需求说明的需求。可以和软件的系统测试一同进行。
② 用户测试
在用户的应用环境下,用户检测与核实软件实现是否符合自己预期的要求。B测试通常被认为是用户测试,把软件有计划地免费地分发到目标市场,让用户大量使用、评价检查软件
③ 第三方测试
由第三方测试机构来进行的测试,也称独立测试
⑶按照测试技术划分
按照测试技术划分为:白盒测试、黑盒测试、灰盒测试。也可以分为静态测试和动态测试
静态测试:不运行程序,通过人工对程序和文档进行分析和检查,静态测试实际上是对软件中的需求说明书、设计说明书、程序代码进行非运行的检查。静态测试包括走查、符号执行以及需求确认等。
动态测试:通过人工或工具运行程序进行检查、分析程序的运行状态以及外部表现
① 白盒测试
② 了解程序结构和处理过程,检查是否所有的结构和路径都是正确的,检查程序的内部动作是否按照设计说明的规定正常进行
③ 黑盒测试
完全不考虑程序的结构和处理过程,在程序界面进行测试,它只是检查是否按照需求规格说明书的规定正确实现
④ 灰盒测试
灰盒测试只是关注输出对于输入的正确性,同时也关注内部表现
单元测试可以应用白盒测试方法
集成测试应用灰盒测试方法
系统测试以及确认测试可以应用黑盒测试方法