自我测试技巧?

时间:2009-09-27 22:48:54

标签: testing testing-strategies

基本上我想知道是否有人有任何提示可以确保您的代码经过充分测试而无需在限定时间内获得其他任何人的帮助?

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

我通常非常小心,但我总能找到一些我想念的东西,当我测试它们时,我只是看不到它们。

然而,在我目前的工作中,我已经获得两个PHP Web应用程序在非常有限的时间内编写,我被告知我需要自己做所有的测试,尽管我的反馈意见这不是一个好主意

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

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

8 个答案:

答案 0 :(得分:8)

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

一个有用的方法是想象人物角色:首先测试应用程序作为你自己,然后再次测试它想象你已经85岁,看不太好,并且不要使用鼠标那么好。你可能倾向于点击最亮或最大的东西,假设它是你应该做的,它可能不是。现在想象你已经12岁,并且匆匆忙忙。你不打算阅读说明书。它还能用吗?

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

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

另一件重要的事情是永远不要忽视任何事情。很容易有一个奇怪的屏幕出现并对自己说“噢,这只是一个侥幸。”你必须让自己注意并追踪那些不应该的东西。

答案 1 :(得分:2)

您可以做多少测试总是存在限制。在约束中,您显然需要构建测试。显然,您希望首先为最关键的区域构建测试(安全性,损坏的可能性,数据丢失,功能)。

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

可以在此处找到与PHP一起使用的测试覆盖率工具: Semantic Designs PHP Test Coverage Tool

答案 2 :(得分:1)

我认为TDD正是您所寻找的。 首先编写测试,然后编写通过测试的代码。除了你之外你不需要任何其他人(不过会推荐一些测试帮助),你就可以更清楚地了解该工具应该做什么,甚至在开始编码之前就已经做好了。

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

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

但是,虽然TDD或基本单元测试通常会在减少测试时间,降低缺陷率和易于维护方面得到回报,但它们无法帮助您按时完成死亡。如果您没有编写自动化测试的经验,则尤其如此。

礼貌地说,你的老板要求你承担技术债务。正确地说,他要求你无视职业道德。

微笑,说“是的,先生,”在分配的时间里做到最好,并更新你的简历。

答案 5 :(得分:1)

要记住的一点是,开发人员自然倾向于测试代码的“最佳路径”。换句话说,你写了它,所以你知道你应该点击某些点,键入某些东西,所以你测试它。这当然很重要。

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

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

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

abc' or 'a' = 'a'

这可能会在身份验证等方面显示SQL注入问题。您还可以使用以下内容测试SQL注入:

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

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

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

答案 6 :(得分:0)

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

我在.NET中主要工作,并且在使用NUnit时只有很好的结果。

我之前没有使用过PHP,但从我看过的内容来看,您可能需要考虑SimpleTest或PHPUnit。

答案 7 :(得分:0)

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