测试本质上是一种降低不确定性的反馈,通过将测试分类为“已知-未知组合四象限”,团队可以更好地理解系统行为,并解决知识上的空白。
测试通常被简化为二元分类——手动测试与自动化测试、通过与失败。然而,这些局限性忽略了测试的一个更深层次的目的:减少我们对系统行为的不确定性。从这种二元视角转向将测试视为反馈,会改变我们对软件系统中质量和风险的看法。
那么,我们如何将测试视为反馈来减少对系统行为的不确定性呢?
已知-未知矩阵
我们可以将测试分为四类:
- 已知的已知
- 已知的未知
- 未知的已知
- 未知的未知
矩阵中的每个层次需要不同的反馈技术,重点从确认现有知识转移到发现新的见解。
已知的已知
已知的已知是我们对系统行为确信无疑的事情。这些是我们高度确定并且可以通过定期和反复测试来确认的内容。
反馈方法
- 任何形式的自动化代码测试
- 例如,单元测试、契约测试、通过TDD创建的测试、自动化UI测试等,都是基于你希望在测试中确认的内容。
- 大多数类型的脚本化测试
- 例如,脚本化的功能测试通常鼓励执行脚本的人严格按照描述的步骤进行。
- 任何类型的警报系统
- 通常由你使用的实时监控工具提供,但警报都是基于你希望了解的系统情况。你无法被提醒到那些你不知道可能发生的事情。
这里的反馈技术通常是基于我们已经知道并希望确认的内容。它们通常遵循“快乐路径”。除非某种方式影响了测试/警报的路径,否则这些反馈技术在告诉你偏离测试/警报意图的情况时效果较差。
未知的已知
未知的已知是系统的某些部分被用于非预期用途的情况。这些不是问题,但用户正在以你最初未预料的方式使用你的软件系统来实现某个目标。这些用例可能是你希望其他用户知道以增加使用量的功能,或者是你可能希望停止的功能,因为这可能导致你的组织对用户的行动负责。
反馈方法
- 可观察性工具
- 可以帮助你实时探索用户如何使用系统。
- 用户反馈
- 通过官方和非官方渠道,例如社交媒体或新闻报道。
- 终端用户访谈
- 主动与用户交流,询问你的系统如何帮助他们完成任务。
这里的反馈技术通常是开放式的,直到事件或行动发生之前,你无法预测响应或结果。
已知的未知
已知的未知是我们对系统行为不确定的区域。我们认为这些区域可能存在问题,但只有在实际操作后才能知道。
反馈方法
- 某些类型的脚本化测试
- 例如,回归测试和冒烟测试通常是基于你对系统行为的了解,并且你希望证明该行为没有退化。
- 基于风险的测试
- 通常集中在系统变更区域的手动测试。这种测试可以是脚本化的,也可以是更开放式的探索性测试(参见探索性测试)。
- 探索性测试
- 基于测试人员的知识和领域经验对系统的开放式探索。它通常比脚本化测试更快地发现软件系统中的问题,因为不需要设计脚本的准备时间。
- 分阶段系统发布
- 例如,特性标志、蓝绿部署、金丝雀发布等,允许团队逐步向用户推出新功能,并检查其是否按预期运行。
- 监控工具
- 可以提供关于实时系统行为的信息,通常与分阶段发布技术结合使用。
- 任何形式的实验
这里的反馈技术是我们可以预测可能发生但不确定结果的技术。大多数情况下,它们倾向于确认我们的假设,但有时也会检测到系统行为的新问题。
未知的未知
未知的未知是我们系统中的潜在问题——这些问题我们甚至不知道可能会成为问题,或者在特定条件下才会显现出来。
反馈方法
- 可观察性
- 允许团队探索实时系统行为的工具。
- 用户反馈
- 通过官方和非官方渠道,例如社交媒体或新闻报道。
- 探索性测试
- 参见已知的未知。
- 生产环境中的缺陷
这里的反馈技术看起来与已知的未知非常相似。关键区别在于,它们的多样性允许测试人员根据自己的判断探索系统中的不同途径。而已知的未知通常专注于预定的测试结果。
如何使用已知-未知矩阵测试
我喜欢将这个模型可视化,不是用2x2矩阵,而是线性地分为三个类别:已知的已知、已知的未知和未知的未知。为了简化起见,我通常会省略未知的已知,有些团队也将其合并到未知的未知中。
当你将这个网格线性可视化时,你可以看到每个类别之间的关系。我发现这种线性可视化有助于理解反馈如何从未知(不确定)的空间转移到已知(确定)的空间。同时,这也解释了为什么你需要多种反馈形式来揭示系统中的不同信息。仅仅依赖几种类型的反馈(通常是自动化测试和用户反馈)可能会使你面临更大的质量风险,这些风险可能在工程团队完全不知情的情况下溜走,直到有人告诉他们存在问题,或者更糟糕的是,被恶意行为者利用。
线性可视化的示例
1. 已知的已知
- 这些是我们对系统行为确信无疑的事情。
- 反馈方法:自动化代码测试、脚本化测试、警报系统等。
- 已知的未知
- 这些是我们对系统行为不确定的区域,但我们知道可能存在潜在问题。
- 反馈方法:回归测试、冒烟测试、基于风险的测试、探索性测试、分阶段系统发布、监控工具、实验等。
- 未知的未知
- 这些是系统中的潜在问题,我们甚至不知道它们可能存在。
- 反馈方法:可观察性工具、用户反馈、探索性测试、生产环境中的缺陷等。
为什么需要多种反馈形式
- 从不确定到确定:通过多种反馈形式,我们可以逐步将未知的问题转化为已知的问题,从而更好地理解和管理系统的风险。
- 全面覆盖:仅依赖少数几种反馈形式(如自动化测试和用户反馈)可能会遗漏重要的问题。多样化的反馈形式可以帮助我们发现更多潜在的风险和问题。
- 及时响应:多种反馈形式可以让我们更快地发现问题,并及时采取措施,避免问题恶化或被恶意利用。
通过这种方式,我们可以更有效地管理和减少系统中的不确定性,提高软件的质量和安全性。
测试未知的未知有助于人们认识到,测试不仅仅是确认某个功能通过或失败,而是众多反馈技术中的一种。反馈有助于减少对软件系统行为的不确定性。将测试视为减少不确定性的一种手段,可以促使人们思考它减少了哪种类型的不确定性以及为什么这很重要。
将不确定性分为四个象限——从已知的已知到未知的未知——有助于人们认识到他们在软件系统知识上的空白。每个象限都提醒团队思考其他方法来增加对系统的了解,并检查他们是否充分利用了现有的资源。测试未知的未知帮助团队采用实践,使工作系统更健康,以实现他们期望的结果,同时减少不期望的结果。
往期系列文章