了解什么是测试数据以及如何为测试准备测试数据:
在当前信息和技术革命性增长的史诗中,测试人员通常会在软件测试生命周期中经历大量的测试数据消耗。
测试人员不仅从现有来源收集/维护数据,而且还生成大量测试数据,以确保他们在交付产品以供实际使用时的质量蓬勃发展。?
因此,作为测试人员,我们必须不断探索、学习和应用最有效的方法来为任何类型的功能和非功能测试进行数据收集、生成、维护、自动化和综合数据管理。
在本教程中,我将提供有关如何准备测试数据的提示,以免因数据不正确和测试环境设置不完整而遗漏任何重要的测试用例。
什么是测试数据及其重要性
参考 IBM 在 2016 年进行的一项研究,搜索、管理、维护和生成测试数据占据了测试人员 30%-60% 的时间。不可否认的证据表明,数据准备是软件测试的一个耗时阶段。
图 1:测试人员在 TDM 上花费的平均时间
尽管如此,事实上,大多数数据科学家将 50%-80% 的模型开发时间用于组织数据,这是许多不同学科的事实。测试人员在测试过程中的参与度非常高。
今天,测试数据的可信度和可靠性被认为是企业主不可妥协的要素。产品所有者将测试数据的幻影副本视为最大的挑战,这会在客户对质量保证的需求/要求的这个独特时期降低任何应用程序的可靠性。
考虑到测试数据的重要性,绝大多数软件所有者在安全措施上不接受带有虚假数据或更少数据的测试应用程序。
说到这里,我们为什么不回想一下什么是测试数据?
当我们开始编写测试用例以验证和验证测试下的应用程序的给定功能和开发场景时,我们需要用作输入的信息来执行测试以识别和定位缺陷。
我们知道这些信息需要准确和完整才能排除错误。这就是我们所说的测试数据。为了使其准确,它可以是姓名、国家/地区等,不敏感,其中有关联系信息、SSN、病史和信用卡信息的数据本质上是敏感的。
数据可以是任何形式,例如:
- 系统测试数据
- SQL测试数据
- 性能测试数据
- XML 测试数据
如果您正在编写测试用例,那么您需要为任何类型的测试输入数据。测试人员可以在执行测试用例时提供该输入数据,或者应用程序可以从预定义的数据位置挑选所需的输入数据。
数据可以是应用程序的任何类型的输入、应用程序加载的任何类型的文件或从数据库表中读取的条目。
准备正确的输入数据是测试设置的一部分。通常,测试人员将其称为测试平台准备。在测试平台中,所有软件和硬件要求都使用预定义的数据值进行设置。
如果您在编写和执行测试用例时没有构建数据的系统方法,那么可能会遗漏一些重要的测试用例。测试人员可以根据测试需要创建自己的数据。
不要依赖其他测试人员创建的数据或标准生产数据。始终根据您的要求创建一组新数据。
有时不可能为每个构建创建一组全新的数据。在这种情况下,您可以使用标准生产数据。但请记住在此现有数据库中添加/插入您自己的数据集。创建数据的一种最佳方法是使用现有的样本数据或测试平台,并在每次获得相同的测试模块时附加新的测试用例数据。通过这种方式,您可以在此期间构建全面的数据集。
测试数据采集挑战
测试人员考虑的测试数据生成领域之一是子集的数据来源要求。例如,你有超过一百万的客户,你需要一千个客户进行测试。并且这个样本数据应该是一致的,并且在统计上代表了目标群体的适当分布。换句话说,我们应该找到合适的人来测试,这是测试用例最有用的方法之一。
并且这个样本数据应该是一致的,并且在统计上代表了目标群体的适当分布。换句话说,我们应该找到合适的人来测试,这是测试用例最有用的方法之一。
此外,在此过程中还存在一些环境限制。其中之一是映射 PII 策略。由于隐私是一个重大障碍,测试人员需要对 PII 数据进行分类。
测试数据管理工具旨在解决上述问题。这些工具根据它们拥有的标准/目录建议策略。尽管如此,这并不是非常安全的运动。它仍然提供了审计一个人正在做什么的机会。
为了跟上应对当前乃至未来挑战的步伐,我们应该始终提出诸如何时/何地开始实施 TDM 之类的问题?什么应该自动化?公司应分配多少投资用于人力资源持续技能开发和使用更新的 TDM 工具领域的测试?我们应该从功能测试还是非功能测试开始测试?更有可能的问题是他们。
下面提到了测试数据采购的一些最常见的挑战:
- 团队可能没有足够的测试数据生成器工具知识和技能
- 测试数据覆盖率往往不完整
- 在收集阶段涵盖体积规格的数据要求不太明确
- 测试团队无权访问数据源
- 开发人员延迟向测试人员提供生产数据访问权限
- 基于开发的业务场景,生产环境数据可能无法完全用于测试
- 短时间内可能需要大量数据
- 数据依赖/组合来测试一些业务场景
- 测试人员与架构师、数据库管理员和 BA 沟通收集数据所需的时间比所需时间多
- 大多数数据是在测试执行期间创建或准备的
- 多个应用程序和数据版本
- 跨多个应用程序的连续发布周期
- 保护个人身份信息 (PII) 的立法
在数据测试的白盒一侧,开发人员准备生产数据。这就是 QA 需要与开发人员接触的地方,以进一步扩大 AUT 的测试覆盖范围。最大的挑战之一是将所有可能的场景(100% 测试用例)与每个可能的负面案例结合起来。
在本节中,我们讨论了测试数据挑战。您可以添加更多挑战,因为您已经相应地解决了它们。随后,让我们探索处理测试数据设计和管理的不同方法。
测试数据准备策略
我们通过日常实践知道,测试行业的参与者不断体验不同的方式和方法来加强测试工作,最重要的是提高成本效率。在信息和技术发展的短期过程中,我们已经看到当工具被纳入生产/测试环境时,输出水平大大提高。
当我们谈论测试的完整性和全覆盖时,主要取决于数据的质量。由于测试是获得软件质量的支柱,因此测试数据是测试过程中的核心元素。
图 2:测试数据管理 (TDM) 策略
根据映射规则创建平面文件。从开发人员设计和编码应用程序的生产环境中创建所需数据的子集总是可行的。事实上,这种方法减少了测试人员准备数据的工作量,并且最大限度地利用了现有资源,避免了进一步的支出。
通常,我们需要根据每个项目一开始的需求类型来创建数据或至少识别数据。
我们可以应用以下策略来处理 TDM 的过程:
- 生产环境数据
- 检索从客户现有数据库中提取数据的 SQL 查询
- 自动化数据生成工具
测试人员应通过考虑此处图 3 中所示的元素,用完整的数据来支持他们的测试。敏捷开发团队中的其他人员生成执行测试用例所需的数据。当我们谈论测试用例时,我们指的是各种类型的测试用例,例如白盒、黑盒、性能和安全性。
在这一点上,我们知道用于性能测试的数据应该能够确定系统在给定工作负载下的响应速度有多快,以非常接近真实或实时的大量覆盖范围的数据。
对于白盒测试,开发人员准备他们所需的数据以覆盖尽可能多的分支、程序源代码中的所有路径以及否定的应用程序接口 (API)。
图 3:测试数据生成活动
最终,我们可以说在软件开发生命周期 (?SDLC?) 中工作的每个人,如 BA、开发人员和产品所有者,都应该很好地参与测试数据的准备过程。这可以是共同努力。现在让我们带您了解测试数据损坏的问题。
损坏的测试数据
在对现有数据执行任何测试用例之前,我们应该确保数据没有损坏/过时,并且被测应用程序可以读取数据源。通常,当多个测试人员同时在测试环境中处理 AUT 的不同模块时,数据损坏的可能性非常高。
在相同的环境中,测试人员根据他们对测试用例的需要/要求修改现有数据。大多数情况下,当测试人员完成数据时,他们将数据保持原样。一旦下一个测试人员获取修改后的数据,并且他/她执行另一次测试,就有可能出现该特定测试失败,而不是代码错误或缺陷。
在大多数情况下,这就是数据损坏和/或过时的方式,从而导致故障。为了避免和最大限度地减少数据差异的可能性,我们可以应用以下解决方案。当然,您可以在本教程末尾的评论部分添加更多解决方案。
- 备份您的数据
- 将修改后的数据恢复到原始状态
- 测试人员之间的数据划分
- 随时更新数据仓库管理员以了解任何数据更改/修改
如何在任何测试环境中保持数据完整?
大多数情况下,许多测试人员负责测试相同的构建。在这种情况下,将有多个测试人员访问公共数据,他们将尝试根据自己的需要操作公共数据集。
如果您为某些特定模块准备了数据,那么保持数据集完好无损的最佳方法是保留相同的备份副本。
性能测试用例的测试数据
性能测试需要非常大的数据集。有时手动创建数据不会检测到一些细微的错误,这些错误可能只能由被测应用程序创建的实际数据捕获。如果您需要手动创建无法创建的实时数据,请让您的主管/经理在实时环境中提供这些数据。
此数据将有助于确保所有有效输入的应用程序顺利运行。
什么是理想的测试数据?
如果以最小的数据集大小来识别所有应用程序错误,则数据可以说是理想的。尝试准备包含所有应用程序功能的数据,但不要超出准备数据和运行测试的成本和时间限制。
如何准备数据以确保最大的测试覆盖率?
考虑以下类别来设计您的数据:
1) 无数据:在空白或默认数据上运行测试用例。查看是否生成了正确的错误消息。
2) 有效数据集:创建它以检查应用程序是否按要求运行,有效输入数据是否正确保存在数据库或文件中。
3) 无效数据集:准备无效数据集以检查负值、字母数字字符串输入的应用程序行为。
4)非法数据格式:制作一组非法数据格式。系统不应接受无效或非法格式的数据。此外,检查是否生成了正确的错误消息。
5) 边界条件数据集:包含超出范围数据的数据集。确定应用边界情况并准备涵盖上下边界条件的数据集。
6)性能、负载和压力测试的数据集:这个数据集应该是大容量的。
通过这种方式为每个测试条件创建单独的数据集将确保完整的测试覆盖率。
黑盒测试数据
质量保证测试人员执行集成测试、系统测试和验收测试,这被称为黑盒测试。在这种测试方法中,测试人员在被测应用程序的内部结构、设计和代码方面没有任何工作。
测试人员的主要目的是识别和定位错误。通过这样做,我们使用不同的黑盒测试技术应用功能或非功能测试。
图 4:黑盒数据设计方法
此时,测试人员需要测试数据作为执行和实施黑盒测试技术的输入。测试人员应准备数据,以在不超过给定成本和时间的情况下检查所有应用程序功能。
我们可以考虑数据集类别,如无数据、有效数据、无效数据、非法数据格式、边界条件数据、等价分区、决策数据表、状态转换数据和用例数据,为我们的测试用例设计数据。在进入数据集类别之前,测试人员开始对被测应用程序 (AUT) 的现有资源进行数据收集和分析。
根据前面提到的有关保持数据仓库始终最新的观点,您应该在测试用例级别记录数据需求,并在编写测试用例脚本时将它们标记为可用或不可重用。它可以帮助您测试所需的数据从一开始就被很好地清除和记录,您可以参考以供以后进一步使用。
开放式 EMR AUT 的测试数据示例
对于我们当前的教程,我们将 Open EMR 作为被测应用程序 (AUT)。
=> 请在此处找到Open EMR 应用程序的链接以供您参考/练习。
下表说明了几乎可以作为测试用例文档的一部分的数据需求收集示例,并在您为测试场景编写测试用例时进行更新。
创建用于测试 Open EMR 应用程序的手动数据
让我们继续创建手动数据,以针对给定的数据集类别测试 Open EMR 应用程序。
1) 无数据:测试人员在不提供数据的情况下验证 Open EMR 应用程序 URL 和“搜索或添加患者”功能。
2)?有效数据:测试人员通过提供有效数据来验证 Open EMR 应用程序 URL 和“搜索或添加患者”功能。
3) 无效数据:测试人员通过提供无效数据验证 Open EMR 应用程序 URL 和“搜索或添加患者”功能。
4)?非法数据格式:测试人员通过提供无效数据验证 Open EMR 应用程序 URL 和“搜索或添加患者”功能。
1-4 个数据集类别的测试数据:
5)?边界条件数据集:将给定值之内或之外的边界的输入值确定为数据。
6) Equivalence Partition Data Set:它是将你的输入数据划分为有效和无效输入值的测试技术。
测试数据为5个和6个数据组类别,其是用于打开EMR用户名和密码:
7) 决策表数据集:这是一种通过输入组合来限定数据以产生各种结果的技术。这种黑盒测试方法可帮助您减少验证每个测试数据组合的测试工作量。此外,此技术可以确保您获得完整的测试覆盖率。
请参阅下面有关 Open EMR 应用程序的用户名和密码的决策表数据集。
上表中完成的组合计算针对您的详细信息进行了描述,如下所示。当您进行四种以上的组合时,您可能需要它。
- 组合数量=条件 1 值的数量 * 条件 2 值的数量
- 组合数 =?2 ^ 真/假条件数
- 示例:组合数 – 2^2 = 4
8) 状态转换测试数据集:它是一种测试技术,通过向系统提供输入条件来帮助您验证被测应用程序 (AUT) 的状态转换。
例如,我们在第一次尝试时通过提供正确的用户名和密码登录 Open EMR 应用程序。系统允许我们访问,但如果我们输入错误的登录数据,系统会拒绝访问。状态转换测试验证在 Open EMR 关闭之前您可以进行多少次登录尝试。
下表显示了正确或错误的登录尝试如何响应
9)?用例测试日期:它是识别我们的测试用例的测试方法,它捕获特定功能的端到端测试。
示例,打开 EMR 登录:
另请阅读 =>数据数据管理技术
良好测试数据的属性
作为测试人员,您必须测试大学网站的“考试结果”模块。考虑到整个应用程序已经集成并且处于“准备测试”状态。“考试模块”与“注册”、“课程”和“财务”模块相关联。
假设您有足够的关于应用程序的信息,并且您创建了一个完整的测试场景列表。现在您必须设计、记录和执行这些测试用例。在测试用例的“操作/步骤”或“测试输入”部分,您必须提及可接受的数据作为测试的输入。
必须正确选择测试用例中提到的数据。测试用例文档的“实际结果”栏的准确性主要取决于测试数据。因此,准备输入测试数据的步骤非常重要。因此,这是我对“数据库测试——测试数据准备策略”的总结。
测试数据属性
测试数据要准确选取,必须具备以下四个品质:
1)真实:
通过现实,这意味着数据在现实生活场景中应该是准确的。例如,为了测试“年龄”字段,所有值都应为正且 18 或以上。很明显,大学录取的候选人通常是 18 岁(这可能在业务要求方面有不同的定义)。
如果使用真实的测试数据来完成测试,那么它将使应用程序更加健壮,因为大多数可能的错误都可以使用真实的数据来捕获。真实数据的另一个优点是它的可重用性,它可以节省我们一次又一次地创建新数据的时间和精力。
当我们谈论现实数据时,我想向您介绍黄金数据集的概念。黄金数据集几乎涵盖了真实项目中发生的所有可能场景。通过使用 GDS,我们可以提供最大的测试覆盖率。我使用 GDS 在我的组织中进行回归测试,这有助于我测试如果代码进入生产框可能发生的所有可能的场景。
市场上有很多测试数据生成工具可以分析数据库中的列特征和用户定义,并基于这些为您生成真实的测试数据。DTM 数据生成器、SQL 数据生成器和Mockaroo是为数据库测试生成数据的工具的几个很好的例子。
2. 有效:
这与现实相似但又不一样。此属性与 AUT 的业务逻辑更相关,例如值 60 在年龄领域是现实的,但对于毕业甚至硕士课程的候选人实际上无效。在这种情况下,有效范围是 18-25 年(这可能在要求中定义)。
3. 通用,多功能以涵盖场景:
一个场景中可能有多个后续条件,所以要精明地选择数据,以最少的数据集覆盖单个场景的最大方面,例如在为结果模块创建测试数据时,不要只考虑普通学生的情况正在顺利完成他们的计划。关注重复同一门课程、属于不同学期甚至不同课程的学生。数据集可能如下所示:
编号 | 学生卡 | 程序_ID | 课程_ID | 年级 |
1 | BCS-Fall2011-Morning-01 | BCS-F11 | CS-401 | 一种 |
2 | BCS-Spring2011-Evening-14 | BCS-S11 | CS-401 | 乙+ |
3 | MIT-Fall2010-Afternoon-09 | MIT-F10 | CS-401 | 一种- |
… | … | … | … | … |
可能还有其他几个有趣且棘手的子条件。例如,完成学位课程的年限,通过注册课程的先决课程,最多没有。学生可以在一个学期内注册的课程数量等等。确保使用有限的数据集明智地涵盖所有这些场景。
4. 特殊数据(如果适用/需要):
可能存在某些发生频率较低但需要高度关注的特殊情况,例如与残疾学生相关的问题。
异常数据集的另一个很好的解释和示例如下图所示:
如果测试数据真实、有效且通用,则称为良好的测试数据。如果数据也提供了对特殊情况的覆盖,这是一个额外的优势。
测试数据准备技术
我们已经简要讨论了测试数据的重要属性,还详细说明了在进行数据库测试时测试数据选择的重要性。现在让我们讨论“准备测试数据的技术”。
准备测试数据的方法只有两种:
方法#1)插入新数据
获取一个干净的数据库并插入测试用例中指定的所有数据。一旦输入了所有需要和想要的数据,开始执行测试用例并通过比较“实际输出”和“预期输出”来填充“通过/失败”列。听起来很简单,对吧?但是等等,事情没那么简单。
以下是一些基本和关键的问题:
- 数据库的空实例可能不可用
- 插入的测试数据可能不足以测试某些情况,例如性能和负载测试。
- 由于数据库表的依赖性,将所需的测试数据插入到空白 DB 中并不是一件容易的事。由于这种不可避免的限制,数据插入可能成为测试人员的一项艰巨任务。
- 插入有限的测试数据(仅根据测试用例的需要)可能会隐藏一些只有在?大数据集才能发现的问题。
- 对于数据插入,可能需要复杂的查询和/或程序,为此需要 DB 开发人员提供足够的帮助或帮助。
上述五个问题是该技术用于测试数据准备的最关键和最明显的缺点。但是,也有一些优点:
- 由于 DB 只有所需的数据,因此 TC 的执行变得更加高效。
- 错误隔离不需要时间,因为数据库中只存在测试用例中指定的数据。
- 测试和结果比较所需的时间更少。
- 无杂波测试过程
方法#2)从实际数据库数据中选择样本数据子集
这是一种可行且更实用的测试数据准备技术。但是,它需要良好的技术技能,并且需要对 DB Schema 和 SQL 有详细的了解。在此方法中,您需要通过将某些字段值替换为虚拟值来复制和使用生产数据。这是您测试的最佳数据子集,因为它代表生产数据。但由于数据安全和隐私问题,这可能并非始终可行。
在上一节中,我们已经讨论了上面的测试数据准备技术。简而言之,有两种技术——创建新数据或从现有数据中选择一个子集。两者都需要以所选数据为各种测试场景提供覆盖的方式完成,主要是有效和无效测试、性能测试和空测试。
在最后一节中,让我们也快速浏览一下数据生成方法。当我们需要生成新数据时,这些方法很有用。
测试数据生成方法:
- 手动测试数据生成:在这种方法中,测试数据由测试人员根据测试用例要求手动输入。这是一个耗时的过程,也容易出错。
- 自动化测试数据生成:这是在数据生成工具的帮助下完成的。这种方法的主要优点是它的速度和准确性。但是,它比手动生成测试数据的成本更高。
- 后端数据注入:这是通过 SQL 查询完成的。这种方法还可以更新数据库中的现有数据。它快速高效,但应该非常小心地实施,以免现有数据库遭到破坏。
- 使用第三方工具:市场上有一些工具可以先了解您的测试场景,然后相应地生成或注入数据以提供广泛的测试覆盖率。这些工具是准确的,因为它们是根据业务需求定制的。但是,它们的成本相当高。
测试数据生成有 4 种方法:
- 手动的,
- 自动化,
- 后端数据注入,
- 和第三方工具。
每种方法都有其优点和缺点。您应该选择满足您的业务和测试需求的方法。
结论
创建符合行业标准、立法和所承担项目的基线文件的完整软件测试数据是测试人员的核心职责之一。我们越有效地管理测试数据,就越能为现实世界的用户部署合理的无错误产品。
测试数据管理 (TDM) 是基于挑战分析和引入并应用最佳工具和方法来很好地解决已识别问题而不影响最终输出(产品)的可靠性和全面覆盖的过程。
我们总是需要提出问题来寻找创新且更具成本效益的方法来分析和选择测试方法,包括使用生成数据的工具。广泛证明,精心设计的数据使我们能够在多阶段 SDLC 的每个阶段识别被测应用程序的缺陷。
我们需要具有创造力并与敏捷团队内外的所有成员一起参与。请分享您的反馈、经验、问题和意见,以便我们继续进行技术讨论,通过管理数据最大限度地提高我们对 AUT 的积极影响。
准备合适的测试数据是“项目测试环境设置”的核心部分。我们不能简单地错过测试用例,说完整的数据不可用于测试。除了现有的标准生产数据之外,测试人员还应该创建他/她自己的测试数据。您的数据集在成本和时间方面应该是理想的。
要有创意,用自己的技能和判断力创建不同的数据集,而不是依赖标准的生产数据。
第二部分-本教程的第二部分是在“测试数据生成与GEDIS工作室在线工具”。
您是否遇到过测试数据不完整的问题进行测试?你是怎么处理的??请分享您的提示、经验、评论和问题,以进一步丰富这一讨论主题。
文章来源:https://www.softwaretestinghelp.com/tips-to-design-test-data-before-executing-your-test-cases/#Properties_of_a_Good_Test_Data
369 thoughts on “什么是测试数据,如何为测试准备测试数据”