你如何testing你的T-SQL?

你如何testing你的T-SQL? 你使用哪个库/工具?

unit testing涵盖的代码百分比是多less?如何测量? 你如何决定首先进行unit testing的模块?

你认为你在unit testing线束上花费的时间和精力是否已经得到了回报?

如果你不使用unit testing,你能解释为什么不呢?

你如何testing你的T-SQL? 你使用哪个库/工具?

看看这个TSQLUnit和这个tSQLt 。

我已经尝试过在很多语言中使用几个不同的框架来testingT-SQL,例如junit或者nunit。 我走这条路的原因是为了利用这些其他语言的丰富的testing环境。 例如,如果你使用nunit,它有一个很好的命令行和gui查看器来查看你的testing的状态,因为你使用.net编写你的testing,它很容易挂钩到sql server。 JUnit与许多商业和开源IDE环境(如NetBeans和IDEA)有很好的集成,使得T-SQLtesting更像Java代码testing,这非常丰富。 不利的一面是,你不仅在编写T-SQL,你还在编写java或.net来testing你的T-SQL。

我也用Rake(就像make或ant)一样使用Ruby,并且对sqlcmd执行系统调用来执行包含testing的sql脚本。 脚本返回值和string回ruby通过或不通过testing。 我最喜欢这种方法,因为它非常简单,容易让其他人接受。 上面提到的其他path要求开发者使用.net或Java,如果你有所有的DBAtypes可能很难克服的地方,与SQL脚本的ruby方法更容易销售从我的经验。 DBAtypes通常是开放的,并且能够像语言一样轻松地获取脚本,而Ruby的学习曲线很低,脚本相对于.net或java类很容易运行。

unit testing涵盖的代码百分比是多less?如何测量?

可能只有20%,只是因为大多数数据库系统在创build时都没有为他们创buildtesting,所以我正在积极地增加testing和添加testing,因为出现了新的缺陷和增强。

你认为你在unit testing线束上花费的时间和精力是否已经得到了回报?

数据库是大多数企业的面包和黄油。 在我看来,这总是有回报的。 如果您的企业容忍客户的垃圾和高故障率,那么没有testing可能是不值得的,因为它不是免费的。

如果你不使用unit testing,你能解释为什么不呢?

我会很乐意看到有没有人提出这个不荒唐的答案。 有点像你为什么不把孩子放在汽车的座位上呢?“他们花费太多了……”“花太多时间把孩子放进去”“他没有这个安全“”什么地方可能会出错“..”没有足够的时间“所有这些都是bs。

是的,我也许知道一点点极端,但是如果你有一个系统,并且它给公司带来了价值,那么它应该被联合testing,以帮助在产品问题出现之前解决一些问题。 unit testing不是万能的,但它是我们必须尽我们所能做的一个工具。

总的来说,大多数人在结构化testing时都会给予数据库一个免费的通行证。 我不知道这是为什么,但我已经在公司后看到它。 我很乐意看到这种变化。

对于一个unit testing工具,我已经在DBFit上获得了最大的成功。

我从来没有find一个测量TSQLtesting覆盖率的工具。

在接受设置testing的过程中存在一定程度的痛苦之后,我发现一旦项目的复杂程度达到微不足道的水平,我就可以通过unit testing来提高代码的质量。

像常规代码一样,T-SQL中的一些事情必须以不同的方式进行testing。 如果代码生成大量静态事物(如触发器或视图),则通常testing负载较轻。

我们特定的系统在T-SQL中几乎完全编码。

你如何testing你的T-SQL? 你使用哪个库/工具?

我们已经知道了比较好的结果。 在我们的月度分析运行中,我们逐月比较并运行,以了解代码和数据更改的影响。 我们的主要工具是一个存储过程,将比较两个表/视图/子集,并确定差异(与阈值选项)。

unit testing涵盖的代码百分比是多less?如何测量?

我们根据历史行为validation大多数stream程中产生的数据。 当根据业务需求进行代码更改时,会执行影响分析,比较两次运行的输出。 当数据不符合期望/configuration(在可能的情况下,模式中的约束)时,我们也很大程度上依赖于exception报告来预先确定。

你认为你投入unit testing线束的时间和精力是否得到了回报?

如果你不使用unit testing,你能解释为什么不呢?

我们的unit testing是在我们的每个“stream程”层面。 每个进程通常对应于单个存储过程 – 所以这是我们testing的单元。 比较最终的输出将对应于系统testing。

我们最近从T-SQL单元切换到Visual Studio 2010unit testing框架。 最大的抱怨是我们需要在testing中pipe理自己的事务范围,以便为下一个testing保留数据库“干净”。 这是T-SQL单元在开始时提供的。

我们的目标是100%覆盖我们的存储过程。 它使我们能够根据需要更改底层表结构和关系,而不必完全与开发locking(我们有独立的数据和开发团队)。 我们还没有开始测量testing覆盖率。 我们正在用这个技术堆栈开发我们的第一个生产部署。 对于我们来说,应用程序和数据之间的接口是存储过程。 首先,我们build立足够的存储过程来满足应用程序团队的需求,然后一旦签名变得足够稳定以便持续集成,那么我们将构build我们的unit testing。 我们想要做TDD,但是我们有一个截止date,使得这不是一个实际的select。

我们还没有测量投资回报率,但经验告诉我们,生产数据库的变化成本非常高。