Database 为什么没有关于测试数据库一致性的信息?Can';我在这件事上找不到任何资源

Database 为什么没有关于测试数据库一致性的信息?Can';我在这件事上找不到任何资源,database,testing,Database,Testing,大约一年前,我发现在我正在从事的一个大数据类型项目上测试数据库一致性/状态非常有用。我后来将此技术应用于其他更一般的应用程序,并发现它同样重要。我试着在谷歌上搜索数据库测试,结果发现大部分文章都在谈论单元测试存储过程,我本来希望看到专门针对这一主题的书籍,但却没有找到一篇文章。我想知道我是不是在寻找一些已经存在但以另一个名字为人所知的东西 让我用几个例子来解释我所说的数据库测试: 通过验证已应用的业务逻辑规则(数据库检查约束对它们可以执行的内容有限制),测试您的数据库是否处于无效状态。 A.您有

大约一年前,我发现在我正在从事的一个大数据类型项目上测试数据库一致性/状态非常有用。我后来将此技术应用于其他更一般的应用程序,并发现它同样重要。我试着在谷歌上搜索数据库测试,结果发现大部分文章都在谈论单元测试存储过程,我本来希望看到专门针对这一主题的书籍,但却没有找到一篇文章。我想知道我是不是在寻找一些已经存在但以另一个名字为人所知的东西

让我用几个例子来解释我所说的数据库测试:

  • 通过验证已应用的业务逻辑规则(数据库检查约束对它们可以执行的内容有限制),测试您的数据库是否处于无效状态。 A.您有一个标志和/或值列表,某些组合无效。e、 g.A银行 余额为-500或更少的帐户必须具有“NOTINGOODSTANDING”状态。如果存在余额为-500.1的用户帐户,并且该帐户的信誉良好,则出现问题。 B测试值是否在一定范围内,例如价格是否为非负值。虽然我们可以通过检查约束消除这种可能性,但数据库可能不支持检查约束,或者它可能是一个从未设置过该约束的遗留数据库
  • *如果您的程序验证了这些条件,为什么要测试这些因素?这些验证规则可能由于错误、另一个应用程序修改数据、有人直接在服务器上运行错误的sql脚本,或者您的数据库被运行sql注入的恶意用户修改而被绕过

  • 测试可能重复的值(例如重复的客户、订单等)

  • 验证部分/不完整的数据,例如,如果您的系统允许插入部分数据,因此您有一个缺少数据(如电子邮件地址)的客户列表,则您希望在发送大量电子邮件之前验证所有客户是否输入了电子邮件地址(如果没有,也许可以与数据录入人员交谈,看看他们为什么遗漏了一些)

  • 名单还在继续,但希望这能给出一个基本的想法

    请注意,这些测试纯粹是信息性的,而不是预防性的,它们只是告诉您什么时候可能出了问题


    其他人是否在这些类型的测试中发现了任何价值?这已经是一种公认的做法了吗?

    我不清楚这与集成测试有什么不同。如果您想追溯确保数据“一致”,也不清楚您要做什么根据你的应用程序的规则,你可以让其他东西进入并破坏数据,然后你需要检查读写的有效性,并让一些东西不断地在数据库中扫描基本上所有的数据,并确保它始终保持正确,因为不是每一条数据都会被定期触摸。Seems就像您得到的一样,因为可能存在其他数据修改源(其他应用程序、恶意用户等)我们确实需要定期扫描以确保数据与业务规则一致。这可以是每晚检查,也可以是周末检查,具体取决于数据库的大小。我从来没有在文章或书中听说过这样的概念,我只是想知道为什么。因为如果你允许任意数据扫描,而你把它搞砸了,那是你自己的错。胖-通常不允许在管理员级别对生产数据进行指认。根据您真正谈论的内容,实际操作可能需要几天时间。这与其他所有操作一样,都有投资回报率,一般来说,我认为这样的操作会有相当低的回报率。YMMV。这取决于您假设只有一个系统就位。想象一个场景,其中有多个不同的系统与相同的数据交互。您以前可能没有构建过任何这些系统,但验证数据库是否一致并将继续保持一致可能仍然很重要。另一个问题是安全性,如果数据库检查以某种方式破坏了系统ing系统可能会捕捉到这种情况。不,我明确表示“您可以让其他东西进入并破坏数据”和“任意数据挖掘”.如果是这种情况,我认为您不应该直接操纵数据,但应该让所有操纵都通过一个强制执行有效性的服务进行。如果您一直等到DB层检测到安全漏洞,那就太晚了,而且您的安全操作是错误的。就我的系统涉及多个参与者的历史而言,我认为在我使用过的一些系统中,玩家的数量肯定超出了任何合理的范围。