【概述】
在软件测试阶段,采取如下步骤进行测试:
- 单元测试:集中于每个独立的模块,该测试以详细设计文档为指导,测试模块内的重要控制路径,大量使用白盒测试技术
- 集成测试:集中于模块的组装。集成测试同时解决程序验证和程序构造这两个问题,将经过单元测试的模块构成一个满足设计要求的软件结构
- 确认测试:目标是发现软件实现的功能与需求规格说明书不一致的错误,通常采用黑盒测试技术
- 系统测试:集中检验系统所有元素(包括硬件、软件)之间协作是否 合适,整个系统的性能、功能是否达到要求
- 验收测试:以用户测试为主,分为 a 测试和 b 测试,a 测试指的是由用户、 测试人员、开发人员等共同参与的内部测试,b 测试指的是完全交给最终用户的测试
【单元测试】
概述
单元测试,是针对软件设计的最小单位(程序模块)进行的正确性检验的测试工作,其目的是在于发现各模块内部可能存在的各种差错
单元测试需要从程序的内部结构出发设计测试用例,多个模块可以平行地进行单元测试
测试内容
单元测试内容如下:
- 模块接口:数据是否正确进出模块
- 局部数据结构:局部数据的说明、初始化、默认值是否有问题
- 独立路径:重要独立执行路径是否有错误计算、不正确比较或不适当控制流
- 出错处理通路:
- 错误描述是否难于理解
- 记下错误是否与实际遇到错误不同
- 错误处理之前,错误条件已引起系统干预
- 错误处理不正确
- 描述错误信息不足以帮助确定错误位置
- 边界条件:软件容易在边界上失效,边界条件的测试是最重要的
测试方法
单元测试利用计算机进行测试,需要辅助模块模拟与被测模块相联模块
- 驱动模块:相当被测模块主程序,接收测试数据后,传送给被测模块,再输出测试结果
- 桩模块:存根模块,代替被测模块调用的子模块
【集成测试】
概述
集成测试,是将多个测试进行完单元测试的模块组合起来进行测试,其要求必须每个模块必须经过单元测试
要做好集成测试,必须加强集成测试的分析工作,集成测试分析可以从以下几个方面进行:
- 体系结构分析
- 模块分析
- 接口分析
- 集成测试策略分析
由模块组装成软件系统有两种方法:
- 非增量集成:先分别测试每个模块,再将所有模块按照设计要求放在一 起结合成所要的程序
- 增量集成:将下一个要测试的模块同已经测试好的那些模块结合起来进行测试,测试完后再将下一个应测试的模块结合起来进行测试
需要注意的是,对两个以上模块进行集成时,需要考虑它们和周围模块之间的关系,为了模拟这些联系,需要设计驱动模块或者桩模块这两种辅助模块
非增量式集成测试
非增量集成测试采用一步到位的方法来进行测试
增量式集成测试
增量式集成测试中单元的集成是逐步实现的,集成测试也是逐步完成的,按照实施的不同次序,增量式集成测试可以分为自顶向下和自底向上两种方式
自顶向下增量式集成测试
自顶向下增量式集成测试表示逐步集成和逐步测试是按结构图自上而下进行的,即模块集成顺序是首先集成主控模块,然后按照软件控制层次接口向下进行集成
从属于主控模块的模块按照深度优先策略或广度优先策略集成到结构中去:
- 深度优先策略:首先集成在结构中的一个主控路径下的所有模块,主控路径的选择是任意的,一般根据问题的特性来确定
- 广度优先策略:首先沿着水平方向,把每一层中所有直接隶属于上一层的模 块集成起来,直至最底层
自顶向下的集成方式的主要优点有:
- 可以及早地发现和修复模块结构图中主要控制点存在的问题
- 能较早地验证功能的可行性
- 最多只需要一个驱动模块,减少驱动模块的开发成本
- 支持故障隔离
自顶向下的集成方式的主要缺点是:需要开发和维护大量的桩模块
自底向上增量式集成测试
自底向上增量式集成策略是从最底层的模块开始,按结构图自下而上 逐步进行集成并逐步进行测试工作
由于是从最底层开始集成,测试到较高层模块时,所需的下层模块功 能已经具备,因此不需要再使用被调用模拟子模块来辅助测试
因为是自底向上进行组装,对于一个给定层次的模块,它的所有下属 模块已经组装并测试完成,所以不再需要桩模块
自底向上集成方式的主要优点有:
- 大大减少了桩模块的开发
- 先对底层模块进行测试,减少了回归测试成本
- 在集成的早期实现对底层模块的并行测试,提高了集成的效率
- 支持故障隔离
自底向上集成方式的主要缺点有:
- 需要大量的驱动模块
- 主要控制点存在的问题要到集成后期才能修复,需要花费较大成 本
- 随着测试的逐步推进,组装的系统愈加复杂,对底层模块的异常 很难测试
三明治集成测试
三明治集成测试是将自顶向下测试与自底向上测试两种模式有机结合起来,采用并行的自顶向下、自底向上集成方式
其采取持续集成的策略,自底向上集成时,先期完成的模块将是后期模块的驱动模块,节省了测试代码的编写,有利于提高工作效率
【系统测试】
概述
系统测试的对象包括源程序、需求分析阶段到详细设计阶段中的各 技术文档、管理文档、提交给用户的文档、软件所依赖的硬件、外设甚至包括某些数据、某些支持软件及其接口
测试范围可分为功能测试、性能测试、压力测试、容量测试、安全性测试、图形用户界面测试、可用性测试、安装测试、配置测试、异常测试、备份测试、健壮性测试、文档测试、在线帮助测试、网络测试、稳定性测试等
功能测试
不管软件内部是如何实现的,只是根据需求规格说明书和测试需求列表,验证产品的功能是否符合需求规格
主要检验以下几个方面:
- 功能是否全部实现,有没有遗漏
- 功能是否满足用户需求和系统设计的隐藏需求
- 能否正确地接受输入,并给出正确结果
性能测试
性能测试是用来测试软件系统在实际的集成系统中运行性能的
无论是单元测试,还是集成测试中,都没有将系统作为一个整体放入实际环境中运行,因此,只有在性能测试阶段,才能够真正看到系统的实际性能
对于实时系统和嵌入式系统,提供符合功能需求但不符合性能需求的软件是不能接受的
性能测试的目的是度量系统相对于预定义目标的差距,需要的性能级别针对于实际的性能级别进行比较,并把其中的差距文档化
安装测试
安装测试用来确保软件在正常情况和异常情况的不同条件下都不丢失数据或者功能,具体测试活动包括首次安装、升级、完整安装、自定义安装、卸载等。测试对象包括测试安装代码以及安装手册
安装代码提供安装一些程序能够运行的基础数据,安装手册提供如何进行安装
可用性测试
所谓可用性测试,即是对软件可用性进行测试,检验其是否达到可用性标准,发现人为因素或者使用上的问题
压力测试
检查在系统运行环境恶劣的情况下,系统可以运行到何种程度的测试
因此,进行压力测试,需要提供非正常数量、频率或总量资源来运行系统
容量测试
在进行压力测试时,如果发现了被测系统在可接受的性能范围内的极限负载,则在一定程度上完成了容量测试
容量测试的目的是通过测试预先分析出反映软件系统应用特征的某项指标的极限值,如最大并发用户数、数据库记录数等,系统在该极限值下没有出现任何软件故障或还能保持主要功能正常运行
或者说容量测试是为了确定测试对象在给定时间内能够持续处理的最大负载或工作量
安全性测试
安全性测试的目的是验证系统的保护机制是否能够在实际的环境中抵御非法入侵,恶意攻击等非法行为
包含敏感信息或能够对个人造成不正当伤害的计算机系统都会成为 被攻击的目标
健壮性测试
健壮性是指在故障存在的情况下,软件还能正常运行的能力
容错性测试与恢复测试是有区别的,而健壮性测试包含这两种测试。健壮性有两层含义:一是容错能力,二是恢复能力
容错性测试通常依靠输入异常数据或进行异常操作,以检验系统的保护性。如果系统的容错性好,系统只给出提示或内部消化掉,而不会导致系统出错甚至崩溃
恢复测试通过各种手段,让软件强制性地发生故障,然后验证系统已保存的用户数据是否丢失,系统和数据是否能尽快恢复
图形用户界面测试
图形化用户接口测试包含两方面内容:
- 界面实现与界面设计是否吻合
- 界面功能是否正确
为了更好地进行 GUI 测试,一般将界面与功能分离设计,比如分成:界面层、界面与功能接口层、功能层,这样 GUI 的测试重点就可以放在前两层上
文档测试
文档的种类包括:开发文档、管理文档、用户文档
在这 3 类文档中,一般最主要测试的是用户文档,因为用户文档中的错误可能会误导用户对软件的使用,而且如果用户在使用软件时遇到的问题没有通过用户文档中的解决方案得到解决,用户将因此对软件质量产生不信赖感,甚至厌恶使用该软件,这对软件的宣传和推广是很不利的
【验收测试】
概述
验收测试是在系统测试之后进行的测试,目的是为了验证新建系统产品是否能够满足用户的需要,产品通过验收测试工作才能最终结束
具体说来,验收测试就是根据各自需求说明书的标准,利用工具进行的一项检查工作,其中包括对进程的验收、进程质量是否达到需求说明书的要求,以及是否符合工程的设计要求等
验收测试是依据软件开发商和用户之间的合同、软件需求说明书以及相关行业标准、国家标准、法律法规等的要求对软件的功能、性能、 可靠性、易用性、可维护性、可移植性等特性进行严格的测试,验证软件的功能和性能及其他特性是否与用户需求一致
验收测试分为 α 测试与 β 测试:
- α 测试:由用户在开发者的场所进行,并且在开发者对用户的指导下进行测试
- β 测试:由软件的最终用户在一个或多个客户场所进行
验收测试内容
验收测试是在软件开发结束后,用户实际使用软件产品之前,进行的最后一次质量检验活动,主要回答开发的软件是否符合预期的各项要求以及用户能否接受的问题
验收测试主要验证软件功能的正确性和需求符合性,其是以用户为主的测试
单元测试、集成测试和系统测试的目的是发现软件错误,将软件缺陷排除在交付客户之前;验收测试需要客户共同参与,目的是确认软件符合需求规格
验收测试主要包括配置复审、合法性检查、文档检查、软件一致性 检查、软件功能和性能测试与测试结果评审等内容。
【回归测试】
回归测试不是一个测试阶段,而是一种可以用于单元测试、集成测 试、系统测试和验收测试各个测试过程的测试技术
回归测试指软件系统被修改或扩充后重新进行的测试,其是为了保证对软件修改后,没有引入新的错误而重复进行的测试
【软件调试】
调试是在测试发现错误之后排除错误的过程,其是将症状和原因联系起来的尚未被人很好理解的智力过程
常见调试的方法有:蛮干法、回溯法、原因排除法(二分查找法、归纳法、演绎法)等
调试与测试的区别如下:
- 测试是不断发现错误证明;调试是发现问题解决问题
- 测试以已知条件开始,使用预先定义的程序,且有预知的结果, 不可预见的仅是程序是否通过测试,调试一般是以不可知的内部条件开始,结果不可预见
- 测试是有计划的,并要进行测试设计;调试是不受时间约束的
- 测试经常是由独立的测试组在不了解软件设计的条件下完成的,调试必须由了解详细设计的程序员完成
- 大多数测试的执行和设计可由工具支持;调试时,程序员使用的主要工具就是调试器