基于模型的测试教程


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

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

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

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

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

有各种可用的模型来描述系统行为的各个方面。

以下是模型的一些示例:

  • 数据流

  • 控制流

  • 依赖图

  • 决策表

  • 状态转换机

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

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

基本的 MBT 流程包括五个关键步骤:

  • 建模

  • 测试计划

  • 测试设计

  • 测试生成

  • 测试执行

建模

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

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

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

搜索系统中的可执行路径以查找测试用例。将使用合理的执行路径来生成测试用例。如果模型是确定性的,或者可以转换为确定性模型,则可以使用此方法。

测试计划

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

测试设计

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

测试生成

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

离线

  • 搜索算法

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

在线

  • 行走或寻光算法

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

  • 算法必须快速。

测试执行

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

进化算法

进化算法中使用的所有概念都是选择、繁殖和变异。

我们将在本文中介绍三种不同的进化算法:

  • 遗传算法

  • 进化规划

  • 进化策略

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

遗传算法属于进化计算,而进化计算属于人工智能。

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

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

自然选择包括以下步骤:

  • 将选择种群中最适合的个体。

  • 个体将拥有继承其父母特征的后代。

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

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

这是一个迭代过程,将产生最适合的个体的一代。

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

遗传算法中使用以下术语:

  • **初始种群:**问题从当前问题的潜在解决方案(个体)集合开始。种群由一定数量的个体组成。每个人都是我们试图解决的问题的潜在解决方案。一组参数构成一个个体(变量)。这些特性被称为基因。基因连接成一个字符串形成染色体(解决方案/个体)。二进制值(1 和 0 的字符串)通常用于对染色体中的基因进行编码。

  • **适应度函数:**确定个体与其他个体竞争的能力。基于适应度函数,我们将为每个个体(染色体/解决方案)计算适应度分数。适应度分数决定了个体被选中进行繁殖的可能性。

  • **选择:**将选择最适合的个体,并将它们的基因传递给下一代。它是如何工作的?根据它们的适应度分数,算法将选择两对个体(父母)。将选择具有高适应度水平的个体进行繁殖。有很多选择算法。

  • **交叉(重组):**这是遗传算法最重要的阶段。交叉有多种形式。通常,从要交配的每对父母的基因中随机选择一个交叉点,以产生新的后代并将它们插入种群。因此,这两个父母将有两个孩子。

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

  • **终止:**如果种群没有产生与前一代明显不同的后代,则算法将终止。现在我们可以说遗传算法已经为我们的问题生成了一组解决方案。

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

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

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

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

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

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

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

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

  • 保护条件是一个布尔条件,在转换发生之前必须满足该条件。

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

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

基于模型的测试挑战 −

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

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

基于模型的测试的优势 −

MBT具有以下优点 −

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

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

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

  • 早期缺陷识别

  • 缺陷数量增加(此条可能与上下文不符,建议修改为更正面的说法,例如:更有效的缺陷发现)

  • 节省时间

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

结论

在测试过程中,测试人员无论如何都会创建心智模型。这些心智模型可以转换成纸质模型。这有助于提高测试人员的可读性和可重用性。

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

更新于:2021年9月22日

浏览量1K+

开启您的职业生涯

完成课程获得认证

开始学习
广告