- 定义
软件 不等于 编程,具有自己的生命周期,测试是其中重要的部分,充分的测试才能保证软件的质量。
测试是为了找出软件缺陷(Bug)并进行修复(Fix),以保障软件的质量满足用户的需求。
一个好的测试可以①在第一时间发现程序中存在的错误,②发现至今尚未发现的错误
-
产品质量
功能性 Functionality
可用性 Usability
可靠性 Reliability
性能 Performance
容量 Capacity
可测量性 Scalability
可维护性 Service manageability
兼容性 Compatibility
可扩展性 Extensibility -
软件缺陷:软件和产品设计书(原型)的不一致,不能满足用户的需求,在IEEE(1983)729的标准定义:①从产品内部:软件产品开发 或维护过程汇中所存在的错误、毛病等各种问题,②从外部:系统所需要实现的某种功能的失效或违背。
软件缺陷(Bug) | ||||
---|---|---|---|---|
缺点(defect) | 偏差(variance) | 谬误(fault) | 失败(failture) | 问题(problem) |
矛盾(inconsistency) | 错误(error) | 毛病(incident) | 异常(anomy) |
主要类型/现象 |
---|
功能、特性没有实现或部分实现 |
设计不合理,存在缺陷 |
实际结果和预期结果不一致 |
运行出错,包括运行中断、系统崩溃、界面混乱 |
数据结果不正确、精度不够 |
用户不能接受的其他问题,如存取时间过长、界面不美观 |
原因的分类 | |
---|---|
技术问题 | 算法错误,语法错误,计算和精度问题,接口参数传递不匹配 |
团队工作 | 误解、沟通不充分 |
软件本身 | 文档错误、用户使用场合(user scenario) |
时间上不协调、或不一致性所带来的问题 | |
系统的自我恢复或数据的异地备份、灾难性恢复等问题 |
产生的阶段 | 成本(100分) |
---|---|
需求 | 1 |
设计 | 5 |
编码 | 10 |
单元测试 | 40 |
测试 | 50 |
发布 | 100 |
- 软件测试的方法
1)按关联内部结构分类
- 白盒测试(结构测试或逻辑驱动测试)
按照程序内部逻辑结构和编码结构,设计测试数据并完成测试 - 黑盒测试(数据驱动测试)
把测试对象当做看不见的黑盒,完全不考虑程序内部结构和处理过程,依据功能的需求规范,确定测试用例和推断测试结果的正确性,在使用软件的角度,从输入数据和输出数据的对应关系进行测试 - 灰盒测试
结合“白盒测试”和“黑盒测试”,基于程序运行时的外部表现又结合内部逻辑结构设计用例,执行程序并采集路径执行信息和外部用户接口结果。
2)按是否执行代码分类
- 静态测试
不运行被测程序,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。 - 动态测试
运行被测程序,检查运行结果和预期结果的差异,并分析运行效率、正确性和健壮性等性能指标。
3)从开发过程分类

-
单元测试(模块测试)
测试对象:模块或组件(程序系统中的最小单元)
阶段:编码阶段,由编程人员和测试人员共同完成
目的:①检查程序模块或组件的以实现功能与定义的功能是否一致,②编码中是否存在错误。
方法:主要是白盒测试方法,从程序内部结构设计测试用例,多个模块可以平行、对立测试,编写驱动模块和桩模块。 -
集成测试(也称组装测试、联合测试、子系统测试)
测试对象:单元测试的多级扩展,按照设计要求组装集成模块
目的:检查单元之间的接口关系,发现单元接口之间存在的问题,最终把经过测试的单元组成符合设计要求的软件。
方法:一次性集成方式,增殖式集成方式 -
功能测试
测试对象:完成集成测试后的应用系统
目的:从用户角度来进行功能验证,以确认每个功能是否能正常使用 -
系统测试(包括:恢复测试、安全测试、强度测试、性能测试)
测试对象:将集成好的软件系统,作为整个计算机系统的一个元素,与计算机硬件、外设、某些支持软件、人员、数据等其他系统结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试
目的:判断系统是否符合要求
类型:
(1)功能测试:对软件需求规格说明书中的功能需求逐项测试
(2)性能测试:对软件需求规格说明书中的功能需求逐项测试
(3)接口测试:对软件需求规格说明书中的接口需求逐项测试
(4)人机交互界面测试:对所有人机交互界面提供的操作和显示界面进行测试
(5)强度测试:强制软件运行在异常乃至发生故障的情况下(超出软件极限),检查软件可以运行的程度。
(6)余量测试:对软件是否达到规格说明中要求的余量测试
(7)安全性测试:检验软件中已存在的安全性、安全保密性措施是否有效
(8)可靠性测试:在真实的或仿真的环境中,为做出软件可靠性估计而对软件进行的功能测试(其输入覆盖和环境覆盖一般大于普通的功能测试
(9)恢复性测试:对有恢复或重置功能的软件的每一类导致恢复或重置的情况,逐一进行的测试
(10)边界测试:对软件处在边界或端点情况下运行状态的测试
(11)数据处理测试:对完成专门数据处理功能所进行的测试
(12)安装性测试:对安装过程是否符合安装规程的测试,以发现安装过程中的错误
(13)容量测试:检验软件的能力最高能达到什么程度的测试
(14)互操作性测试:为验证不同软件之间的互操作能力而进行的测试
(15)敏感性测试:为发现有效输入中可能引起某种不稳定性或不正常处理的数据组合
(16)标准符合性测试:验证软件与相关国家标准或规范(如军用标准、国家标准、行业标准及国际标准)一致性的测试
(17)兼容性测试:验证软件在规定条件下与若干个实体共同使用或实现数据格式转换时能满足有关要求能力的测试
(18)中文本地化测试:验证软件在不降低原有能力的条件下,处理中文能力的测试 -
验收测试
以用户为主的测试,软件开发人员和质量保证人员参加,由用户设计测试用例。不是对系统进行全覆盖测试,而是对核心业务流程进行测试。 -
安装测试
测试对象:已打包软件
目的:验证软件的安装
方法:按照软件产品安装手册或相应的文档,在一个和用户使用该产品完全一样的环境中或相当于用户使用环境中,进行一步一步的安装操作性的测试 -
回归测试
测试对象:已上线的软件。
目的:检测在维护阶段中,代码修改而引入的错误
方法:根据代码的修改情况对已有测试用例集进行有效的复用,涉及自动化工具,面向对象回归测试,测试用例优先级,回归测试用例补充生成等
4)按是否人工干预分类
- 手工测试
测试人员按照事先为覆盖被测软件需求而编写的测试用例,根据测试大纲中所描述的测试步骤和方法,手工地一个一个地输 入执行,包括与被测软件进行交互(如输入测试数据、记录测试结果等),然后观察测试结果,看被测程序是否存在问题,或在执行过程中是否会有异常发生,属于比较原始但是必须执行的一个步骤 - 自动化测试
将大量的重复性的测试工作交给计算机去完成,通常是使用自动化测试工具来模拟手动测试步骤,执行用某种程序设计语言编写的过程(全自动测试就是指在自动测试过程中,不需要人工干预,由程序自动完成测试的全过程;半自动测试就是指在自动测试过程中,需要手动输入测试用例或选择测试路径,再由自动测试程序按照人工指定的要求完成自动测试)
5)从实施组织分类
- 开发测试:开发中进行的测试(编程人员或测试人员完成)
- 用户测试:用户方进行的测试
- 第三方测试:专业的第三方承担的测试,以保证测试工作的客观性
6)从测试环境分类
- 阿尔法(Alpha)测试:一个用户在开发环境下,或公司内部用户在模拟实际操作环境下 进行的测试
- 贝塔(Beta)测试:用户组织各方面的典型终端用户在日常工作日实际使用贝塔版本,并要求用户报告。
7)其他分类
-
冒烟测试
冒烟测试的对象是新编译的每一个需要正式测试的软件版本,测试系统的主流程是否可用
,目的是确认软件基本功能正常,可以进行后续的正式测试工作。冒烟测试的执行者是版本编译人员。 -
随机测试
随机测试没有书面测试用例、记录期望结果、检查列表、脚本或指令,主要依靠测试员的经验,
对软件的一些重要功能进行复测,也包括测试那些当前的测试样例(TestCase)没有覆盖到的部分。
- 软件测试的步骤
阶段 | 内容 |
---|---|
需求分析阶段 | 阅读需求,理解需求,主要就是对业务的学习,分析需求点,参与需求评审会议 |
计划阶段 | 执行测试计划:测试范围,测试策略,风险评估、规避措施、进入安排 |
设计阶段 | 编写测试用例:可参考原型图、概要设计、详细设计等文档,并评审用例 |
执行阶段 | 搭建环境,执行冒烟测试(预测试),然后正式测试,bug管理,反馈开发修复直到测试结束 |
评估阶段 | 输出测试报告,确认是否上线 |

参考资料:
https://blog.csdn.net/qq_33642117/article/details/73603365
https://baike.baidu.com/item/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/327953
https://www.cnblogs.com/shashe/p/8685799.html
网友评论