集成测试是继单元测试之后软件测试过程的第二级。在此测试中,软件的单元或单个组件将分组测试。集成测试级别的重点是在集成组件或单元之间交互时暴露缺陷。
单元测试使用模块进行测试,这些模块在集成测试中组合和测试。该软件是使用许多软件模块开发的,这些模块由不同的编码人员或程序员编码。集成测试的目标是检查所有模块之间通信的正确性。
一旦所有组件或模块都独立工作,那么我们需要检查依赖模块之间的数据流称为集成测试。
让我们看一个银行应用程序的示例,如下面的金额转账图像所示。
-
首先,我们将以用户P身份登录进行金额转账并发送Rs200金额,确认消息应显示为金额转账成功。现在以P身份注销并以用户Q身份登录,然后转到金额余额页面并检查该帐户中的余额=当前余额+收到的余额。因此,集成测试成功。
-
此外,我们检查P用户帐户中的余额是否减少了200卢比。
-
点击交易,在P和Q中,应显示有关金额转账的数据和时间的消息。
集成测试指南 -
我们仅在应用程序的每个模块上完成功能测试后进行集成测试。
-
我们总是通过逐个模块地选择来进行集成测试,以便遵循正确的顺序,而且我们不会错过任何集成场景。
-
首先,确定可以根据测试数据准备可执行测试用例的测试用例策略。
-
检查应用程序的结构和体系结构,并确定要首先测试它们的关键模块,并确定所有可能的方案。
-
设计测试用例以详细验证每个接口。
-
选择用于测试用例执行的输入数据。输入数据在测试中起着重要作用。
-
如果我们发现任何错误,请将错误报告传达给开发人员并修复缺陷并重新测试。
-
执行阳性和阴性集成测试。
这里的阳性测试意味着,如果总余额为 15, 000 卢比,我们正在转移 Rs1500 并检查金额转移是否正常。如果是这样,那么测试将通过。
阴性测试意味着,如果总余额为Rs15, 000,我们正在转移Rs20, 000并检查是否发生金额转移,如果没有发生,则测试通过。如果发生这种情况,则代码中存在错误,我们会将其发送给开发团队以修复该错误。
注意:这个世界上的任何应用程序都将强制进行功能测试,而集成测试仅在模块相互依赖时才进行。每个集成方案都应强制具有源→数据→目标。仅当数据保存在目标中时,任何方案才能称为集成方案。
例如:在 Gmail 应用中,“源”可以是“撰写”,“数据”可以是“电子邮件”,“目标”可以是
“收件箱”。
集成测试示例
让我们假设我们有一个执行集成测试的Gmail应用程序。
首先,我们将在登录页面上进行功能测试,其中包括用户名、密码、提交和取消按钮等各种组件。那么只有我们可以执行集成测试。
不同的集成方案如下:
场景 1: - 首先,我们以 P 用户身份登录并单击 撰写邮件 并对特定组件执行功能测试。
-
现在我们点击 发送 并检查保存草稿。
-
之后,我们向Q发送邮件并在P的“发送邮件”文件夹中进行验证,以检查发送邮件是否存在。
-
现在,我们将以 P 身份注销并以 Q 身份登录并移至收件箱并验证邮件是否已到达。
场景2:我们还对垃圾邮件文件夹执行集成测试。如果特定联系人已被标记为垃圾邮件,则该用户发送的任何邮件都应转到垃圾邮件文件夹,而不是收件箱。
注意:我们将对所有功能执行功能测试,例如发送项目、收件箱等。
如下图所示,我们将对所有文本字段和每个功能执行功能测试。然后,我们将对相关功能进行集成测试。我们首先测试添加用户、用户列表、删除用户、编辑用户,然后搜索用户。
注意:
- 有一些功能,我们可能只执行功能测试,并且在某些功能中,我们根据功能的要求执行功能和集成测试。
-
优先级是必不可少的,我们应该在所有阶段执行它,这意味着我们将打开应用程序并选择需要首先测试的功能。然后转到该功能并选择必须首先测试的组件。转到这些组件并确定要首先输入的值。
并且不要在任何地方应用相同的规则,因为测试逻辑因功能而异。
- 在执行测试时,我们应该完全测试一个功能,然后继续另一个功能。
-
在这两个功能中,我们必须只执行正积分测试或正积分和负积分测试,这也取决于功能需求。
集成测试背后的原因
尽管软件应用程序的所有模块都已在单元测试中进行了测试,但由于以下原因,错误仍然存在:
- 每个模块都是由单独的软件开发人员设计的,他们的编程逻辑可能与其他模块的开发人员不同;集成测试对于确定软件模块的工作至关重要。
-
检查软件模块与数据库的交互是否错误。
-
在模块开发时,可以更改或增强需求。这些新要求可能不会在单元测试级别进行测试,因此集成测试成为强制性的。
-
软件模块之间的不兼容可能会产生错误。
-
测试硬件与软件的兼容性。
-
如果模块之间的异常处理不充分,则可能会产生错误。
集成测试技术
任何测试技术(黑盒、白盒和灰盒)都可用于集成测试;下面列出了一些:
黑盒测试 -
状态转换技术
-
决策表技术
-
边界值分析
-
全对测试
-
因果图
-
等效分区
-
错误猜测
白盒测试 -
数据流测试
-
控制流量测试
- 分支覆盖率测试
-
决策覆盖率测试
集成测试的类型
集成测试可以分为两部分:
渐进式方法
在增量方法中,模块按升序逐个添加或根据需要添加。所选模块必须在逻辑上相关。通常,添加两个或两个以上的模块并进行测试,以确定功能的正确性。该过程一直持续到成功测试所有模块为止。
或在这种类型的测试中,依赖模块之间存在很强的关系。假设我们采用两个或多个模块,并验证它们之间的数据流是否正常工作。如果是,则添加更多模块并再次测试。
例如:假设我们有一个 Flipkart 应用程序,我们将执行增量集成测试,应用程序的流程如下所示:
Flipkart→登录→主页→搜索→添加购物车→付款→注销
增量集成测试通过其他方法执行:
自上而下的方法
自上而下的测试策略涉及使用较低级别的模块测试较高级别的模块的过程,直到成功完成所有模块的测试。主要的设计缺陷可以及早发现和修复,因为关键模块首先进行了测试。在这种类型的方法中,我们将增量或逐个添加模块,并按相同的顺序检查数据流。
在自上而下的方法中,我们将确保我们添加的模块是前一个模块的子模块,例如子模块 C 是子模块
B 的子模块,依此类推,如下图所示:
优势:
弊端:
- 由于存根数量众多,它变得非常复杂。
-
较低级别的模块测试不充分。
-
首先测试关键模块,以减少缺陷的可能性。
自下而上的方法
自下而上的测试策略涉及使用较高级别的模块测试较低级别的模块的过程,直到成功完成所有模块的测试。最后测试顶级关键模块,因此可能会导致缺陷。或者我们可以说,我们将从下到上添加模块,并按相同的顺序检查数据流。
在自下而上的方法中,我们将确保我们添加的模块是前一个模块的父模块,如下图所示:
优势
- 识别缺陷很容易。
-
无需等待所有模块的开发,因为它可以节省时间。
弊端
- 关键模块最后进行测试,因此可能会出现缺陷。
-
没有早期原型的可能性。
在这方面,我们有一种称为混合测试的附加方法。
混合测试方法
在此方法中,将自上而下和自下而上的方法组合在一起进行测试。在这个过程中,顶级模块与低级模块一起测试,低级模块同时用高级模块进行测试。由于每个模块接口都经过测试,因此发生缺陷的可能性较小。
优势
- 混合方法提供自下而上和自上而下方法的功能。
-
这是大多数减少时间的方法。
-
它提供所有模块的完整测试。
弊端
- 该方法需要更高的浓度水平,因为该过程同时在两个方向上进行。
-
方法复杂。
非增量集成测试
当数据流非常复杂并且很难找到谁是父母和谁是孩子时,我们将采用这种方法。在这种情况下,我们将在所有其他现有模块上的任何模块中创建数据,并检查数据是否存在。因此,它也被称为大爆炸方法。
生活大爆炸法
在这种方法中,测试是通过一次集成所有模块来完成的。它对于小型软件系统来说很方便,如果用于大型软件系统则很难识别缺陷。
由于此测试可以在所有模块完成后完成,因此测试团队执行此过程的时间较少,因此很容易错过内部链接的接口和高风险关键模块。
优势:
弊端:
- 识别缺陷很困难,因为找到错误的来源是一个问题,而且我们不知道错误的来源。
-
小模块很容易错过。
-
为测试提供的时间非常少。
-
我们可能会错过测试某些接口。
让我们看一些例子,以便我们更好地理解非增量积分测试或大爆炸方法:
例1
在下面的示例中,开发团队开发应用程序并将其发送给测试团队的 CEO。然后,首席执行官将登录应用程序并生成用户名和密码,并向经理发送邮件。之后,首席执行官将告诉他们开始测试应用程序。
然后,经理管理用户名和密码,并生成用户名和密码并将其发送给测试线索。测试线索会将其发送给测试工程师进行进一步的测试。从
CEO 到 测试 工程 师 的 这个 顺序 是 自上而下的 增量 集成 测试。
同样,当测试工程师完成测试时,他们将报告发送给测试负责人,然后测试主管向经理提交报告,经理将向首席执行官发送报告。此过程称为自下而上的增量集成测试,如下图所示:
注意:增量集成测试 (I.I.T) 和非增量集成测试的组合称为三明治测试。
例2
下面的示例演示了Gmail收件箱的主页,我们单击收件箱链接,然后移动到收件箱页面。在这里,我们必须进行非增量集成测试,因为没有父和子概念。
注意
存根和驱动程序
存根是一个虚拟模块,用于接收数据并创建大量可能的数据,但它的性能与真实模块类似。当数据从模块
P 发送到存根 Q 时,它会接收数据而不进行确认和验证,并生成给定数据的估计结果。
驱动程序的功能用于验证来自 P 的数据并将其发送到存根,还检查来自存根的预期数据并将其发送到
P。
驱动程序是设置测试环境并负责通信、评估结果和发送报告的驱动程序。我们从不在测试过程中使用存根和驱动程序。
在白盒测试中,自下而上的集成测试是理想的选择,因为编写驱动程序是可访问的。在黑盒测试中,不优先考虑任何测试,因为它取决于应用程序。
|