译自:Test Data Management: What is Test Data and How to Design It
测试数据设计与管理指南(Part -I):
在目前信息与技术革命性增长史上,测试者通常在软件测试生命周期中经历大量的测试数据消耗。
测试人员不仅收集/维护现有来源的数据,而且还生成大量测试数据,以确保其在实际使用中提供产品的质量繁荣。
因此,我们作为测试人员必须不断探索,学习和应用用于数据收集,生成,维护,自动化和全面数据管理的最有效的方法进行任何类型的功能和非功能测试。
什么是测试数据,为什么重要
参考IBM在2016年进行的一项研究,搜索,管理,维护和生成测试数据占测试人员时间的30%-60%。 不可否认的证据表明,数据准备是软件测试的耗时阶段。
然而,在许多学科中,大多数数据科学家花费50%-80%的模型开发时间来组织数据。现在考虑到立法以及个人身份信息(PII),使测试人员在测试过程中准备数据时更耗费时间。
今天,测试数据的可靠性和可靠性被认为是企业所有者的一个毫无妥协的元素。产品所有者将测试数据的幽灵拷贝(CC先生说:这里指的是对真实数据的模拟)作为最大的挑战,在客户的质量保证要求/要求的这个独特时刻降低了任何应用的可靠性。
考虑到测试数据的重要性,绝大多数软件所有者不接受带有假数据的测试应用程序或更少的安全措施。
在这一点上,为什么我们不去记录测试数据到底是什么呢?当我们开始编写测试用例以验证和验证测试中应用程序的给定功能和开发场景时,我们需要用作输入的信息来执行用于识别和定位缺陷的测试。
我们知道,这些信息需要精确和完整才能使错误发生。这就是我们所说的测试数据。为了使其准确,可以是名称,国家等不敏感的信息,其中联系信息,SSN,病史和信用卡信息的这类数据本质上是敏感的。
数据可能采取以下形式:
- 系统测试数据
- SQL测试数据
- 性能测试数据
- XML测试数据
如果您正在编写测试用例,则需要输入任何类型的测试数据。测试者可以在执行测试用例时提供该输入数据,或者应用程序可以从预定义的数据位置中选择所需的输入数据。
数据可以是应用程序的任何类型的输入,应用程序加载的任何种类的文件或从数据库表读取的条目。
准备正确的输入数据是测试设置的一部分。
一般来说,测试人员称之为测试台准备。在测试平台中,使用预定义的数据值设置所有软件和硬件要求。
如果在编写和执行测试用例时没有建立数据的系统方法,那么有可能丢失一些重要的测试用例。测试人员可以根据测试需求创建自己的数据。
不要依赖其他测试人员或标准生产数据创建的数据。始终根据您的要求创建一组新的数据。
有时无法为每个构建创建一组全新的数据。在这种情况下,您可以使用标准生产数据。但请记住在现有数据库中添加/插入自己的数据集。创建数据的最佳方式是使用现有的样本数据或测试平台,并在每次获得相同的测试模块时追加新的测试用例数据。这样,您可以在此期间构建全面的数据集。
测试数据来源的挑战
测试数据生成中的一个领域,测试人员认为是子集的数据采购要求。例如,您拥有超过一百万个客户,您需要一千个客户进行测试。该样本数据应该是一致的,统计学上表示目标群体的适当分布。换句话说,我们应该找到合适的人来测试,这是测试用例的最有用的方法之一。
该样本数据应该是一致的,统计学上表示目标群体的适当分布。换句话说,我们应该找到合适的人来测试,这是测试用例的最有用的方法之一。
此外,在这个过程中有一些环境限制。其中一个是映射PII策略。由于隐私是一个重大障碍,测试者需要对PII数据进行分类。
测试数据管理工具旨在解决上述问题。这些工具建议基于他们拥有的标准/目录的政策。虽然这不是很安全的运动。它仍然提供审计工作的机会。
为了跟上当前和未来的挑战,我们应该总是提出问题,如何时/哪里开始进行TDM?什么应该是自动化的?公司在进行人力资源开发和使用更新的TDM工具方面应该投入多少投资?我们应该开始功能测试还是进行非功能测试?更有可能是他们的问题。
测试数据采购的一些最常见的挑战如下:
- 团队可能没有足够的测试数据生成工具知识和技能
- 测试数据覆盖率通常不完整
- 在收集阶段,数据要求不太清楚,涵盖卷规格
- 测试团队无法访问数据源
- 开发人员延迟了测试人员访问生产环境数据的时间
- 基于开发的业务场景,生产环境数据可能不能完全用于测试
- 给定时间的短时间内可能需要大量的数据
- 数据依赖/组合来测试一些业务场景
- 与建筑师,数据库管理员和BAs进行通信以便收集数据时,测试人员需要花费更多的时间
- 大多数数据是在执行测试期间创建或准备的
- 多个应用程序和数据版本
- 多个应用程序的持续发布周期
- 需要照顾个人身份信息(PII)的立法
在白盒方面进行数据测试,开发人员准备生产数据。这就是QA需要与开发人员一起工作的基础,以进一步测试AUT的覆盖范围。最大的挑战之一是将所有可能的情况(100%测试用例)与每个可能的负面情况相结合。
在本节中,我们讨论了测试数据的挑战。您可以根据相应的解决方案来增加更多挑战。随后,我们来探讨处理测试数据设计和管理的不同方法。
测试数据准备策略
我们通过日常实践知道,测试行业的参与者不断经历不同的方式和手段来加强测试工作,最重要的是其成本效益。 在信息和技术演进的短期过程中,我们已经看到工具何时被纳入到生产/测试环境中,产量水平大幅增加。
当我们谈论测试的完整性和全面覆盖时,主要取决于数据的质量。 由于测试是实现软件质量的骨干,测试数据是测试过程的核心要素。
根据映射规则创建数据文件。从开发人员设计和编码应用程序的生产环境中创建所需数据的子集始终是实用的。实际上,这种方法减少了测试人员在数据准备方面的努力,并最大限度地利用现有资源来避免进一步的支出。
通常,我们需要创建数据,或至少根据每个项目在一开始所要求的类型进行识别。
我们可以应用以下策略来处理TDM的过程:
- 来自生产环境的数据
- 检索从客户端现有数据库中提取数据的SQL查询
- 自动数据生成工具
测试人员应通过考虑 下图 所示的元素,用完整的数据进行测试。敏捷开发团队中的测试人员会生成执行测试用例的必要数据。当我们讨论测试用例时,我们的意思是像白盒子,黑盒子,性能和安全性等各种测试类型的情况。
在这一点上,我们知道用于性能测试的数据应该能够确定系统在给定工作负载下的响应速度与实际或实际大量数据的覆盖范围非常接近。
对于白盒测试,开发人员准备所需的数据以覆盖尽可能多的分支,程序源代码中的所有路径以及消极的应用程序接口(API)。
最终,我们可以说,像软件开发生命周期(SDLC),像BAs(CC先生说,BA就是需求分析人员),开发商和产品所有者一样,每个人都应该很好地参与测试数据准备过程。它可以是一个共同的努力。现在让我们来介绍一下损坏的测试数据的问题。
损坏的测试数据
在我们利用现有的数据执行任何测试用例之前,我们应该确保数据没有被破坏/过时,并且测试中的应用程序可以读取数据源。通常情况下,当测试环境中同一个AUT的不同模块上工作的测试人员不止一次时,数据被破坏的可能性非常高。
在相同的环境中,测试人员根据测试用例的需求/要求修改现有数据。大多数情况下,当测试人员完成数据时,他们会保留数据。一旦下一个测试仪拿起修改的数据,并且他/她执行另一个测试执行,就有可能出现这种不是代码错误或缺陷的特定测试失败。
在大多数情况下,这是数据如何被破坏和/或过时,导致失败。为了避免和最小化数据差异的机会,我们可以应用以下解决方案。
- 备份您的数据
- 将修改的数据恢复到原始状态
- 测试人员之间的数据划分
- 保持数据仓库管理员的更新,以进行任何数据更改/修改
如何在任何测试环境中保持数据的完整性?
大多数时候,许多测试人员负责测试相同的构建。在这种情况下,多个测试人员将可以访问常见的数据,并会根据自己的需要尝试操作公共数据集。
如果您已准备好某些特定模块的数据,则保持数据集完整的最佳方法是保留备份副本。
(CC先生说,在测试的时候,经常会出现因为误删除了同事需要操作的数据而产生的流血事件,保持自己测试数据独立的方法有多种,比如给自己的测试数据加标识-谁动我的数据死**等等,或者自己创建一个单独的测试数据库)
性能测试用例的测试数据
性能测试需要非常大的数据集。有时手动创建数据将不会检测到只能被被测试应用程序创建的实际数据所捕获的一些细微错误。如果您想要实时数据,这是不可能手动创建的,请让您的主管/经理从现场环境中提供。
该数据将有助于确保所有有效输入的应用程序顺利运行。
什么是理想的测试数据?
数据可以说是理想的,如果最小尺寸的数据设置所有的应用程序错误才能被识别出来。尝试准备将包含所有应用程序功能的数据,但不要超过准备数据和运行测试的成本和时间限制。
如何准备确保最大测试覆盖率的数据?
设计您的数据考虑以下类别:
1)无数据:以空白或默认数据运行测试用例。查看是否生成正确的错误消息。
2)有效数据集:创建它以检查应用程序是否按照要求运行,有效的输入数据被正确保存在数据库或文件中。
3)无效的数据集:准备无效数据集以检查负值(字母数字字符串输入)的应用程序行为。
4)非法数据格式:制作一组非法数据格式的数据。系统不应接受无效或非法格式的数据。另外,检查是否生成正确的错误消息。
5)边界条件数据集:包含超出范围数据的数据集。识别应用边界条件并准备覆盖较低和上限条件的数据集。
6)性能,负载和压力测试数据集:该数据集体积应大。
这样,为每个测试条件创建单独的数据集将确保完整的测试覆盖。
黑盒测试数据
质量保证测试人员进行集成测试,系统测试和验收测试,这被称为黑盒测试。在这种测试方法中,测试人员在测试中的内部结构,设计和应用代码方面没有任何工作。
测试人员的主要目的是识别和定位错误。通过这样做,我们应用功能或非功能测试,使用不同的黑盒测试技术。
在这一点上,测试者需要测试数据作为执行和实施黑匣子测试技术的输入。测试人员应准备数据,检查所有应用功能,不超过给定的成本和时间。
考虑到无数据,有效数据,无效数据,非法数据格式,边界条件数据,等效分区,决策数据表,状态转换数据和用例数据等数据集类别,我们可以设计数据。数据集类别,测试者开始数据收集和分析测试者(AUT)下的应用程序的现有资源。
根据前面提到的关于保持数据仓库始终是最新的要点,您应该在测试用例级别记录数据需求,并在脚本测试用例时将其标记为可用或不可重用。它帮助您测试所需的数据从一开始就清楚清楚并记录在案,您可以在以后参考进一步的使用。
**(打开EMR AUT的测试数据示例
对于我们当前的教程,我们将Open EMR作为被测应用程序(AUT)。
(上面的链接就是练习的系统,你也可以参看下面的图片,登录后就进入到以下的界面,刚开始的登录界面就是一个用户名 admin和密码 pass)
下表显示了几个可以作为测试用例文档的一部分的数据需求收集示例,并在为测试场景编写测试用例时进行了更新。
创建用于测试的手动数据打开EMR应用程序
我们向前推进创建用于测试给定数据集类别的开放式EMR应用程序的手动数据。
1)否数据:测试者验证打开EMR应用程序URL和“搜索或添加患者”功能,不提供任何数据。
2)有效数据:测试人员验证开放EMR应用程序URL和“搜索或添加患者”功能,并提供有效数据。
3)无效数据:测试人员验证打开EMR应用程序URL和“搜索或添加患者”功能,提供无效数据。
4)非法数据格式:测试程序验证打开EMR应用程序URL和“搜索或添加病人”功能,提供无效数据。
1-4数据集类别的测试数据:
5)边界条件数据集:将给定值的内部或外部的边界的输入值确定为数据。
6)等效分区数据集:将输入数据划分为有效和无效的输入值的测试技术。
测试数据为第5和第6个数据组类别,用于打开EMR用户名和密码:
7)决策表数据集:它是通过输入组合对资料进行排序的技术,以产生各种结果。 这种黑匣子测试方法可帮助您在验证测试数据的每个组合时减少测试工作。 此外,这种技术可以确保您进行完整的测试覆盖。
请参阅下面的打开EMR应用程序用户名和密码的决策表数据集。
下表详细说明了上表完成的组合计算。 当您进行超过四种组合时,您可能需要它。
组合数=条件数1值*条件数2值
组合数= 2 ^真/假条件数
示例:组合数 - 2 ^ 2 = 4
8)状态转换测试数据集:它是通过向系统提供输入条件来帮助您验证被测应用(AUT)的状态转换的测试技术。
例如,我们首次尝试提供正确的用户名和密码登录Open EMR应用程序。 系统为我们提供访问权限,但如果我们输入不正确的登录数据,系统将拒绝访问。 状态转换测试会验证在打开EMR关闭之前可以执行多少登录尝试。
下表显示正确或不正确的登录尝试如何响应
9)场景法测试数据:这是测试方法,用于识别捕获特定功能的端到端测试的测试案例。
示例,打开EMR登录:
结论
创建完整的软件测试数据符合行业标准,立法和所承担项目的基准文件是测试人员的核心职责之一。我们越有效地管理测试数据,我们越能够为真实用户部署合理的无bug产品。
测试数据管理(TDM)是基于挑战分析和引入加上应用最佳工具和方法来处理已识别问题的过程,而不会影响最终产出(产品)的可靠性和全面覆盖。
我们总是需要提出挑战,寻找创新和成本效益更高的方法来分析和选择测试方法,包括使用工具来生成数据。众所周知,精心设计的数据使我们能够在多相SDLC的每个阶段中识别测试中的应用缺陷。
我们需要具有创意,并与我们敏捷团队内外的所有会员一起参与。请分享您的反馈,经验,问题和意见,以便我们继续进行技术讨论,以最大限度地发挥对AUT的积极影响,通过管理数据。
准备适当的测试数据是“项目测试环境设置”的核心部分。我们不能简单地错过测试案例,说完整的数据不可用于测试。测试者应根据现有的标准生产数据创建自己的测试数据。您的数据集在成本和时间上应该是理想的。
具有创造性,使用自己的技能和判断来创建不同的数据集,而不是依靠标准生产数据。
CC先生说,整篇文章对于不知道该怎么办准备测试数据的人来说应该是一个思路,根据它的步骤,相信大家对测试数据如何准备的问题有更深刻的理解。它里面所提到的测试数据其实也就是平时我们所谈到的测试用例的设计方法。