Testing 我们是否应该总是复制bug来验证修复?

Testing 我们是否应该总是复制bug来验证修复?,testing,qa,Testing,Qa,有时我们会在生产中遇到bug,这些bug可以通过更改配置、禁用部分逻辑等方式修复 我和我的经理争论过,我们应该在本地复制bug,以确保修复工作正常进行,更重要的是,这样开发人员和QA可以将这些情况的检查作为常规版本的一部分 我的经理认为这是浪费时间,因为解决方案有效,因此没有必要在本地复制 因此: 我们是否应该尝试在本地复制以验证修复? 如果你同意我的观点,有没有关于如何向我的经理推销这一点的建议?我非常相信在经济上可行的情况下复制bug(例如,不只是为了复制环境而将某个用户的整个硬盘复制到本地

有时我们会在生产中遇到bug,这些bug可以通过更改配置、禁用部分逻辑等方式修复

我和我的经理争论过,我们应该在本地复制bug,以确保修复工作正常进行,更重要的是,这样开发人员和QA可以将这些情况的检查作为常规版本的一部分

我的经理认为这是浪费时间,因为解决方案有效,因此没有必要在本地复制

因此: 我们是否应该尝试在本地复制以验证修复?
如果你同意我的观点,有没有关于如何向我的经理推销这一点的建议?

我非常相信在经济上可行的情况下复制bug(例如,不只是为了复制环境而将某个用户的整个硬盘复制到本地机器上)

bug的不幸本质是,修复bug的方法通常只有一种,但有许多方法可以掩盖它,而且许多修复实际上掩盖而不是修复。您可能永远也找不到根本原因,因此该错误会再次出现,或者稍后会出现另一个看似不同的错误


如果你能找到一个发生这种情况的例子(例如,来自同一根源的两个不相关的bug),你可能会赢得老板的支持。

必须在本地复制bug的最重要原因是确保在修复它时没有弄坏任何其他东西。如果修复只是一个配置或任何不需要重新编译的东西,那么这个参数就没有那么强大了,因为编译的任何东西都应该已经过测试


如果您的经理不明白这一点,那么除了向他展示实际案例,说明修复一个bug实际上会导致一些问题,这会导致比在本地复制bug更严重的延迟之外,您没有什么办法说服他。

  • 您可能会在修复过程中无意中引入新的bug
  • 您不能100%确定修复程序在没有测试的情况下确实修复了bug(可能在最简单的情况下除外)

使您的所有测试可以在任何时候重新播放,而无需付出任何额外的努力。是一种非常常见的测试自动化,涉及到测试每个最小的部分。

测试驱动开发背后的基本原则是,您有一个测试,它演示了一些特性

在本例中,您创建了一个测试来演示该bug。测试失败了


你修复了这个错误。考试通过了。和所有其他测试一样。实际上,您已经修复了该错误,但没有产生其他问题。

我认为这一问题的答案取决于您如何测试您的错误

  • 您是否使用自动测试工具(如xUnit框架、Fit/Fitnesse等)
  • 您是否使用自动构建过程
  • 这个自动构建过程是否调用测试并记录结果
除非以上所有问题的答案都是肯定的,否则合并检查以验证错误修复是否已经发生将是乏味和痛苦的。也很难说服经理花时间进行这些检查,因为他们总是会说“我们没有足够的人力资源来做这件事”

如果您在自动化解决方案上投入了一些时间,那么将这些测试添加到构建过程中是不需要动脑筋的,因为解决任何bug的第一步应该是创建一个测试,该测试无论如何都会在本地重现问题


对于我的项目,我们使用subversion进行源代码控制,Jira进行活动管理,Hudson进行构建,Fitnesse和MSTest进行测试。所有这些都通过持续集成连接在一起。Fitnesse进行验收测试,MSTest进行单元测试,每次执行构建时,它们都会自动运行,为我们提供构建“良好”程度的定量指标。

如果您没有重现该缺陷,您的“修复”只不过是猜测而已

虽然说单元测试是解决方案,如果你使用它们听起来不错,你就不必重现bug,但我认为它在现实世界中不起作用。事实上,他们并没有在网站上复制这个bug,这意味着复制可能不是微不足道的。这可能意味着来源很复杂。如果问题在单元测试中表现得微不足道,那么该单元测试将是bug的复制品。如果他们没有复制它,他们可能无法为它编写简单的单元测试


如果你没有复制这个bug,你就不会真正理解它。您可能在系统中发现了一个bug,但这并不保证您已经找到了客户看到的bug


如果你不能复制这个bug,你就不能确定它是否真的被修复了。您可能只是在治疗问题的症状,而不是核心问题。客户可能对同一个核心问题有不同的看法,他们的问题不会得到解决。

我发现不复制错误来解决问题的想法非常奇怪

毕竟,除非你能重现问题,否则你无法确定问题出在哪里。到那时为止,这只是猜测(即使消息灵通,也只是猜测)

现在,您是否进行单元测试,我认为与本次讨论无关,因为可复制性只是一个问题,您是否发现了bug?。如果您正在测试错误的东西,在一些错误的假设下工作,或者只是误解了(可能是模糊的)关于实际发生的错误的报告,那么单元测试将不会帮助您


这就是你重现问题的原因。

是的,如果可能/可行;请参见

该缺陷的性质也有疑问:

  • 可以通过单元测试快速复制缺陷吗?如果是这样,开发修复程序的开发人员应该编写单元测试,将其集成到更完整的回归套件中。这确保了将来的工作不会重新引入缺陷

  • 缺陷能被消除吗