我如何像真正的测试人员一样系统地测试和思考
Posted
技术标签:
【中文标题】我如何像真正的测试人员一样系统地测试和思考【英文标题】:How do I systematically test and think like a real tester 【发布时间】:2010-08-10 06:36:37 【问题描述】:我的朋友今天问了我这个问题。如何测试自动售货机并告诉我它的测试用例。我可以给出一些测试用例,但这些都是一些随机的想法。我想知道如何系统地测试一个产品或一个软件。有很多测试,如单元测试、功能测试、集成测试、压力测试等。但我想知道如何系统地测试和像真正的测试员一样思考?有人可以解释一下如何区分所有这些测试以及哪些测试可以应用于实际场景。例如测试文件系统。
【问题讨论】:
@Praveen S:可能。问题/主题非常主观 【参考方案1】:即使是长期受人尊敬的专业测试人员也会告诉您:这是一门艺术,而不是一门科学。
我设计新测试用例的诀窍是从你提到的各种类型的测试开始,它必须包括所有这些才能彻底,但我试图找到我可以与代码/产品交互的所有方式的列表。
以自动售货机为例,里面和外面都有很多零件。
简单的测试,因为产品旨在工作,提供了大量的案例
它是否给出了正确的更改 处理请求的速度有多快 如果商品缺货怎么办 如果装满了怎么办 如果零钱抽屉已满怎么办 如果物品太大或架子不好怎么办 如果用户投入的钱太少怎么办 如果没有变化怎么办还有一些有趣的案例,普通用户不会想到。
如果你想把它翻过来怎么办 给它一枚假币 从中窃取 用绳子把硬币放进去 给它有趣的变化 给它撕了一半的钞票 用撬棒撬开 喂它坏电源/掉电 在各种操作过程中关闭它像测试人员一样思考的方法是找出可以攻击它的所有可能方式,从通常场景中的所有“有趣的案例”到完全不应该使用它的所有方法。任何输入点,包括您可能认为开发者/所有者可以控制的输入点,都是公平的游戏。
您还可以使用许多自动化测试工具,例如成对测试选择、基于模型的测试工具包,或用于软件的各种压力/负载和安全工具。
我觉得这个答案是一个好的开始,但我现在意识到这只是故事的一半。
想出可以测试系统的每一种方法很重要。你需要学习扩展你的想象力、你的问题分解技能、你对功能链/故障链的理解,以及你对正在测试的事物的领域知识。这就是我在上面试图提出的观点。有了正确的心态和足够的警惕,这些技能将开始迅速提高 - 一年内,或几年内(取决于领域的复杂性)。
成为一个非常称职的测试人员的第二个层次是确定你应该关心哪些测试。您将始终能够以多种不同的方式破坏每个系统。这些失败是否重要是一个更有趣的问题,而且往往更难回答。不过,回答这个问题有两个好处。
首先,如果您知道修复损坏的系统部分(或跳过修复它们!)很重要的原因,那么您就可以了解应该将精力集中在哪里。您知道在哪些方面可以花费更少的时间进行测试,以及必须在哪些方面花更多的时间。
其次,更重要的是,您将帮助您的团队揭示他们应该他们努力的重点。您将开始发现被称为“二阶未知数”的事物。你的团队不知道自己不知道什么。
帮助您完成此任务的主要技巧是始终问“为什么?”,直到您问的人被难住了。
一个例子:
问:为什么要进行这个测试?
答:因为我想使用系统中的所有功能。
问:为什么这个系统会这样运作?
答:因为程序员根据产品规格做出的决定。
问:为什么我们的产品规格要求这样做?
答:因为我们为其编写软件的公司要求软件以这种方式工作。
问:为什么我们要签约的那家公司将此作为一项要求添加?
答:因为他们的用户需要做:事情:
问:为什么用户需要做:thing:?
答:因为他们正在努力完成:xyz:
问:他们为什么要完成:xyz:
答:因为他们省钱:abc:
问:他们为什么选择:xyz:来解决:abc:?
答: ...好问题。
问:他们能做些什么呢?
答: ...现在我想起来了,有很多选择!也许其中一个效果更好?
通过练习,您将开始知道要问哪些具体的“为什么”问题,以及要关注哪些问题。您还将学习从更深的链条开始,并在您的方法中减少机械化。
这不再只是确保产品符合开发人员、产品经理、客户或最终用户提供的规格。它还有助于确定您提供的解决方案是否是您的团队可以提供的最高质量的解决方案。
其中一个隐藏的要求是,您必须了解,作为测试人员,您的一半工作就是始终提出问题。您可能认为您的团队成员会对此感到恼火,但希望我已经证明这对您的开发和您正在测试的产品的质量都至关重要。关心产品的聪明和好奇的队友(他们不忙和沮丧)会喜欢你的问题。
【讨论】:
@Merlyn 非常感谢您的出色回答。但是,如果给我大约 2000 行代码,例如文件系统或 Web 浏览器,因为文件系统需要从黑盒到白盒的大量测试。我应该如何处理它。根据您的回答,我应该使用读写等界面。但不仅如此。如果多个进程发出读取等,它是如何工作的 @brett:有很多关于测试的好书。您可能想从其中之一开始。至于“代码行”,您可以查看代码覆盖率等工具。我的回答更多的是让车轮转动,而不是试图详尽无遗。相信我,学习好的测试需要数年时间... @brett:这是一个有趣的测试书籍评论链接:testingreflections.com/node/view/1310 @Merlyn 你能推荐我任何关于测试的好书吗?我是 c/c++,我喜欢内核编程。 @brett:我没有读过任何一个,所以我不能给你一个好的答案。 “前四名”看起来像是开始寻找的好地方,从那里,您可以查看亚马逊上的评论。我一定要查看低星级评论和高星级评论,看看人们抱怨什么,以及这对我来说是否重要。【参考方案2】:@brett: 假设你有你想要测试的系统。现在主要的事情是确保你有测试场景或测试计划。一旦你有了它,那么对你来说,如何以及测试系统的内容就变得非常清楚了。
一旦您制定了测试计划,您的愿景就会变得清晰,即一切都在预期之中,一切都在意料之外。对于意外行为,如果您认为不正确,您可以重新检查一次并提交问题。我在一般情况下给了你答案。如果您有真实世界的 scrnario,那么提供相关指南可能会很有帮助。
【讨论】:
以上是关于我如何像真正的测试人员一样系统地测试和思考的主要内容,如果未能解决你的问题,请参考以下文章