什么是单元测试,集成测试,烟雾测试,回归测试?

问题描述 投票:654回答:21

什么是单元测试,集成测试,烟雾测试,回归测试和它们之间有什么区别?我可以使用哪些工具,为他们每个人的?

比如我使用JUnit和NUnit进行单元测试和集成测试。是否有任何烟雾测试或回归测试工具?

unit-testing testing definition
21个回答
977
投票
  • 单元测试:指定和一类的单一的方法的合同的测试一个点。这应该有一个很窄的和明确的范围。复杂的依赖关系和相互作用与外部世界是stubbed or mocked
  • 集成测试:测试多个子系统的正确的互操作。有全谱那里,从测试两个类之间的整合,测试与生产环境的集成。
  • 烟雾测试(又名健全检查):一个简单的集成测试,我们只检查被测系统在调用时通常会返回,不炸毁。 烟雾测试都与电子产品,在通电的电路时出现的第一个测试的比喻(如果抽烟,这是不好的!)... ...而且,apparently,与plumbing,其中管道系统是字面上烟雾充满,然后在视觉上检查。如果有任何吸烟,系统泄漏。
  • 回归测试:当一个错误是固定的已写入的测试。这确保了此特定错误不会再次发生。全称是“非回归测试”。它也可以是前更改应用程序,以确保应用程序提供了相同的结果做了一个试验。

为了这一点,我会补充:

  • 验收测试:测试该功能或用例正确实施。它类似于一个集成测试,但侧重于使用情况来提供,而不是所涉及的成分。
  • 系统测试:测试系统作为一个黑盒子。在其它系统上的依赖关系通常被模拟和测试期间存根(否则这将是更大的集成测试的)。
  • 飞行前检查:需要重复的生产环境中测试,以缓解“建立在我的机器”综合症。通常这是由做在像环境中的生产的接受或烟雾测试来实现。

4
投票

单元测试是在可能实施的最小部分定向。在Java中,这意味着你要测试的类。如果类依赖于其他类这些都是假的。

当你的测试调用一个以上的类,它的集成测试。

全面的测试套件可能需要很长的时间来运行,所以改变后很多团队运行一些快速完成测试,以检测显著破损。例如,你已经打破了URI来必不可少的资源。这些都是烟雾测试。

回归测试,在每一个建设运行,并允许您通过捕捉你打破什么有效的重构。任何一种测试都可以回归测试,但我发现单元测试是最有用的找茬的来源。


3
投票

单元测试:验证创建或修改的功能设计,即特定成分(即,类)。该测试可以是手动的或自动的,但不移动部件的边界之外。

集成测试:验证该特定部件的相互作用充当设计。集成测试可以在单元级别或系统级来执行。这些测试可以是手动的或自动的。

回归测试:验证新的缺陷没有引入到现有的代码。这些测试可以是手动的或自动的。

根据您的SDLC(瀑布,RUP,敏捷等),特别是测试可能在“阶段”进行,也全部被执行,或多或少,在同一时间。例如,单元测试可能是有限的,以开发谁然后翻过来的代码测试人员进行集成和回归测试。然而另一种方法可能有开发商在做单元测试和集成测试和回归测试(使用持续集成和自动化单元测试和回归测试沿TDD方式)的某一水平。


3
投票

这似乎是值得一提的,在这个线程测试的一个类型是可以简单地说是查不到的极限,超过该某段软件中断的压力/性能/负载测试。请注意,在模具方面有必要精确地确定哪一位提出要强调从系统角度测试范围。例如在“Web应用程序”压力测试的情况下,可在其范围包括Web服务器应用程序本身,因此模具可以干预这一目的。这里是一个不错的职位约http load testing


3
投票
  • 集成测试:集成测试是整合另一种元素
  • 冒烟测试:冒烟测试也称为内部版本Testing.Smoke测试是行使检查被测软件是否已准备好/稳定进行进一步的测试最初的测试过程。
  • 回归测试:回归测试的重复测试。无论是新的软件影响到另一个模块或没有。
  • 单元测试:这是一个白箱测试。只有开发者参与其

2
投票

单元测试: - 单元测试通常由开发商一边,那里的测试人员在这种类型的测试,其中测试是由单元完成单元部分演变完成的。在java中的JUnit测试用例也可以测试是否编写的代码是完美的设计或没有。

集成测试: - 这种类型的测试的单元测试后,可以在所有/某些组件integrated.This测试的类型将确保当组件集成,做自己影响对方的工作能力或功能主义。

冒烟测试: - 当系统成功集成,并准备去生产服务器上这种类型的测试是在最后完成。这种类型的测试将确保从开始到结束的每一个重要功能是工作的罚款和系统准备生产服务器上部署。

回归测试: - 这种类型的测试是非常重要的测试意外/不需要的缺陷不存在于系统时,开发人员修复了一些问题。该测试也确保所有的错误都成功地解决了因为那是没有发生其他问题。


2
投票

单元测试:经过他们的发展做了他们的测试方面找出问题,他们作出的任何要求准备质量检查之前,它总是由开发商进行。

集成测试:这意味着测试器必须验证模块子模块验证时一些数据/函数输出是驱动到一个模块到其它模块。或者在你的系统,如果使用使用系统数据集成哪些第三方工具。

冒烟测试:测试仪来验证系统的高级测试,并试图改变或代码之前,找出显示塞错误去住。

回归测试:测试仪由于系统对新增强或制度变迁中实现的变化进行对现有功能验证回归。


2
投票

烟雾和冒烟测试在软件生成后两者的表现,以确定是否可以开始测试了。理智可能会或冒烟测试后,可能不会被执行。它们可以单独或同时被执行 - 理智烟雾后立即之中。

由于冒烟测试,更深入,需要更多的时间,在大多数情况下,以及worthed自动化。

冒烟测试通常需要超过5-30分钟执行不再。它是更普遍的:它会检查数量少整个系统的核心功能,为了验证软件的稳定性进行进一步的测试不够好,不存在任何问题,堵塞的计划测试用例的运行。

健全测试比烟更详细的,可能需要15分钟到一整天的时间,这取决于新构建的规模。它是一个更特殊类型的验收测试,进展或重新测试之后进行。它与一些密切相关的它们的功能检查某些新功能和/或缺陷修复的核心功能一起,以验证它们以所需要的操作逻辑功能,前回归测试可以在更大的范围内执行。


2
投票

我只是想补充,并就为什么我们这些水平测试,他们真正有例子的意思是一些更多的上下文

迈克·科恩在他的著作“敏捷继承”想出了一个“测试金字塔”的方式来处理自动化测试的项目。有此模型的各种解释。该模型解释什么样的自动化测试需要创造,他们如何能快速测试给应用反馈和谁写的这些测试。基本上有必要对任何项目3个级别的自动化测试,并有如下几点。

单元测试 - 这些测试软件应用程序的最小组成部分。这可以从字面上是其中计算基于某些输入的值的码的一个函数。此功能的硬件/软件的代码库,构成了应用程序的其他几个功能的一部分。

例如 - 让我们基于Web的计算器应用程序。本申请中需要被测试的单元的最小的部件可能是执行加法执行减法等的功能,另一个。所有这些小功能放在一起构成了计算器应用程序。

从历史上看开发者编写,因为它们通常用相同的编程语言的软件应用这些测试。单元测试框架如JUnit和NUnit(用于Java),MSTest的(C#和.NET)和茉莉花/摩卡(为JavaScript)用于此目的。

单元测试最大的优势是,他们还要快的UI下方,我们可以得到有关应用程序的快速反馈。这应该包括自动化测试的50%以上。

API /集成测试─这些测试软件系统的各个组件在一起。该组件可包括检测数据库的API(应用编程接口),第三方工具和服务与应用程序一起。

例如 - 在我们上面的计算器例如,Web应用程序可以使用数据库来存储值,使用API​​的做一些服务器端验证,它可能会使用第三方工具/服务来发布结果到云,使其在不同的可用平台。

从历史上看开发者或技术QA会写使用各种工具,如邮差了SoapUI,JMeter的和其他工具,如Testim这些测试。

这些跑得比UI测试快得多,因为他们仍然罩盖下方运行,但可能会消耗比单元测试多一点时间,因为它必须检查系统的各个独立的组件之间的通信,并确保他们拥有无缝集成。这应包括自动化测试的更多的30%。

UI测试─最后,我们有一个验证的应用程序的UI测试。这些测试通常是写入测试端到端流过的应用程序。

例如 - 在计算器应用程序,一个端到端流可以是,打开了浏览器的>输入计算器应用程序的URL - >记录与用户名/密码 - >开放计算器应用程序 - >在计算器执行一些操作 - >验证从UI那些结果 - >注销应用程序。这可能是一个端到端的流程,这将是对UI自动化一个很好的候选人。

从历史上看,技术质量保证的或手工测试编写UI测试。他们使用像硒的开源框架或UI测试平台,如Testim创作,执行和维护测试。这些测试提供更多的视觉反馈,你可以看到如何在测试运行,通过截图,日志,测试报告的预期与实际结果之间的差异。

的UI测试的最大的限制是,它们是相对缓慢相比,单位和API级测试。所以,它应该只包含10-20%的整体自动化测试。

接下来的两个类型的测试可能基于你的项目,但这个想法是 -

冒烟测试

这可以是上述3个级别的测试的组合。我们的想法是在每一个代码检查过程中运行它,并保证了系统的关键功能,仍然按预期工作;后的新代码更改合并。他们通常都需要和运行5 - 10分钟,以获得更快的故障反馈

回归测试

他们通常会被每天至少运行并覆盖系统的各种功能。他们确保应用程序仍然工作正常。他们比烟雾测试的详细信息,并覆盖包括非关键的人在更多的应用场景。


1
投票

一些好的答案已,但我想进一步细化他们:

单元测试是白盒测试的唯一形式在这里。其余的是黑盒测试。白盒测试意味着你知道输入,你知道机构的内部运作,并可以检查它,你知道输出。随着黑盒测试,你才知道什么是输入和输出应该是什么。

所以很明显的单元测试是唯一的白箱测试在这里。

  • 单元测试的测试代码的某些片段。通常的方法。
  • 集成测试测试软件的新功能件是否可以与一切整合。
  • 回归测试。这是测试做是为了确保你没有破坏任何东西。一切曾经工作应该仍然工作。
  • 冒烟测试作为一个快速测试做是为了确保一切正常,你涉足更具活力测试之前。

1
投票

回归测试 - 是一种SW的测试,我们试图掩盖或检查周围的bug修复。周围的bug修复的功能不应该改变或改变,由于提供的修补程序。在这样的过程中发现的问题称为回归问题。

冒烟测试:是一种测试做决定是否接受进一步的QA测试生成/软件。


100
投票
  • 单元测试:一种自动测试来测试类的内部工作。这应该是一个独立的测试,不涉及其他资源。
  • 集成测试:自动测试,其上的环境下完成的,所以类似于单元测试,但与外部资源(分贝,磁盘访问)
  • 回归测试:实现新功能或错误修复程序后,您重新测试,在过去的工作方案。在这里,您覆盖其中的新功能打破现有功能的可能性。
  • 冒烟测试:第一次测试在其测试可以得出结论,如果他们将继续进行测试。

1
投票

冒烟测试已经已经在这里解释和简单。回归测试来下集成测试。

自动化测试可以分为仅2。

单元测试和集成测试。 (这是最重要的事情)

我会打电话使用短语“长考”(LT)像集成测试,功能测试,回归测试,UI测试,等和单元测试“短测试”的所有测试。

一个LT例子是,自动加载一个网页,该帐户登录和购买图书。如果测试通过,更可能与活现场运行相同的方式(因此“改善睡眠”的参考)。龙=网页(开始)和数据库(完)之间的距离。

这是一个伟大的文章讨论integration testing(long test) over unit testing的好处


1
投票

单元测试单元测试是非常低的水平,接近你的应用程序的源。它们包括在测试你的软件使用的类,组件或模块的各个方法和功能。单元测试是一般相当便宜自动化,并且可以通过持续集成服务器非常快速运行。

集成测试集成测试验证您的应用程序工作中使用得很好,不同的模块或服务。例如,它可以测试的互动与数据库或确保微服务一起工作正常。这些类型的测试运行,因为它们需要的应用程序的多个部分运行起来更昂贵。

功能测试功能测试专注于应用程序的业务需求。他们只确认动作的输出,并执行该操作时不检查系统的中间状态。

有时有集成测试,因为它们都需要多个组件来与彼此交互的功能性测试之间的混淆。所不同的是一个集成测试可能只是验证您可以查询数据库而进行功能测试期望通过对产品的要求所定义的从数据库中获取一个特定的值。

终端到终端的测试终端到终端的测试复制与完整的应用程序环境中的软件的用户行为。它验证各种用户预期和可以像加载网页或登录或更复杂的方案验证的电子邮件通知,在线支付等简单工作流...

终端到终端的测试是非常有用的,但他们执行价格昂贵,而且很难当他们自动维护。建议有几个关键的终端到终端的测试,并更多地依赖于低级别类型的测试(单元测试和集成测试),以便能够快速识别重大更改。

验收测试验收测试执行验证一个系统满足其业务要求的正式测试。它们需要整个应用程序启动和运行,并集中在复制用户的行为。但他们也可以更进一步,测量系统的性能,如果某些目标得不到满足拒绝更改。

性能测试性能测试检查系统的行为,当它是显著负载下。这些测试是无功能的,并且可以具有各种格式,了解可靠性,稳定性,并且平台的可用性。例如,它可以在执行大量的请求时,或者看到系统数据的显著的行为进行观察的响应时间。

性能测试是由它们的性质相当昂贵的实施和运行,但是它们可以帮助你了解是否有新的变化会降低系统。

冒烟测试冒烟测试是检查应用程序的基本功能基本测试。他们注定要快执行,他们的目标是给你,你的系统的主要功能发挥预期效果的保证。

一个新的构建作出决定你是否能部署后运行更昂贵的测试,或向右,以确保他们的应用程序在新部署的环境中正常运行后冒烟测试可能是有用的权利。

来源:https://www.atlassian.com/continuous-delivery/software-testing/types-of-software-testing


86
投票

每个人都会有略微不同的定义,往往有灰色地带。然而:

  • 单元测试:那么这个是有点(以分离地)工作?
  • 集成测试:做这两个(或更多)组件协同工作?
  • 冒烟测试:这是否整个系统(接近是一个生产系统越好)团结一致相当不错? (即是我们有理由相信它不会产生一个黑洞?)
  • 回归测试:我们已经在不经意间再次推出之前尝试过固定的任何错误?

50
投票

一个新的测试类我刚刚意识到的是:

金丝雀测试

A Canary test is an automated, non-destructive test that is run on a regular basis in a LIVE environment, such that if it ever fails, something really bad has happened.

例子可能是:

  • 有应该永远只能是在DEV可用/ TEST出现在实时数据。
  • 有一个后台进程运行失败
  • 可以在用户登录

18
投票

杜撰历史的琐事:“冒烟测试”来自潜艇的工程(从管道继承)其中literal烟雾将被泵入船体,看是否有它的又出来了,这将是相当的潜艇戏剧性的失败!


9
投票

从软件测试技术最好的网站的一个答案:

软件测试的类型 - 完整列表Click Here

enter image description here

这是一个相当长的描述,我不打算给它贴在这里:但它可能是人谁想要知道所有的测试技术帮助。

希望能对大家有所帮助:)


8
投票

单元测试:验证创建或修改的功能设计,即特定成分(即,类)。该测试可以是手动的或自动的,但不移动部件的边界之外。

集成测试:验证该特定部件的相互作用充当设计。集成测试可以在单元级别或系统级来执行。这些测试可以是手动的或自动的。

回归测试:验证新的缺陷没有引入到现有的代码。这些测试可以是手动的或自动的。

根据您的SDLC(瀑布,RUP,敏捷等),特别是测试可能在“阶段”进行,也全部被执行,或多或少,在同一时间。例如,单元测试可能是有限的,以开发谁然后翻过来的代码测试人员进行集成和回归测试。然而另一种方法可能有开发商在做单元测试和集成测试和回归测试(使用持续集成和自动化单元测试和回归测试沿TDD方式)的某一水平。

该工具集将在很大程度上取决于代码库但也有单元测试(JUnit的)许多开源工具。惠普(水银)QTP或Borland的SilkTest中是自动化集成和回归测试这两种工具。


6
投票

单元测试:在应用程序中单个模块或独立成分的测试是已知的单元测试,单元测试将由显影剂来完成。

集成测试:将所有的模块和测试应用程序以验证所述通信和所述模块之间的数据流被正确或不工作时,该测试也通过开发者执行。

在冒烟测试冒烟测试他们检查中浅而宽的方式提出申请,在冒烟测试,他们检查应用程序的主要功能,如果在应用程序,他们将要开发团队报告任何拦截的问题,并开发团队将修复它,纠正缺陷,并给它回测试团队,现在测试团队将检查所有模块,以验证在一个模块中提出将影响其他模块或不达的变化。在冒烟测试的测试用例编写脚本

重复执行相同的测试用例回归测试,以确保不变模块不会导致任何缺陷。回归测试来下的功能测试


5
投票

回归测试-

“回归测试重播以前的反对改变软件测试,以确保在当前的软件所做的更改不会影响现有软件的功能。”

© www.soinside.com 2019 - 2024. All rights reserved.