集成测试

2025年3月17日 | 阅读 10 分钟

集成测试是软件测试过程中的第二个阶段,紧随单元测试之后。在此测试中,软件的单元或独立组件被分组进行测试。集成测试阶段的重点是在集成组件或单元之间交互时暴露缺陷。

单元测试使用模块进行测试,在集成测试中将这些模块组合起来进行测试。软件由许多软件模块组成,这些模块由不同的编码员或程序员编写。集成测试的目标是检查所有模块之间通信的正确性。

Integration testing

一旦所有组件或模块都能独立工作,我们就需要检查依赖模块之间的数据流,这就是所谓的集成测试

让我们来看一个银行应用程序的示例,如下图所示的金额转账。

Integration testing
  • 首先,我们将用户P登录为用户,进行金额转账,并发送200卢比的金额,屏幕上应显示确认消息金额已成功转账。现在,以P用户身份注销,并以用户Q的身份登录,然后转到余额页面,检查该账户的余额=当前余额+收到的余额。因此,集成测试成功。
  • 我们还检查P用户的余额是否减少了200卢比。
  • 点击交易,在P和Q中,应显示有关金额转账数据和时间的提示信息。

集成测试指南

  • 只有当应用程序的每个模块的函数测试完成后,我们才会进行集成测试。
  • 我们始终通过一个模块一个模块地进行集成测试,以遵循正确的顺序,并且不会遗漏任何集成场景。
  • 首先,确定测试用例策略,通过该策略可以根据测试数据准备可执行的测试用例。
  • 检查应用程序的结构和架构,并识别关键模块以首先测试它们,同时识别所有可能的场景。
  • 设计测试用例以详细验证每个接口。
  • 选择用于测试用例执行的输入数据。输入数据在测试中起着重要作用。
  • 如果发现任何错误,请将错误报告告知开发人员,修复缺陷并重新测试。
  • 执行正面和负面集成测试

这里正面测试意味着,如果总余额为15,000卢比,而我们转账1500卢比,并检查金额转账是否正常工作。如果有效,则测试通过。

负面测试意味着,如果总余额为15,000卢比,而我们转账20,000卢比,并检查金额转账是否发生,如果不发生,则测试通过。如果发生,则代码中存在错误,我们将将其发送给开发团队进行修复。

注意:世界上任何应用程序都必须进行功能测试,而集成测试仅在模块相互依赖时才进行。每个集成场景都必须包含源→数据→目标。任何场景,如果数据被保存在目标中,都可以称为集成场景。

例如:在Gmail应用程序中,可以是撰写数据可以是电子邮件,而目标可以是收件箱

集成测试示例

假设我们有一个Gmail应用程序,我们在其中执行集成测试。

首先,我们将对登录页面进行功能测试,其中包括各种组件,如用户名、密码、提交按钮和取消按钮。在此之后,我们才能执行集成测试。

不同的集成场景如下

Integration testing

场景1

  • 首先,我们以P用户身份登录,然后单击撰写邮件,并对特定组件执行功能测试。
  • 现在我们单击发送,并检查保存草稿
  • 之后,我们将一封邮件发送给Q,并在P的已发送邮件文件夹中进行验证,以检查是否已发送该邮件。
  • 现在,我们将以P身份注销,然后以Q身份登录,并转到收件箱,然后验证邮件是否已送达。

场景2:我们还对垃圾邮件文件夹执行集成测试。如果特定的联系人被标记为垃圾邮件,则该用户发送的任何邮件都应进入垃圾邮件文件夹,而不是收件箱。

注意:我们将对所有功能执行功能测试,例如已发送邮件、收件箱等。

正如我们在下图中所看到的,我们将对所有文本字段和所有功能执行功能测试。然后,我们将对相关功能执行集成测试。我们首先测试添加用户、用户列表、删除用户、编辑用户,然后是搜索用户

Integration testing

注意

  • 对于某些功能,我们可能只执行功能测试,而对于某些功能,我们则根据功能需求执行功能测试和集成测试
  • 优先级至关重要,我们应该在所有阶段都对其进行优先排序,这意味着我们将打开应用程序并选择需要首先测试的功能。然后转到该功能并选择必须首先测试的组件。然后转到这些组件并确定首先要输入的值。
    不要在所有地方都应用相同的规则,因为不同功能的测试逻辑是不同的。
  • 在执行测试时,我们应该先完全测试一个功能,然后再进行另一个功能。
  • 在这两个功能之间,我们必须执行仅正面集成测试,或者同时执行正面和负面集成测试,这也取决于功能的需要。

集成测试的原因

尽管软件应用程序的所有模块已经在单元测试中进行了测试,但由于以下原因仍然存在错误

  1. 每个模块由不同的软件开发人员设计,其编程逻辑可能与其他模块的开发人员不同;因此,集成测试对于确定软件模块的工作至关重要。
  2. 检查软件模块与数据库的交互是否出错。
  3. 在模块开发过程中,需求可能会被更改或增强。这些新需求可能未在单元测试级别进行测试,因此集成测试变得强制性。
  4. 软件模块之间的不兼容性可能导致错误。
  5. 测试硬件与软件的兼容性。
  6. 如果模块之间的异常处理不足,则可能导致错误。

集成测试技术

任何测试技术(黑盒、白盒和灰盒)都可以用于集成测试;下面列出了一些

黑盒测试

  • 状态转换技术
  • 决策表技术
  • 边界值分析
  • 全对测试
  • 因果图
  • 等价类划分
  • 错误推测

白盒测试

  • 数据流测试
  • 控制流测试
  • 分支覆盖测试
  • 决策覆盖测试

集成测试的类型

集成测试可分为两部分

  • 增量集成测试
  • 非增量集成测试
Integration testing

增量方法

在增量方法中,模块按升序一个接一个地添加,或根据需要添加。选定的模块必须在逻辑上相关。通常,会添加两个或两个以上模块并进行测试以确定功能的正确性。该过程一直持续到所有模块的成功测试。

在此类测试中,依赖模块之间存在很强的关系。假设我们选择两个或多个模块,并验证它们之间的数据流是否正常工作。如果正常,则添加更多模块并再次测试。

Integration testing

例如:假设我们有一个Flipkart应用程序,我们将执行增量集成测试,应用程序的流程如下

Flipkart→登录→首页→搜索→加入购物车→付款→注销

增量集成测试通过以下方法进行

  • 自顶向下方法
  • 自底向上方法

自顶向下方法

自顶向下测试策略处理一种过程,在该过程中,高级模块与低级模块一起进行测试,直到所有模块的测试成功完成。主要设计缺陷可以及早发现和修复,因为关键模块首先进行测试。在此类方法中,我们将增量地或一个一个地添加模块,并按相同顺序检查数据流。

Integration testing

在自顶向下方法中,我们将确保我们添加的模块是上一个模块的子模块,例如子模块C是子模块B的子模块,依此类推,正如我们在下图中所看到的

Integration testing

优点

  • 缺陷识别困难。
  • 可以提前制作原型。

缺点

  • 由于存根数量众多,可能会变得相当复杂。
  • 低级模块测试不足。
  • 关键模块首先进行测试,因此缺陷的可能性较小。

自底向上方法

自底向上测试策略处理一种过程,在该过程中,低级模块与高级模块一起进行测试,直到所有模块的测试成功完成。顶级关键模块最后进行测试,因此可能导致缺陷。或者,我们可以说,我们将从底部到顶部添加模块,并按相同顺序检查数据流。

Integration testing

在自底向上方法中,我们将确保我们添加的模块是上一个模块的父模块,正如我们在下图中所看到的

Integration testing

优点

  • 缺陷识别容易。
  • 无需等待所有模块的开发,从而节省时间。

缺点

  • 关键模块最后进行测试,这可能导致缺陷。
  • 没有早期原型的可能性。

在此,我们有一个称为混合测试的附加方法。

混合测试方法

在此方法中,结合了自顶向下自底向上的测试方法。在此过程中,高级模块与低级模块同时进行测试,低级模块与高级模块同时进行测试。由于每个模块接口都经过测试,因此发生缺陷的可能性较小。

Integration testing

优点

  • 混合方法提供了自底向上和自顶向下方法的优点。
  • 这是最节省时间的测试方法。
  • 它提供了所有模块的完整测试。

缺点

  • 此方法需要更高的注意力,因为过程同时向两个方向进行。
  • 复杂的方法。

非增量集成测试

当数据流非常复杂且难以确定谁是父模块、谁是子模块时,我们将采用此方法。在这种情况下,我们将在任何模块中创建数据,然后对所有现有模块进行测试,并检查数据是否存在。因此,它也被称为大爆炸方法

Integration testing

大爆炸方法

在此方法中,通过同时集成所有模块来完成测试。它适用于小型软件系统,如果用于大型软件系统,则识别缺陷很困难。

由于此测试可以在所有模块完成后进行,因此测试团队执行此过程的时间很短,从而很容易错过内部链接的接口和高风险的关键模块。

Integration testing

优点

  • 它适用于小型软件系统。

缺点

  • 缺陷识别困难,因为查找错误来源是一个问题,而我们不知道错误的来源。
  • 小型模块容易被忽略。
  • 用于测试的时间非常少。
  • 我们可能会错过测试一些接口。

让我们来看一些例子,以便更好地理解非增量集成测试或大爆炸方法

示例 1

在下面的例子中,开发团队开发应用程序并将其发送给测试团队的CEO。然后CEO将登录该应用程序并生成用户名和密码,然后将电子邮件发送给经理。之后,CEO将让他们开始测试该应用程序。

然后,经理管理用户名和密码,生成用户名和密码,并将其发送给测试负责人。然后测试负责人将其发送给测试工程师进行进一步的测试。这个从CEO到测试工程师的顺序是自顶向下增量集成测试。

同样,当测试工程师完成测试后,他们会将报告发送给测试负责人,然后由测试负责人将报告提交给经理,经理会将报告发送给CEO。这个过程被称为自底向上增量集成测试,正如我们在下图中所看到的

注意:增量集成测试(I.I.T)和非增量集成测试的组合称为三明治测试。

Integration testing

示例 2

下面的例子展示了Gmail收件箱的主页,我们单击收件箱链接,然后会转到收件箱页面。在这里,我们必须执行非增量集成测试,因为没有父子概念。

Integration testing

注意

存根和驱动程序

存根是一个虚拟模块,它接收数据并创建大量可能的虚构数据,但它的行为就像一个真实模块。当数据从模块P发送到存根Q时,它会接收数据而不进行确认和验证,并为给定的数据产生估计的结果。

Integration testing

驱动程序的作用是验证从P传来的数据并将其发送给存根,同时检查来自存根的预期数据并将其发送回P。

驱动程序负责设置测试环境,并负责通信、评估结果和发送报告。我们从不将存根和驱动程序用于测试过程。

白盒测试中,自底向上集成测试是理想的选择,因为编写驱动程序比较容易。而在黑盒测试中,没有偏好,因为它取决于应用程序。


下一个主题系统测试