软件测试与评审是软件质量保证的主要手段之一,也是在将软件交付给客户之前所必须完成的步骤。
测试方法
软件测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件产品(主要是指程序)中的错误(缺陷)
测试用例是由测试数据和预期结果构成的。一个好的测试用例是极有可能发现至今为止尚未发现的错误(缺陷)的测试用例。一次成功的测试是发现了至今为止尚未发现的错误(缺陷)的测试。
高效的测试是指用少量的测试用例,发现被测软件尽可能多的错误(缺)。
软件测试所追求的目标就是以尽可能少的时间和人力发现软件产品中尽可能多的错误(缺陷)。
测试原则
类型:软件测试类型分为动态测试(利用到了计算机的测试)和静态测试(纯手工的测试)
(1)动态测试包括:黑盒测试法(即看不到程序内部,只管输入的是什么,输出的是什么)、白盒测试法(从程序结构方面进行测试)、灰盒测试法
(2)静态测试包括:桌前检查、代码走查、代码审查
静态测试包括对文档的静态测试和对代码的静态测试。对代码的静态测试包括控制流分析、数据流分析、接口分析和表达式分析。
①控制流分析。指使用控制流程图检査被测程序控制结构的过程。例如,可检查被测程序是否存在没有使用的语句或子程序、是否调用并不存在的子程序,以及是否存在无法达到的语句等。
②数据流分析。指使用控制流程图分析数据各种异常情况的过程,包括数据初始化、賦值或引用过程中的异常。例如,引用未定义的变量、对以前未使用的变量再次陚值等程序差错或异常情况。
③接口分析。主要包括模块之间接口的一致性分析、模块与外部数据库及其他软件配置项之间的一致性分析、子程序和函数之间的接口一致性分析等。例如可以检查函数形参与实现的数量、顺序、类型和使用的一致性。
④表达式分析。表达式分析用于检查程序代码中的表达式错误。例如,括 不配对、数组引用越界、除数为零,以及浮点数变量比较时的误差等错误。
软件测试阶段
从测试阶段上分,软件测试通常可分为单元测试、集成测试和系统测试。
-
单元测试: 也称模块测试,通常可放在编程阶段,由程序员对自己编写的模块自行测试,检查模块是否实现了详细设计说明书中规定的功能和算法。单元测试的技术依据是软件详细设计说明书
- 驱动模块用来调用被测模块
- 桩模块用来模拟被测模块所调用的子模块
- 集成测试: 也称组装测试, 它是对由各模块组装而成的程序进行测试,主要目标是发现模块间的接口和通信问题。集成测试的技术依据是软件概要设计文档。
- 系统测试: 软件测试中的最后的、最完整的测试,它从全局来考察软件系统的功能和性能要求。其目的是通过与系统的需求相比较,发现开发的系统与用户需求不符或矛盾的地方。系统测试的技术依据是用户需求或开发合同。
系统测试是根据系统方案说明书来设计测试例子的,常见的系统测试主要有以下内容:
- 恢复测试:恢复测试监测系统的容错能力。
- 安全性测试:检测系统的安全机制、保密措施是否完善,
- 强度测试:是对系统在异常情况下的承受能力的测试,是检查系统在极限状态下运行时,性能下降的幅度是否在允许的范围内。
- 性能测试:检査系统是否满足系统设计方案说明书对性能的要求。性能测试覆盖了软件测试的各阶段,而不是等到系统的各部分都组装之后,才确定系统的真正性能。通常与强度测试结合起来进行,并同时对软件、硬件进行测试。软件方面主要从响应时间、处理速度、吞吐量、处理精度等方面来检测。
- 可靠性测试:通常使用以下两个指标来衡量系统的可靠性:平均失效间隔时间MTBF (mean time between failures)是否超过了规定的时限,因故障而停机时间MTTR (mean time to repairs)在一年中不应超过多少时间。
- 安装测试:为了检测在安装过程中是否有误、是否容易操作等。
确认测试(有效性测试),主要依据软件需求说明书检查软件的功能、性能及其他特征是否与用户的需求一致。 确认计划通常在需求分析阶段完成
- 内部确认测试:由软件开发组织内部按软件需求说明书进行测试
- Alpha测试(由用户在开发环境下进行测试)
- Beta测试(由用户在实际使用环境下进行测试)
- 验收测试(针对软件需求说明书,在交付前以用户为主进行的测试)。
根据国家标准GB/T15532-2008,软件测试可分为单元测试、集成测试、配置项测试、系统测试、验收测试和回归测试等类别。
- 配置项测试的对象是软件配置项,配置项测试的目的是检验软件配置项与软件需求规格说明的一致性。
- 验收测试是指针对软件需求规格说明,在交付前以用户为主进行的测试。
- 回归测试的目的是测试软件变更之后,变更部分的正确性和对变更需求的复合型,以及软件原有的、正确的功能、性能和其他规定的要求的不损害性。

白盒测试
又称结构测试,主要用于单元测试阶段。
白盒测试根据软件的内部逻辑设计测试用例,常用的技术是逻辑覆盖,即考察用测试数据运行被测程序时对程序逻辑的覆盖程度。主要的覆盖标准有 6 种:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合条件覆盖和路径覆盖。
- 语句覆盖测试:即程序中的每一条语句都要进行测试(覆盖度最低的测试),通过设计n组数据,使其覆盖掉所有的路径
- 判定覆盖:即所有判断的真假分支都要测试一遍
- 条件覆盖:即在判定时对判定的条件的真假性进行测试
黑盒测试
又称功能测试,主要用于集成测试和确认测试阶段。
它只检查软件功能是否能按照软件需求说明书的要求正常使用,软件是否能适当地接收输入数据并产生正确的输出信息,软件运行过程中能否保持外部信息(例如文件和数据库)的完整性等。
常用的黑盒测试技术包括等价类划分、边值分析、错误推测和因果图等。
- 等价类划分:即将所有数据类划分为许多个层次,每个数据层次挑选出一个最具代表性的数据进行测试即可
- 边界值分析:即需要对等价类之间的边界值进行测试(一般是端点、略小于端点的值、略大于端点的值)
- 错误推测:即自己推测错误的原因,该方法强调经验
软件测试抽象方法
演绎法(靠蒙的推理):从一般性的前提出发,通过推导即“演绎”,得出具体陈述或个别结论的过程
归纳法(有素材的推理):以一系列经验事物或知识素材为依据,寻找出其服从的基本规律或共同规律,并假设同类事物中的其他事物也服从这些规律,从而将这些规律作为预测同类事物的其他事物的基本原理的一种认知方式
面向对象的测试
算法层(单元测试):包括等价类划分测试、组合功能测试(基于判定表的测试)、递归函数测试和多态消息测试;
类层(模块测试):包括不变式边界测试、模态类测试和非模态类测试;
模板层/类树层(集成测试):包括多态服务测试和展平测试;
系统层(系统测试)
软件调试
软件调试方法:
- 蛮力法:主要思想是“通过计算机找错”,低效,耗时
- 回溯法:从出错处人工沿控制流程往回追踪,直至发现出错根源。复杂程序由于回溯路径多,难以实施
- 原因排除法:主要思想是演绎和归纳,用二分法实现;
软件调试与测试区别:
- 测试的目的是找出错误,调试的目的是定位并修改错误;
- 测试过程可以事先设计,进度可以事先确定;调试的进度和时间不可控
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!