基于模型的测试教程

应用程序测试是任何应用程序的关键活动。在过去十年中,我们开发了各种测试应用程序的方法,以确保我们提供满足所有客户需求的高质量应用程序。

基于模型的测试 (MBT) 是测试自动化领域的一个热门问题,它涉及从正在测试的应用程序的模型创建测试用例

现在可以使用各种基于模型测试的方法。我们将向您展示两种使用遗传算法的基于模型的测试方法。使用遗传算法进行基于模型的测试是一个热点问题,有几篇论文和现有技术的比较。

什么是基于模型的测试,它是如何工作的?

基于模型的测试是一种软件测试方法,其中将被测产品的运行时行为与模型预测进行比较。模型是系统行为方式的表示。输入序列、动作、条件、输出和从输入到输出的数据流都可以用来定义行为。它应该是可理解和可重用的;shareable 必须提供对被测系统的详细描述。

有多种模型可用于描述系统行为的各种元素。

以下是该模型的一些示例 -

  • 数据流

  • 控制流

  • 依赖图

  • 决策表

  • 状态转换机

基于模型的测试解释了系统如何响应活动(由模型确定)。提供操作并观察系统是否按预期回复。

这是一种验证系统的简单形式化方法。该测试可用于硬件和软件。

基本的 MBT 程序包括五个关键步骤 -

  • 造型

  • 测试计划

  • 测试设计

  • 测试生成

  • 测试执行

造型

建模是描述系统需求的过程。测试生成器将基于此描述。

被测系统的预测输出也必须包含在模型中。设计模型和测试模型在这个阶段非常重要。

选择模型时应考虑一些关键标准: 在大多数情况下,模型被转换为状态转换系统或有限状态机系统。有限状态机系统是系统潜在配置的表示。

系统会搜索可执行路径以找到测试用例。一个合理的执行路径将用于生成测试用例。如果模型是确定性的或可以转换为确定性模型,则可以使用这种方法。

测试计划

测试计划包括定义测试选择标准和度量。这提供了测试用例规范的正式制定,以及指导可行测试套件的映射等。

测试设计

测试设计是指使用前面的测试选择标准对测试用例进行形式化。

测试生成

这需要创建尽可能多的测试。

离线

  • 搜索算法

  • 测试的格式是预先确定的。

在线的

  • 步行或寻光算法

  • 在执行上一步并接收到输出值之后,确定下一步。

  • 算法必须快速。

测试执行

运行测试并查找当前输出和预期输出之间的差异。

进化算法

选择、繁殖和变异都是进化算法中使用的思想。

我们将在这里介绍三种不同的进化算法 -

  • 遗传算法

  • 进化编程

  • 进化策略

基于遗传信息(GA)的算法

进化计算包括遗传算法。人工智能包括进化计算。

遗传算法基于达尔文的进化论。遗传算法解决的问题的答案也可以说是进化了。

我们在遗传算法中使用来自自然选择的四个关键概念:基因、染色体(个体)、种群和自然选择。

自然选择包括以下步骤 -

  • 将选择人口中最适合的人。

  • 个人将有继承父母品质的孩子。

  • 后代将包括在下一代中。

  • 更健康的父母的后代将胜过他们的父母,并且有更高的生存机会。

这是一个迭代过程,将产生一代最适者。

描述遗传算法的最简单方法是想象我们有一个问题要解决,并且我们可以检查该问题的一组解决方案。我们将不得不使用进化论和自然选择来发现这种情况的最佳答案。

遗传算法中使用了以下术语 -

  • 初始人口 -问题始于针对当前情况的潜在解决方案(个人)的集合。人口是由一定数量的人组成的。每个人都是我们试图解决的问题的潜在解决方案。一组参数塑造了一个个体(变量)。这些特征被称为基因。染色体(溶液/个体)是通过将基因连接成一串而形成的。二进制值(一串 1 和 0)通常用于编码染色体中的基因。

  • 健身功能 -确定个人与其他人竞争的能力。基于适应度函数,我们将计算每个人(染色体/溶液)的适应度得分。适应度分数决定了个体被选中进行繁殖的可能性。

  • 选择 -将选择最适合的人,他们的基因将传给下一代。它是如何运作的?根据他们的适应度得分,算法将选择两对个体(父母)。将选择具有高度健康水平的个体进行繁殖。有很多选择算法。

  • 交叉(重组) -这是遗传算法最重要的阶段。交叉有多种形式。一般来说,从基因中随机选择一个交叉点,用于每对要交配的父母,以产生新的孩子并将他们插入种群中。结果,这两个父母将有两个孩子。

  • Mutation -这是一种遗传算子,以低随机频率应用于产生的新后代的一部分。这意味着位串中的位数经常被交换。

  • 终止 -如果人口没有产生与上一代有很大不同的孩子,则算法将结束。我们现在可以说遗传算法已经为我们的问题生成了一组解决方案。

基于模型的测试和遗传算法

了解如何将遗传算法应用于基于模型的测试是本文最重要的部分。让我们看一下遗传算法的两种基于模型的测试用途。

我们现在正在使用遗传算法中的所有术语,并演示它们如何在 GA 的各种基于模型的测试应用程序中使用。

使用 GA 从 UML 状态图创建测试数据 基于模型的测试可以从测试应用程序的 UML(统一建模语言)模型表示生成测试用例和可执行测试脚本。使用统一建模语言 (UML) 状态图,可以利用遗传算法来产生测试数据。

使用 UML 状态图时请记住以下术语 -

  • 状态图(state chart diagrams)用于表示任何复杂的特性或描述完整系统、子系统甚至系统内单个项目的动态行为。

  • 在编码之前,基于模型的测试用于从 UML 状态图中提取测试用例。因此,我们可以为任何程序规范创建测试套件。规范经常以 UML 图或正式语言规范的形式呈现。

  • 触发器,类似于事件,开始从一种状态到另一种状态的转换。

  • 警戒条件是在发生转换之前必须满足的布尔条件。

  • 发生转换时发生的动作(活动)称为影响。

如前所述,为了使用遗传算法,我们必须首先建立原始人群(染色体)。这个初始人口将是我们挑战的解决方案的集合。

基于模型的测试挑战 -

  • 在任何公司部署 MBT 显然都需要大量的金钱和工作。

  • 学习曲线会更长,模型会更难理解。

模型测试的好处 -

MBT 具有以下优点 -

  • 简单的测试用例/套件维护

  • 节省成本提高了测试覆盖率

  • 可以在 n 台计算机上执行各种测试

  • 早期缺陷识别

  • 缺陷数量增加

  • 节省时间

  • 提高测试人员的工作满意度

结论

在测试期间,测试人员无论如何都会创建心智模型。这些心智模型可以转化为纸质模型。这有助于测试人员的可读性和可重用性。

基于模型的测试是一种相对较新的软件测试方法。下图描述了软件测试的演变 -