不测试一项功能还可以吗?


12

您是否在任何时候都对语言/数据库/系统如此熟悉,从而无需测试新功能/配置/查询/等。在系统中实施之前进行了包含/模拟的测试(特别是涉及修改数据的功能)?还是在测试环境中通过仿真测试新查询总是必不可少的吗?

为了进一步说明,很显然,测试始终是最安全的。但是,是否有办法确定何时风险很小,以至于不值得进行测试?措辞的另一种说法是:什么时候或曾经有专业的实践来承担实施功能的风险?

另外,我们假设所有内容都已备份,因此,在最坏的情况下,可以轻而易举地恢复数据。

有人可以引用特定的专家经验来解决此问题吗?请在适当/可能的地方提供参考。

Answers:


10

首先,我想说的是我做的所有事情都是SQL Server,所以这些就是我给出的示例。但是总的来说,这适用于任何形式的代码,而与系统无关。

让我们首先将其分解。

升级版

您有一个系统,并且即将升级部分或全部系统。例如,将实例从SQL Server 2012升级到2014。此时,测试是必不可少的。不幸的是,即使是小型应用程序的每个部分也可能无法测试。到那时,我将进行所谓的“工作”测试。基本系统是否正常运行。完成您的常见任务开始。不要测试所有选项,而只是测试主路径。

在进行SQL Server升级时,还需要阅读一些内容。基本上,您想阅读Backward Compatibility新版本的条目(这是2014版),并确保任何列表中都没有任何内容(重大更改,行为更改等)。

申请代码

在这里,我们正在研究新的/更改的应用程序代码(因为现有的任何东西都已经过测试,对吗?)。在这种情况下,应进行所有测试。您应该提前设置测试用例,并至少通过大多数受影响的功能来运行。最好此时,您还应该让其他人进行类似的检查。该代码可能会存在很长时间,并且会被大量人使用。您想确保它能正常工作。

真正有助于解决问题的一件事就是生成一组unit tests易于重复的内容。 史蒂夫·琼斯(Steve Jones)建议使用tSQLt来测试您的TSQL代码(恐怕只有SQL Server)。但是通过这样做,您可以快速进行一组固定的测试,这确实有助于回归测试(测试所有内容,例如在升级之前进行测试)。

功能/配置

您不仅要对应用程序代码进行更改,还希望彻底测试新功能和配置更改。例如,如果您决定开始使用列存储索引第一次,您将需要测试涉及受影响表的每段代码。使用生成的单元测试来测试应用程序。这些功能可能对您来说是新功能(可能是平台中的新功能),并且可能会有一些您没有想到的陷阱。至于配置更改,您所谈论的是可能会影响整个系统的事情。经验法则是测试,并仔细测试。在进入活动系统(可能只有生产系统)之前,您不会真正看到一些更改,但这不是没有在测试环境中首先尝试它们的借口。

引用/影响用户数据的临时查询

如果您有影响用户数据的代码,则通常需要对其进行测试,甚至可能是因为Ad Hoc。话虽这么说,如果您一次又一次地运行同一段代码,只是使用不同的参数,那么您可能不必担心每次测试。

例如,您需要每季度从AdList表中删除一个或多个广告。

DELETE FROM AdList WHERE AdName IN ('January 2015 Ads','February 2015 Ads','March 2015 Ads')

到那时,您已经测试了代码(您只是在更改固定的字符串),并且仅运行代码就可能相当安全(假设您有很好的备份以防万一)。

一个简单的方法来测试DELETEUPDATE或者INSERT是将其更改为一个SELECT和运行它们,然后确认你所期望的行数和类型返回。

您可能会认为您不需要测试SELECTs,因为它们实际上并未更改任何数据。但是,您运行代码的原因是对的吗?假设您正在为经理做研究,经理将把这些数据交给他们的经理,依此类推。您进行测试以确保您没有收到错误的数据(或阻止其他人收集其数据)。

引用/影响系统数据的临时查询

这可能是“测试一切”规则的一个例外。您正在对系统数据运行信息查询。这里重要的是取回您期望的数据。如果查询很简单(查询系统视图),那么只要检查了视图/列的真正含义,您就可以了。如果查询很复杂(例如打3或4个系统视图,并在返回的列上进行计算),则您可能需要运行一些测试,以确保可以取回期望的数据。

摘要

总之,是的,您想测试所有内容。如果对您来说编写和运行它足够重要,那么对您进行测试就足够重要。但是,这并不意味着您必须花费大量时间来测试每一行代码的每个分支。但是需要进行一些测试。

自动化单元测试是您的朋友。随着的到来DevOpsContinuous Integration你会看到越来越多的应用和快速,方便地测试你的代码的方法。当然,这确实需要具有良好的测试环境和数据,但这是一个完全不同的讨论。


4

我知道您的感觉,我使用MySQL已有3年的时间,就我而言,我总是测试DML查询,这些查询可以修改或破坏每个表/数据库/从属复制上的任何信息。

在运行查询之前,这始终是最安全的测试方法。

无法知道您的查询是否会使您的数据信息面临风险。唯一的方法是了解数据库的结构和配置,因此您可以轻松地确定一个查询何时会使您的敏感数据处于危险状态或没有危险。

DELETE,,上UPDATE,如果不确定要更改的信息,INSERT则应始终先尝试使用SELECT。在选择时,对于条件,请始终尝试使用与列数据类型相同的数据类型,在某些情况下EXPLAIN用于优化。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.