Testing Q/A、发布版本与调试版本以及断言

Testing Q/A、发布版本与调试版本以及断言,testing,qa,Testing,Qa,只是好奇: 当您将软件版本发布到Q/A时,您喜欢始终使用“发布”版本,还是有时使用调试版本 这是我的难题: 我们喜欢使用断言来捕获不应该发生的条件 一方面,Q/A在启用断言的情况下测试我们的软件可能很有用,这样,如果他们能够创建触发断言的场景,他们就可以向我们报告 另一方面,开发人员编写断言的方式会改变代码的行为,这总是存在风险的。在这种情况下,Q/A应该在禁用断言的情况下测试构建 到目前为止,我们的Release版本上始终有Q/A操作,因为这是要发布的代码。然而,我正在考虑尝试一种模式,在这种

只是好奇:

当您将软件版本发布到Q/A时,您喜欢始终使用“发布”版本,还是有时使用调试版本

这是我的难题: 我们喜欢使用断言来捕获不应该发生的条件

一方面,Q/A在启用断言的情况下测试我们的软件可能很有用,这样,如果他们能够创建触发断言的场景,他们就可以向我们报告

另一方面,开发人员编写断言的方式会改变代码的行为,这总是存在风险的。在这种情况下,Q/A应该在禁用断言的情况下测试构建

到目前为止,我们的Release版本上始终有Q/A操作,因为这是要发布的代码。然而,我正在考虑尝试一种模式,在这种模式中,我们真正早期的Q/a版本将启用断言。然后,当我们接近发布时,我们将通知他们他们的构建已禁用断言


你们怎么看?

我们发布的版本带有调试符号,因此性能是正确的(大量使用调试输出和断言可能会降低速度),但如果出现异常,它们仍然会报告有意义的堆栈跟踪


对于异常,我们有一个一般的规则,只捕获我们知道如何处理的异常,这样,如果没有考虑到某个问题,它们就会在QA中弹出。我们公司一般禁止通吃。

我们向Q/A发布这两种产品,并在这两种产品上完成测试。如果您对自动化测试很感兴趣,那么这就成了一个需要额外硬件来运行测试的问题


必须测试发布版本,因为它们是实际客户使用的。调试版本包含附加的断言/验证/跟踪等,它们在发现不明显的错误时非常有用。

在早期开发阶段使用调试版本进行QA,然后切换到发布版本正是我们正在做的

我绝对主张QA不仅要审查发给客户的版本,还要审查一些中间版本,可能每两周或每月一次

这符合在开发过程中尽早检查您的产品的原则。如果你只是在发布一个版本的时候才这么做,那就太晚了

我会给他们调试构建,为那些早期测试启用断言。
如果在代码中有一个断言失败,那么就有一个错误。要么代码错误,要么断言错误。不管是哪种方式,您都希望QA对此进行测试。

我也早调试/晚发布;我以前的雇主的官方政策(有时违反,但不是我)是测试调试版本直到Beta版,然后发布版本。显然,在发布之前偶尔运行调试版本是值得的,但不幸的政治现实是,如果针对调试版本报告错误,许多程序经理将无法修复错误。

旁注:对于那些执行TDD的人,您是否发现单元测试消除了代码中断言的需要或好处?所谓的防御性编程在彻底使用时确实会使相当多的基本测试有些过时。仍然正确的TDD需要首先编写在这些情况下会出现异常的测试(如ArgumentOutOfRangeException等)。我同意防御性编程,我们当然会这样做--空检查范围检查等。但是,有些类型的检查成本很高,并涵盖只有我们的一个程序员犯了错误才可能发生的情况。我们喜欢在这些条件下使用资产。