【问题标题】:Self Testing Tips? [closed]自测技巧? [关闭]
【发布时间】:2009-09-27 22:48:54
【问题描述】:

基本上,我想知道是否有人有任何提示可以确保您的代码在有限的时间内得到很好的测试,而无需其他人的任何帮助?

在过去,我总是能够找到其他人对我的代码进行测试,或者让专门的质量保证团队检查所有内容并找出所有错误。

我通常很小心,但我总是会发现一些我想念的东西,而当我测试它们时,我就是看不到它们。

但是,在我目前的工作中,我被要求在非常有限的时间内编写两个 PHP Web 应用程序,并且我被告知我需要自己进行所有测试,尽管我的反馈是这不是一个好主意.

我想知道是否有其他人以前遇到过这个问题并且可以提供一些见解?

我在想,在对每个区域进行编码之前编写一个快速测试计划并在进行测试之前仔细检查需求可能会很好。

【问题讨论】:

    标签: testing testing-strategies


    【解决方案1】:

    当然,单元测试,无论是否先测试,都应该是您的第一道防线,确保您的应用程序的每个部分都按照您认为的方式工作。但是,您正在谈论的测试类型(可能有助于获得另一双眼睛)更多的是在验收测试领域-整个应用程序是否按应有的方式工作?它是否适用于各种奇怪的场景或行为等?

    一种有用的方法是想象角色:首先以您自己的身份测试应用程序,然后再次测试它,假设您已经 85 岁了,视力不太好,而且鼠标使用得不好。你可能倾向于点击最亮或最大的东西,假设它是你应该做的,但它可能不是。现在想象一下,你 12 岁,并且非常匆忙。你绝对不会阅读说明。还能用吗?

    对于任何给定的字段,一个人可能输入的内容的边缘情况是什么?如果只输入空格会发生什么?只有数字进入文本字段?如果你输入 HTML 会发生什么? Javascript?非西方字母表中的东西?如果你输入的东西真的很长怎么办?

    关键不只是测试“快乐路径”,即用户按照您所想的方式浏览应用程序。以任何人都不应该的方式浏览应用程序。因为……他们会的。

    另一个重要的部分是永远不要忽视任何事情。很容易出现一个奇怪的屏幕并对自己说“哦,这只是侥幸”。你必须让自己注意到并追查所有不应该如此的事情。

    【讨论】:

    • 我喜欢这个答案提出了一些我没有想到的想法,让我想了更多。我想我也会把一些常见的配置放在一起,比如 I.E.和 Firefox,没有 Javascript。另外我想在我开始测试我自己的代码之前,我会对其他一些随机的互联网站点进行快速测试,只是为了让我的头脑进入一个测试框架。
    【解决方案2】:

    您可以进行多少测试总是有限制的。在约束范围内,您显然需要构建测试。显然,您希望首先针对最关键的领域(安全性、损坏可能性、数据丢失、功能)构建测试。

    除了功能规范之外,您不太可能获得大量手动帮助来决定测试什么。但是您可以通过测试覆盖工具的形式获得自动化帮助。这些工具告诉你你测试了哪些代码,以及你没有测试过哪些代码。通过检查未经测试的代码,您可以确定它是否或多或少是关键的,因此或多或少值得在发布之前对其进行编码测试。测试覆盖率工具还告诉您测试代码与总代码的比率,这是确保该比率为 70% 或更高的行业最佳实践。您可以使用这些数据通过一个简单的技巧与您的老板协商更多时间:“我们只有 15% 的测试覆盖率......我们敢发布它吗?”

    可在此处找到适用于 PHP 的测试覆盖率工具: Semantic Designs PHP Test Coverage Tool

    【讨论】:

      【解决方案3】:

      我认为 TDD 正是您想要的。 首先编写测试,然后编写通过测试的代码。除了您之外,您不需要任何其他人(不过,建议您在测试方面提供一些帮助),并且即使在开始编码之前,您也会更清楚地了解该工具应该做什么。

      http://en.wikipedia.org/wiki/Test-driven_development

      【讨论】:

        【解决方案4】:

        您的雇主显然不认为测试很重要。你应该辞职找份合适的工作。

        【讨论】:

        • 我真的认为告诉人们做好他们的工作是不明智的。
        【解决方案5】:

        我不想这么说,但我认为在你的情况下 Alex Tingle 是对的。这是不可能的情况。

        JacobM 和 Santi 在提到单元测试、验收测试和测试驱动开发方面是正确的。我会在该列表中添加代码覆盖率和静态分析工具。

        但是,虽然 TDD 或基本单元测试通常会在减少测试时间、降低缺陷率和易于维护方面获得回报,但它们并不能帮助您在死路一条中按时交付。如果您没有编写自动化测试的经验,则尤其如此。

        客气地说,你的老板要求你承担技术债务。准确地说,他是在要求你无视职业道德。

        微笑,说“是的,先生”,在分配的时间内尽力而为,并更新您的简历。

        【讨论】:

        • 我同意并且确实让他们意识到了这个问题,但不幸的是,BA 和其他资源严重缺乏,而且项目的时间框架有限,所以我只需要尽我所能.
        【解决方案6】:

        要记住的一件事是,开发人员有一种自然的倾向,即为他们的代码测试“最佳路径”。换句话说,你写了它,所以你知道你应该点击某些点,输入某些东西,然后你测试一下。这当然很重要。

        这里有一些很好的建议,但大多数人(但不是全部)似乎都忽略了一个是负面测试。基本上,您需要测试边界并且需要测试恶意。如前所述,将脚本代码放在以下字段中:

        <script>alert('abc')</script>
        

        如果您收到警报,很明显您未能正确编码!另一件事是:

        abc' or 'a' = 'a'
        

        这可能会显示身份验证等方面的 SQL 注入问题。您还可以通过以下方式测试 SQL 注入:

        abc'; drop table users; select * from dual where 'a' = '
        

        如果您的桌子刚刚消失,您就有问题了!有大量的例子,但至少你需要花一些时间来测试 OWASP 前 10 名。

        您要测试的其他地方是非常大的数字,尤其是在 32 位平台上期望整数输入、负值、无值等时。基本上,测试所需的流程是否有效,然后尽你所能打破它。

        【讨论】:

          【解决方案7】:

          我同意之前发布的关于测试驱动开发和单元测试的价值和有效性的答案。如果做得正确,在编写生产/可交付代码之前编写单元测试的 TDD 过程将有助于保持专注并帮助验证设计和接口。此外,其他开发人员将能够以一种非常直接的方式从如何使用和使用您的代码方面获得清晰一致的工作方式。请记住,单元测试并不相同,并且不能替代完整的集成测试。在这种方法中,您可能仍需要编写完整的集成测试计划。

          我主要在 .NET 中工作,并且在使用 NUnit 方面取得了不错的成绩。

          我之前没有在 PHP 中工作过,但根据我所见,您可能需要考虑 SimpleTest 或 PHPUnit。

          【讨论】:

            【解决方案8】:

            考虑到你老板的要求,你在为他工作时必须尊重他,直到你改变主意,你已经在问题中给出了正确的答案。

            【讨论】:

              猜你喜欢
              • 2011-05-25
              • 1970-01-01
              • 1970-01-01
              • 2019-01-09
              • 2010-12-14
              相关资源
              最近更新 更多