集成测试和功能测试有什么区别?[关闭]


132

功能测试和集成测试是否相同?

您从单元测试开始测试,然后完成单元测试,然后进行集成测试,在此测试整个系统。功能测试与集成测试一样吗?您仍然需要将系统作为一个整体,并对其功能一致性进行测试。


1
[敏捷方法:集成测试与功能测试,或两者兼而有之?](stackoverflow.com/questions/555899/…
Pascal Thivent 2010年

14
我可以建议您接受您过去提出的问题的一些答案吗?
Stefano Borini


6
我不得不说这个问题代表了这个网站出了什么问题。这个问题怎么了?范围如何?这是一个非常特定的问题,与编程有关。事物之间的区别甚至可以用数学来表示。似乎有很多非常重要,非常相关的问题由于无法解释的原因而关闭。我知道您是认真的,所以人们会告诉我我错了,但事实上,这些建议被破坏到Quara.com之类的网站证明了我是对的。[基本上,SO正在放弃市场份额]。
Jim Maguire

1
我同意@JimMaguire:所询问的问题是“是/否”问题(以及为什么或不是的解释)。我不明白为什么它不被关注。
鲍勃

Answers:


101

集成测试是指您测试多个组件以及它们如何协同工作。例如,另一个系统如何与您的系统交互,或者数据库如何与您的数据抽象层交互。通常,这需要一个完全安装的系统,尽管不是最纯粹的形式。

功能测试是根据产品的功能要求测试系统的时间。产品/项目管理通常会编写这些内容,并且质量检查会正式确定用户应看到和体验的过程以及这些过程的最终结果。根据产品的不同,这可以自动化还是不自动化。


9
谢谢...是的,但是在功能测试中,当我们针对功能需求测试系统时,我们也将其视为一个集成系统。在执行功能测试时,我们还将发现不同的单元如何工作在一起,因此可以作为集成测试的方法...
Mishthi 2010年

3
特别是在我们的环境中,我们始终将单元测试视为针对单个类编写的nunit测试,将集成测试视为需要比类更多的nunit测试或sql脚本测试,或者数据库或其他系统(通常需要完整安装)功能测试是质量检查运行或自动UI测试的测试。
aceinthehole

1
另外,我想说的是,如果您在功能测试之前还没有进行集成测试,那么您将同时进行这两项工作,并且在测试功能需求时会发现集成部分中的错误。
aceinthehole

1
这怎么不被接受呢?!
tftd 2015年

@tftd,因为此问题的
发起人

20

功能测试

是的,我们正在测试产品或软件的整体功能是否正常(测试按钮,链接等)

例如:登录页面。

您提供用户名和密码,然后测试是否将您带到主页。

集成测试

是的,您只测试集成软件,但是您测试数据流发生的位置以及数据库中是否发生了任何更改。

例如:发送电子邮件

您向某人发送一封邮件,这有一个数据流,并且数据库中也有更改(发送的表将值增加1)


请记住-单击链接和图像不是集成测试。希望您能理解原因,因为只需单击链接即可在数据库中进行更改。

希望这对您有所帮助。


3
数据库是程序状态的实现细节。单击链接也可以更改程序状态。
alehro

@ jsborn17集成测试是否适用于与API通信的前端应用程序,即使我们无法运行API?
Wancieho '18

8

这是一个重要的区别,但是不幸的是您永远无法达成共识。问题在于,大多数开发人员都是从自己的角度定义它们的。这与关于冥王星的辩论非常相似。(如果离太阳更近,那会是行星吗?)

单元测试很容易定义。它测试CUT(被测代码),仅此而已。(那么,尽可能少的其他。)这意味着模拟,假货和固定装置。

另一方面,许多人称之为系统集成测试。那是在尽可能多地测试,但仍在您自己的CUT中寻找错误。

但是,两者之间的广度如何呢?

  • 例如,如果您的测试仅比CUT多一点呢?如果包括斐波那契函数而不是使用您注入的夹具怎么办?我将其称为功能测试,但是世界不同意我的看法。
  • 如果包括time()rand()呢?或者,如果您致电,该http://google.com怎么办?我会称其为系统测试,但我还是一个人。

为什么这么重要?因为系统测试不可靠。它们是必需的,但有时会因您无法控制的原因而失败。另一方面,功能测试应始终通过,而不是随机失败。如果速度很快,那么不妨从一开始就使用它们,以便使用测试驱动开发,而无需为内部实现编写过多的测试。换句话说,我认为单元测试可能比他们值得的麻烦多,而且我有很好的陪伴

我在3个轴上进行了测试,并在单元测试中将所有零均置为:

  1. 功能测试:在您的调用堆栈中越来越深入地使用真实代码。
  2. 集成测试:越来越的呼叫堆栈;换句话说,通过运行将使用它的代码来测试您的CUT。
  3. 系统测试:越来越多的不可重复的操作(O / S调度程序,时钟,网络

一个测试可以很容易地在不同程度上进行全部3个测试。


功能测试始终通过?还是说功能测试应该 始终通过?
aceinthehole 2014年

1
他们不应随机失败。当它们失败时,它们应该每次都失败。例如,它们不应包括对其他主机的调用。也许应该将它们称为行为测试?我不知道最好的任期。我只知道它们是最重要的测试,并且在纯的,完全模拟的单元测试和高级系统集成测试之间的巨大差距中通常会忽略它们。
cdunn2001 2014年

“他们不应随机失败。” -术语可能是“确定性的”
kleaver

7

功能测试:这是一个测试过程,其中测试模块的每个组件。例如:如果网页包含文本字段,则需要检查单选按钮,按钮和下拉菜单等组件。

集成测试:检查2个模块之间的数据流的过程。


4

我要说的是,两者是紧密相连的,很难区分它们。在我看来,集成测试是功能测试的子集。

功能测试基于您收到的初始要求。您将测试应用程序行为是否符合要求。

当涉及集成测试时,它是模块之间的交互。如果A模块发送输入,则B模块能够处理该输入。


+1是“集成测试是功能测试的子集”-我的经验还表明,如果您快速追求结果,那么这种测试方法最有意义。例如,在我的测试代码中,我通常将系统视为单个集成单元-我建立内存数据库,然后向我的应用程序MVC控制器提供一些测试数据并验证其响应,并验证数据库中的数据以确保所有数据验证均按预期进行,以避免MVC控制器返回正确的响应(但实际上未正确传递到数据库层)时出现错误。
JustAMartin

4

集成测试-集成测试不过是对不同模块的测试。您必须测试模块之间的关系。例如,您打开facebook,然后在输入登录ID和密码后看到登录页面,您可以看到facebook的主页,因此登录页面是一个模块,主页是另一个模块。您只需要检查它们之间的关系就意味着您登录后只能打开主页,不能打开消息框或其他任何内容。集成测试有2种主要类型,即TOP-DOWN方法和BOTTOM UP方法。

功能测试-在功能测试中,您只需要考虑输入和输出。在这种情况下,您必须像实际用户一样思考。测试您提供的输入和输出是功能测试。您只需要观察输出即可。在功能测试中,您不需要测试应用程序或软件的编码。


2

在功能测试中,测试人员仅关注应用程序的功能和子功能。应用程序的功能应正常运行或不正常。

在集成测试中,测试人员必须检查模块或子模块之间的依赖关系。模块记录示例应获取并正确显示在另一个模块中。


2

集成测试:-完成单元测试并解决相关组件的问题后,所有必需的组件都需要集成在一个系统下,以便它可以执行操作。组合系统的各个组件后,为了测试系统是否正常运行,这种测试称为集成测试。

功能测试:-测试主要分为两类:1.功能测试2.非功能测试**功能测试:-测试软件是否根据用户要求运行。**非功能测试:-测试软件是否满足压力测试,安全测试等质量标准。

通常,客户将仅提供功能测试的需求,而非功能测试的需求则不需提及,但应用程序必须执行这些活动。


2

整合测试

  • 可以将其视为系统的不同模块如何协同工作。
  • 我们主要指的是不同模块的集成功能,而不是系统的不同组件。
  • 为了使任何系统或软件产品有效地工作,每个组件都必须彼此同步。
  • 我们用于集成测试的大多数时间工具都将被选择用于单元测试。
  • 当单元测试证明不足以测试系统时,它可用于复杂的情况。

    功能测试

  • 可以定义为测试模块的各个功能。
  • 它指的是在各个级别上测试软件产品,以检查其功能。
  • 开发了测试用例以检查软件的预期结果和意外结果。
  • 从用户的角度来看,这种测试更多。也就是说,它考虑了用户对于一种输入类型的期望。
  • 它也被称为黑盒测试和密盒测试


  • 1

    检查应用程序的功能通常称为功能测试,其中集成测试是检查从一个模块到另一个模块的数据流。让我们以汇款应用程序为例,假设我们有一个页面,在其中输入所有凭据,如果我们按转账按钮,然后如果我们获得任何成功,那么这就是功能测试。但是在同一示例中,如果我们验证转账金额,则它是集成测试。


    0

    作者对此有很多分歧。我不相信对此有正确的解释。真的要看

    例如:大多数Rails开发人员将单元测试视为模型测试,将功能测试视为控制器测试和集成测试,就像使用Capybara这样的工具从最终用户的角度来探索应用程序-也就是说,使用DOM浏览页面生成的HTML检查期望。

    还有验收测试,这些测试反过来又是系统的“实时”文档(通常,他们使用Gherkin使其能够用自然语言编写),通过多个场景描述了应用程序的所有功能,而这些场景又是自动化的由开发人员。恕我直言,这些也可以视为功能测试和集成测试。

    一旦理解了每个概念背后的关键概念,就可以对对错变得更加灵活。因此,恕我直言,功能测试也可以视为集成测试。对于集成测试,根据它所执行的集成类型,它可能不考虑功能测试-但是编写集成测试时通常会考虑一些要求,因此在大多数情况下,也可以考虑将其视为功能测试。

    By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
    Licensed under cc by-sa 3.0 with attribution required.