前言
本篇文章主要为学生讲解软件测试攻城狮必备的知识,用于学员快速查询知识与复习。
一、软件
- 软件是什么
- 答:行业话叫"捉虫"
- 软件的概念
- 初学者的错误观点【“软件就是程序,软件开发就是编程序”】
- 软件是计算机系统中与硬件相互依存的另一部分,它是包含程序,数据及其相关文档的完整集合
- 程序就是事先设计的功能和性能要求执行的指令序列
- 数据是使程序能正常操纵信息的数据结构
- 文档是与程序开发,维护和使用有关的图文材料
- 软件的分类
- 系统软件
- 服务性程序:如诊断程序、排错程序、练习程序等
- 语言程序:如汇编程序、编译程序、解释程序
- 操作系统、数据库管理系统
- 应用软件
- 应用软件是为了某种特定的用途而开发的软件,它可以是一个特定的程序,比如一个图像浏览器,也可以是一组功能联系紧密,可以互相协作的程序的集合
- 系统软件
二、软件的八大特征
- 形态特性:软件是 无形的、不可见的逻辑实体。度量常规产品的几何尺寸、物理性质和化学成分对它却是毫无意义的
- 智能特性:软件是复杂的智力产品,它的开发凝聚了人们的大量脑力劳动,它本身也体现了知识实践经验和人类的智慧,具有一定的智能,它可以帮助我们解决复杂的计算、分析、判断、和决策问题。
- 开发特性:尽管已经有了一些工具(也是软件)来辅助软件开发工作,但到目前为止尚未实现自动化。软件开发中仍然包含了相当份量的个体劳动,使得这一大规模知识型工作充满了个人行为和个人因素
- 生产特性:与硬件或传统的制造业产品的生产完全不同,软件一旦设计开发出来,如果需要提供多个用户,它的复制十分简单,其成本也是极为有限
- 管理特性:由于上面的特性存在,所以在软件过程中的管理显得更为重要,相比传统行业,也更为独特
- 维护特性:软件投入使用以后需要进行维护,但这种维护与传统行业产品的维护概念有着很大差别,维护体现在升级、优化、功能更新等方面,甚至可以全盘重构
- 废弃特性:与硬件不同,软件并不是由于被“用坏”而是被废弃的
- 应用特性:软件的应用极为广泛,如今它已渗入国民经济和国防的各个领域,现已成为信息参业、先进制造业和现代服务业的核心,占据了无可取代的地位
三、软件生命周期
- 什么叫软件生命周期
- 软件的生命周期,又称为软件的生存周期,它是按开发软件的规模和复制程度,从时间上把软件开发的整个过程(从计划开发开始到软件废弃为止整个历史阶段进行分解,形成相对独立的几个阶段)
- 每个阶段又分解成几个具体的任务,然后按规定顺序依次完成各阶段的任务并规定一套标准的文档作为各个阶段的开发成果,最后生产出高质量的软件
- 软件的一生
- 1、问题定义 【确定好要解决的问题是什么】
- 2、可行性研究 【确定该问题是否存在一个可以解决的方法】
- 3、需求分析 【深入具体的了解用户的需求】
- 4、概要设计 【设计出实现目标系统的几种可能方案,设计程序的体系结构】
- 5、详细设计 【详细的设计每个模块,确定实现模块功能所需要的算法和数据结构】
- 6、编码和单元测试
- 7、综合测试
- 8、软件维护
四、软件开发模型
什么是软件开发模型?
由于项目,需求的模式不同,所以在软件生命周期过程中选择的软件开发模型也会有所不同,在历史上,软件开发模型经历了“边做边改”、瀑布、原型、螺旋、敏捷等模式的变更
- 瀑布模型
- 计划--->需求分析--->设计--->编码--->测试--->运行维护
- 特点
- 软件开发的各项活动严格按照线性方式进行
- 当前活动接受上一项活动的工作结果
- 当前活动的工作结果需要进行验证
- 缺点
- 由于开发模型是线性的,增加了开发的风险
- 早期的错误可能要等到开发后期的阶段才能发现
- 原型模型
- 客户与开发公司紧密联系,开发周期长,开发会受到需求变更的影响
- 特点
- 实现客户与系统的交互
- 进一步细节化待开发需求
- 开发人员可以确定客户的真正需求是什么
- 螺旋模型
- 制定计划-->风险分析-->实施工程(需求确定、软件需求、软件产品设计、设计确定与认证、详细设计、开发、测试)-->客户评估
- 特点
- 螺旋模型是将瀑布模型与快速原型模型结合起来
- 强调了其它模型所忽视的风险分析
- 缺点
- 强调风险分析,但要求许多客户接受并相信这种分析,是不容易的
- 敏捷模型
- 敏捷开发是一种以人为核心、迭代、循环渐进的开发方法
- 特点
- 开发周期短
- 增量开发
- 3、由程序员和测试人员编写的自动化测试监控开发进度
- 通过口头沟通,测试和源代码来交流系统的结构和意图
- 编写代码之前先写测试代码,也叫做测试先行
- 缺点
- 团队的组件较难、人员素质要求较高
- 对测试员要求完全掌握各种脚本语言编程,能执行单元测试,自动化测试
五、软件开发文档
需求分析文档 -->概要设计文档-->详细设计文档-->测试设计文档-->测试用例-->测试报告
六、软件测试方法-【软件测试方法分类】
软件测试分类
- 按生命周期划分
- 单元测试
- 【单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的,很明确的功能是否正确,通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为】
- 冒烟测试
- 【冒烟测试,是对软件基本的功能进行测试,测试的对象是每一个新编译的需要正式测试的软件版本,目的是确认软件基本的功能正常,保证软件系统能跑的起来,可以进行后续的正式测试工作】
- 集成测试
- 【 集成测试,又称为组装测试,就是将软件产品中各个模块组装起来,检查其接口是否存在问题,以及组装后的整体功能、性能表现。在开展集成测试之前,我们进行了深入的单元测试】
- 系统测试
- 【系统测试,英文是System Testing。是对整个系统的测试,将硬件、软件、操作人员看作一个整体,检验它是否有不符合系统说明书的地方。这种测试可以发现系统分析和设计中的错误。如安全测试是测试安全措施是否完善,能不能保证系统不受非法侵入。再例如,压力测试是测试系统在正常数据量以及超负荷量(如多个用户同时存取) 等情况下是否还能正常地工作。】
- 验收测试
- 【验收测试是部署软件之前的最后一个测试操作。在软件产品完成了单元测试、集成测试和系统测试之后,产品发布之前所进行的软件测试活动。它是技术测试的最后一个阶段,也称为交付测试,验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。】
- 单元测试
- 按照测试方法划分
- 白盒测试 【白盒测试,也称为结构化测试、基于代码的测试,是一种测试用例设计方法,它从程序的控制结构导出测试用例。用白盒测试产生的测试用例能够1)保证一个模块中的所有独立路径至少被使用一次,2)对所有逻辑值均需测试true和false,3)在上下边界及可操作范围内运行所有循环,4)检查内部数据结构以确保其有效性。正如Beizer所说的:“错误潜伏在角落里,聚集在边界上”,而白盒测试更可能发现它】
- 静态分析
- 动态分析
- 逻辑性覆盖测试 【esting coverage(测试覆盖),指测试系统覆盖被测试系统的程度,一项给定测试或一组测试对某个给定系统或构软件的所有指定测试用例进行处理所达到的程度。】
- 语句覆盖
- 判定覆盖
- 条件覆盖
- 路径覆盖
- 插桩测试
- 逻辑性覆盖测试 【esting coverage(测试覆盖),指测试系统覆盖被测试系统的程度,一项给定测试或一组测试对某个给定系统或构软件的所有指定测试用例进行处理所达到的程度。】
- 黑盒测试 【黑盒测试也称功能测bai试,它是通过测试来检测每个功能是du否都能正常使用。在测试zhi地,把程序看作一个不能打开dao的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。黑盒测试是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。很明显,如果外部特性本身有问题或规格说明的规定有误,用黑盒测试方法是发现不了的】
- 功能测试 【能够单独完成的某个bai具体业务流程。 一般在软件du测试工作流程中的需求zhi分析阶段,要根据需求说明书或者原型图提取功能点,功能点是和需求点相对应的】
- 界面测试 【界面测试,是测试界面中是否有不合理的设计,比如是否有文字覆盖现象】
- 冒烟测试 【冒烟测试,是对软件bai基本的功能进行测试du,测试的对象是每一个新编译zhi的需要正式测dao试的软件版本,目的是确认软件基本的功能正常,保证软件系统能跑的起来,可以进行后续的正式测试工作】
- 回归测试 【回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。自动回归测试将大幅降低系统测试、维护升级等阶段的成本】
- 业务测试 【业务测试是测试人员把系统各个模块串接起来运行、模拟真实用户 实际的工作流程,满足用户需求定义的功能来进行测试流程】
- 兼容性测试 【软件兼容性测试是指检查软件之间能否正确地进行交互和共享信息。随着用户对来自各种类型软件之间共享数据能力和充分利用空间同时执行多个程序能力的要求,测试软件 之间能否协作变得越来越重要。软件兼容性测试工作的目标是保证软件按照用户期望的方式进行交互。】
- 易用性测试 【易用性测试是指用户使用软件时是否感觉方便,比如是否最多点击鼠标三次就可以达到用户的目的。易用性和可用性存在一定的区别,可用性是指是否可以使用,而易用性是指是否方便使用】
- 自动化测试 【一般是指软件测试的自动化,软件测试就是在预设条件下运行系统或应用程序,评估运行结果,预先条件应包括正常条件和异常条件。】
- web自动化测试 【web自动化测试,就是网页自动化测试。通过软件对web对象进行输入数据,单击等操作,比较预结果和实际结果,包括测试报告】
- 接口自动化测试 【接口测试是对系统或组件之间的接口进行测试,主要是校验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系。其中接口协议分为HTTP,WebService,Dubbo,Thrift,Socket等类型,测试类型又主要分为功能测试,性能测试,稳定性测试,安全性测试等】
- 性能测试
- 性能测试 【性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行】
- 负压测试 【负压测试一般针对 WEB 应用进行,比如网站等。进行负压测试的目的是为了确定 WEB 应 用在现实的网络环境中是否可以正确而安全的处理各种用户提交的不确定请求,检验程序的健壮性】
- 压力测试 【压力测是给软件不断加压,强制其在极限的情况下运行,观察它可以运行到何种程度,从而发现性能缺陷,是通过搭建与实际环境相似的测试环境,通过测试程序在同一时间内或某一段时间内,向系统发送预期数量的交易请求、测试系统在不同压力情况下的效率状况,以及系统可以承受的压力情况】
- 容量测试 【通过性能测试,如果找到了系统的极限或苛刻的环境中系统的性能表现,在一定的程度上,就完成了负载测试和容量测试。容量还可以看作系统性能指标中一个特定环境下的一个特定性能指标,即设定的界限或极限值。】
- 并发测试 【主要指当测试多用户并发访问同一个应用、模块、数据时是否产生隐藏的并发问题,如内存泄漏、线程锁、资源争用问题,几乎所有的性能测试都会涉及并发测试】
- 持久性测试 【持续测试是一个过程,它将自动化测试作为软件交付通道中内嵌的一部分,以尽快获得软件发布后业务风险的反馈】
- 安全测试
- 手动测试 【手工测试就是由人去一个一个的输入用例,然后观察结果,和机器测试相对应,属于比较原始但是必须的一个步骤】
- 自动化审计
- 功能测试 【能够单独完成的某个bai具体业务流程。 一般在软件du测试工作流程中的需求zhi分析阶段,要根据需求说明书或者原型图提取功能点,功能点是和需求点相对应的】
- 灰盒测试 【灰盒测试,是介于白盒测试与黑盒测试之间的一种测试,灰盒测试多用于集成测试阶段,不仅关注输出、输入的正确性,同时也关注程序内部的情况。灰盒测试不像白盒那样详细、完整,但又比黑盒测试更关注程序的内部逻辑,常常是通过一些表征性的现象、事件、标志来判断内部的运行状态】
- 白盒测试 【白盒测试,也称为结构化测试、基于代码的测试,是一种测试用例设计方法,它从程序的控制结构导出测试用例。用白盒测试产生的测试用例能够1)保证一个模块中的所有独立路径至少被使用一次,2)对所有逻辑值均需测试true和false,3)在上下边界及可操作范围内运行所有循环,4)检查内部数据结构以确保其有效性。正如Beizer所说的:“错误潜伏在角落里,聚集在边界上”,而白盒测试更可能发现它】
- 其它
- 随机测试
- 探索性测试
- α测试
- β测试 【α、β、λ常用来表示软件测试过程中的三个阶段,α是第一阶段,一般只供内部测试使用;β是第二个阶段,已经消除了软件中大部分的不完善之处,但仍有可能还存在缺陷和漏洞,一般只提供给特定的用户群来测试使用;λ是第三个阶段,此时产品已经相当成熟,只需在个别地方再做进一步的优化处理即上线】
七、生命周期各测试方法对比
八、软件测试常用术语
- C/S
-
- C是英文单词“Client”的首字母,即客户端的意思,C/S就是“Client/Server”的缩写,即“客户端/服务器”模式。C/S结构是一种软件系统体系结构,也是生活中很常见的。这种结构是将需要处理的业务合理地分配到客户端和服务器端,这样可以大大降低通信成本,但是升级维护相对困难。比如我们手机中安装的微信、qq、王者荣耀等应用程序就是C/S结构。
-
- B/S
-
- B是英文单词“Browser”的首字母,即浏览器的意思;S是英文单词“Server”的首字母,即服务器的意思。B/S就是“Browser/Server”的缩写,即“浏览器/服务器”模式。B/S结构是随着互联网的发展,web出现后兴起的一种网络结构模式。这种模式统一了客户端,让核心的业务处理在服务端完成。你只需要在自己电脑或手机上安装一个浏览器,就可以通过web Server与数据库进行数据交互。
-
- 缺陷Bug/Defect
-
- 软件的Bug指的是软件中(包括程序和文档)不符合用户需求的问题
-
- 测试环境
-
- 软件测试环境就是软件运行的平台、包括软件、硬件和网络的集合、用一个等式来表示:测试环境=软件+硬件+网络
-
- 测试用例TestCase
-
- 在测试执行之前设计的一套详细的测试方案,包括测试环境、测试步骤、测试数据和预期结果,用一个等式来表示:测试用例=输入+输出+测试环境 ,其中,"输入" 包括测试数据和操作步骤,"输出"指的是期望结果,"测试环境"指的是系统环境设置ß
-
- 冒烟测试SmokeTesting
-
- 在对一个新版本进行系统大规模地测试之前,先验证一下软件的基本功能是否实现,是否具备可测性
-
- α测试
-
- 验收测试的一种,指的是由用户,测试人员,开发人员等共同参与的内部测试
-
- β测试
-
- 验收测试的一种,指的是内测后的公测,即完全交给最终用户测试
-
九、软件测试常见模型
测试覆盖率对于黑盒测试来说主要指两个方面 【需求覆盖 和 用例覆盖】