测试分析能力是测试工程师的基本素养。测试分析不等同于测试设计(例如等价类、边界值、组合测试等),但可以理解为测试分析是测试指导思想,测试设计是测试指导行动;思想指导行动,因此测试分析指导测试设计。
测试分析 vs. 测试设计
这两个术语经常被混淆,并且经常交替使用,因此,开篇我们先把二者区别搞懂。
测试分析:
-
测试分析是理解和分析系统行为的过程。
-
测试分析的目标是确定应该测试什么,测试边界是什么。
-
它还包括基于用户需求和业务目标的产品特性分配优先级。
-
它为我们提供了系统的概述,并为测试设计奠定了基础。
测试设计:
-
测试设计是基于测试分析创建测试用例的过程。
-
测试设计的目标是如何对测试边界内的内容进行测试。
-
测试设计环境,并确定任何所需的基础设施和工具。
测试分析回答测试什么,测试设计回答如何测试。
测试分析模型
测试分析可以在产品的不同层次上进行分析——在产品(级)层次和功能(级)层次(系统功能),二者区别在于分析的范围和重点。
产品级测试分析:
-
目标是理解系统的整体功能、优先级和依赖关系。
-
它促进了测试计划和测试策略的设计,并为回归测试计划提供了基础。
功能级测试分析:
-
目标是理解特定功能的需求,以设计有针对性的测试,以验证其正确性和完整性。
-
我们运用测试设计方法,并为特定的功能创建可交付成果,如测试用例、测试数据和所需的测试环境配置。
我们应该从产品测试分析开始,这将为进一步分析具体功能奠定基础。
产品级测试分析
产品级测试分析主要有三项活动:
-
分解——将系统分解为高级模块。
-
优先级 - 根据用户需求和业务目标确定系统功能的重要性。
-
依赖分析 - 识别系统中特性之间的关系。
第一阶段:分解
第一个活动是分解,这意味着将系统分解成更小的部分。除了帮助管理软件开发的复杂性外,它还有利于以下方面的测试过程:
-
增加我们对系统行为的理解。
-
促进测试计划、评估和跟踪工作。
-
提供评估测试覆盖率的功能。
-
提供执行依赖性分析的能力。
根据项目的具体需求和上下文,可以对项目进行不同层次的分解。分解层次包括:用例、网页/屏幕、模块、对象等。这些分解层次不是相互排斥的,而是相互补充的。例如,一个系统可以分解成几个用例,每个用例可能涉及多个网页。
一个常见的方法是在对象级别进行分解。对象代表系统中的实体,它们具有不同的参数(属性)和行为。
对于产品级别的测试分析,我们将分析对象和其行为。
让我们以 Slack 应用程序为例来看看产品分解的步骤。
步骤1:定义对象
这里有一些我们可以定义的对象:
系统中的所有功能都可以分解为对象吗?不,正如上面提到的,我们可以组合不同的分解级别。我们将使用Epic来描述其他功能,除了对象。一个Epic代表一个实质性的功能的集合。
步骤2:为每个对象定义行为
下一步是定义可以在对象上执行或由对象本身执行的操作。
步骤3:定义行为的替代方法
在系统中,执行相同的操作可以有不同的方式,这一点应该注意。
第二阶段:优先级
并非所有功能对用户来说都是同等重要的,列出优先级功能列表可以让我们:
-
开始测试更重要的功能,这样如果没有足够的时间测试所有功能,我们可以将不重要的功能排除在测试范围之外。
-
尽早发现更关键bug,并有足够的时间来修复它们,防止交付延迟。
-
创建不同的测试套件(例如,一个带有关键特性的冒烟测试,以及一个带有关键特性的回归测试)。
步骤4:为每个对象定义优先级
一种更高级的方法是为对象的每个行为也设置优先级。
第三阶段:依赖分析
系统中的大多数功能通常与其他功能有依赖关系。下一个重要步骤是依赖分析,这涉及到识别已定义对象之间的关系,理解它们如何相互作用。
依赖分析有助于:
-
识别系统中的相关功能,并确保在测试期间覆盖所有必要的场景。
-
识别特定功能的变更对其他相关功能的潜在影响。
-
评估现有缺陷对其他相关特性的潜在影响,并执行有针对性的测试以缓解此类风险。
依赖分析通常以矩阵的形式记录。矩阵由行和列组成,其中每一行和每一列代表一个对象(或用于分解的其他项目)。矩阵中的单元格表示它们之间的依赖关系。
所以,我们需要做的是,回顾我们的对象,思考它们是如何相互作用的,寻找任何依赖关系,例如:
-
函数依赖关系:一个对象依赖于另一个对象的输出或行为。
-
数据依赖性:一个对象需要来自另一个对象的特定数据。
步骤5:定义对象之间的依赖关系
这里是一个依赖分析矩阵的例子。
这是一个单向矩阵,只使用了一半的矩阵,其中绿色的单元格突出了项目之间的关系,额外的列或注释可以用来记录每个依赖项的细节。
一种更高级的方法是双向矩阵,它分析关系的两边,显示哪些项目依赖于其他项目,哪些项目被其他项目依赖。
列中顶部的项依赖于行中左边的项,相应地,行中的项影响列中的项。例如,我们可以看到 Messages 对象依赖于 Users、Workspaces、Channels,并影响 History 和 Search。
这种类型的矩阵提供了更全面的视图和详细的分析。单向和双向矩阵之间的选择取决于项目所需的详细程度,并推荐用于安全关键软件。
好的,我们已经完成了一阶段工作,现在已经为下一阶段的测试分析打下了坚实的基础。让我们回顾一下产品层面的测试分析思路。
产品级测试分析的所有活动都可以按照以下次序执行:
-
收集信息:
-
产品文档(需求、用户故事、用户手册等)。
-
产品本身(探索性测试)。
-
与产品经理、开发人员等沟通。
2. 可视化信息
-
可以使用不同的类型,如表格、思维导图、图表等。
3. 评审
-
与团队和利益相关者一起评审输出,以找到遗漏或不正确的信息,并进行适当的更正。
4. 保持更新
-
随着产品的演进,继续更新和维护文档,否则它将变得不值得努力,并很快过时和无用。
功能级测试分析
我们已经学习了产品级测试分析,现在,我们准备进一步研究功能级测试分析。
在功能级有三个主要的测试分析活动:
-
被测对象的分解。
-
测试设计 - 使用适当的测试设计技术创建测试用例。
-
依赖分析 - 定义测试特性与系统中其他特性之间的关系。
第一阶段:分解
对于产品测试分析,作为系统的高级分析,在分解过程中确定对象的动作就足够了,但是对于功能测试分析,我们需要进一步定义被测对象的参数。
参数是对象的属性或特征,它们定义了与该对象相关的特定条件、行为或配置。基本上,参数是作为输入的值,为特定操作提供所需的特定信息。
所以在这里,我们有以下分解顺序:
让我们以Slack为例,看看创建账户的功能。
步骤1:定义对象和动作
-
对象:用户
-
操作:创建账户
步骤2:定义动作的参数
要创建一个账户,用户需要提交一个具有以下参数的表单:
-
用户名
-
密码
-
电子邮件
每个参数都要求它应该接受什么值:
-
string
-
必传
-
默认
接下来,我们需要创建测试数据,以检查每个参数的不同值提交表单,以验证接受有效值并拒绝无效值。
步骤3:为每个参数定义测试数据
有大量的可能值可以检查,我们通常没有那么多时间来测试每个参数的所有可能值。相反,我们可以探索测试设计技术,以帮助定义一个有效的测试数据集。
第二阶段:测试设计
我们继续到下一个阶段——使用适当的测试设计技术创建测试用例。
对于测试数据验证,最常用的技术有以下几种:
-
等价性划分
-
边界值分析
-
组合测试
然而,测试输入验证并不是应该执行所有验证。我们所做的许多测试都涉及到测试用户界面下的业务逻辑。最核心要关注测试业务逻辑功能的方法:
-
状态转移测试
-
决策表
我将在下一篇介绍实践的文章中详细讨论上述测试设计方法。
测试设计方法有助于减少测试数量,同时保持高的测试覆盖率。然而,关于测试设计方法,有一些重要的注意事项需要记住:
-
没有一种完美的技术适用于所有情况。重要的是要了解每种技术的适用性和缺点,并能够为测试选择最合适的技术或技术集。
-
测试设计工作必须考虑优先级和平衡,以与风险等级和业务价值保持一致。
第三阶段:依赖分析
在 功能 层级,我们还需要进行依赖性分析,因为通常每个新特性都会与一些现有特性发生交互,因此我们需要找出这些交互和可能的依赖关系。
我们应该列出我们的对象(在产品测试分析阶段创建)逐个查看,并思考它是否与我们正在测试的功能交互。
让我们对 Slack 中的“发送消息”功能进行依赖性分析。
步骤1:找到对象
-
Channels:我们可以向Channel发送消息
-
Users:可以向一个用户和一组用户发送直接消息
步骤2:定义相关对象的状态
-
Channels:Active, Archived, Deleted
-
Users:Active, Archived, Deleted
步骤3:定义相关对象的参数
-
Channels: Public, Private
-
Users: 普通用户, 访客, 外部用户
现在,我就可以基于“发送消息”这个功能设计测试用例:
-
向channel发送消息:
- 不同的状态 (Active, Archived, Deleted)
- 不同的类型 (Public, Private) -
- 使用不同的类型(普通用户、访客、外部用户)
-
- 使用不同的类型(普通用户、访客、外部用户)
让我们在功能级别上回顾测试分析的步骤。
写在最后
测试分析可以从不同的层面进行:
-
产品级——对整个产品的高层次分析,是进一步进行功能级测试分析的基础。
-
功能级——详细分析产品中特定的功能,定义功能的测试范围并设计测试用例。
下面是测试分析级别及其活动的示意图:
拥有这样一个结构化和全面的测试分析带来了以下好处:
-
确保对产品的深入理解。
-
定义清晰完整的测试范围。
-
确保测试工作集中在关键功能和潜在的失败领域。
-
帮助实现最大测试覆盖率和最小冗余。
-
通过识别需求中的问题,为缺陷预防做出贡献。
-
有助于组织信息,减少Gap。
需要注意的是,测试分析不仅有利于测试团队,而且有利于整个项目团队。它鼓励所有团队成员之间的合作,并且测试分析文档作为团队内部参考、评审和知识转移的宝贵资源。
良好的测试分析过程为测试的整体有效性提供了充分的信心,并有助于交付高质量的软件。
行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 759968159,里面有各种测试开发资料和技术可以一起交流哦。
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。