据我所知,这句话意味着自动化测试不会在现有代码中发现新的错误(尽管它们可能会在新代码中捕获到会破坏旧代码的新错误)。这个对吗?还是这条智慧实际上声称实际上在实践中回归测试很少能涵盖回归?最终运行了以前从未运行过的特定测试,并发现了指示错误的意外异常,挂起或程序崩溃?说自动检查不会在旧代码中找到新的错误,这会更准确吗?还是我仍然缺少此声明的要点?


这似乎是经常被引用的测试者智慧,所以我真的觉得我需要了解这两个声明的含义。 ,以及对其正确性的任何例外。


评论

您能告诉我们您在哪里阅读或听到的信息吗?

不,是在几年前。无法使用快速的Google进行跟踪。但是它当时在多个地方浮动,IIRC。它似乎来自希望引用自动化“检查”而不是“自动化测试”等的地方,所以我认为它可能是亲手/探究性推回高级别活动的一部分自动化测试开始占领整个行业(并推回相应的手动或探索性测试技能贬值)。

#1 楼

如果测试自动化完成了预期的工作,则在引入缺陷后,应尽快发现并修复该缺陷,并希望在一个日常周期内进行。

如果这是自动化套件的工作方式, ,那么自动化应该成为一个“屏障”,以防止在已经正常工作和测试的代码中创建新的错误。

但是,自动化应该间接地释放测试人员的精力,以便他们可以执行其他探索性和手动测试活动,从而发现错误。

br />
因此,测试自动化实际上允许发现新的错误,只是不像您期望的那样。

在模糊测试中,我还没有看到过这种类型的测试在广泛使用中,对我来说感觉不是很有效(除了在安全测试环境中)。我认为使用测试数据生成器,使用等效方法和边界测试可以更有效地发现问题。

评论


谢谢,如果错误修复的速度如此之快,以至于它实际上并没有花时间在代码上,那我就不会认为错误“不是错误”。您是否有更多信息/良好链接可以阅读“测试数据生成器”?我试图弄清楚与我一起工作的人是否至少在某些时候在做您所谈论的事情时松散地使用了“模糊”一词,或者是否有一个更大的区别是只是不熟悉。当我过去看到人们“模糊不清”时,他们确实有x%的测试是A类,y%的B类等,其中A和B由正则表达式定义。

– Ethel Evans
2011年5月10日23:15

“模糊”通常是指自动生成无效,意外或随机数据。真正的随机数据可能永远不会发现任何错误,但是半随机数据可能非常有效。抱歉,我想不通任何链接,也许我需要写一篇博客文章。

–布鲁斯·麦克劳德(Bruce McLeod)
2011年5月10日23:40



谢谢,布鲁斯,我以为那是您的目标。感谢您耐心为我澄清这些用语。我认为概念之所以混为一谈,是因为测试人员自然而然地将半随机数据添加到了他们的随机测试中(因为对模糊测试工具进行了相当小的更改,使其也可以运行半随机数据)。

– Ethel Evans
2011年5月11日在16:49

有关现代模糊测试工具如何工作的示例,请参见:en.wikipedia.org/wiki/American_fuzzy_lop_(fuzzer)

– gmatht
17年7月2日在6:48

#2 楼

我不喜欢这种说法,因为它假设您唯一可以自动化的是回归测试。如果您将陈述重写为“回归测试没有发现新的错误”,那么我认为它是准确的。新错误-我认为如果没有回归测试之外的某种自动化,自动化工作是不完整的。

评论


老实说,我工作过的每个地方都没有提到“回归”一词,而是将您称为“自动回归测试”简称为“自动测试”。不管它是否合适,我都发现它相当普遍。

–corsiKa♦
2011年5月14日下午3:29

海事组织,这很可悲。

–艾伦
2011年5月14日下午3:45

我不会说这比软件开发中的其他任何误解和误定义的单词和短语都要难过。对于一群基于最小变更来制定或破坏程序的人来说,不仅令人惊讶的是我们不仅愿意接受不正确的东西,而且即使改正也常常拒绝更改。

–corsiKa♦
2011年5月14日下午4:51

已经有好几年了,但是我偶尔会复习我曾经问过的老问题及其答案(通常是在添加新答案时),而这个特殊的答案仍然让我微笑,因为我非常赞同。以为您可能想知道,即使在六年后,这仍然会影响某人:-)

– Ethel Evans
17年11月29日在22:10

感谢您这样说-对我而言,有时候我可以说很有意义。

–艾伦
17年12月18日在21:07

#3 楼

我认为答案中还有其他内容,我看到别人的回答中暗示了这一点,但并未直接指出。

通常,以这样的方式创建自动测试,即使是非必要的细节也被锁定并以相同的方式执行。这导致了所谓的农药悖论或雷场类比。创建测试时会发现错误,然后发现测试中新错误的有效性会下降,因为测试每次都会做完全相同的事情而没有差异。在某些情况下,您可能想要这种行为-诸如布鲁斯(Bruce)描述的路障测试,旨在查找某些特定于数据的错误重复发生的回归测试,等等。对于许多人来说,似乎所有的自动化都是自动化测试没有发现新错误的传统“智慧”所在。在这种情况下,测试发现错误的最大功效是在创建时。之后,随着错误的修复,它更多地转移到“提供持续的置信度”模型。它有时可能会发现一个引入的新错误,但是除非在应用程序的那部分中进行任何直接更改,否则就永远找不到进一步的问题。在最初创建时发现错误的有效性。通过考虑每个测试并确定对测试至关重要的内容以及仅为方便或可重复性而指定的内容,可以利用测试的非关键方面来提供差异。

例如,我在医疗保健信息系统上工作。用于注册新患者的测试显然需要实际注册患者。我们可能会通过医院入院,急诊室或预先安排入院来对患者进行注册的单独测试。但是,根据测试的不同,患者是男性还是女性,还是1930年之前出生,还是我们可能会说无关紧要的所有其他方面都无关紧要。我们可以创建使用给定患者记录进行添加的自动化,并使其每次都做相同的事情,甚至可能事先已经对测试数据进行了一些分析,以手动改变整个套件中患者的某些方面,但是此单个测试可以总是用相同的数据做同样的事情。但是,我们也可以将测试连接到伪造的数据生成器,并在此特定测试场景中获得更大的差异,以捕获超出我们最初识别范围的东西。这种方法可能需要更多的编码-您需要将验证的数据值输入到验证发生的地方,而不是输入验证的地方,处理整个代码中的差异,并且如果可重复性在以下情况下很重要:在此测试中,您需要某种方式来重用特定的随机种子,或者使用包含硬编码数据或类似内容的测试的可执行版本创建日志文件,但是该测试可能会发现更多的错误。在这种情况下,每次运行测试时,都有可能发现一个新的错误,因为从某种意义上说,它可能是一个“新”测试。我们可能是正确的,而我们正在变化的事物实际上并不重要,在那种情况下,我们仍然找不到任何新的错误。但是,如果我们错了,并且确实有问题,那么与我们从不改变任何东西相比,我们有更大的机会找到它。

评论


我不禁会想起您的医疗保健信息系统中可怜的Henry Null。 :)确实没有一种完全有效的方法可以将纯测试数据与真实数据分开,因为任何时候,这仅意味着您尚未使用真实数据进行测试。

–通配符
17年7月1日在4:21



#4 楼

其背后的理论是,自动化测试只能准确捕获其测试内容。由于有人必须手动对其进行编码,因此有人知道它将如何失败。按照这个定义,它不是一个新的错误-有人在编写测试时就已经知道它。

我还认为,关于模糊测试的观点与标准测试原理相反:如果您使用相同的输入运行相同的测试,那么它应该具有相同的输出。模糊/随机测试将不满足此条件。这并不是说它可能没有提供有用的信息,但是它并不属于人们通常所说的“自动测试”的范畴。

评论


语句“如果使用相同的输入运行测试,它应该具有相同的输出”除了模糊测试以外,还针对其他类型的测试而分解-稳定性测试通常“一直运行到破坏”,具有固有随机性的测试功能无法具有此功能(例如,我现在正在测试随机采样功能)等。有人在“测试”和“检查”之间进行了一次区分,但我找不到这些文章-但我认为这是一个有用的区分。

– Ethel Evans
2011年5月11日在16:53

@Ethel正如@Alan指出的那样,其中存在一个隐式的“回归”。据我了解,当大多数人谈论“自动测试”时,他们指的是“自动回归测试”。我可能会误认为这一点,并且每个人的经历都会有所不同,但是在某些情况下,我可以回想起它的来龙去脉,除非另有明确说明,否则自动化测试意味着回归测试。

–corsiKa♦
2011年5月11日17:04

是的,我接了。我发现它令人沮丧,因为自动化测试可以而且应该被认为是-至少有可能-还有更多。无论如何,我想我发现了一个新的宠儿:)是时候嘲笑自己了!

– Ethel Evans
2011年5月11日17:37

#5 楼

根据我的经验,我在创建自动化测试时发现的bug往往比通过执行它们发现的错误多。

仍然,自动化测试并没有发现bug并不是真的-有些自动化测试即使不多,也要找到一些错误。而且做得好,执行自动化测试的成本足够低,值得这样做。

我不认为自动化选择是一种二进制选择。我经常在一个项目中自动化一些测试,同时留下一些测试手册。诀窍在于确定哪些值得自动化,哪些不值得自动化。如果选择合理,但手动和自动测试会发现错误。如果做出的选择非常正确,则每种方法都会发现使用其他方法很难发现(或更昂贵)的错误。

#6 楼

这里的部分智慧来自于这样的事实,即自动化测试不应发现任何新东西,否则您在创建代码之前就不会对其进行测试。自动化测试应该发现的唯一“新”错误是1个测试人员自己无法手动完成的错误,例如某些多用户压力测试。

评论


但是。 。 。在创建它们之前,我通常不测试代码。在我进行测试之前,完成代码的情况非常罕见。我认为测试和代码的并行开发是标准的吗?

– Ethel Evans
2011年5月11日17:55

不总是。您可能正在开发一个遗留应用程序,其中大部分代码都未经测试,或者您正在一个瀑布式项目中,“测试阶段”直到“开发阶段”完成后才开始。

– testerab
11年5月28日在23:07

我认为多用户错误不是唯一的错误。自动化测试也可以发现任何后端更改/错误,多浏览器问题等!

– Nawshad Rehan Rasha
17年11月2日在7:10

#7 楼

我认为答案是


自动化测试不会发现新的错误


应该真正表示为
>
预先存在的自动化测试无法在新开发的功能中发现错误。实际上,更糟糕的是,它应该是


预先存在的自动化测试在新开发的功能中找不到新的错误,也可能在修改后的功能中找不到新的错误


啊!

#8 楼

自动化测试可以找到产品或代码库的一件事,功能或单元。它实际上并没有尝试自动找到代码库的新功能或新的代码路径。设计新功能和代码路径的测试是测试创建者的责任。

#9 楼

像这样的常识或常识可能是错误的。如果规则在80%的时间内有效,那么它有价值吗?是的(如果在80%的情况下是:-)),如果您知道它不是100%正确的话。它可以让您集中注意力。

自动测试始终可以发现错误(上周对我来说就是这样做)。如果没有,则没有人会使用它们。

但是正如Michael Durrant的回答所解释的,它要复杂得多。

自动“测试”是错误的名称:它们是自动“检查”,其中脚本执行已知动作并检查已知结果条件。这样的检查只能检查程序员期望的条件-任何不期望的东西都将被忽略。

因此,即,如果代码正在检查是否存在2条已知错误消息,它将忽略第三条错误消息,即新的错误消息。如果测试正在使用CSS类error-message检查文本范围的存在,则将检测到新错误(如果它使用正确的CSS类)。检测新的错误。

#10 楼

自动化测试可以有效地用于多浏览器测试,在该测试中,旧代码可能会引入新的错误,并且可以捕获这些错误。因为最新版本可能会导致与旧的稳定代码的兼容性问题。

还用于多用户和负载测试,因此可以在自动测试的帮助下找到新的错误。

即使系统环境或与配置相关的任何更改发生并且引入了新的错误,也可以通过自动检查将其标记出来。

因此,“自动化测试不会发现新的错误”-并不总是正确的!但是坦白的表白是大多数时间。