软件测试
参考资料 《软件测试方法与技术 朱少民主编 第3版》
前言
??软件业的发展在中国走过了很多年了,对于软件的开发过程,有了许多的开发规范和开发流程。在软件开发的发展过程中,开发人员积累了大量的经验,同时,通过软件开发过程中出现的各种各样的问题经验的总结,产生了软件测试 这个软件开发的伴随品。
??软件测试是为发现错误而执行的一个程序或者系统的过程,总的说来软件测试需要实现的目标包括: ???1、测试是为了证明程序有错,而不是证明程序无错误; ???2、发现在软件开发以及软件实施过程中没有发现的错误; ???3、对软件开发以及实施过程中没有发现的错误进行有效的测试。 ??由此可见,软件测试对于软件开发的最终作用就是保证软件的质量。
??软件测试可以划分为三个阶段,第一个阶段是找出已经运行的或者正在开发的软件的bug,第二个阶段是除开找出软件中的bug外,对软件进行度量,明确把握对软件质量的度量,第三个阶段是提出对软件质量度量的标准,提高被测试软件的质量,这中间将软件测试作为一个工程来看待,也就是说测试也是一个开发过程。
??软件测试 是软件开发过程中的一个重要的步骤 ,或者可以说软件测试应该是贯穿于软件开发过程 的每一个阶段 ,以确保在软件开发的过程中,随时发现问题,方便软件开发人员及时进行修改 。
一、学习路线
二、技能树
2.1 总技能树
2.2 黑马技能树
三、理论导图
四、软件测试引论
1、软件测试的定义
??软件测试的定义(方式+目的,它是一个过程) ??IEEE对软件测试下了一个标准的定义,如下:使用人工 或者自动 手段运行 或者测定 某个系统的过程 ,其目的 在于检验 它是否满足规定的需求 或者弄清楚预期结果和实际结果 之间的差别 。
2、必要性
2.1 软件总存在缺陷
??只有通过测试 ,才可以发现软件缺陷 。也只有发现了缺陷 ,才可以将软件缺陷 从软件产品 或者软件系统 中清理 出去。
2.2 缺陷带给我们的损失巨大
??软件中存在的缺陷给我们带来的损失是巨大的 ,这也说明了软件测试的必要性 和重要性 。
2.3 测试是基本组成单元
??测试 是所有工程学科 的基本组成单元,自然也是软件开发 的重要组成部分 。
2.4 产品稳定性和产品收益
??测试人员水平越高 ,找到软件问题的时间就越早 ,软件就越容易更正 ,产品发布之后就越稳定 ,公司赚的钱就越多 。(微软的例子)
3、软件测试与质量保证的关系
3.1 质量保证的定义
??软件质量保证(Software Quality Assurance SQA)活动是通过对软件产品有计划的进行评审 和审计 来验证软件是否合乎标准 的系统工程 ,通过协调、审查和跟踪以获取有用信息,形成分析结果以指导软件过程 。
3.2 软件测试与质量保证的关系
3.2.1 测试是一项技术性 的工作,侧重于对产品 进行评估和验证
??软件测试是SQA重要手段 之一,为SQA提供所需的数据 ,作为质量评价的客观依据 。
3.2.2 SQA是一项管理 工作,侧重于对流程 的评审和监控
??SQA指导、监督 软件测试的计划 和执行 ,督促 测试工作的结果客观、准确和有效 ,并协助测试流程 的改进 。(指导执行、督促结果、协助改进)
五、基本概念
1、软件缺陷
1.1 定义
??(是什么+后果) ??指计算机系统 或者程序 中存在的任何 一种破坏正常运行能力 的问题 、错误 或者隐藏的功能缺陷、瑕疵 ,其结果会导致软件产品在某种程度 上不能满足用户需求 。
1.2 表现
- 实际结果和预期结果不一致
- 运行出错,包括运行中断、系统崩溃、界面混乱
- 功能、特性没有实现或者部分实现
- 数据结果不正确、精度不够
- 设计不合理,存在缺陷
- 用户不能接受的其它问题,如存取时间长、界面不美观
2、软件测试的分类
- 按
测试阶段 划分有单元 测试、集成 测试、确认 测试、系统 测试、验收 测试 - 按
是否运行 程序划分有静态测试 和动态测试 - 按
是否查看源代码 划分有白盒 测试和黑盒 测试 - 按
测试目的 划分有功能测试 和性能测试 (压力 测试、可用性 测试、安全性 测试、可靠性 测试) 其它 有回归 测试和随机 测试
2.1 静态测试和动态测试
2.1.1 静态测试
- 静态测试是对软件
产品 的需求 和设计规格说明书 进行评审 、对程序代码 的复审 等 - 静态分析的
查错和分析功能 是其它方法所不能替代 的,越来越多地采用工具 进行自动化 分析
2.1.2 动态测试
- 动态测试就是通过
真正运行程序 发现错误,通过观察代码运行过程 ,获取系统信息 ,对系统行为 进行验证 。
2.2 白盒测试和黑盒测试
2.2.1 白盒测试
- 又称结构化测试或
逻辑驱动测试 - 已知产品
内部 的工作过程 (程序的结构 和语句 ) - 按照
内部的结构 测试程序,检查程序的每条通路 是否都能按预定要求 工作
2.2.2 黑盒测试
- 又称为
数据驱动测试 ,将程序看做一个黑盒子 不知 程序内部的结构 和特性 - 直接进行测试,检查系统功能是否能按照
需求规格说明书 的规定正常使用
2.3 测试计划和测试用例
2.3.1 测试用例的定义
??测试用例是为了特定的测试目的 而设计的测试条件 、测试数据 及与其相关的测试规程 的一个特定的使用实例或者场景 。
六、主要方法
1、基于输入域的方法
1.1 等价类划分法
1.1.1 定义
??等价类划分法就是解决如何选择适当的数据子集来代表整个数据集的问题,通过降低测试的数目去实现“合理的”覆盖,覆盖了更多的可能数据,发现更多的软件缺陷。
1.1.2 有效等价类
- 对程序规格说明是有意义的、合理的输入数据构成的集合
- 利用有效等价类,可以检验程序是否
实现 了规格说明预先预定 的功能和性能 - 有效等价类可以是一个,也可以是多个
1.1.3 无效等价类
- 对程序规格说明是无意义、不合理的输入数据构成的集合
- 利用无效等价类,可以检验程序功能和性能的实现是否有
不符合 规格说明要求的地方 - 无效等价类至少有一个,也可能有多个
1.1.4 计算
1.2 边界值划分法
1.2.1 定义
很多错误发生在输入或输出范围的边界上,因此针对各种边界情况设置测试用例,可以更有效地发现缺陷。
主要是计算
1.2.2 计算
2、基于组合的方法
2.1 判定表法
2.1.1 定义
??借助表格方式 完成对输入条件 的组合设计 ,以达到完成组合覆盖 的测试效果。
- 条件桩:列出问题的所有条件
- 动作桩:列出可能针对问题所采取的操作
- 条件项:针对所列条件的具体赋值,即每个条件可以取真值和假值
- 动作项:列出在条件项组合情况下应该采取的动作
- 规则:任何一个条件组合的特定取值及其相应要执行的操作。在判定表中贯穿条件项和动作项的一列就是一条规则。
2.1.2 步骤
- 列出所有的条件桩和动作桩
- 填入条件项
- 填入动作项,指定初始判定表
- 简化、合并相似规则或者相同条件
2.1.3 计算
2.2 因果图法
2.2.1 定义
??利用图解法分析输入的各种组合情况,写出判定表,从而设计相应的测试用例。
2.2.2 步骤
- 分析出等价类,将输入输出赋予标识符,分析语义,找出关系
- 关系关联,并将其不可能的组合情况标注成约束或者限制条件,形成因果图
- 因果图转化成判定表
- 判定表的每一列可以作为设计测试用例的依据
2.2.3 计算
3、基于逻辑覆盖的方法
??逻辑覆盖是一种使用最广泛的结构 测试方法,逻辑覆盖以程序内部的逻辑结构 为基础设计测试用例。要求对被测程序的逻辑结构有清楚的了解,甚至能掌握源程序的所有细节。
3.1 判定覆盖
3.1.1 定义
??基本思想是设计若干测试用例,运行被测程序,使程序中每个判断的取真分支和假分支至少经历一次,即判断真假均曾被满足。 ??一个判定代表程序的一个分支,判定覆盖又叫做分支覆盖。
3.2 条件覆盖
3.2.1 定义
??基本思想是设计若干测试用例,运行被测程序,使得每个判断 中每个条件 的取值至少满足一次。
3.3 判定条件覆盖
3.3.1 定义
??判定条件覆盖是判定覆盖和条件覆盖的交集,即设计足够的测试用例,使得所有判断的可能结果至少执行一次,同时,判断条件中的所有条件可能取值至少执行一次。
3.4 条件组合覆盖
3.4.1 定义
??基本思想是设计若干测试用例,运行被测程序,使得判断中每个条件的所有可能至少出现一次,并且每个判断本身的判定结果也至少出现一次。 ??求这些结果所有可能的组合都至少出现一次。
3.5 基本路径覆盖
3.5.1 定义
??基本思想是设计所有的测试用例,覆盖程序中所有可能 的执行路径 。
3.5.2 计算环形复杂度的三种方法
- 流图中的区域数等于环形复杂度
- 流图G中的环形复杂度V(G)=E-N+2,其中E是流图中边的条数,N是流图中节点数。
- 流图G中的环形复杂度V(G)=P+1,其中P是流图中判定节点的数目。
3.5.3 计算
七、系统测试
1、功能测试
1.1 定义
- 考虑模块间的相互作用
- 考虑系统的应用环境
- 衡量标准是实现产品规格说明书上所要求的功能
- 模拟用户完成从头到尾的业务测试,确保满足用户的实际业务需求
1.2 例子
- WEB图形测试
- 表单测试
- 页面链接测试需要验证的问题
- HTTP认证、SSL、TLS
- 虚拟主机,通用网关接口
- 脚本语言集成
- 数据库测试
- 设计语言测试
- Cookies测试
1.3 回归测试
??回归测试有两个目的
- 所做的修改达到了预定的目的,如错误得到了改正、新功能得到了实现、能够适应新的运行环境等
- 不影响软件原有功能的正确性
2、性能测试
??就是为了发现系统性能问题 或获取系统性能相关指标 而进行的测试。 ??一般在真实情况 、特定负载 条件下,通过工具模拟 实际软件系统的运行及其操作 ,同时监控性能 各项指标,最后对测试结果进行分析来确定系统的性能状况。
2.1 性能指标
- 服务器的各项指标(CPU、内存占用率等)
- 后台数据库的各项指标
- 网络流量
- 响应时间
具体指标
- 数据传输的吞吐量
- 数据处理效率
- 数据请求的响应时间
- 内存和CPU使用率
- 连接时间、发送时间
- 处理时间、页面下载时间
- 第一次缓冲时间
- 每秒连接数
- 每秒事务总数、每秒下载页面数
- 每秒点击次数、每秒HTTP响应数
- 每秒重试次数
2.2 压力测试
2.2.1 定义
??在一种需要反常(如长时间的峰值)数量、频率或者资源的方式下,执行可重复的负载测试,以检查程序对异常情况 的抵抗能力 ,找出性能瓶颈 或者其它不稳定性问题 。
2.3 安全性测试
2.3.1 定义
??全面检验 软件在需求规格说明中规定的防止危险状态措施的有效性和在每一个危险状态下的反应 ,对软件设计中用于提高安全性的结构、算法、容错、冗余、中断处理等方案进行针对性测试,并对安全性关键的软件单元和软件部件 ,单独进行加强的测试,以确认其满足安全性的需求。
2.4 可靠性测试
2.4.1 定义
??可靠性是产品在规定的条件下和规定的时间内完成规定功能的能力。理论上,可靠的软件系统应该是正确的、完整的、一致的、健壮的。
八、验收测试
1、定义
??在软件产品完成了系统功能和非功能测试之后、产品发布之前所进行的软件测试活动。它是技术测试的最后一个阶段,也称为交付测试。
九、自动化测试
1、定义
??是相对于手工测试而存在的一个概念,由手工逐个地运行测试用例的操作过程被测试工具自动执行的过程所取代。 ??测试工具的使用时自动化测试的主要特征。
十、补充
1、缺陷报告的主要组成部分
标题、操作步骤、期望结果、实际结果
2、测试需求分析
3、软件缺陷按严重性等级划分
4、接口测试的作用
??接口测试是测试系统组件间接口 的一种测试。主要用于测试系统与外部系统 之间的接口 ,以及系统内部各子模块之间 的接口。 ??重点是接口参数传递 的正确性、接口功能实现 的正确性、输出结果 的正确性、以及对各种异常情况的容错 的完整性和合理性。
5、冒烟测试
指在对一个新版本的软件进行系统的大规模的测试之前,先验证一下软件的基本功能 是否实现,是否有可测性 。
6、什么是测试报告,由哪些组成
- 软件缺陷的基本信息
- 缺陷的详细描述
- 可跟踪信息
- 测试环境说明
- 必要的附件
7、测试的分类
- 按测试层次分
- 按测试对象分
- 按测试阶段分
- 按测试目的分
- 其它
|