📜  集成测试

📅  最后修改于: 2021-01-10 16:01:06             🧑  作者: Mango

整合测试

集成测试是单元测试之后的第二级软件测试过程。在此测试中,将对软件的单元或单个组件进行一组测试。集成测试级别的重点是在集成的组件或单元之间进行交互时暴露缺陷。

单元测试使用模块进行测试,并且这些模块在集成测试中进行了组合和测试。该软件是由许多由不同编码员或程序员编码的软件模块开发的。集成测试的目的是检查所有模块之间通信的正确性。

一旦所有组件或模块独立工作,那么我们需要检查从属模块之间的数据流,这称为集成测试

让我们看一个银行应用程序的示例示例,正如我们在下图的转账中看到的那样。

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

集成测试准则

  • 仅在对应用程序的每个模块进行功能测试之后,我们才进行集成测试。
  • 我们总是通过逐个模块地挑选模块来进行集成测试,以便遵循正确的顺序,而且我们也不会错过任何集成方案。
  • 首先,确定测试用例策略,通过该策略可以根据测试数据准备可执行的测试用例。
  • 检查应用程序的结构和体系结构,并确定要测试的关键模块,并确定所有可能的方案。
  • 设计测试用例以详细验证每个接口。
  • 选择输入数据以执行测试用例。输入数据在测试中起着重要作用。
  • 如果我们发现任何错误,则将错误报告传达给开发人员,并修复缺陷并重新测试。
  • 进行正负集成测试

此处的积极测试表明,如果总余额为15卢比,则我们要转帐1500卢比,并检查转帐是否正常。如果是这样,则该测试将通过。

否定测试意味着,如果总余额为Rs15,000,而我们正在转账Rs20,000,并检查是否发生金额转账,如果没有发生,则测试通过。如果发生这种情况,则说明代码中存在错误,我们会将其发送给开发团队以修复该错误。

注意:这个世界上的任何应用程序都必须进行功能测试,而集成测试仅在模块相互依赖时才进行。每个集成方案都必须具有源→数据→目标。仅当数据保存在目标位置时,任何方案才可以称为集成方案。

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

集成测试示例

让我们假设我们有一个执行集成测试的Gmail应用程序。

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

不同的集成方案如下:

场景1:

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

Secanrios2:我们还对垃圾邮件文件夹执行集成测试。如果特定联系人已被标记为垃圾邮件,则该用户发送的任何邮件都应转到垃圾邮件文件夹,而不要在收件箱中。

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

如下图所示,我们将对所有文本字段和每个功能执行功能测试。然后,我们将对相关功能进行集成测试。我们首先测试添加用户,用户列表,删除用户,编辑用户,然后搜索用户

注意:

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

集成测试背后的原因

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

  • 每个模块都是由单独的软件开发人员设计的,他们的编程逻辑可能与其他模块的开发人员不同。集成测试对于确定软件模块的工作至关重要。
  • 检查软件模块与数据库的交互是否错误。
  • 在模块开发时可以更改或增强需求。这些新要求可能无法在单元测试级别上进行测试,因此集成测试成为强制性的。
  • 软件模块之间的不兼容性可能会导致错误。
  • 测试硬件与软件的兼容性。
  • 如果模块之间的异常处理不足,则可能会产生错误。

集成测试技术

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

黑匣子测试

  • 状态转换技术
  • 决策表技术
  • 边值分析
  • 全对测试
  • 因果图
  • 等效分区
  • 错误猜测

白盒测试

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

集成测试的类型

集成测试可以分为两部分:

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

增量式

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

要么

在这种类型的测试中,从属模块之间存在很强的关系。假设我们采用两个或多个模块,并验证它们之间的数据流运行正常。如果是,则添加更多模块并再次测试。

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

Flipkart→登录→主页→搜索→添加购物车→付款→注销

增量集成测试通过其他方法进行:

  • 自上而下的方法
  • 自下而上的方法

自上而下的方法

自上而下的测试策略涉及以下过程:使用较低级别的模块测试较高级别的模块,直到成功完成所有模块的测试为止。由于首先测试了关键模块,因此可以及早发现并修复主要设计缺陷。在这种类型的方法中,我们将递增地或一个接一个地添加模块,并以相同顺序检查数据流。

在自上而下的方法中,我们将确保添加的模块是前一个模块的子模块,例如Child C是Child B的孩子,依此类推,如下图所示:

优点:

  • 识别缺陷是困难的。
  • 早期的原型是可能的。

缺点:

  • 由于存根数量众多,因此变得相当复杂。
  • 较低级别的模块未经过充分测试。
  • 首先测试关键模块,以减少出现缺陷的机会。

自下而上的方法

自下而上的测试策略涉及以下过程:使用较高级别的模块测试较低级别的模块,直到成功完成所有模块的测试为止。最后对顶级关键模块进行了测试,因此可能会导致缺陷。或者可以说,我们将从底部到顶部添加模块,并以相同顺序检查数据流。

在自下而上的方法中,我们将确保所添加的模块是上一个模块的父模块,如下图所示:

优点

  • 识别缺陷很容易。
  • 无需等待所有模块的开发,因为这样可以节省时间。

缺点

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

在这种情况下,我们有一种称为混合测试的附加方法。

混合测试方法

在这种方法中,自顶向下和自底向上两种方法都结合在一起进行测试。在此过程中,将同时使用较低级别的模块测试顶级模块,并同时使用较高级别的模块测试较低级别的模块。因为每个模块接口都经过测试,所以发生缺陷的可能性较小。

优点

  • 混合方法提供了“自下而上”和“自上而下”方法的功能。
  • 这是最省时的方法。
  • 它提供了所有模块的完整测试。

缺点

  • 该方法需要更高的浓度水平,因为同时在两个方向上进行了该过程。
  • 复杂的方法。

非增量集成测试

当数据流非常复杂并且很难找到谁是父母和谁是孩子时,我们将采用这种方法。在这种情况下,我们将在所有其他现有模块上的任何模块中创建数据,并检查数据是否存在。因此,它也被称为大爆炸法

大爆炸法

在这种方法中,测试是通过一次集成所有模块来完成的。如果用于大型软件系统,则很难识别缺陷,这对于小型软件系统很方便。

由于该测试团队可以在所有模块完成之后进行该测试,因为该测试团队有较少的时间执行该过程,因此内部链接的接口和高风险关键模块很容易被遗漏。

优点:

  • 对于小型软件系统来说很方便。

缺点:

  • 识别缺陷很困难,因为找到错误的来源是一个问题,而且我们也不知道错误的来源。
  • 小模块很容易错过。
  • 提供测试的时间非常少。
  • 我们可能会错过测试某些接口的机会。

让我们看一些例子,以更好地理解非增量积分测试或大爆炸方法:

例1

在下面的示例中,开发团队开发应用程序并将其发送给测试团队的CEO。然后,CEO将登录到该应用程序并生成用户名和密码,然后将邮件发送给经理。之后,首席执行官将告诉他们开始测试应用程序。

然后,经理管理用户名和密码,并生成用户名和密码,并将其发送给测试线测试线会将其发送给测试工程师,以进行进一步的测试。从首席执行官到测试工程师的命令是自上而下的增量集成测试。

同样,测试工程师完成测试后,会向测试主管发送报告,然后由测试主管将报告提交给经理,经理将报告发送给首席执行官。该过程称为自下而上的增量集成测试,如下图所示:

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

例2

下面的示例演示了Gmail收件箱的主页,我们单击“收件箱”链接,然后将我们移至收件箱页面。在这里我们必须进行非增量集成测试,因为没有父子概念。

注意

存根和驱动程序

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

驱动程序的函数用于验证来自P的数据并将其发送到存根,还检查来自存根的期望数据并将其发送到P。

驱动程序是一种设置测试环境,还负责通信,评估结果并发送报告的驱动程序。我们从不在测试过程中使用存根和驱动程序。

黑匣子测试中,任何测试都不会优先考虑,因为它取决于应用程序。