“软件测试技术是软件开发过程中的一个重要组成部分,是贯穿整个软件开发生命周期、对软件产品(包括阶段性产品)进行验证和确认的活动过程,其目的是尽快尽早地发现在软件产品中所存在的各种问题——与用户需求、预先定义的不一致性。检查软件产品的bug。写成测试报告,交于开发人员修改。软件测试人员的基本目标是发现软件中的错误。”
01 软件测试步骤
第一步为测试计划。编写测试计划通俗一点讲就是什么人在什么时间做什么事,最后产出什么东西。测试人员要测试哪些模块、在什么期限内,提交哪些文档。
第二步为测试设计与开发。主要是编写测试用例,测试用例就是指导测试的文档,比如我们要测试商城登录、买东西等功能,通过测试方法和策略设计测试用例。评审就是评价审查,不能想当然该怎么测。不能只是输入正确的用户名和密码,能登录进去就完事了。作为软测工程师需要有破坏性,比如密码输错时怎么办,会不会有相应的报错等等。
第三步为执行测试。bug就是缺陷,发现bug之后,要提交给开发人员让他们去修改,然后进行回归测试,验证开发人员有没有改好。
02 软件测试模型-V模型
V模型的阶段包括:需求说明、系统功能设计、概要设计、详细设计、编码、单元测试、集成测试、系统测试、验收测试。
V模型左边表示开发过程中的各阶段,右边表示测试过程中的各阶段
V模型中每个开发阶段对应一个测试阶段
V模型水平虚线上部表明,其需求分析、功能设计和验收测试等主要工作是面向用户,要和用户进行充分的沟通和交流或者是和用户一起完成
V模型水平虚线下部的大部分工作,相对来说,都是技术工作,在开发组织内部进行,由工程师完成
V模型优点
-
将负责的测试工作按阶段划分为各个小阶段来实现
-
从多角度测试系统找出更多的缺陷
V模型缺点
-
软件测试容易误导为软件开发的最后一个阶段
-
需求、设计阶段产生的问题不能很早发现
-
质量控制和测试效率无高效发挥
03 软件测试类型
软件测试可以从不同维度进行分类,可以从按照开发阶段划分、按照测试实施组织划分、按照测试技术划分、按照测试执行方式划分、按照测试对象类型划分。
单元测试又称模块测试,是针对软件设计的最小单元(程序模块)进行正确性验证的工作。
单元测试可以作为无错误编码的一种辅助手段,也可以作为规格说明书来工作
单元测试原则
-
应该尽早地进行软件单元测试
-
应该保证单元测试的可重复性
-
尽可能采用测试自动化手段来支持单元测试活动
单元测试包括单元功能测试、单元接口测试、单元局部数据结构测试、单元中重要的执行路径测试、单元的各类错误处理路径测试、单元边界条件测试
集成测试又称组装测试、联合测试、子系统测试或部件测试。集成测试是在单元测试的基础上,将所有模块按照设计要求组成子系统或系统进行的测试活动。
集成测试的目的是要找出在模块接口上面,包括整体系统结构上的问题。
集成策略包括增值策略和非增值策略,其优缺点如下
优点 | 缺点 | |
增值策略(渐增式组装) | 能较早发现模块间接口错误;发现问题易于定位 | 测试周期长;投入的人力物力受限 |
非增值策略 | 方法简单;允许多个测试人员并行工作,对人力、物力资源利用率较高 | 必须为每个模块准备驱动模块与桩模块测试成本较高;难以定位及纠正错误 |
集成测试包括模块间接口测试、模块间数据传递、全局数据结构测试。
系统测试是对已经集成好的软件系统进行测试,以验证软件系统的正确性和性能等是否满足其规约所指定的要求。
系统测试的目的是在真实系统工作环境下通过与系统的需求定义作比较,检验完整的软件配置项能否和系统正确连接,发现软件与系统设计文档或软件开发合同规定不符合或与之矛盾的地方。并且还要检验系统的文档是否完成、有效。
系统测试一般使用黑盒测试,并由独立的测试人员完成。
系统测试包括从用户角度对系统做功能性的验证和非功能性的验证。
验收测试是在软件产品完成了功能测试和系统测试之后、产品发布前进行的软件测试活动,是技术测试的最后一个阶段,也被称为交付测试、发布测试或确认测试。
验收测试是按照项目任务书或合同、供需双方约定的验收依据文档进行的对整个系统的测试与评审,决定是否接收系统。
验收测试包括易用性测试、兼容性测试、安装测试、文档(如用户手册、操作手册)等内容。
验收测试完成标准
-
完全执行了验收测试计划中的每个测试用例
-
在验收测试中发现的错误已经得到修改并且通过了测试
-
完成软件验收测试报告
验收测试注意事项
-
必须编写正式的、单独的验收测试计划
-
验收测试必须在实际用户运行环境中运行
-
由用户和测试部门共同执行比较好
验收测试包括对整个系统的测试与评审、根据验收通过准则分析测试结果、决定是否接收系统及测试评价。
开发方测试也叫验证测试或者Alpha测试即α测试。开发方通过检测和提供客户证据,证实软件的实现是否满足规定的需要。
开发方测试特点
-
由公司内部的用户进行的受控测试
-
证实软件满足规定的需求
-
注重产品的界面和特色
用户测试也叫Beta测试(即β测试),该测试是在用户的应用环境下,用户通过运行和使用软件,检测与核实该软件实现是否符合自己预期的要求。
用户测试特点
-
由最终用户在客户场所进行验证
-
不受开发者控制
-
注重产品的支持性
第三方测试也称为独立测试,是介于软件开发方和用户之间的测试组织的测试,其目的是为了保证测试工作的客观性,并且尽量多地发现程序中的错误。
第三方测试特点
-
介于开发方和用户方间的组织的测试
-
保证测试工作的客观性
-
评审需求、设计、用户类文档
-
单元测试、功能测试、性能测试等
黑盒测试也称为功能测试,在测试中把程序看成一个不能打开的黑盒子,在接口处进行测试而不是考虑程序内部结构。
黑盒测试优点
-
简单,不需要了解程序内部代码及实现
-
与软件的内部实现无关
-
从用户角度出发
-
基于软件开发文档测试,能了解软件实现了文档的哪些功能
-
做自动化测试方便
黑盒测试缺点
-
代码覆盖率较低,只有总代码量的30%
-
自动化测试的复用性较低
黑盒测试主要用于发现以下几类错误
-
功能不正确或遗漏
-
界面措施
-
输入和输出错误
-
数据库访问错误
-
性能错误
-
初始化和终止错误
黑盒测试包括对界面测试、对功能测试、从用户的角度出发。
白盒测试又称为结构测试,把程序看成是装在一个透明的盒子里,能清楚了解程序结构和处理过程。
白盒测试优点
-
可以检查内存的泄露
-
检查异常处理分支语句是否正确
-
执行了多少逻辑,可以作为衡量测试是否完整的一个指标
白盒测试原则
-
保证一个模块中的所有独立路径至少被测一次
-
所有逻辑覆盖均需测试真和假两种情况
-
检查程序的内部数据结构,保证其结构的有效性
-
在上下边界及可操作范围内运行所有循环
白盒测试包括检查所有的结构及路径是否正确、检查软件内部动作是否按照规定进行。
灰盒测试是一种综合测试法,它将“黑盒”测试与“白盒”测试结合在一起,是基于程序运行时的外部表现又结合内部逻辑结构来设计用例,执行程序并采集路径执行信息和外部用户接口结果的测试技术。
灰盒测试优点
-
能够进行基于需求的覆盖测试和基于程序路径覆盖的测试
-
测试结果可以对应到程序内部路径,便于Bug的定位、分析和解决
-
能够保证设计的黑盒测试用例的完整性,防止遗漏软件的一些不常用的功能或功能组合
-
能够减轻需求或设计不详细或不完整对测试造成的影响
灰盒测试缺点
-
投入的时间黑盒测试大概多20%-40%的时间
-
对测试人员的要求比黑盒测试高
-
不如白盒测试深入
-
不适用于简单系统(只有一个模块的系统)
灰盒测试关注输出对于输入的正确性、关注内部表现、介于白盒和黑盒测试之间。
静态测试是指不运行程序,通过人工对程序和文档进行分析与检查。它实际上是对软件中的需求说明书、设计说明书、程序源代码、用户手册等进行非运行的检查。
静态测试方式包括人工进行和借助软件工具自动进行。
静态测试包括代码检查、静态结构分析、代码质量度量。
动态测试通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率结果与预期的差异,分析运行效率和健壮性等性能。
动态测试包括编写测试用例、执行程序、分析程序输出结果。
静态测试和动态测试的区别
-
静态测试是用于预防的,动态测试是用于校正
-
多次的静态测试比动态测试效率要高
-
静态测试综合测试程序代码
-
在相当短的时间里,静态测试的覆盖率能达到100%,而动态测试是50%左右
-
动态测试比静态测试更花时间
-
静态测试比动态测试更能发现Bug
-
静态测试的执行可以在程序编码编译前,动态测试只能在编译后才能执行
04 软件测试技术
软件测试技术包括黑盒测试法、白盒测试法。
黑盒测试用例的设计方法包括测试区域确定法、组合覆盖法、逻辑推断法、业务路径覆盖法等。
等价类划分法:该方法把所有可能的输入数据即程序的输入域划分为若干部分(子集),然后从每个子集中选取少数具有代表性的数据作为测试用例。如学生成绩是0-100分,那么0≤X≤100就是有效等价类,X>100和X<0就是两个无效等价类。
边界值分析法:它是对输入或输出的边界值进行测试的一种黑盒测试方法,如重量在10-50kg范围内的包裹,其邮费计算公式为....,作为测试用例,我们应该取10及50,以及10.01、49.99、9.99、50.01等。
组合覆盖市覆盖率很高的一种方法。
因果图法:它适用于描述对于多种输入条件组合的测试方法。
判定表法:是最为严格、最具有逻辑性的测试方法。它能够将复杂问题一一列举出来,简明且避免遗漏,同时能够处理针对不同条件的组合值,进行不同的操作。
大纲法:是着眼于需求的测试方法。
场景分析法:包括四种类型:正常的用例场景、备选的用例场景、异常的用例场景、假定推测的场景。
功能图法:是黑盒白盒混合用例设计方法,包括状态迁移图和逻辑功能模型
白盒测试法包括静态白盒测试、动态白盒测试,静态白盒测试包括代码检查法、静态结构分析法、静态质量度量法,动态白盒测试包括覆盖测试、控制结构测试、其他白盒测试方法等。