【问题标题】:How do you ensure the same bug does not creep into the product the second time?您如何确保相同的错误不会第二次潜入产品?
【发布时间】:2009-07-10 18:10:44
【问题描述】:

我知道简短的回答是通过测试,但您仍然如何进行测试?您是修改您的测试用例以将错误包含为额外的测试用例来运行,还是您只是验证错误跟踪系统中从最旧版本到最新版本的所有错误。

感谢您的回答。看来我的问题不清楚。 我知道我们需要编写错误报告,修复错误并进行测试以进行修复验证。但是,该测试应该在哪个测试阶段进行,以便在下一个版本发布期间,我们肯定会再次重新运行测试,以确保没有新的更改重新引入错误。它应该进行回归测试还是应该针对特定项目进行集成测试,还是我们应该只测试自 1.0 版以来的错误跟踪系统中的所有错误?

【问题讨论】:

    标签: testing qa release-management software-quality


    【解决方案1】:

    您创建了一个重现问题的自动化测试。然后解决问题,并确保新测试和所有现有测试仍然通过。


    这应该是回归测试,并且应该尽可能自动化。

    【讨论】:

    • 进一步说明:许多开发/测试团队将在日常/正式构建上运行所谓的回归测试 - 本质上是测试以确保代码没有“回归”到之前修复错误的状态又出现了。很多时候会通过自动化测试的方式来实现,但是有些团队有很长的文档,里面装满了手动运行的测试用例。显然,如果您可以摇摆,自动化是必经之路。
    【解决方案2】:

    当您发现错误时,您需要做的第一件事是进行单元测试来演示该错误。当你修复它时你会知道,因为测试通过了。您可以避免回归它,因为该测试会突然失败。

    【讨论】:

    • 谢谢。你说“你可以避免回归它,因为那个测试会突然失败”是什么意思?
    • 如果您在应用程序中进行了会导致重新引入错误的更改,则下次运行单元测试(应该经常)时,您为此错误添加的测试将失败,并发出警告你去回归。
    【解决方案3】:

    你说“你是 防止回归它,因为 那个测试会突然失败。”?

    “单元测试”的重点是它们将作为编译/检查周期的一部分自动运行:您将在编译之后和签入代码之前运行测试。如果单元测试失败,那么您知道您刚刚编写的一些代码会重现旧的错误。

    编辑:

    你怎么能这么肯定 因为你的单元测试通过了所有 您的错误已修复。

    通常,如果您可以重现错误,则可以进行测试以在代码中复制它。最重要的部分是,一旦您编写了一个测试来检查是否存在错误,然后如果您运行测试,并且测试失败,那么您重新引入了该错误。关于这个主题的一本好书是"Working Effectively with Legacy Code"

    一个bug不可能 跨越多个单元测试。

    当然它可以跨越多个测试。

    假设错误是“无法保存文件”。

    我们假设有几种不同的情况会导致这种情况:

    • 磁盘空间不足,

    • 你在上面写的文件是 被另一个进程打开和锁定,

    • 存在权限问题(如 您无法访问该目录,或者 没有写权限),

    • 或者在 您正在保存文件。

    理想情况下,您的测试工具(一组测试)应针对每个测试工具进行单独的测试。对于某些测试,您可能需要使用称为“模拟对象”的东西(当您还没有为组件编写代码时也可以使用它们)。

    【讨论】:

    • bug和单元测试是一一对应的吗?单个错误不可能跨越多个单元测试。你怎么能确定仅仅因为你的单元测试通过了你的所有错误都已经修复了。
    • msvcyc:当所有测试都通过时,您无法确定没有错误,但可以确定测试检测到的错误都不存在。 (您编写测试的政策以及您的测试实际检测到的错误是另一回事。)
    【解决方案4】:
    1. 获取错误报告
    2. 编写测试用例重现错误报告
    3. 修复错误
    4. 享受不必再次修复该错误的乐趣

    【讨论】:

      【解决方案5】:

      系统中的“错误”只是某些功能单元无法正常工作。通过创建涵盖功能单元的单元测试,您可以知道该工作单元的错误是否再次出现。现在,如果您编写额外的单元测试来测试在类似情况下可能会失败的其他功能领域,您将获得更多覆盖。

      说单元测试只是答案的一部分。为这个错误添加一个测试用例也有助于防止它发生,但不幸的是,它会在开发生命周期的后期进行,而且修复成本更高。

      【讨论】:

        【解决方案6】:

        作为 QA,您需要预测因某些修复而受到影响的区域。尽管强烈建议在每次冻结后回归整个构建,但对应用程序进行彻底的测试。

        如果这是一个长期项目并且您手头有时间,那么自动化测试是一个很好的做法,但是如果项目是在短时间内以敏捷模型开发并且需求不断变化,那么请使用手动进行测试尽量覆盖。

        【讨论】:

          【解决方案7】:

          根据您提出的问题,您可以以不同的方式解决问题。 从开发人员的角度来看,最好使用适当的单元测试检查自 1.0(或更早版本)以来的所有错误,并让它即使使用 CI 也能运行。当变得非常麻烦时,尝试将其分组,每次构建都会运行的基本测试,有些是一天一次,一周休息一次(或其他)。

          从 QA/测试的角度来看,这需要更多的努力。

          1. 为应用准备回归套装。主要业务流程/用例,快乐的道路。让它成为你的基线。在任何情况下都必须失败的一组测试。始终在发布之前或进行重大更改时、进行许多更改时、修改关键部分时运行它。努力使其自动化(这次我不是在谈论单元测试,而是完整的应用程序测试)。
          2. 而不是为应用程序领域创建回归测试套装。比以前的套装更多的测试,但每个回归套装都专注于不同的应用领域。当您更改应用程序的一部分时,请针对该部分运行回归。它可以实现自动化,但很难为经常变化的区域维护测试。
          3. 教育您的 QA 团队在开始对某些需求/功能进行测试时查看错误存储库。如果它们看起来相关,他们应该检查以前的错误。

          请记住,您必须小心回归测试、测试自动化,并希望检查 1.0 版中的所有错误。也许应用程序自 1.0 版以来发生了很大变化,以至于一些错误不再相关?在基于旧错误构建回归测试时应考虑到这一点。

          【讨论】:

            猜你喜欢
            • 2021-10-20
            • 1970-01-01
            • 2014-08-29
            • 2021-02-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-05-25
            • 2022-07-26
            相关资源
            最近更新 更多